为最大化StrixHalo性能而折腾(+NVLink双eGPU 3090改造)
摘要
用户详细介绍了对配备双RTX 3090 eGPU和NVLink的AMD Strix Halo系统进行改造和基准测试的过程,发现对密集模型的LLM推理速度有所提升,尤其是使用vLLM时,并讨论了能效权衡。
https://preview.redd.it/kz66mxzseq2h1.jpg?width=4096&format=pjpg&auto=webp&s=da98623808c4bde0dc79b239c8cf8930c5572769 https://preview.redd.it/ocsigi0veq2h1.jpg?width=4096&format=pjpg&auto=webp&s=eb4b053e46e434b2c54de7fff6c584e01c80ea5e [这张照片并非测试平台的真实状态,只是在我搞定让同一个模型运行在三块GPU上时开心地拍下的。Halo一直在忙,3090们等着Halo干活。](https://preview.redd.it/rbedmn78pq2h1.png?width=1202&format=png&auto=webp&s=248d88c5f54c8e0b9c9ae2d4ae1caf04e6e5754b) **简而言之。** **1. 单独的Strix Halo(124GB UMA显存)已经很不错,但加上1个或2个eGPU对于运行最近流行的27B或31B密集模型来说效果很好。** **2. eGPU的原生带宽限制是可以缓解的。我尝试折腾了一个2槽NVLink(比3槽便宜)的方案,并对3090做了简单的散热改造。在小型密集模型上,你**可能**会体验到PP/s和TG/s数倍的提升,具体取决于情况,并且在多编码代理场景下可能有用。** **3. 基本上,使用延长线可以实现eGPU插槽的灵活性,以便在普通的PCIe 3090显卡上通过小改造适配2槽NVLink。** **4. 根据vLLM中的KV缓存类型,不仅最大上下文长度和并发请求会变化,在较长上下文时速度也差异很大。一开始看起来可能不错,但长期运行未必乐观。** **5. 在能效方面,27B密集模型在eGPU上每瓦特获得更好的PP/s和TG/s。但对于122B模型,单独使用llama cpp运行Strix Halo的能效比三块GPU组合更好。** **6. NVLink在llama.cpp的层拆分上没起到什么作用,我尝试了最近的-sm tensor,TG/s提升了约30%但PP/s下降太大,所以我放弃了,继续在双3090上使用vLLM。** 我对我的Bosgame M5 Strix Halo在27B、31B密集模型上相对较慢的PP/s感到有点沮丧,所以我决定折腾一下来克服它。最近,这些密集模型比70B+的MoE模型获得了更多的关注。为了更好地运行它们,我先通过本地二手市场买了一块3090,看到改进后,迅速通过两个NVMe PCIe 4x4切换到了双eGPU方案。我犹豫过是否尝试NVLink,因为我的eGPU机箱不保证能行,而且3槽NVLink太贵(600美元+)。但我还是想看看能否改善需要通过CPU的eGPU的PHB速度。不过大多数3090显卡(包括我的)都是3槽厚,所以我最终买了一个2槽桥,大约花了250美元(含关税)。为此,我拆掉了上面那块3090的三个风扇罩,用3D打印的侧吹风道粗略地安装了120mm风扇,使其能够装上。令人惊讶的是,经过这种改造后的3090温度竟然比下面未改造的那块还要低。 **测试环境:** * Fedora 43 * llama c桌面版:Strix Halo性能功耗模式,构建9221。 * 122B测试使用`-sm layer`拆分,基于rocm7.2.3和cuda。 * 27B测试使用rocm 7.2.3作为基线。(对比rocm 7.2.3和vulkan radv,rocm的PP/s更好,vulkan的TG/s更好)。基准测试仅重复了2次。 * *注意:* 由于llama cpp基准测试中MTP尚未完全实现,我借用了kyuz0的strix halo工具箱中的代码\_python MTP指标(-pp/s%和+tg/s%),用于27B和122B(使用35B A3B MoE统计数据)来绘制模拟MTP线。(*[*https://kyuz0.github.io/amd-strix-halo-toolboxes/mtp.html*](https://kyuz0.github.io/amd-strix-halo-toolboxes/mtp.html)*) * vLLM:每日构建版本。3090的功耗限制为每块230W。 * vLLM基准测试遵循Club 3090的方向: * 叙事:“写一篇800字的详细文章解释Transformer注意力机制。”(max\_tokens=1000) * 代码:“用Python实现快速排序,并注释每个步骤。”(max\_tokens=800) * 采样:temp=0.6,top\_p=0.95,top\_k=20,presence\_penalty=0.0,enable\_thinking=false。三次预热和五次测量。 * 由于Club 3090没有基于上下文深度的基准测试,我增加了这些测试。 **测试的vLLM模型 - Qwen 3.6 27B** |配方|**量化**|**KV缓存**|**上下文**|**并发**|**草稿模型**| |:-|:-|:-|:-|:-|:-| |**docker-compose**\-dual *(小型,INT4标准)*|AutoRound **INT4**|fp8\_e5m2|**131K**|**4** *(总计\~524K)*|MTP=3| |**turbo** *(高并发)*|AutoRound **INT4**|TQ3(3位)|**262K**|**4** *(总计\~1048K)*|MTP=3| |**mixed-bf16** *(精度,类似Q6感觉)*|混合 **(INT4+8)**|bfloat16|**110K**|**2** *(总计\~220K)*|MTP=3| |**mixed-fp8** *(甜点)*|混合 **(INT4+8)**|fp8\_e5m2|**131K**|**2** *(总计\~262K)*|MTP=2| |**autoround INT8** *(最大)*|AutoRound **INT8**|fp8\_e5m2|**115K**|**1** *(总计\~115K)*|MTP=3| Mixed bf16、Mixed fp8、Autoround INT8配方是从Club 3090的配方小幅修改而来,以寻找优于Q4级别的量化。(*我在写的时候注意到mixed-fp8配方上的MTP 2,又要做太多工作来修复,所以记住这个条件差异*) **测试的vLLM模型 - Qwen 3.6 27B** |配方|**KV缓存**|**上下文**|**并发**|**草稿模型**| |:-|:-|:-|:-|:-| |**awq-bf16** **(纯AWQ)**|bf16|**262K**|**262K × 1,** **131K × 2,** **65K × 4**|MTP=4| |**awq\_autoround** **(混合awq)**|bf16|**262K**|**262K × 1,** **131K × 2**, **65K × 4**|MTP=4| |**int8** **(更大上下文)**|INT8|**340K \~ 392K**|**262K × 1**, **170K × 2,** **98K × 4**|MTP=4| |**docker-compose-bf16** *(默认)*|bf16|**60K**|**60K × 1**|MTP=4| Awq\_autoround配方也是从原始版本小幅修改而来。 **结果:** 三块:双3090 + Strix Halo 122B Q4 K XL unsloth, q8\_0, Strix Halo vs 三块 https://preview.redd.it/k3owfjdupq2h1.png?width=1600&format=png&auto=webp&s=0ac542116870087ebdbeeb959ab7bb6e398b802b https://preview.redd.it/avlcn0hpoq2h1.png?width=1600&format=png&auto=webp&s=a824f6b42c48e2b4e3ae7690a36b473ca8d8c81c Strix halo (llama cpp 27B MTP Q6 K XL unsloth, 25GB 含 mmproj) vs 双 3090, Qwen3.6-27B-Mixed-AutoRound Minachist 28.9GB) 我选择了这些量化版本,因为它们在质量和大小上相当接近 https://preview.redd.it/gl5xz5ufqq2h1.png?width=1600&format=png&auto=webp&s=4f14f93ffacd94fbb68c6bb52f462012fad0882f https://preview.redd.it/n93cgeshqq2h1.png?width=1600&format=png&auto=webp&s=98d219e97e13137db627d66d84124aae84275a74 **能效** 粗略计算,对于27B密集模型,eGPU设置具有更好的能效。然而,在运行122B模型时,单独在Strix Halo上使用llama cpp实际上能效更高。 https://preview.redd.it/s2ryohacsq2h1.png?width=1600&format=png&auto=webp&s=e0764be736283bb211e52ed67110b0b9e28fc8ad https://preview.redd.it/8xdltx0esq2h1.png?width=1600&format=png&auto=webp&s=2d0d2a8b637aae66c5c2511c95e2b1c6baae8ae5 **NVLink 开/关** 测试了NVLink开启和关闭。随着并发和上下文增加,NVLink很好地防御了带宽瓶颈。 BF16缓存场景 https://preview.redd.it/92qm9owysq2h1.png?width=1600&format=png&auto=webp&s=af40d019a444877c1d7128b30dbc5b0d80837c66 https://preview.redd.it/6zqs4g80tq2h1.png?width=1600&format=png&auto=webp&s=4951dc402159bd64d8959ebdf5fe1f42c8b5d9e2 fp8缓存场景。 https://preview.redd.it/yzcgl1wjtq2h1.png?width=1600&format=png&auto=webp&s=6b6e547721a6daeb480423b5928c5a30cdf98e51 https://preview.redd.it/zopa2nlktq2h1.png?width=1600&format=png&auto=webp&s=25f05e0a183ae75627f2ae1071ea9318f91dfe0a INT4量化的fp8场景 https://preview.redd.it/6um96q5qtq2h1.png?width=1600&format=png&auto=webp&s=463dfd330cd6f783ab9d6e446f58dc15be568326 https://preview.redd.it/e4j0sj3stq2h1.png?width=1600&format=png&auto=webp&s=4655627f234372ea7d4c847aaaca9faeb2080f7b Gemma4 31B案例 Gemma-4-31B-it-AutoRound-AWQ, mattbucci, BF16缓存 https://preview.redd.it/rey8p3zytq2h1.png?width=1600&format=png&auto=webp&s=aa573c264af1e3fed6a87ec0837bca32066116b3 https://preview.redd.it/wera6hiztq2h1.png?width=1600&format=png&auto=webp&s=d8c92a6abffcbd0d866c17a7d3ecf2a19764a47c 这显示了基于量化和KV缓存类型的差异。你可以看到最大上下文长度有多大影响。
相似文章
在Strix Halo、RTX 3090和RTX 5070上运行相同模型,只为获得自己的数据
作者在Strix Halo、RTX 3090和RTX 5070上使用了多个后端,进行了55次推理基准测试。结果揭示,显存带宽主导解码速度,RTX 5070在小模型上击败RTX 3090,而推理模型因隐藏的推理内容看起来慢约5倍。
@Snixtp: 针对单张 RTX 3090 的更多能效测试 长文速读:- 我在单张 RTX 3090 上测试了 8 个本地大语言模型(LLM),功率限制从 100W 到 45…
本文展示了 8 个本地大语言模型在 RTX 3090 上的基准测试结果,显示功率能效在约 225W 时达到峰值,而在满功率下收益递减。
探寻4x 3090的甜点
一位用户分享了在运行Qwen3.6-27B与vLLM的4x RTX 3090平台上进行的功耗限制测试,发现220W是在最小化吞吐量损失下实现峰值效率的甜点。
如何在 AMD Strix Halo 及其他非主流 AMD 硬件上微调大语言模型 (LLMs)
本文提供了在 AMD Strix Halo 硬件上使用监督微调 (SFT) 和 LoRA 方法微调大语言模型 (LLMs) 的教程,涵盖 Linux 及原生 Windows 环境。
ROCm 7.13 夜间版新增 Strix Halo 优化
AMD 的 ROCm 7.13 技术预览版为 Strix Halo(Ryzen AI Max 300)新增优化,并将 ROCprof Trace Decoder 开源。