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_64 與 6.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.1 與 192.168.100.2)。將 MTU 設為 9000(巨型框架)以降低 CPU 負擔。使用 rdma link 驗證連線狀態,應顯示為 ACTIVE 與 LINK_UP。
BIOS 與核心調校
為了最大化統一記憶體與 RDMA 效能的利用,需進行以下調整:
- BIOS:將 iGPU 記憶體分配設定為最小值(512MB)。此設定允許 GTT(Graphics Translation Table)動態將系統記憶體分配為 VRAM。
- 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 工具處理:
- Ray Cluster:在 Node 1 上初始化主節點,Node 2 上初始化工作節點。確認叢集偵測到兩個節點與合併的 GPU 資源。
- vLLM Serve:選擇模型(例如 Llama-3.1-8B),並將 Tensor Parallelism 設為
2。 - Critical Setting:啟用 「Force Eager Mode」。CUDA Graph 捕獲在分散式 APU 叢集上可能不穩定,導致死結。Eager 模式較安全,可防止此類卡住。
替代方案:Thunderbolt 網路
對於沒有 100GbE NIC 的使用者,可透過 Thunderbolt 4 / USB4 線纜將節點連接。雖然此方式缺乏 RDMA 的微處理器級延遲,但其帶寬遠高於標準以太網。
- Configuration:建立
thunderbolt0介面,使用靜態 IP(例如192.168.2.1與192.168.2.2)並設定 MTU 為 9000。 - 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