AMD Strix Halo RDMA 叢集設定指南

大型語言模型(LLM)的分散推論通常需要高速互連以防止通信瓶頸。本指南詳細說明了使用 Intel E810 (RoCE v2) 連接的雙節點 AMD Strix Halo 叢集的配置,從而透過張量平行化 (TP) 實現超低延遲的分散式 vLLM 推論。

架構與核心概念

為了在分散式 APU 叢集中達到高效能,系統依賴以下四項主要技術的協同運作:

  • vLLM:使用張量平行化在多個 GPU/APU 之間切分模型的推論引擎。
  • Ray:管理控制平面、協調節點間工作程序的分散式計算框架。
  • RCCL(ROCm Collective Communication Library):AMD 版的 NVIDIA NCCL。它負責資料平面,同步節點間的張量資料。由於 TP 需要在每個神經網路層之後同步,快速的資料交換至關重要。
  • RoCE v2(RDMA over Converged Ethernet):此協定允許 RCCL 直接將資料從一個節點的記憶體寫入另一個節點,繞過 CPU 與作業系統核心。此舉將延遲從約 ~70-100µs(標準 TCP/IP)降低至約 5µs。

硬體需求

建置此叢集需要特定硬體,以支援 100GbE 吞吐量與統一記憶體存取:

  • Compute Nodes:兩塊 Framework Desktop 主機板,搭載 AMD Ryzen AI MAX+ 「Strix Halo」並具備 128GB 統一記憶體。
  • Network Interface Cards(NICs):Intel Ethernet Controller E810-CQDA1(或類似的 100GbE QSFP28 卡)。
  • Interconnect:Direct Attach Copper(DAC)線纜,用於直接節點對節點的連接,免除交換器需求。
  • PCIe Connectivity:由於 Framework 主機板的 PCIe 插槽實際為 x4,需要一個 PCIe 4x 到 16x 的升高板以容納 x16 NIC。效能保持在約 ~50Gbps 帶寬與 ~5µs 延遲。

主機設定(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

確認 Intel E810 韌體版本至少為 4.91。較舊的韌體應使用 Intel Ethernet NVM Update Tool 進行更新。

網路設定

/30 子網路上指派靜態 IP(例如 192.168.100.1192.168.100.2)。將 MTU 設為 9000(巨型框架)以降低 CPU 負擔。使用 rdma link 驗證連線狀態,應顯示為 ACTIVELINK_UP

BIOS 與核心調校

為了最大化統一記憶體與 RDMA 效能的利用,需進行以下調整:

  1. BIOS:將 iGPU 記憶體分配設定為最小值(512MB)。此設定允許 GTT(Graphics Translation Table)動態將系統記憶體分配為 VRAM。
  2. Kernel Parameters:在 /etc/default/grub 中的 GRUB_CMDLINE_LINUX 後加入以下參數:
    • iommu=pt:啟用 IOMMU Pass-Through 模式,以減少 NIC 與 iGPU 的開銷。
    • pci=realloc:重新分配 PCI BAR,以映射大型位址空間。
    • pcie_aspm=off:停用 PCIe 主動狀態電源管理,以防止延遲尖峰。
    • amdgpu.gttsize=126976:將 GPU GTT 大小上限設定為約 124GiB。
    • ttm.pages_limit=32505856:將 TTM 限制與 GTT 大小(約 124GiB)相匹配。

防火牆

完全信任 RDMA 介面,以避免阻擋 Ray 與 RCCL 使用的隨機高埠:

sudo firewall-cmd --permanent --zone=trusted --add-interface=enp194s0np0
sudo firewall-cmd --reload

工具箱安裝與 RDMA 驗證

由於上游 ROCm 套件目前缺乏對 gfx1151(Strix Halo)RDMA 的支援,需要自訂建置的 librccl.so 修補程式。此修補程式透過 kyuz0/vllm-therock-gfx1151 Docker 映像提供。

在兩個節點上執行 ./refresh_toolbox.sh。此腳本會拉取已修補的映像,並設定容器暴露 /dev/dri/dev/kfd/dev/infiniband,同時設定 --ulimit memlock=-1 以釘住 DMA 記憶體。

驗證延遲

在主節點執行 /opt/compare_eth_vs_rdma.sh。預期結果應顯示延遲從約 ~70ms(以太網)下降至約 ~5µs(RDMA)。

執行 vLLM 叢集

叢集管理透過 start-vllm-cluster TUI 工具處理:

  1. Ray Cluster:在 Node 1 上初始化主節點,Node 2 上初始化工作節點。確認叢集偵測到兩個節點與合併的 GPU 資源。
  2. vLLM Serve:選擇模型(例如 Llama-3.1-8B),並將 Tensor Parallelism 設為 2
  3. Critical Setting:啟用 「Force Eager Mode」。CUDA Graph 捕獲在分散式 APU 叢集上可能不穩定,導致死結。Eager 模式較安全,可防止此類卡住。

替代方案:Thunderbolt 網路

對於沒有 100GbE NIC 的使用者,可透過 Thunderbolt 4 / USB4 線纜將節點連接。雖然此方式缺乏 RDMA 的微處理器級延遲,但其帶寬遠高於標準以太網。

  1. Configuration:建立 thunderbolt0 介面,使用靜態 IP(例如 192.168.2.1192.168.2.2)並設定 MTU 為 9000。
  2. Execution:使用 start-vllm-cluster 工具,將 IP 明確設定為 Thunderbolt 介面的位址。腳本會自動偵測並使用 thunderbolt0 進行 Ray 與 GPU 同步。

社群見解與取捨

社群討論指出此設定的多項實務考量:

  • Cost vs. Performance:雖然 Strix Halo 提供巨量統一記憶體(兩節點合計最高 256GB),但有使用者指出其記憶體頻寬(低於 300GB/s)遠低於 Apple 的 M 系列 Ultra 晶片(例如 M3 Ultra 約 900GB/s),可能導致產生 token 的速度較慢。
  • Hardware Accessibility:需要 PCIe 升高板與外接 NIC,使得使用 mini-PC 而非 Framework 主機板的使用者建置此系統相當複雜。
  • Potential for Local AI:儘管頻寬差距存在,能在愛好者等級硬體上執行 300B 以上參數的模型,被視為本地 LLM 部署的重要里程碑。

Sources

相關

  • 專案
  • Dispatch
  • Dispatch
  • 專案
  • Dispatch