深度学习服务器选型避坑与全栈调优实战
|
跟老板拍桌子那天是周三下午三点,咖啡凉透了,我手边那杯根本没动——PM在隔壁会议室跟后端吵API字段要不要带version前缀,声音穿透两堵墙,而我在想:这台刚到的A100服务器,上电自检卡在PCIe link width negotiation那步第三遍了。 我原以为是BIOS里没开Above 4G Decoding,结果进去一看,开关灰着——厂商预装固件直接锁死。换了个U.2转接卡,又试三次,最后发现主板手册第87页小字写着“仅支持NVMe SSD热插拔在slot 3且需断电重启两次”,没人告诉我这个“热插拔”是反向热插拔。那个下午三点,桌面那个没关的录屏还在跑,右下角时间戳显示15:03:22,画面左上角窗口堆叠着nvidia-smi、ipmitool sensor、和一个刚打开还没点确定的Dell OpenManage GUI。 优胜劣汰?哈。不是算法优胜,是哪个团队先扛不住半夜三点被OOM kill叫醒、先删掉自己的混合精度脚本、先把FP16改成BF16再默默加个--no-grad-checkpoint——哪个就活下来。上个月我们组跑通一个7B模型的全参微调,靠的是把gradient accumulation step从16砍到8,再把checkpoint offload塞进torch.utils.checkpoint.create_custom_backward,最后在DataLoader里硬塞一个prefetch_factor=1,只为了骗PyTorch不提前把整个dataset map进内存。但你知道吗,同一天隔壁组拿同样卡、同样镜像、甚至同一行git commit hash,跑不动,因为他们的Dockerfile里COPY . /app那一行后面多敲了个空格——BuildKit缓存失效,镜像层重算,CUDA runtime版本掉了半个patch号,cudaMallocAsync直接跪了。这个我敢打包票。 Lighthouse跑分截图发到群里没人回。我发的是训练完模型推理服务首屏加载时的那个瀑布图——三个CDN域名并行DNS查询,其中两个走了IPv6,第三个在运营商机房里卡了四百一十七毫秒才拿到AAAA响应,但没人看。前端在群里说“接口RTT才三十毫秒”,后端回了个????,PM转头问“能不能下周上线AB测试”。后来我查CDN账单才发现,那个卡顿的域名配了自动升级TLS 1.3的选项,结果边缘节点固件老旧,握手失败后降级重试花了整整十八毫秒——不是网络问题,是CDN控制台里一个灰色复选框没勾。但这个我说不准。 再说GPU监控。你以为nvtop或者dcgmi就够?错。我们线上挂过三次:监控显示GPU显存用92%,温度78℃,P-state是P2,一切正常;可模型吞吐掉一半。最后是运维小张——就是那个总穿蓝格子衬衫、每次站会都站在白板死角的——发现IPMI里有个叫PCIE_AER_CORR_ERR的计数器在狂涨,翻驱动日志才发现是PCIe slot物理接触不良,热胀冷缩导致link retry超限。他们换了根充电线——不是服务器电源线,是给笔记本供电的Anker 100W PD线,顺手插在机柜PDU旁边的USB-C口上充手机,线身弯折处有压痕,正好压在机柜侧板凹槽里,震得整条PCIe链路时通时断。这种事儿,文档不写,vendor不认,NVIDIA工程师电话里听我说完直接沉默七秒,然后说:“建议您重启。” 碎片拼起来讲:我们最后拆了三台新机。一台退回去,因为出厂没刷vBIOS,只认得NVLink拓扑,不认识我们自己写的梯度压缩通信协议;一台返厂刷固件,等了五天,回来发现风扇转速策略和集群调度器写的cgroup throttling逻辑对不上;还有一台留下来,切了双系统:主系统跑训练,子系统装了裸CentOS 7.9+手动编译的OpenMPI+老版NCCL 2.7.8——不是因为它快,是因为它不校验PCIe Gen4 handshake timestamp的偏差。现在它每晚自动dump GPU寄存器状态,存成二进制流,丢进MinIO。我没告诉任何人这件事。连PM都不知道那个S3 bucket里每天凌晨两点生成的217MB文件是干啥的。只知道它存在,而且不能删。
文章配图,仅供参考 前天倒水的是后端老李,他拎着保温壶绕过六台机柜走过来,壶嘴还冒着热气,说“你那台A100风扇声比我家空调外机还响”。我看了眼IPMI,Fan Speed Reading为0 RPM——传感器坏的。但风扇明明在转。我让他别管,继续倒水,水进了我桌上的玻璃杯,水面晃了三下,映出机柜顶灯的光斑。我盯着那光斑看了八秒,没说话。还有件事岔开说两句:KPI折算。上季度我们交付的训练平台SLA写的是“P99延迟≤230毫秒”,但实际生产里只要求99%的batch size=1请求不超时,其余不管。所以运维把GPU timeout阈值设成228毫秒,差两毫秒——够我们省下四张卡的散热电费。这数字不是算出来的,是PM和财务部在电梯里聊出来的。他们按每张卡每小时0.37元折算,再乘以全年预期调度时长,最后减去预算里预留的3.8%缓冲。精确到小数点后两位。我原以为他们在抠算力成本,结果他们是在抠报表颜色:绿色格子要占满整行。 你现在问我下一步干啥?我把CUDA_VISIBLE_DEVICES设成'3,2,1,0'重新跑一遍AllReduce benchmark,再抓一次tcpdump看nccl-send-receive那段的RTT抖动包。如果还是超过八十二毫秒——就换线缆。不换品牌,换批次。上周到货那批Mellanox CX6-DX,序列号末尾是Z83K的,已经炸过两次了。别的先不管。先换线。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


云端部署深度学习模型:网络延迟直降67%实战