1
DCU技术达人
不让 Docker 绑架部署:海光 DCU 上把官方镜像搬成自己的 conda 环境实战
2026-09-29 16:04:20
30
在[海光 DCU](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E6%B5%B7%E5%85%89+DCU&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLmtbflhYkgRENVIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjgyMTYzNTg3LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.9srnTn_TxNc8o5Qm_o_7euSjgAH0FQ_Khw_aAwvTHis&zhida_source=entity) 上跑新模型,最快的路径往往是官方容器镜像——模型厂商和海光适配好的整套栈([vLLM](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=vLLM&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJ2TExNIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjgyMTYzNTg3LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.kBdYXqp38genWb_GH4ny9RKkGlRVGq4B6QQ6KczuleU&zhida_source=entity) + torch + triton + DTK [运行库](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E8%BF%90%E8%A1%8C%E5%BA%93&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLov5DooYzlupMiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.djlYnxjlAgK96ShA1q70B4VCqShMQ0LHNwtvmpvP7bE&zhida_source=entity))打包在一起,拉下来就能跑。但镜像方案有个绕不开的问题:**\*\*它太重、也太黑盒\*\***。我们在八卡机上要跑的是 8 个裸机实例的集群,不是每张卡养一个几十 GB 的容器;而且容器里的环境改不动、查不动,出了问题连「装的哪个版本的 [triton](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=2&q=triton&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJ0cml0b24iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MiwiemRfdG9rZW4iOm51bGx9.wLc7Jv_n2DGoEwfajBcxhfgcWKJ59lWBll1RXDPaHuk&zhida_source=entity)」都要进容器才能确认。 这篇记录我们做过的两次「容器转裸机」搬迁——把官方镜像里的整套深度学习栈搬进 host 上的 [conda 环境](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=conda+%E7%8E%AF%E5%A2%83&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJjb25kYSDnjq_looMiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.BTvHvkbHMPTXtIxNpjzkoiIiw_hSBAC-p3f41A0mz3c&zhida_source=entity)。两次分别对应 vLLM 0.20 栈(约 8.2GB site-packages)和 vLLM 0.9.2 栈(约 11GB),都成功落地跑进了生产。流程已经固化成标准动作,照抄即可。 ## 为什么要把容器「搬」出来 | | 官方容器 | 裸机 conda 环境 | | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | | 启动 8 实例集群 | 每卡一个容器,8 份运行时开销 | 8 个进程,共享一套环境 | | 排查问题 | 每次\`[docker](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=docker&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJkb2NrZXIiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.OBMcdW1EGqS4MBXq41mnypMdBDRTj-7Oa24ZhrC3TvA&zhida_source=entity) exec\` 进去,工具不全 | 直接用 host 的 grep/strace/ss | | 与 host 脚本协作 | 卷挂载、端口、设备传递一堆参数 | 原生进程,\`fuser\`/\`ss\` 直接可见 | | 磁盘 | 镜像 + 容器层双份占用 | 一份 site-packages | | 版本升级 | 等新镜像,整包重下 | 可控(在定制栈约束内) | 核心动机一句话:**\*\*容器适合「第一次验证跑通」,裸机适合「长期运行的生产集群」\*\***。搬迁就是把这両个阶段连接起来的桥。 ## 搬迁三步曲 目标:在 host 上建一个 conda 环境,其 Python 栈与容器内**\*\*逐字节等价\*\***。以 vLLM 0.20 栈([MiniCPM-V 4.6](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=MiniCPM-V+4.6&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJNaW5pQ1BNLVYgNC42IiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjgyMTYzNTg3LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjEsInpkX3Rva2VuIjpudWxsfQ.RHN8oTAzhqGBpJfxKRp5hBPTuRrxaloWkz5zB8oVBlE&zhida_source=entity) 专用)为例: \`\`\`bash *# ① 建空环境* conda create -p /data1/g003/envs/minicpmv46 python=3.10 *# ② 搬 python 包(8.2G:torch / vllm / triton 等全部[二进制](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E4%BA%8C%E8%BF%9B%E5%88%B6&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLkuozov5vliLYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.IHDvusGc2GxduVJZHclOXL_UtPMxjMNGO9CpUQpVuXs&zhida_source=entity)依赖)* docker exec minicpm46 tar cf - -C /usr/local/lib/python3.10/dist-packages . \\ | tar xf - --no-same-owner -C /data1/g003/envs/minicpmv46/lib/python3.10/site-packages/ *# ③ 搬 apt 装的 python 依赖(24M,别看小,关键)* docker exec minicpm46 tar cf - -C /usr/lib/python3/dist-packages . \\ | tar xf - --no-same-owner -C /data1/g003/envs/minicpmv46/lib/python3.10/site-packages/ *# ④ 搬工具链(3.8G,仅 triton 3.6 栈需要,见下)* docker exec minicpm46 tar cf - -C /opt/dtk-26.04-DCC2602-0317/[aillvm](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=aillvm&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJhaWxsdm0iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.5S0CTZK4b7H96U7-9qch9Bje6pt-K_lU05YBLKEX7Z8&zhida_source=entity) . \\ | tar xf - --no-same-owner -C /data1/g003/dev-cache/aillvm-dtk2604/ \`\`\` 用 \`docker exec ... tar | tar\` 流式管道而不是 \`docker cp\`,是有原因的——第二次搬迁(vLLM 0.9.2 栈)时实测 \`[docker cp](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=2&q=docker+cp&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJkb2NrZXIgY3AiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MiwiemRfdG9rZW4iOm51bGx9.M7ZH_pw__mqTLALj_PseNSsWxLSi78b8-ThB_iJEwqw&zhida_source=entity)\` 撞到 site-packages 里的外部 symlink 会**\*\*静默中途中止\*\***,拷出来的目录残缺不全,直到运行时才报莫名其妙的 ImportError。tar 流式拷贝没有这个问题。 ## 三个必踩的坑,以及为什么 **\*\*坑一:\`--no-same-owner\` 不加,文件全是 root 属主。\*\*** 容器内文件归属 root,默认 tar 还原会保留属主,host 上的普通用户随后想 patch 其中某个文件(我们就干过,见下)就会碰[权限墙](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E6%9D%83%E9%99%90%E5%A2%99&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLmnYPpmZDlopkiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.cA0l1LurRQE19YwYSOYp7b-LzI4rZVvjSv4aiMDh3cA&zhida_source=entity)。搬迁的目的是「变成我的环境」,属主当然也要变成我。 **\*\*坑二:第③步看着可省,省了必崩——而且崩得离报错现场很远。\*\*** 漏搬 apt 装的那 24MB 后,启动 vLLM 报的是 \`ModuleNotFoundError: No module named 'six'\`。six 这个包和 vLLM 八竿子打不着,实际[依赖链](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E4%BE%9D%E8%B5%96%E9%93%BE&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLkvp3otZbpk74iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.4szaBv-htAczDzAVQ2luzclMOj8Zwxsgt4BtwSyFhMY&zhida_source=entity)是 accelerate→boto3→dateutil→six,隔了三层才露头。**\*\*[经验法则](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E7%BB%8F%E9%AA%8C%E6%B3%95%E5%88%99&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLnu4_pqozms5XliJkiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.L9bfF3BdUIktpYVCIvOQIwK9VpscozOgA-cK-uWbHKw&zhida_source=entity):容器里有两个 python 包目录(pip 的 dist-packages 和 apt 的 dist-packages),搬就必须都搬\*\***——你不知道哪条依赖链会绕到 apt 那边去。 **\*\*坑三:CLI 入口不会跟着走。\*\*** 容器里 \`vllm\` 命令装在 \`/usr/local/bin\`(那是个 entry point 脚本,不在 site-packages 里),搬完环境后直接敲 \`vllm serve\` 是不存在的。两种解法:把 \`/usr/local/bin/vllm\` 也拷过来,或者更干净地用模块入口: \`\`\`bash python -m vllm.entrypoints.openai.api\_server --model ... --port ... \`\`\` 功能完全等价,而且不依赖任何外部脚本。 ## [工具链](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=2&q=%E5%B7%A5%E5%85%B7%E9%93%BE&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLlt6Xlhbfpk74iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MiwiemRfdG9rZW4iOm51bGx9.fk83yBCAAsVb2MNrd7mrpzwez86Qc5D01Z1T3_0WF5I&zhida_source=entity)要不要搬:先判断你的 triton 版本 这是唯一一处需要动脑子的分叉。triton 3.6 的 [HCU](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=HCU&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJIQ1UiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.KQpPb5oaItL1r8vhdk9Rku9DO35pmo9N9A2lE7YYahM&zhida_source=entity) 后端编译 kernel 时需要 **\*\*clang-18\*\***,而 host 的 DTK 里只有 clang-17——这个 clang-18 在容器的 \`aillvm/\` 目录下,所以 triton 3.6 栈必须把 aillvm 整个搬出来,并设: \`\`\`bash export TRITON\_HIP\_CLANG\_PATH=/data1/g003/dev-cache/aillvm-dtk2604/bin/clang-18 \`\`\` 而 triton 3.0/3.1 的栈用默认工具链即可,**\*\*这 3.8GB 可以不搬\*\***。判断方法很简单:看环境里的 \`pip show triton\`(注意别信 \`triton.\_\_version\_\_\`,某些定制版报的是没更新的 staging 字符串)。 ## 兼容性验证清单:搬完必跑 「逐字节等价」是理想,host 和容器的 DTK 版本、系统库可能有细微差异。搬完之后,按这个清单从下往上验证(每一步都是下一步的前置): \`\`\`bash source /opt/dtk-26.04/env.sh *# 裸机跑之前必须 source(LD\_LIBRARY\_PATH 靠它)* *# 1. import 层* python -c "import torch; print(torch.\_\_version\_\_, torch.cuda.device\_count())" *# 期望:版本号与容器一致 + 8* *# 2. 计算层* python -c "import torch; a=torch.randn(1024,1024,device='[cuda](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=2&q=cuda&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiJjdWRhIiwiemhpZGFfc291cmNlIjoiZW50aXR5IiwiY29udGVudF9pZCI6MjgyMTYzNTg3LCJjb250ZW50X3R5cGUiOiJBcnRpY2xlIiwibWF0Y2hfb3JkZXIiOjIsInpkX3Rva2VuIjpudWxsfQ.8uvUv6PQSmm1joGV1uP0jSbTYHgY_mizZU1zs-nO1DM&zhida_source=entity)'); print((a@a).sum().item())" *# 期望:正常出数(验证 HIP 运行时和[算子库](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E7%AE%97%E5%AD%90%E5%BA%93&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLnrpflrZDlupMiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.EuqC95bWNDxfWH6nACnG5Tp9wqdBD91PID_TnNTGm0w&zhida_source=entity))* *# 3. JIT [编译层](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E7%BC%96%E8%AF%91%E5%B1%82&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLnvJbor5HlsYIiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.5r7vBOUeW192iOOnVRPemfFGcnu0HIPTW0cHn-qloVU&zhida_source=entity)(triton 栈的关键)* python -c "import torch, triton; ..." *# 跑一个会触发 triton 编译的小 kernel* *# 期望:能过(验证 clang/ld.lld 工具链可用、gfx928 target 认识)* *# 4. 服务层* python -m vllm.entrypoints.openai.api\_server --model <小模型> --port 8010 & curl -s [http://**127.0.0.1:8010/health**](https://link.zhihu.com/?target=http%3A//127.0.0.1%3A8010/health) *# 期望:200(全链路通)* \`\`\` 我们最忐忑的一次验证是第二次搬迁:容器是 DTK 25.04.1 编的,host 是 DTK 26.04。实测 import、matmul、triton gfx928 JIT、vLLM 启动全部正常——包括 host 与容器 \`libgalaxyhip.so.5\` 小版本号不同(26113 vs 26105)的情况,因为 \`.so.5\` 主版本号相同,ABI 兼容。**\*\*这种「主版本号相同就敢用」的跨 DTK [前向兼容](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E5%89%8D%E5%90%91%E5%85%BC%E5%AE%B9&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLliY3lkJHlhbzlrrkiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.pw2psPdC5IHO6uHN5AnY9kpQUmIU6IzSgcbxcoBpj_s&zhida_source=entity),在国产卡环境里没有文档背书,只能靠这套清单实测背书\*\***——这也是为什么清单要固化成脚本,每次搬迁跑一遍。 ## 搬迁验收标准 | 项 | 验收方式 | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | | 文件属主 | \`ls -la site-packages | | 包完整性 | \`pip list\` 条目数与容器内一致;关键包版本逐一比对 | | apt 依赖 | \`python -c "import six"\` 通过 | | [显卡](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E6%98%BE%E5%8D%A1&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLmmL7ljaEiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.Go1517I37eDk5PEQjsjiLu9JF6P7QrPqNpA2IY-AR1k&zhida_source=entity)可见 | \`device\_count()\` = 卡数 | | JIT 编译 | triton 小 kernel 跑通(triton 3.6 栈另验 clang-18) | | 服务冒烟 | 小模型\`/health\` 200 | ## 什么时候不该搬 公平起见也说下反面:**\*\*如果只是单实验、跑几天就下线,或者官方镜像更新非常频繁,搬迁不值得\*\***——直接用容器更省事。搬迁的适用[判据](https://zhida.zhihu.com/search?content_id=282163587&content_type=Article&match_order=1&q=%E5%88%A4%E6%8D%AE&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTA4NDE4MjcsInEiOiLliKTmja4iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyODIxNjM1ODcsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.WGnD22xWnf5VL2P50zAjIXddOD6TZgYHKkzKL-DC1Oo&zhida_source=entity)是「这个栈要长期跑、要多实例复制、要进生产运维体系」。我们的实践是:验证阶段用容器(一跑就走通,官方背书),决定上生产后再搬迁固化——两个阶段各取所长。 顺带一个真实收益:搬成自己的环境后,里面任何一层都能改了。我们就直接 patch 过 site-packages 里的 vLLM 源码,把一个会杀死引擎进程的 \`raise\` 降级成了保命的补零/截断——这种操作在容器黑盒里是做不到的(改容器内文件,重建容器就丢)。 ## 小结 容器转裸机不是「复制文件」这么简单,它的本质是**\*\*把一套隐式依赖的运行时(python 包 × apt 包 × 工具链 × DTK 库)显式化,并逐层验证等价\*\***。三步搬运 + 一份验证清单 + 三个坑的避法,这套动作我们已经跑了两次,第二次只花了第一次三分之一的时间——流程本身,比任何一次搬迁的结论都更值钱。 --- *\*环境信息:海光 K100\_AI × 8 / host DTK 26.04 / 两次搬迁:vLLM 0.20.0 + torch 2.10 + triton 3.6(自 aillvm 搬 clang-18)、vLLM 0.9.2 + torch 2.5.1 + triton 3.0.0(DTK 25.04.1 二进制,host 26.04 前向兼容实测通过)。\**
全部评论(0)
只看楼主
暂无数据
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据