💻 AI Software

ROCm 소프트웨어 스택

개요

ROCm(Radeon Open Compute) 소프트웨어 스택은 AMD Instinct 데이터센터 GPU와 Radeon GPU에서 HPC(High Performance Computing) 및 AI 워크로드를 가속화하기 위한 오픈소스 라이브러리 및 도구 모음이다. 2016년 첫 출시 이후 ROCm은 HIP(Heterogeneous-compute Interface for Portability) 프로그래밍 모델을 기반으로 NVIDIA CUDA 생태계와의 호환성을 유지하면서도, AMD GPU의 고유한 하드웨어 이점을 최대한 활용할 수 있는 다양한 고성능 라이브러리를 제공한다.

ROCm 소프트웨어 스택의 핵심은 도메인별로 특화된 라이브러리 세트에 있다. MIOpen(딥 러닝), rocBLAS(선형대수), RCCL(집약 통신), MIGraphX(추론 그래프 최적화) 등은 각각 특정 워크로드 영역에서 AMD GPU의 성능을 극대화하며, PyTorch, TensorFlow, JAX 등 주요 머신러닝 프레임워크와의 통합을 통해 실질적인 AI/HPC 개발 환경을 제공한다.

ROCm Software Stack Overview

핵심 개념

MIOpen — 딥 러닝 프리미티브

MIOpen은 AMD GPU에서 딥 러닝 연산을 가속화하는 오픈소스 라이브러리로, NVIDIA cuDNN의 AMD 대응 제품이다. MIOpen은 합성곱(Convolution), 풀링(Pooling), 배치 정규화(Batch Normalization), 활성화 함수(Activation) 등 딥 러닝의 핵심 연산들을 최적화된 커널로 제공한다.

MIOpen이 지원하는 주요 연산:

연산 유형 세부 사항 최적화 기법
합성곱 Forward/Backward, Winograd, FFT 기반 알고리즘 자동 선택, Implicit GEMM
풀링 Average/Global Pooling, Max Pooling 차원별 병렬 처리
배치 정규화 Forward/Backward, Group Normalization cuDNN 호환 인터페이스
활성화 함수 ReLU, Sigmoid, Tanh, GELU, SiLU 커널 융합
어텐션 Flash Attention, Multi-Head Attention HBM 대역폭 최적화

MIOpen의 알고리즘 선택 메커니즘:
MIOpen은 실행 시점에 입력 텐서의 형태, 배치 크기, 데이터 타입 등을 분석하여 가장 효율적인 알고리즘을 자동으로 선택한다. 합성곱의 경우 Winograd, FFT, Direct, Implicit GEMM 등 여러 알고리즘 후보 중 최적의 것을 선택하며, 이를 위해 사전 튜닝 데이터베이스(benchmark database)를 활용한다.

rocBLAS — 기본 선형대수

rocBLAS는 AMD GPU에서 기본적인 선형대수 연산을 수행하는 라이브러리로, GEMM(General Matrix Multiply), GEMV(General Matrix-Vector Multiply), TRSM(Triangular Solve) 등 BLAS(Basic Linear Algebra Subprograms) 레벨 1~3 연산을 구현한다.

rocBLAS 주요 함수 분류:

BLAS 레벨 함수 예시 설명
레벨 1 axpy, dot, nrm2, asum 벡터-벡터 연산
레벨 2 gemv, hemv, trmv 행렬-벡터 연산
레벨 3 gemm, hemm, trsm 행렬-행렬 연산

hipBLAS 및 hipBLASLt:
rocBLAS 위에 구현된 hipBLAS는 cuDNN/CUBLAS와의 호환 인터페이스를 제공하여, 기존 CUDA 코드의 포팅 편의성을 높인다. hipBLASLt는 배치 GEMM과 스케줄링 최적화를 지원하며, 대규모 모델 훈련에서 핵심적인 역할을 한다.

RCCL — 집약 통신

RCCL(Radeon Collective Communication Library)은 다중 GPU 및 다중 노드 환경에서 All-Reduce, All-Gather, Reduce-Scatter 등 집약 통신(collective communication) 연산을 수행하는 라이브러리로, NVIDIA NCCL의 AMD 대응 제품이다.

RCCL이 지원하는 주요 통신 패턴:

통신 패턴 설명 활용 시나리오
All-Reduce 모든 디바이스에서 연산 후 결과를 모든 디바이스에 전달 분산 훈련 그래디언트 집약
All-Gather 모든 디바이스의 데이터를 모든 디바이스에 수집 모델 병렬화 activations 수집
Reduce-Scatter 연산 후 결과를 디바이스별로 분산 파이프라인 병렬화
Broadcast 하나의 디바이스에서 모든 디바이스로 데이터 전송 파라미터 초기화
All-to-All 모든 디바이스가 서로 다른 데이터를 교환 Expert 병렬화 (MoE)

RCCL의 통신 최적화:
RCCL은 AMD Infinity Fabric의 토폴로지를 인식하여 통신 경로를 최적화한다. 노드 내 GPU 간 통신과 노드 간 통신을 구분하여 각각에 맞는 전송 프로토콜을 선택하며, 대역폭과 지연 시간을 동시에 고려한 라우팅을 수행한다.

MIGraphX — 추론 그래프 최적화

MIGraphX는 머신러닝 모델의 추론(inference) 성능을 최적화하는 그래프 최적화 엔진으로, NVIDIA TensorRT의 AMD 대응 제품이다. MIGraphX는 모델 그래프를 분석하고, 다양한 최적화 기법을 적용하여 AMD GPU에서의 추론 성능을 극대화한다.

MIGraphX 최적화 기법:

최적화 기법 설명
연산 융합 여러 연산을 하나의 커널로 결합하여 커널 호출 오버헤드 감소
텐서 융합 인접한 텐서 연산을 하나로 통합
레이어 제거 학습 시에만 필요하고 추론 시 불필요한 레이어 제거
정밀도 최적화 FP32 → FP16/INT8 등 정밀도 하향을 통한 성능 향상
그래프 재배치 연산 순서 최적화를 통한 병렬성 극대화

MIGraphX의 ONNX 지원:
MIGraphX는 ONNX(Open Neural Network Exchange) 포맷을 네이티브로 지원하며, PyTorch, TensorFlow, MXNet 등 다양한 프레임워크에서 내보낸 모델을 직접 로드할 수 있다. 이를 통해 프레임워크 간 모델 이동성(portability)을 보장한다.

HIP — 프로그래밍 모델

HIP(Heterogeneous-compute Interface for Portability)는 ROCm의 핵심 프로그래밍 인터페이스로, CUDA C/C++과 유사한 구문을 제공하여 개발자가 AMD GPU에서 병렬 커널을 작성할 수 있게 한다. HIP는 AMD GPU와 NVIDIA GPU 모두에서 실행 가능하며, 코드 이식성을 제공한다.

HIP의 주요 특징:
- CUDA C/C++과 유사한 함수명 및 구문 (hipMalloc, hipMemcpy, hipLaunchKernelGGL 등)
- __global__, __device__, __shared__ 등 CUDA 키워드 지원
- hipcc 컴파일러를 통한 AMD GPU 네이티브 코드 생성
- hipify-perl, hipify-cuda를 통한 CUDA 코드 자동 변환

기타 핵심 라이브러리

Composable Kernel:
고성능 커스텀 커널을 작성하기 위한 템플릿 라이브러리로, NVIDIA CUTLASS의 AMD 대응 제품이다. GEMM, convolution 등 기본 연산 블록들을 조합하여 새로운 커널을 빠르게 개발할 수 있다.

hipCUB:
병렬 프리미티브(primitives) 라이브러리로, Scan, Reduce, Sort 등 일반적인 병렬 알고리즘을 제공한다. NVIDIA CUB의 AMD 대응 제품이다.

rocPRIM 및 rocThrust:
기본 병렬 프리미티브와 Thrust 호환 인터페이스를 제공한다.

비교/분석

ROCm 라이브러리 vs NVIDIA 라이브러리 비교

ROCm 라이브러리 NVIDIA 라이브러리 기능 범위 성능 수준 성숙도
MIOpen cuDNN 딥 러닝 프리미티브 우수 (FP16/BF16 최적화) 성장 중
rocBLAS cuBLAS 기본 선형대수 우수 (MI300X 최적화) 안정적
hipBLASLt cuBLASLt 배치 GEMM 우수 성장 중
RCCL NCCL 집약 통신 good (Infinity Fabric 활용) 성장 중
MIGraphX TensorRT 추론 그래프 최적화 good 성장 중
Composable Kernel CUTLASS 커스텀 커널 good 성장 중
hipCUB CUB 병렬 프리미티브 good 안정적
rocFFT cuFFT 푸리에 변환 good 안정적
rocSOLVER cuSOLVER 선형방정식 good 안정적
rocSPARSE cuSPARSE 희소 행렬 good 안정적

ROCm 라이브러리 성능 벤치마크 (MI300X 기준)

워크로드 MIOpen (FP16) cuDNN H100 (FP16) 비고
ResNet-50 Forward good good MI300X HBM3 활용
BERT-Large Forward good good 어텐션 최적화 수준 유사
GPT-2 Forward good good KV 캐시 관리 차이
Conv2D (3x3) good good Winograd 알고리즘 공통 지원
GEMM (M=N=K=4096) good good Matrix Core 활용도 유사

ROCm 라이브러리 선택 가이드

워크로드 유형 추천 라이브러리 조합 설명
딥 러닝 훈련 MIOpen + hipBLASLt + RCCL 분산 훈련 전체 파이프라인
딥 러닝 추론 MIGraphX + MIOpen 그래프 최적화 + 커널 실행
HPC 시뮬레이션 rocBLAS + rocSOLVER + rocFFT 선형대수 + 방정식 + FFT
데이터 분석 hipCUB + rocPRIM 병렬 프리미티브 기반 처리
커스텀 커널 Composable Kernel + rocWMMA 고성능 커스텀 구현

동작 원리

ROCm 라이브러리 스택 동작 흐름

  1. 애플리케이션 계층:
    - PyTorch, TensorFlow, JAX 등 프레임워크가 ROCm 라이브러리를 호출
    - MIOpen, rocBLAS, RCCL 등 특정 라이브러리 API 사용

  2. 라이브러리 계층:
    - 각 라이브러리가 입력 데이터 분석 후 최적 알고리즘 선택
    - 하드웨어 특성(Compute Unit 수, 메모리 대역폭 등) 고려한 커널 선택

  3. 런타임 계층:
    - HIP Runtime이 커널 실행 요청을 ROCr(ROCR Runtime)에 전달
    - ROCr이 GPU 디바이스에 커널 로드 및 스케줄링

  4. 드라이버 계층:
    - KFD(Kernel Fusion Driver)가 하드웨어 리소스 관리
    - 메모리 할당, 동기화, 디바이스 관리 수행

MIOpen 합성곱 알고리즘 선택 흐름

MIOpen은 합성곱 연산 실행 시 다음과 같은 과정을 거쳐 최적 알고리즘을 선택한다:

  1. 입력 분석: 필터 크기, 스트라이드, 패딩, 배치 크기, 채널 수 등 파라미터 분석
  2. 알고리즘 후보 생성: Winograd, FFT, Direct, Implicit GEMM 등 사용 가능한 알고리즘 식별
  3. 성능 예측: 사전 튜닝된 벤치마크 데이터를 기반으로 각 알고리즘의 예상 성능 평가
  4. 최적 선택: 예상 성능이 가장 높은 알고리즘 자동 선택
  5. 커널 실행: 선택된 알고리즘에 맞는 커널 컴파일 및 실행

RCCL 통신 최적화 동작

RCCL은 AMD Infinity Fabric 토폴로지를 인식하여 통신 경로를 최적화한다:

  1. 토폴로지 감지: 시스템의 GPU 배치, Infinity Fabric 연결 상태 자동 감지
  2. 알고리즘 선택: All-Reduce 등 연산에 대해 Ring, Tree, Doubling 등 최적 알고리즘 선택
  3. 라우팅 최적화: 대역폭과 지연 시간을 동시 고려한 데이터 전송 경로 설정
  4. 파이프라인 처리: 데이터 청크 분할을 통한 통신-계산 오버랩

MIGraphX 그래프 최적화 동작

MIGraphX는 모델 그래프를 로드한 후 다음과 같이 최적화를 수행한다:

  1. 그래프 파싱: ONNX 등 포맷의 모델 그래프를 내부 표현으로 변환
  2. 패턴 매칭: 그래프 내에서 융합 가능한 연산 패턴 탐지
  3. 최적화 적용: 연산 융합, 텐서 융합, 정밀도 최적화 등 단계적 적용
  4. 커널 선택: 각 연산에 대해 AMD GPU에 최적화된 커널 매핑
  5. 메모리 계획: 텐서 할당 계획 수립을 통한 메모리 사용량 최소화

장단점

장점

  • 오픈소스 투명성: MIT 라이선스 기반 완전한 오픈소스로, 소스 코드 검증과 커스터마이징이 가능하여 특정 워크로드에 맞는 최적화가 용이
  • 도메인 특화 라이브러리: MIOpen, rocBLAS, RCCL 등 각 영역에 특화된 고성능 라이브러리를 통해 실질적인 AI/HPC 개발 환경 제공
  • 프레임워크 통합: PyTorch, TensorFlow, JAX 등 주요 머신러닝 프레임워크와의 네이티브 통합으로 기존 코드의 빠른 포팅 지원
  • 하드웨어 최적화: AMD Instinct MI250X, MI300X, MI350 등 최신 GPU의 Matrix Core, HBM3, Infinity Fabric 등 하드웨어 특성을 최대한 활용하는 커널 구현
  • 도구 생태계: hipcc 컴파일러, hipify 자동 변환 도구, rocprofiler 프로파일러 등 개발 도구 체인 완성
  • 비용 효율성: 라이선스 비용 없이 AMD GPU의 성능에 접근 가능

단점

  • 생태계 성숙도: NVIDIA CUDA 라이브러리 대비 10년 이상의 개발 격차, 일부 영역에서 기능 및 성능 격차 존재
  • 도구 지원 범위: Nsight Systems/Compute, TensorRT 등 NVIDIA 고급 개발 도구 대비 제한적인 프로파일링 및 디버깅 도구
  • 커뮤니티 규모: NVIDIA 개발자 커뮤니티 대비 상대적으로 작은 규모로, 문제 해결 자원 부족
  • 드라이버 의존성: 특정 ROCm 버전에서의 드라이버 이슈가 발생할 수 있으며, 버전 간 호환성 관리 필요
  • 하드웨어 지원 범위: AMD Instinct 시리즈 및 최신 Radeon GPU에 집중 지원, 구형 하드웨어 지원 제한
  • 프로덕션 검증 부족: 대규모 프로덕션 배포 사례가 축적 중이며, 검증된 베스트 프랙티스 부족

관련 기술

참고 표준 및 자료

  • AMD ROCm Documentation (https://rocm.docs.amd.com)
  • AMD MIOpen Documentation (https://rocm.docs.amd.com/projects/MIOpen/en/latest/)
  • AMD rocBLAS Documentation (https://rocm.docs.amd.com/projects/rocBLAS/en/latest/)
  • AMD RCCL Documentation (https://rocm.docs.amd.com/projects/rccl/en/latest/)
  • AMD MIGraphX Documentation (https://rocm.docs.amd.com/projects/AMDMIGraphX/en/latest/)
  • AMD HIP Programming Guide
  • HSA (Heterogeneous System Architecture) Specification

관련 문서

핵심 정리

  1. ROCm 소프트웨어 스택은 MIOpen(딥 러닝), rocBLAS(선형대수), RCCL(집약 통신), MIGraphX(추론 최적화) 등 도메인별로 특화된 고성능 라이브러리 세트를 통해 AMD GPU에서 AI/HPC 워크로드를 가속화한다.

  2. MIOpen은 합성곱, 풀링, 배치 정규화 등 딥 러닝 핵심 연산을 최적화된 커널로 제공하며, 실행 시점에 입력 데이터 특성에 맞는 최적 알고리즘을 자동으로 선택한다.

  3. RCCL은 AMD Infinity Fabric 토폴로지를 인식하여 All-Reduce, All-Gather 등 집약 통신을 최적화하며, 다중 GPU/노드 분산 훈련의 통신 병목을 해결한다.

  4. MIGraphX는 모델 그래프를 분석하여 연산 융합, 정밀도 최적화 등 다양한 최적화를 적용하고, ONNX 포맷을 통해 프레임워크 간 모델 이식성을 제공한다.

  5. ROCm 라이브러리 스택은 프레임워크-라이브러리-런타임-드라이버의 다층 구조로 구성되며, PyTorch, TensorFlow 등 주요 프레임워크와의 통합을 통해 실질적인 개발 환경을 제공한다.