AMD Strix Halo RDMA 클러스터 설정 가이드

AMD Strix Halo RDMA 클러스터 설정 가이드

대규모 언어 모델(LLM)을 위한 분산 추론은 일반적으로 텐서 데이터를 동기화하기 위해 고대역폭, 저지연 상호 연결이 필요합니다. AMD Strix Halo 플랫폼의 경우, Intel E810 NIC를 통해 **RDMA over Converged Ethernet (RoCE v2)**를 사용하면 노드 간 지연 시간을 ~70-100µs(TCP/IP)에서 ~5µs로 줄일 수 있어, 텐서 병렬성(Tensor Parallelism, TP)을 위해 두 개의 별도 노드가 마치 하나의 기계처럼 동작하게 할 수 있습니다.

아키텍처 및 핵심 개념

Strix Halo에서 분산 추론을 구현하려면 세 가지 주요 소프트웨어 계층이 워크로드를 조율합니다:

  • vLLM: 텐서 병렬성을 사용하여 모델을 노드 간에 분할하는 추론 엔진입니다.
  • Ray: 컨트롤 플레인을 관리하고 클러스터 전체의 워커 프로세스를 조율하는 분산 컴퓨팅 프레임워크입니다.
  • RCCL (ROCm Collective Communication Library): NVIDIA의 NCCL에 상응하는 AMD의 라이브러리입니다. 데이터 플레인을 관리하며 GPU 간 텐서 데이터의 고속 동기화를 처리합니다.

RoCE v2는 여기서 매우 중요합니다. RCCL이 CPU와 OS 커널을 거치지 않고 한 노드의 메모리에서 다른 노드의 메모리로 데이터를 직접 쓸 수 있게 하여, 대화형 토큰 생성 속도를 유지하는 데 필수적이기 때문입니다.

하드웨어 요구 사항

2노드 Strix Halo 클러스터를 구축하려면 다음 하드웨어가 필요합니다:

  • 컴퓨팅 노드: AMD Ryzen AI MAX+ "Strix Halo" 및 128GB 통합 메모리를 탑재한 Framework Desktop Mainboard 2개.
  • 네트워크 인터페이스 카드 (NICs): Intel Ethernet Controller E810-CQDA1 2개 (또는 유사한 100GbE QSFP28 카드).
  • 상호 연결: 스위치 없이 노드 간 직접 연결을 위한 Direct Attach Copper (DAC) 케이블 (예: QSFP28 DAC).
  • 물리적 인터페이스: Framework 메인보드의 PCIe 슬롯은 물리적으로 x4이므로, x16 NIC를 수용하기 위해 PCIe 4x to 16x 라이저/익스텐더가 필요합니다.

호스트 설정 (Fedora 43)

두 노드 모두 Fedora 43(검증된 커널 6.18.5-200.fc43.x86_646.18.6-200.fc43.x86_64)에서 설정되어야 합니다.

드라이버 및 패키지 설치

DNF를 사용하여 핵심 RDMA 사용자 공간 도구를 설치합니다:

sudo dnf install rdma-core libibverbs-utils perftest

설정에는 커널 내장 ice (Ethernet) 및 irdma (RDMA) 드라이버가 사용됩니다. 독점 Intel 드라이버는 필요하지 않습니다.

네트워크 설정

CPU 오버헤드를 줄이기 위해 정적 IP를 할당하고 점보 프레임(MTU 9000)을 활성화합니다. 192.168.100.0/30 서브넷의 경우:

  • 노드 1: 192.168.100.1/30
  • 노드 2: 192.168.100.2/30

rdma link를 사용하여 링크 상태를 확인합니다. 상태가 ACTIVELINK_UP으로 표시되어야 합니다.

BIOS 및 커널 최적화

iGPU를 위한 가용 통합 메모리를 최대화하고 RDMA 성능을 것을 최적화하려면 다음 설정을 적용합니다:

  1. BIOS: iGPU 메모리 할당을 최소(512MB)로 설정합니다.
  2. 커널 파라미터: /etc/default/grubGRUB_CMDLINE_LINUX에 다음을 추가합니다: iommu=pt pci=realloc pcie_aspm=off amdgpu.gttsize=126976 ttm.pages_limit=32505856

파라미터 분석:

  • iommu=pt: NIC 및 iGPU의 오버헤드를 줄이기 위해 Pass-Through 모드를 활성화합니다.
  • pci=realloc: 대규모 주소 공간을 매핑하기 위해 PCI BARs를 재할당합니다.
  • pcie_aspm=off: 지연 시간 급증을 방지하기 위해 Active State Power Management을 비활성화합니다.
  • amdgpu.gttsize & ttm.pages_limit: GPU GTT 크기를 ~124GiB로 제한하여 GPU가 시스템 RAM을 VRAM처럼 사용할 수 있게 합니다.

소프트웨어 설치 및 vLLM 배포

RCCL 패치

이 설정의 핵심 요구 사항은 커스텀 빌드된 librccl.so 라이브러리입니다. 업스트림 ROCm 패키지는 현재 gfx1151 (Strix Halo) RDMA를 지원하지 않습니다. kyuz0/vllm-therock-gfx1151 Docker 이미지는 이 패치된 라이브러리를 포함하고 있습니다.

Toolbox 설정

두 노드 모두에서 ./refresh_toolbox.sh를 실행합니다. 이 스스크립트는 패치된 이미지를 가져오고 컨테이너가 /dev/dri, /dev/kfd, 및 /dev/infiniband를 노출하도록 구성하며, DMA 메모리 고정을 위해 --ulimit memlock=-1을 설정합니다.

클러스터 실행

  1. 조율 (Orchestration): start-vllm-cluster TUI 유틸리티를 사용하여 IP를 구성하고 Ray 클러스터를 시작합니다. 노드 1은 "Head"로, 노드 2는 "Worker"로 지정됩니다.
  2. vLLM 실행: "Launch VLLM Serve"를 선택하고 원하는 모델 (예: Llama-3.1-8B-Instruct)을 선택합니다.
  3. 구성 (Configuration): 텐서 병렬성(TP)을 2로 설정합니다. 분산 APU 클러스터에서 CUDA Graph 캡처가 데드락을 유할 수 있으므로 **"Force Eager Mode"**를 활성화하는 것을 강력히 권장합니다.

대안: Thunderbolt Networking

100GbE NIC가 없는 사용자의 경우, Thunderbolt 4 / USB4 케이블을 통해 노드를 연결할 수 있습니다. RDMA 마이크로프로세서 수준의 지연 시간은 제공하지 못하지만, standard Ethernet보다 훨씬 높은 대역폭을 제공합니다.

  1. 연결 (Connection): thunderbolt0 인터페이스를 생성하고 정적 IP를 할당합니다 (예: 192.168.2.1192.168.2.2).
  2. 구성 (Connection): start-vllm-cluster 유틸리티를를 사용하여 Head 및 Worker IP를 Thunderbolt 인터페이스 주소로 명시적으로 설정합니다.

커뮤니티 인사이트 및 성능

커뮤니티 논의에 따르면, Strix Halo는 RTX 4090과 같은 소비자용 GPU와 비교했을 때 가용 메모리(두 노드 합계 최대 256GB) 측면에서 엄청난 도약(massive leap)을를까지만, Apple Silicon의 원시시 성능(raw performance) 측면면에서는 트레이드오프가 있습니다.

"The M3 Ultra has ~900GB/s memory bandwidth... [Strix Halo] is still double these mini AI boxes [compared to some alternatives], but the limiting factor... is memory bandwidth, both under 300GB/s.

Sources