文章摘要
该仓库展示了如何在单块AMD MI300X上运行DeepSeek V4 Flash模型,通过配置和补丁实现高效推理,无需额外量化或卸载,达到168.6 tok/s的解码速度和256K上下文支持。
文章总结
好的,这是根据您的要求,对原文进行的中文重述,保留了核心细节,并删减了与主题无关的冗余内容。
核心内容:在单张AMD MI300X上运行DeepSeek V4 Flash
本仓库提供了在单张AMD MI300X显卡上,生产级运行DeepSeek-V4-Flash-0731模型的完整配置与补丁方案。方案包含Docker Compose部署栈、经过SHA-256校验的文件覆盖层、与上游代码的差异对比以及性能调优表。模型检查点直接运行,无需额外的权重量化或卸载。
性能基准(基于固定版本栈):
- 单流解码:168.6 tok/s
- 预填充:约7.9–8.5K tok/s(默认配置下为6,988–7,019 tok/s)
- 8并发流:总吞吐542 tok/s,单流中位数90.3 tok/s
- 64流突发:总吞吐830 tok/s,无内存溢出或引擎错误
- 上下文长度:已验证256K(架构支持1M)
- 显存占用:156.67 GiB,无需额外量化或卸载
官方vLLM方案主要针对NVIDIA和更新的AMD硬件。要在MI300X上稳定运行此模型,需要解决其FP8格式、高并发下的MoE路由、因果推测验证、CPU-KV同步以及多个未优化的内核形状等问题。本仓库收集了这些修复方案,并固定了生产环境使用的版本。
为何选择MI300X
MI300X拥有192 GB HBM3显存和5.3 TB/s内存带宽,HBM容量是H100 SXM5的2.4倍,且成本约为后者的一半。对于这个304B参数的模型,其大容量显存使得单卡部署成为可能:
- 整个模型可放入HBM,无需PCIe权重流或层卸载。
- 可为GPU KV缓存池预留20 GB空间,并为CPU层预留96 GiB空间,用于存储被驱逐的缓存条目。
- 单卡可处理2-8个典型并发流,并能应对高达64个流的突发请求。
MI300X(CDNA3)实现了AMD/Graphcore的fnuz变体E4M3格式,而MI325X及更新型号使用OCP标准的FP8。在MI300X上使用OCP语义的内核,其缩放域可能产生两倍的误差。因此,确保FP8实现的正确性是首要任务,性能调优次之。
本仓库的贡献
本仓库在现有工作基础上,增加了以下内容:
- 正确性覆盖层:针对固定版本的ROCm nightly,包含上游vLLM尚未合并的修复。
- 已验证的服务配置:采用概率性DSpark草稿、块拒绝和静态K=7的推测解码。使用2,048 token的调度预算和1,024 token的长预填充上限,防止冷启动提示阻塞其他流。
- AITER GEMM调优表:为
gfx942架构上缺失的常见形状提供调优表,并为MXFP4专家层提供gfx942OGS几何覆盖。 - 混合KV策略:20 GB的
fp8_ds_mlaGPU缓存 + 96 GiB的原生CPU卸载,并修复了CPU到GPU的加载路径同步问题。
部署要点
- 硬件要求:一张MI300X显卡、约235 GiB系统内存、约500 GB磁盘空间。
- 启动步骤:拉取固定版本的vLLM ROCm镜像和模型,配置Caddyfile,验证文件校验和,然后使用Docker Compose启动。
- 健康检查:启动约5分钟后,日志应显示模型加载成功、GPU KV缓存大小、最大并发数、CPU卸载文件创建以及CUDA图捕获完成等信息。
- 显存注意:预热后的显存占用高水位线约为204.5 GB(总205.8 GB),空间非常紧张。不要提高
--kv-cache-memory-bytes参数。
关键补丁说明
仓库中的补丁文件作为只读覆盖层挂载到容器中,主要修复了以下问题:
- MXFP4路由:修复了MoE位矩阵内核中填充列的掩码错误,该错误在高负载下会损坏路由矩阵。
- FP8格式:修复了DeepSeek V4的Lightning Indexer缓存中,FP8格式不兼容的问题。MI300X使用AMD FNUZ格式,而原始代码输出OCP格式,两者混用会导致缩放错误。
- 推测解码:确保草稿提议噪声与拒绝/恢复噪声相互独立。
- 性能优化:包括针对
gfx942的A8W8 GEMM形状调优、融合SiLU激活函数、优化的稀疏预填充块大小等。
性能表现
关键优化带来的性能提升:
- GEMM形状调优:单/双流解码性能提升42-62%。
- 融合SiLU与快速路由:原生解码速度从34.5 tok/s提升至56.6 tok/s(+64%)。
- 稀疏预填充优化:预填充速度达到7.9-8.5K tok/s。
- 调度预算优化:将长提示后的短请求首Token延迟从8.2秒降至0.5秒。
并发性能测试(示例):
| 并发流数 | 总吞吐 (tok/s) | 单流中位数 (tok/s) | | :--- | :--- | :--- | | 1 | 126.2 | 168.6 | | 8 | 542.3 | 90.3 | | 64 | 830.2 | 16.4 |
生产环境注意事项
- 显存空间紧张:需持续监控显存使用情况。
- CPU KV层:用于存储被驱逐的缓存条目,而非模型权重。启动脚本会清理崩溃后残留的映射文件。
- 预热内核:重启后,首次预填充会初始化内核,耗时较长。建议在接收流量前运行一次非缓存预填充。
- 测试正确性:除了吞吐量,还需测试模型在工具调用、长上下文召回等方面的正确性,因为冷启动和缓存预填充可能走不同的浮点运算路径。
评论总结
根据评论内容,主要观点如下:
观点:MI300X无法单独购买,仅能以整机形式销售,价格昂贵。
- 评论指出MI300X不单独出售,只能购买包含8颗芯片的整机,成本约25万欧元。
- 关键引用:
- “I don't think you can buy a single 'MI300X' unit, right?”
- “Only the box with x8 of these at a cost of ~250K EUR.”
该评论仅包含单一观点,无其他对立或补充意见,评分未提供。