Linux深度学习环境搭建:12年电商运维排障实录
|
去年2月,大促前两周,AI推荐组提了个需求:把新训练 pipeline 搬到 GPU 机房那台新买的 A100 服务器上。我盯着邮件末尾“请于三个工作日内完成环境适配”那行字,抬手按了下左 Shift 键——卡住了,得用指甲盖往上顶一下才弹回来。双屏右边壁纸还是去年双十一截的实时流量图,峰值标红框里写着“QPS 87.6K”,底下小字“此截图未经脱敏”。 我原以为就是装个 CUDA、换下 PyTorch 版本、跑通 demo.py 就完事。结果 pip install torch==2.0.1+cu118 -f https://download.pytorch.org/whl/torch_stable.html 执行完,import torch 一跑,Segmentation fault (core dumped)。不是报错,是直接 segfault——跟去年我们上线那个 Redis Cluster 节点半夜自己缩容八成节点一样,连日志都懒得写全。后端老张在隔壁工位敲键盘敲得特别响,敲的是他那个还没 merge 的 PR,标题叫“修复 /api/v2/recommend 接口返回空数组的 NPE”,但其实空数组是前端传参少了个 required 字段。这事儿我跟他吵过三次,第三次是我把 curl 命令复制进 Postman,加了 Content-Type: application/json,他盯着看了十八秒,说:“哦……那这个确实不是我的问题。”
文章配图,仅供参考 然后我就开始查 libc 版本、gcc 编译器 ABI、GLIBCXX_3.4.29 到底是谁带进来的。翻到第三层的时候,测试妹子小林端着保温杯路过,杯沿上还沾着一粒枸杞,问我:“刘哥,你装的那个 nccl 是不是没关 IB?”我说“没动过 IB 配置”,她“哦”一声就走了,十分钟后又折回来,把 cup.sh 的 --no-ib 参数塞进启动脚本里,模型跑通了。就这么简单。我敢打包票,那台服务器 BIOS 里 RDMA 相关的四个子菜单全开着,而我们在 CI 流水线里从来只 check CUDA_VISIBLE_DEVICES 和 PYTHONPATH,从不碰 ibstat 或者 iblinkinfo。优胜劣汰?对。淘汰的是谁?不是人,是那种“反正本地能跑”的幻觉,是 PM 写 PRD 时写的“模型推理延迟 ≤120ms”,却漏写了“在 CentOS 7.9 + kernel 4.19.90-177.65.3.el7.x86_64 环境下”这种半句废话。桌角那份麻辣香锅的汤洒了一滴,在键盘右下角 Ctrl 键旁边晕开一小片油渍,擦了两遍还反光。Chrome DevTools 开着,Network tab 一直挂着,因为早上测接口响应头顺手开的,到现在都没关。旁边同事去倒水,经过时带起一阵风,把我摊在桌上的 NVIDIA 官方 driver 515.82.05 release note 吹得翻了两页,停在 “Fixed issue where Xid 69 could be incorrectly reported on A100-SXM4-80GB systems during heavy memory bandwidth stress” 这行。我没合上它。Xid 69?那玩意儿我在 2018 年就见过,当时是 T4 卡挂掉,日志里飘着三行十六进制地址,没人敢 call nvidia tech support,因为打过去第一句必是“please update your driver”,我们更新了,它还在那儿。这次没见 Xid,是更安静的死法——loss train 曲线在第 127 epoch 突然平直,像被刀切掉,GPU 利用率掉到 1%,nvidia-smi 显示 Memory-Usage 还是满的,但 top 里 python 进程 CPU 占用为 0.3%。这不是 bug,这是沉默。我们后来在 /var/log/messages 里翻到一句“nvme 0000:3b:00.0: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)”——PCIe 总线纠错,纠错完了,就继续假装一切正常。 前天我翻 git blame,看到三年前自己写的那段 shell 脚本,check_glibc_version() 函数里还留着 echo “Please use glibc >= 2.28” 这句,但实际判断条件里写的是 -ge 2.26,后面跟着一个 # temp fix for jenkins 2021 。我现在删掉了注释,但没改版本号。PM 又在群里艾特我,“刘哥,灰度 5% 用户跑不通 new-ranker,麻烦看下是不是环境问题”,语气和上次催我配 SSL 证书一模一样,那时候他说“用户打不开下单页,我们不能等”,现在他说“AB 实验跑不通,我们不能等”。可上次是 nginx.conf 里多了一个 trailing slash,这次我连 docker build 日志都没拉全——我先把 cup.sh 里 --no-ib 又加了一次,加完才发现之前加过的那一行被覆盖了。覆盖的原因?有人 rebase 的时候选错了 base 分支。这事我没法怪。只能怪自己没把那个参数硬编码进 Dockerfile 的 ENV 里,只塞在 runtime 的 startup.sh 里。 其实我想说的是 CSS 命名。上周 review 前端 PR,看到他们用 .card__title--highlighted 来控制一个促销价标签的颜色,我手抖点了 approve,心里骂了三声。命名规范和 deep learning 环境搭建设么关系?没有。但它们共享同一种腐烂节奏:一开始都挺干净,一个 commit 就搞定,后来人来了又走,文档丢了,没人记得当初为什么要在 NCCL_IB_DISABLE=1 前面加 export,只记得“以前这么干就没错”。今年 Q1 绩效面谈,HR 问我“过去一年最大成长是什么”,我说“终于学会不第一时间 sudo apt upgrade”。她笑了,记下来。我没笑。我那天晚饭点的黄焖鸡米饭,饭盒打开,汤洒了一滴,在键盘右下角 Ctrl 键旁边晕开一小片油渍,擦了两遍还反光。 算了,今天先停这儿。明天我把 cup.sh 提交个 patch,把 --no-ib 放进 default args,再加个 if [ -f /proc/sys/net/ib/ports/1/ports/1/state ]; then echo "IB detected — disable it or burn"; exit 1; fi。至于要不要 push 到主干?我看不准。老张刚在 Slack 发消息:“刘哥,v2/recommend 接口那个空数组……好像还是有偶发”。我没回。我先把左手 Shift 键又顶了一下,松手时听到轻微的咔哒声。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


云端部署深度学习模型,网络延迟直降67%
Linux安全环境搭建:从前端CSS师视角看系统防护艺术
深度学习服务器选型避坑与全栈调优实战
Linux数据库环境搭建七步实操指南
Linux运维老手也常踩的5个Unix环境搭建坑
站长资讯已死?深度学习重构信息分发逻辑
嵌入式Linux开发者Unix环境搭建避坑指南