RX 6600
은 현재 AMD 에서 공식적으로 지원하는 아키텍처가 아니므로 아주 트릭키한 방법으로 실행해야 한다. 가장 먼저 해야 하는 것은 RCCL
을 직접 빌드하는 일이다.
그러나, RCCL
을 빌드하는 것은 정말 죽음으로 어려운 일이다. RCCL
의 빌드를 어렵게 만드는 요인은 다양하지만 그중 가장 일은 복잡하게 만드는 요인은 바로 배포판마다 패키지의 설치 경로가 다르다는 점이다. 아마 Ubuntu
라면 그나마 쉽게 설치가 가능하겠지만 Fedora
의 경우 빌드 과정에서 삶과 죽음의 경계를 오고가는 경험을 하게 될 것이다.
하지만 안심하라. 필자는 살아 남았다. 나를 죽이지 못하는 고통은 나를 더 강하게 한다고 했던 니체의 말을 떠올려라.
RCCL
을 빌드하기 위해선 다양한 패키지의 설치가 선행되어야 한다. 필자의 경우 기존의 있던 rccl
패키지를 모조리 지우고 새롭게 설치했다:
sudo dnf remove rccl rccl-devel rccl-data
sudo dnf install \
hipcc rocminfo rocm-hip \
rocm-hip-devel rocm-smi-devel \
gcc-c++ hipify-perl
Fedora 42
에서 25년 06월 18일 확인해본 결과 정말 최소한의 패키지 리스트이다. 이것만 설치해도 빌드는 가능하다.
git clone https://github.com/ROCmSoftwarePlatform/rccl.git
cd rccl
git checkout -b build-rccl tags/rocm-6.3.1
버전은 여기에서 확인: https://github.com/ROCm/rccl/releases
가장 먼저 git clone
명령어를 통해 RCCL
프로젝트를 clone
한다. git tag
명령어를 입력해 적절한 RCCL 버전의 tag
로 checkout
한다. 만약 통신할 두 노드의 RCCL 버전이 다르게 되면 통신에 실패하므로 주의하길 바란다.
보통은 이렇게 rocm
버전을 동일하게 해주는 것이 좋다.
rocm_version.h
현재 rocm_version.h
헤더파일 설치 경로가 코드의 설치 경로와 맞지 않아 발생하는 문제가 있다. 따라서 src/include/hip_rocm_version_info.h
파일의 #include <rocm-core/rocm_version.h>
라인을 #include <rocm_version.h>
으로 변경해주어야 한다.
mkdir build
cd build
빌드를 위해 빌드 전용 디렉토리를 생성한다.
sudo mkdir -p /opt/rocm/.info/
sudo echo "6.3.3" | sudo tee /opt/rocm/.info/version
빌드하기 전에 잠깐! /opt/rocm/.info/
디렉토리를 생성하고 version
이라는 파일을 만들어서 거기에 버전을 기입해야 한다. 왜 그래야 하는지는 필자도 모른다. 다만 그래야 빌드가 된다. checkout
할 때에 썼던 tag
의 버전을 파일에 기입하면 된다. 필자의 경우는 6.3.3 이 된다.
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/opt/rccl-gfx1030 \
-DCMAKE_CXX_COMPILER=$(which hipcc) \
-DAMDGPU_TARGETS=gfx1030 ..
make -j$(nproc) # 대단히 오래 걸린다.
# 마지막 librccl linking 과정이 제일 오래 걸리는데 그게 정상이다.
sudo make install
RCCL
테스트하기 우선 RCCL
을 사용하기 위해선 커널의 iommu=pt
옵션이 켜져 있어야 한다. 다음의 과정을 통해 iommu
를 활성화한다:
sudo vi /etc/default/grub
# 파일에서 다음 라인을 수정:
# GRUB_CMDLINE_LINUX="<생략> iommu=pt"
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
완료했다면 재부팅하면 된다. 또한 RX 6600
에서 RCCL
을 사용하려면 환경변수로 HSA_OVERRIDE_GFX_VERSION=10.3.0
을 추가해야 한다. 또한 프로그램에게 LD_LIBRARY_PATH
로 rccl
을 설치한 경로를 지정해야 한다. 이는 LD_LIBRARY_PATH
를 지정하는 것으로 해결할 수 있다.
HSA_OVERRIDE_GFX_VERSION=10.3.0 NCCL_DEBUG=INFO LD_LIBRARY_PATH=/opt/rccl-gfx1030/lib/ <실행항 프로그램>
RX 6600
과 7700 XT
가 서로 통신하는 것을 확인할 수 있다.