兄弟们,今天不聊虚的,直接上干货。最近社区里好几个团队都在反馈,用vLLM+PagedAttention跑Llama-3-70B,吞吐量卡在800 tokens/s上不去。我扒了下他们配置,发现普遍卡在K8s的GPU显存碎片化上——默认binpack调度策略导致多卡利用率不均,SLO延迟抖动超过15%。
分享个实测有效的方案:**结合NVIDIA MPS(Multi-Process Service) + K8s 1.29的动态资源分配(DRA)**。具体操作是给Pod注入`nvidia.com/mps-capable: "true"`,并把MPS的默认pipe文件挂载到tmpfs,让同节点上多个推理实例共享GPU算力。我们内部测试,把6个QPS 200的小模型实例混部到单张A100(80G)上,显存占用从72G降到58G,P95延迟反而降低了22%,因为SM利用率从31%拉到68%。
另外,别忘了用**拓扑感知调度**。K8s 1.30的`nodeRestriction`增强后,可以配合NVIDIA DCGM暴露的NVLink域信息,强制让tensor并行(TP=4)的4个GPU在同一NUMA节点。我们实测,Llama-3-70B TP=4时,跨NUMA带宽损失能吃掉12%的MFU,同NUMA部署直接省下这部分算力。
还有个小技巧:镜像里别装CUDA完整包,用`cuda-toolkit`的runtime-only层,能少拖600MB,冷启动时间从40s缩到15s。需要完整DRA配置示例的,评论区扣1,我整理成yaml发出来。 |