ROCm (Radeon Open Compute)
개요
ROCm(Radeon Open Compute)은 AMD가 개발한 오픈 소스 GPU 컴퓨팅 플랫폼으로, GPU의 병렬 처리 능력을 활용하여 고성능 연산(HPC) 및 인공지능(AI) 모델의 학습과 추론을 가능하게 하는 소프트웨어 스택입니다.
NVIDIA의 폐쇄적인 CUDA(Compute Unified Device Architecture) 생태계에 대응하여, 하드웨어 벤더에 종속되지 않는 개방형 표준을 지향하며 개발되었습니다. ROCm은 개발자가 GPU 하드웨어의 성능을 최대한 끌어낼 수 있도록 저수준 드라이버부터 고수준 딥러닝 프레임워크까지 통합된 환경을 제공합니다.
주요 아키텍처 및 작동 원리
ROCm은 하드웨어 추상화 계층을 통해 다양한 AMD GPU 아키텍처에서 동일한 소프트웨어가 동작하도록 설계되었습니다. 핵심은 하드웨어 제어권을 가진 커널 드라이버와 이를 효율적으로 호출하는 런타임 라이브러리의 계층적 구조에 있습니다.
ROCm 스택 계층 구조
| 계층 (Layer) |
구성 요소 |
역할 및 설명 |
| 프레임워크 |
PyTorch, TensorFlow, ONNX |
최상위 사용자 인터페이스 및 AI 모델 구현 환경 |
| 라이브러리 |
rocBLAS, miopen, rocFFT |
특정 수학 연산(행렬 곱, 컨볼루션 등) 최적화 라이브러리 |
| 런타임 |
HIP, ROCr |
하드웨어 독립적인 API 제공 및 리소스 관리 |
| 드라이버 |
AMDGPU Kernel Driver |
OS 커널과 GPU 하드웨어 간의 직접적인 통신 및 제어 |
| 하드웨어 |
Radeon, Instinct GPU |
실제 병렬 연산이 수행되는 물리적 가속기 |
핵심 구성 요소 및 라이브러리
ROCm 생태계는 특정 연산의 효율을 극대화하기 위해 최적화된 다양한 라이브러리를 포함하고 있습니다. 특히 NVIDIA CUDA 라이브러리와 1:1 대응 관계를 갖는 구성 요소가 많아 이식성이 높습니다.
주요 라이브러리 비교
| ROCm 라이브러리 |
기능 설명 |
대응되는 CUDA 라이브러리 |
| HIP |
이기종 컴퓨팅 인터페이스 (C++ 기반) |
CUDA Driver/Runtime API |
| rocBLAS |
기본 선형 대수 서브루틴 (Basic Linear Algebra) |
cuBLAS |
| miopen |
딥러닝용 최적화 프리미티브 (Convolution 등) |
cuDNN |
| rocFFT |
고속 푸리에 변환 (Fast Fourier Transform) |
cuFFT |
| rocSOLVER |
선형 방정식 및 고유값 문제 해결 |
cuSOLVER |
HIP을 통한 코드 이식성
HIP(Heterogeneous-compute Interface for Portability)은 ROCm의 핵심으로, 단일 소스 코드로 AMD GPU와 NVIDIA GPU 모두에서 실행 가능한 프로그램을 작성할 수 있게 해주는 C++ 런타임 API입니다.
hipify는 기존의 CUDA 소스 코드를 HIP 코드로 자동 변환해주는 도구입니다.
- hipify-perl: 단순 텍스트 치환 방식으로 CUDA API 호출을 HIP API로 변경합니다.
- hipify-clang: Clang 컴파일러를 사용하여 구문 분석 후 보다 정밀하게 코드를 변환합니다.
코드 문법 비교 예시
CUDA와 HIP은 문법적으로 매우 유사하며, 대부분의 함수 이름 앞에 hip 접두사만 붙이는 형태로 대응됩니다. HIP은 커널 런칭 시 별도의 래퍼 함수(hipLaunchKernelGGL)를 사용하거나, 컴파일러 설정에 따라 CUDA와 동일한 <<< >>> 문법을 사용할 수 있습니다.
// [CUDA C++]
kernel_function<<<grid, block>>>(args);
cudaMalloc(&dev_ptr, size);
cudaMemcpy(dev_ptr, host_ptr, size, cudaMemcpyHostToDevice);
// [HIP C++]
// hipLaunchKernelGGL(커널함수, 그리드크기, 블록크기, 인자...)
hipLaunchKernelGGL(kernel_function, grid, block, args);
hipMalloc(&dev_ptr, size);
hipMemcpy(dev_ptr, host_ptr, size, hipMemcpyHostToDevice);
CUDA와의 상세 비교
| 비교 항목 |
NVIDIA CUDA |
AMD ROCm |
| 철학 |
폐쇄적/독점적 (Proprietary) |
개방형/오픈 소스 (Open Source) |
| 하드웨어 지원 |
NVIDIA GPU 전용 |
AMD GPU (Radeon, Instinct) |
| 이식성 |
타 벤더 GPU 지원 불가 |
HIP을 통해 NVIDIA GPU 지원 가능 |
| 생태계 성숙도 |
매우 높음 (방대한 라이브러리/커뮤니티) |
성장 중 (주요 AI 프레임워크 지원 확대) |
| 컴파일러 |
nvcc |
hipcc / clang |
버전별 주요 업데이트 내역
| 버전 |
주요 업데이트 및 특징 |
| ROCm 1.0 ~ 3.0 |
초기 기반 구축, HIP 도입 및 기본 수학 라이브러리 안정화 |
| ROCm 4.0 |
PyTorch 및 TensorFlow 공식 지원 강화, CDNA 아키텍처 최적화 |
| ROCm 5.0 |
하드웨어 지원 범위 확대 (RDNA 2 지원), 성능 최적화 및 설치 간소화 |
| ROCm 6.0+ |
최신 Instinct MI300 시리즈 지원, LLM(거대언어모델) 추론 최적화, Triton 지원 강화 |
지원 하드웨어 및 설치 환경
지원 하드웨어
ROCm은 데이터센터용 가속기부터 최신 소비자용 GPU까지 지원 범위를 확대하고 있습니다. 자세한 목록은 AMD 공식 지원 GPU 페이지에서 확인할 수 있습니다.
- Instinct 시리즈: MI200, MI210, MI250, MI300 시리즈 등 (데이터센터 및 HPC 전용)
- Radeon Pro 시리즈: Radeon Pro W6800, W7900 등 워크스테이션용 GPU
- Radeon 소비자용 시리즈:
- RDNA 3: RX 7900 XTX, RX 7900 XT 등 최신 라인업 공식 지원
- RDNA 2: RX 6900 XT, RX 6800 XT 등 일부 모델 지원
- ※ 하위 모델이나 구형 아키텍처의 경우 공식 지원 범위에서 제외되거나 커뮤니티 패치가 필요할 수 있습니다.
OS 및 설치 요구사항
- 지원 OS:
- Ubuntu: 20.04 LTS, 22.04 LTS (가장 권장됨)
- RHEL / CentOS: 8.x, 9.x 버전
- SLES (SUSE Linux Enterprise Server): 15 SP4 이상
- 커널: 최신 메인라인 리눅스 커널 (AMDGPU 드라이버 호환 버전 필수)
- 컴파일러: 최신 버전의 GCC 및 LLVM/Clang
- 기타: 하드웨어 가속을 위한 UEFI Secure Boot 비활성화 권장 (드라이버 서명 문제 방지)
설치 단계별 가이드 및 트러블슈팅
설치 단계
다양한 배포판을 지원하기 위해 AMD는 공식 설치 스크립트인 amdgpu-install 사용을 권장합니다. 아래는 가장 일반적인 Ubuntu 환경 기준의 예시입니다.
- 시스템 업데이트 및 의존성 설치 (Ubuntu 기준):
sudo apt update && sudo apt upgrade -y
sudo apt install wget gnupg2
- AMD 저장소 등록 및 설치 도구 다운로드: AMD 공식 홈페이지에서 제공하는
.deb 또는 .rpm 패키지를 통해 저장소를 추가합니다.
- 커널 드라이버 및 ROCm 스택 설치 (Ubuntu 기준):
# amdgpu-install 도구를 사용하여 통합 설치 권장
sudo amdgpu-install --usecase=rocm,hip,opencl
(개별 패키지 설치 시: sudo apt install amdgpu-dkms rocm-hip-sdk rocm-opencl-sdk)
- 사용자 권한 설정: GPU 장치 접근을 위해 사용자를
render 및 video 그룹에 추가합니다.
sudo usermod -aG render $USER
sudo usermod -aG video $USER
트러블슈팅 (Troubleshooting)
rocminfo 실행 시 장치를 찾지 못하는 경우:
- 커널 드라이버(
amdgpu)가 정상적으로 로드되었는지 lsmod | grep amdgpu로 확인하십시오.
- 사용자가
render 그룹에 포함되어 있는지 확인하고 재부팅하십시오.
- 버전 불일치 문제:
- 설치된
rocm-core 버전과 hip-runtime 버전이 일치하는지 확인하십시오. 버전이 다를 경우 런타임 에러가 발생할 수 있습니다.
- PyTorch 인식 불가:
- PyTorch 설치 시 ROCm 전용 휠(Wheel) 파일을 사용했는지 확인하십시오. (예:
pip install torch --index-url https://download.pytorch.org/whl/rocm6.0)
활용 분야 및 생태계
ROCm은 특히 대규모 연산이 필요한 분야에서 CUDA의 대안으로 빠르게 자리 잡고 있습니다.
- AI 및 딥러닝: PyTorch와 TensorFlow의 공식 지원을 통해 LLM(Large Language Models) 학습 및 추론에 활용됩니다.
- Triton 지원: OpenAI의 Triton 언어 지원은 매우 중요한 전환점입니다. Triton은 고수준 파이썬 문법으로 GPU 커널을 작성하면 이를 최적화된 저수준 코드로 컴파일해주는 언어입니다. 이를 통해 개발자는 복잡한 HIP/C++ 코드를 직접 작성하지 않고도 AMD GPU에서 최적의 성능을 내는 커널을 구현할 수 있어, 개발 생산성과 최적화 효율이 획기적으로 향상되었습니다.
- HPC (고성능 컴퓨팅): 슈퍼컴퓨터(예: Frontier)의 가속기로 사용되며, 분산 컴퓨팅 환경에서 MPI(Message Passing Interface)와 결합하여 대규모 시뮬레이션을 수행합니다.
- 오픈 소스 커뮤니티: 하드웨어 사양과 소프트웨어 스택이 공개되어 있어, 연구자들이 직접 GPU 커널을 수정하거나 새로운 최적화 기법을 적용하기에 유리한 환경을 제공합니다.
고려 사항 및 한계점
ROCm은 빠르게 성장하고 있으나, 실제 도입 시 다음과 같은 제약 사항을 고려해야 합니다.
- 생태계 성숙도: CUDA에 비해 서드파티 라이브러리나 커뮤니티 튜토리얼의 양이 적습니다. 특정 도메인의 특수 라이브러리가 ROCm 환경에서는 미지원되거나 성능 최적화가 덜 되어 있을 수 있습니다.
- 설치 및 설정 난이도: 리눅스 커널 버전과 드라이버 버전 간의 의존성이 매우 엄격합니다. 커널 업데이트 후 드라이버가 깨지는 경우가 빈번하며, OS 배포판 버전 선택에 신중해야 합니다.
- 하드웨어 파편화: 모든 Radeon GPU가 ROCm을 지원하는 것이 아니며, 공식 지원 목록에 없는 GPU를 사용하려면 환경 변수 설정(
HSA_OVERRIDE_GFX_VERSION) 등의 우회 방법이 필요하며 이 경우 안정성이 보장되지 않습니다.
# ROCm (Radeon Open Compute)
## 개요
**ROCm(Radeon Open Compute)**은 AMD가 개발한 오픈 소스 GPU 컴퓨팅 플랫폼으로, GPU의 병렬 처리 능력을 활용하여 고성능 연산(HPC) 및 인공지능(AI) 모델의 학습과 추론을 가능하게 하는 소프트웨어 스택입니다.
NVIDIA의 폐쇄적인 CUDA(Compute Unified Device Architecture) 생태계에 대응하여, 하드웨어 벤더에 종속되지 않는 개방형 표준을 지향하며 개발되었습니다. ROCm은 개발자가 GPU 하드웨어의 성능을 최대한 끌어낼 수 있도록 저수준 드라이버부터 고수준 딥러닝 프레임워크까지 통합된 환경을 제공합니다.
## 주요 아키텍처 및 작동 원리
ROCm은 하드웨어 추상화 계층을 통해 다양한 AMD GPU 아키텍처에서 동일한 소프트웨어가 동작하도록 설계되었습니다. 핵심은 하드웨어 제어권을 가진 커널 드라이버와 이를 효율적으로 호출하는 런타임 라이브러리의 계층적 구조에 있습니다.
### ROCm 스택 계층 구조
| 계층 (Layer) | 구성 요소 | 역할 및 설명 |
| :--- | :--- | :--- |
| **프레임워크** | PyTorch, TensorFlow, ONNX | 최상위 사용자 인터페이스 및 AI 모델 구현 환경 |
| **라이브러리** | rocBLAS, miopen, rocFFT | 특정 수학 연산(행렬 곱, 컨볼루션 등) 최적화 라이브러리 |
| **런타임** | HIP, ROCr | 하드웨어 독립적인 API 제공 및 리소스 관리 |
| **드라이버** | AMDGPU Kernel Driver | OS 커널과 GPU 하드웨어 간의 직접적인 통신 및 제어 |
| **하드웨어** | Radeon, Instinct GPU | 실제 병렬 연산이 수행되는 물리적 가속기 |
## 핵심 구성 요소 및 라이브러리
ROCm 생태계는 특정 연산의 효율을 극대화하기 위해 최적화된 다양한 라이브러리를 포함하고 있습니다. 특히 NVIDIA CUDA 라이브러리와 1:1 대응 관계를 갖는 구성 요소가 많아 이식성이 높습니다.
### 주요 라이브러리 비교
| ROCm 라이브러리 | 기능 설명 | 대응되는 CUDA 라이브러리 |
| :--- | :--- | :--- |
| **HIP** | 이기종 컴퓨팅 인터페이스 (C++ 기반) | CUDA Driver/Runtime API |
| **rocBLAS** | 기본 선형 대수 서브루틴 (Basic Linear Algebra) | cuBLAS |
| **miopen** | 딥러닝용 최적화 프리미티브 (Convolution 등) | cuDNN |
| **rocFFT** | 고속 푸리에 변환 (Fast Fourier Transform) | cuFFT |
| **rocSOLVER** | 선형 방정식 및 고유값 문제 해결 | cuSOLVER |
## HIP을 통한 코드 이식성
**HIP(Heterogeneous-compute Interface for Portability)**은 ROCm의 핵심으로, 단일 소스 코드로 AMD GPU와 NVIDIA GPU 모두에서 실행 가능한 프로그램을 작성할 수 있게 해주는 C++ 런타임 API입니다.
### hipify 도구
`hipify`는 기존의 CUDA 소스 코드를 HIP 코드로 자동 변환해주는 도구입니다.
- **hipify-perl**: 단순 텍스트 치환 방식으로 CUDA API 호출을 HIP API로 변경합니다.
- **hipify-clang**: Clang 컴파일러를 사용하여 구문 분석 후 보다 정밀하게 코드를 변환합니다.
### 코드 문법 비교 예시
CUDA와 HIP은 문법적으로 매우 유사하며, 대부분의 함수 이름 앞에 `hip` 접두사만 붙이는 형태로 대응됩니다. HIP은 커널 런칭 시 별도의 래퍼 함수(`hipLaunchKernelGGL`)를 사용하거나, 컴파일러 설정에 따라 CUDA와 동일한 `<<< >>>` 문법을 사용할 수 있습니다.
```cpp
// [CUDA C++]
kernel_function<<<grid, block>>>(args);
cudaMalloc(&dev_ptr, size);
cudaMemcpy(dev_ptr, host_ptr, size, cudaMemcpyHostToDevice);
// [HIP C++]
// hipLaunchKernelGGL(커널함수, 그리드크기, 블록크기, 인자...)
hipLaunchKernelGGL(kernel_function, grid, block, args);
hipMalloc(&dev_ptr, size);
hipMemcpy(dev_ptr, host_ptr, size, hipMemcpyHostToDevice);
```
## CUDA와의 상세 비교
| 비교 항목 | NVIDIA CUDA | AMD ROCm |
| :--- | :--- | :--- |
| **철학** | 폐쇄적/독점적 (Proprietary) | 개방형/오픈 소스 (Open Source) |
| **하드웨어 지원** | NVIDIA GPU 전용 | AMD GPU (Radeon, Instinct) |
| **이식성** | 타 벤더 GPU 지원 불가 | HIP을 통해 NVIDIA GPU 지원 가능 |
| **생태계 성숙도** | 매우 높음 (방대한 라이브러리/커뮤니티) | 성장 중 (주요 AI 프레임워크 지원 확대) |
| **컴파일러** | nvcc | hipcc / clang |
## 버전별 주요 업데이트 내역
| 버전 | 주요 업데이트 및 특징 |
| :--- | :--- |
| **ROCm 1.0 ~ 3.0** | 초기 기반 구축, HIP 도입 및 기본 수학 라이브러리 안정화 |
| **ROCm 4.0** | PyTorch 및 TensorFlow 공식 지원 강화, CDNA 아키텍처 최적화 |
| **ROCm 5.0** | 하드웨어 지원 범위 확대 (RDNA 2 지원), 성능 최적화 및 설치 간소화 |
| **ROCm 6.0+** | 최신 Instinct MI300 시리즈 지원, LLM(거대언어모델) 추론 최적화, Triton 지원 강화 |
## 지원 하드웨어 및 설치 환경
### 지원 하드웨어
ROCm은 데이터센터용 가속기부터 최신 소비자용 GPU까지 지원 범위를 확대하고 있습니다. 자세한 목록은 [AMD 공식 지원 GPU 페이지](https://rocm.amd.com/en/documentation/supported_gpus.html)에서 확인할 수 있습니다.
- **Instinct 시리즈**: MI200, MI210, MI250, MI300 시리즈 등 (데이터센터 및 HPC 전용)
- **Radeon Pro 시리즈**: Radeon Pro W6800, W7900 등 워크스테이션용 GPU
- **Radeon 소비자용 시리즈**:
- **RDNA 3**: RX 7900 XTX, RX 7900 XT 등 최신 라인업 공식 지원
- **RDNA 2**: RX 6900 XT, RX 6800 XT 등 일부 모델 지원
- ※ 하위 모델이나 구형 아키텍처의 경우 공식 지원 범위에서 제외되거나 커뮤니티 패치가 필요할 수 있습니다.
### OS 및 설치 요구사항
- **지원 OS**:
- **Ubuntu**: 20.04 LTS, 22.04 LTS (가장 권장됨)
- **RHEL / CentOS**: 8.x, 9.x 버전
- **SLES (SUSE Linux Enterprise Server)**: 15 SP4 이상
- **커널**: 최신 메인라인 리눅스 커널 (AMDGPU 드라이버 호환 버전 필수)
- **컴파일러**: 최신 버전의 GCC 및 LLVM/Clang
- **기타**: 하드웨어 가속을 위한 UEFI Secure Boot 비활성화 권장 (드라이버 서명 문제 방지)
## 설치 단계별 가이드 및 트러블슈팅
### 설치 단계
다양한 배포판을 지원하기 위해 AMD는 공식 설치 스크립트인 `amdgpu-install` 사용을 권장합니다. 아래는 가장 일반적인 Ubuntu 환경 기준의 예시입니다.
1. **시스템 업데이트 및 의존성 설치 (Ubuntu 기준)**:
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install wget gnupg2
```
2. **AMD 저장소 등록 및 설치 도구 다운로드**: AMD 공식 홈페이지에서 제공하는 `.deb` 또는 `.rpm` 패키지를 통해 저장소를 추가합니다.
3. **커널 드라이버 및 ROCm 스택 설치 (Ubuntu 기준)**:
```bash
# amdgpu-install 도구를 사용하여 통합 설치 권장
sudo amdgpu-install --usecase=rocm,hip,opencl
```
*(개별 패키지 설치 시: `sudo apt install amdgpu-dkms rocm-hip-sdk rocm-opencl-sdk`)*
4. **사용자 권한 설정**: GPU 장치 접근을 위해 사용자를 `render` 및 `video` 그룹에 추가합니다.
```bash
sudo usermod -aG render $USER
sudo usermod -aG video $USER
```
### 트러블슈팅 (Troubleshooting)
- **`rocminfo` 실행 시 장치를 찾지 못하는 경우**:
- 커널 드라이버(`amdgpu`)가 정상적으로 로드되었는지 `lsmod | grep amdgpu`로 확인하십시오.
- 사용자가 `render` 그룹에 포함되어 있는지 확인하고 재부팅하십시오.
- **버전 불일치 문제**:
- 설치된 `rocm-core` 버전과 `hip-runtime` 버전이 일치하는지 확인하십시오. 버전이 다를 경우 런타임 에러가 발생할 수 있습니다.
- **PyTorch 인식 불가**:
- PyTorch 설치 시 ROCm 전용 휠(Wheel) 파일을 사용했는지 확인하십시오. (예: `pip install torch --index-url https://download.pytorch.org/whl/rocm6.0`)
## 활용 분야 및 생태계
ROCm은 특히 대규모 연산이 필요한 분야에서 CUDA의 대안으로 빠르게 자리 잡고 있습니다.
- **AI 및 딥러닝**: PyTorch와 TensorFlow의 공식 지원을 통해 LLM(Large Language Models) 학습 및 추론에 활용됩니다.
- **Triton 지원**: OpenAI의 Triton 언어 지원은 매우 중요한 전환점입니다. Triton은 고수준 파이썬 문법으로 GPU 커널을 작성하면 이를 최적화된 저수준 코드로 컴파일해주는 언어입니다. 이를 통해 개발자는 복잡한 HIP/C++ 코드를 직접 작성하지 않고도 AMD GPU에서 최적의 성능을 내는 커널을 구현할 수 있어, 개발 생산성과 최적화 효율이 획기적으로 향상되었습니다.
- **HPC (고성능 컴퓨팅)**: 슈퍼컴퓨터(예: Frontier)의 가속기로 사용되며, 분산 컴퓨팅 환경에서 MPI(Message Passing Interface)와 결합하여 대규모 시뮬레이션을 수행합니다.
- **오픈 소스 커뮤니티**: 하드웨어 사양과 소프트웨어 스택이 공개되어 있어, 연구자들이 직접 GPU 커널을 수정하거나 새로운 최적화 기법을 적용하기에 유리한 환경을 제공합니다.
## 고려 사항 및 한계점
ROCm은 빠르게 성장하고 있으나, 실제 도입 시 다음과 같은 제약 사항을 고려해야 합니다.
- **생태계 성숙도**: CUDA에 비해 서드파티 라이브러리나 커뮤니티 튜토리얼의 양이 적습니다. 특정 도메인의 특수 라이브러리가 ROCm 환경에서는 미지원되거나 성능 최적화가 덜 되어 있을 수 있습니다.
- **설치 및 설정 난이도**: 리눅스 커널 버전과 드라이버 버전 간의 의존성이 매우 엄격합니다. 커널 업데이트 후 드라이버가 깨지는 경우가 빈번하며, OS 배포판 버전 선택에 신중해야 합니다.
- **하드웨어 파편화**: 모든 Radeon GPU가 ROCm을 지원하는 것이 아니며, 공식 지원 목록에 없는 GPU를 사용하려면 환경 변수 설정(`HSA_OVERRIDE_GFX_VERSION`) 등의 우회 방법이 필요하며 이 경우 안정성이 보장되지 않습니다.