본문 바로가기
Coding

라데온 그래픽카드로 pyTorch GPU 연산 돌려보기 (ROCm 사용해보기)

by potatosalad 2024. 5. 20.

그래픽카드, 즉 GPU는 본래 그래픽 연산을 효율적으로 처리하기 위해 탄생한 장치입니다.

 

화면을 그려내는데에는 많은 양의 계산을 얼마나 빠르게 처리할 수 있느냐가 중요하기 때문에, 직렬 연산에 특화되어 있는 CPU 대신, 병렬 연산에 특화된 GPU가 별도로 장착되어 사용되기 시작한 것이죠.

 

병렬 연산에 특화되어 있다는 점은 비트코인 채굴 뿐만 아니라, 머신 러닝에 있어서도 상당히 중요하다보니, 좀처럼 수요가 줄어들 기미를 보이지 않고 있습니다. 덕분에 천정부지로 뛰어오른 그래픽카드 가격 때문에 오늘도 게이머들의 지갑은 한없이 얇아져만 가고 있죠.

 


 

엔비디아에서 새로운 그래픽카드가 나왔을 때마다, 

"이번 신제품에는 쿠다 코어가 몇 개 더 늘어났어요"하는 이야기를 종종 들어보시곤 했을 겁니다.

 

여기서 CUDA라는게 정확히 무엇을 의미하는걸까요?

 

굉장히 복잡한 단어들로 설명할 수도 있겠으나, 간단히 줄이면 '수많은 GPU 연산 장치들을 효율적으로 사용할 수 있도록 도와주는 체계' 정도로 정리할 수 있을 것 같습니다.

 

CUDA는 굉장히 이른 시기에서부터 시장을 선점해왔기 때문에, 현재까지도 수많은 소프트웨어들이 CUDA 체계를 활용하여 병렬 연산 처리 기능을 구현해놓은 상황입니다.

 

단순히 머신러닝 라이브러리들 뿐만 아니라, 3D 그래픽 렌더러와 같은 소프트웨어가 이러한 상황에 속하는데, CUDA는 엔비디아 그래픽카드에서만 사용이 가능한 체계이기 때문에 라데온을 비롯한 다른 GPU에서는 사용이 불가능하다는 문제가 생각보다 오래 전부터 있어왔습니다.

 


 

AMD도 바보는 아니기 때문에, ROCm이라는 솔루션을 만들어 엔비디아의 CUDA에 대항하고 있습니다.

 

그렇지만 엔비디아에 비하면 그래픽카드 부서의 규모도 작고, 소프트웨어 설계 능력도 다소 떨어지다보니, 퀄리티가 좋지 못하다는 비판을 꾸준히 받아오고 있습니다.

 

얼마 전, "(엔비디아의 독점에서 벗어나) Petaflop을 대중화(Commoditize)하겠다"는 당찬 포부를 밝힌 GeoHot (플레이스테이션 해킹 사건의 그 지오핫 맞습니다)이 AMD GPU를 위한 고성능 머신러닝 라이브러리를 만드는 회사를 차린 일이 있었습니다.

 

이걸로 70억원 가까운 투자를 받기까지 했는데, 리사 수와 수차례의 만남 끝에도 결국 끔찍한 수준의 ROCm을 끝끝내 견뎌내지 못했고, 결국 엔비디아 그래픽카드를 사용하는 쪽으로 경영 전략을 대폭 수정하는 일이 있기도 했습니다.

 

그래서 라데온 그래픽카드가 저렴한가봐요. 그런데 뭐 어쩌겠어요. 있는대로 써야지.

 


Prerequisite

다행히도 PyTorch에서는 엔비디아의 CUDA에 대항하는 AMD의 ROCm도 지원하고 있습니다.

다만, ROCm의 윈도우 지원이 추가된지 얼마 되지 않았다보니, 아직 PyTorch에서의 ROCm은 리눅스 환경에서만 사용이 가능합니다.

 

앞서 언급한 TinyGrad 사건도 그렇고, 여러모로 ROCm의 개발이 난잡하게 Rush되고 있는 느낌이라 호환성이 다소 빡빡하게 관리되고 있습니다. 시스템 사용 조건이나 설치 방법은 ROCm의 Documentation을 직접 참고하시는게 베스트라고 생각됩니다.

 

<System Requirement>

https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html

 

 

글 작성 시점에서의 ROCm은 6.1.1 버전에 해당되는데, 제가 사용 중인 그래픽카드 - RX6600XT가 지원 목록에 없네요???

 

그래도 걱정 말고 계속 진행합시다.

ROCm에는 공식 지원 목록에 없는 Architecture의 GPU도 Emulate하는 기능이 포함되어 있기 때문에 도전해볼 가치가 있습니다.

 

 

지원 OS 버전은 확실히 눈여겨 볼 필요가 있습니다.

 

최신 버전의 우분투는 아직 지원하지 않고 있는데, 이것도 무시하고 Ubuntu 24.04 LTS에서 ROCm 설치를 시도했다가 결국 실패하고, OS를 다시 설치해야 했습니다.

 

Installing ROCm

이 부분도 역시나 ROCm의 도큐먼트를 직접 참고하시는게 제일 좋아보입니다.

 

<Quick Install Guide for Linux>

https://rocm.docs.amd.com/projects/install-on-linux/en/latest/tutorial/quick-start.html

 

 

도큐먼트에서 안내하는대로 명령어들을 돌려주면 ROCm 설치가 끝납니다.

 

Installing pyTorch for ROCm

Ubuntu의 경우, 기본적으로 Python과 pip가 설치되어 있지만, 이것들이 설치되어 있지 않은 경우 준비가 필요합니다.

sudo apt install python
sudo apt install python3-pip

 

 

그리고 ROCm 버전의 pyTorch를 설치하면 됩니다.

글 작성 시점 기준으로 설치 명령어는 아래와 같습니다.

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.0

 

역시 이것도 도큐먼트를 확인해보실 것을 추천드립니다.

 

<pyTorch - Start Locally>

https://pytorch.org/get-started/locally/

 

Using pyTorch for ROCm

비록 CUDA가 아닌 ROCm을 사용하고 있으나, pyTorch의 명령어는 이 둘을 구분하고 있지 않습니다. 따라서 평소 GPU 연산을 돌리듯 device를 cuda로 맞추어 사용하시면 됩니다.

 

아래 명령어를 통해 pyTorch가 GPU를 정상적으로 인식하고 있는지 확인할 수 있습니다.

import torch
print(torch.cuda.is_available())

 

pyTorch를 사용하기에 앞서, ROCm을 처음 설치하셨다면 컴퓨터 재부팅이 필요할 수 있습니다.

 

자, GPU를 정상적으로 인식했으니, 이제 실제로 연산을 돌려볼까 합니다.

그런데 오류가 발생하네요..?

 

생각해보니 제가 사용 중인 RX6600XT 그래픽카드는 지원 목록에 없었던 것이 생각납니다. 아차...

 

앞서 언급한대로, ROCm은 미지원 아키텍쳐를 시뮬레이션하는 기능이 포함되어 있으니 아래 명령어를 앞에 추가해주면 됩니다.

# RDNA1 / RDNA2 아키텍쳐 그래픽카드의 경우 -
HSA_OVERRIDE_GFX_VERSION=10.3.0

# RDNA3 아키텍쳐 그래픽카드의 경우 -
# (글 작성 시점 기준, 정식으로 지원되고 있기 때문에 아래 명령어를 사용하지 않아도 됩니다)
HSA_OVERRIDE_GFX_VERSION=11.0.0

 

그러니까, 예컨대 

/bin/python3 /project/main.py

 

위 명령어를 통해 pyTorch 프로젝트를 돌려왔다면,

HSA_OVERRIDE_GFX_VERSION=10.3.0 /bin/python3 /project/main.py

 

위 명령어처럼 환경 변수를 끼워넣어줘야 비로소 오류없이 학습이 진행됩니다.

(RDNA2 그래픽카드 기준)

 

 

ROCm 세팅을 마치고,

CIFAR10, 5 Layer CNN, Adam 연산을 돌려봤을 때 한 epoch 당 약 17초 정도가 소요되는 것을 확인할 수 있었습니다.

댓글