21
DeepSeek
精华
Z100L 本地成功运行最新版 vLLM + Gemma4 教程(1)
2026-04-21 09:49:30
426
目标很明确: - 不用 Docker 作为主运行入口 - 不走海光私有 demo 路线 - 用更接近主流开源栈的方式在本机跑通 `vLLM + Gemma4` 当前这台机器上,已经验证成功的路线是: - 底层继续使用海光 `DTK/HIP` - 上层使用**自编 PyTorch** - `vLLM` 使用**源码树 + 本地补丁** - 模型先用: - `google/gemma-4-E2B-it` 做最小成功验证 - `cyankiwi/gemma-4-26B-A4B-it-AWQ-4bit` 做 32GB 显卡上的实际运行验证 ## 1. 这篇教程对应的真实环境 下面这些信息不是建议值,而是**这次实际跑通的环境快照**。 ### 系统 - Ubuntu `22.04.5 LTS` - 内核 `5.15.0-174-generic` ### GPU / 驱动 / 工具链 - GPU:`Z100L` - LLVM target:`gfx906` - DTK:`/opt/dtk-26.04` - 软链:`/opt/dtk -> /opt/dtk-26.04` - HIP 实现不是标准 AMD ROCm 布局,而是: - `libgalaxyhip.so` 为核心实现 - `libamdhip64.so -> libgalaxyhip.so` ### Python / PyTorch / vLLM - Python:`3.10.12` - venv:`/home/muyi/venvs/torch-gpu-z100l` - PyTorch 运行版本:`2.9.1a0+gitd38164a` - HIP 版本:`6.3.3` - 当前运行的 vLLM 版本:`0.19.1.dev0+g2a69949bd.d20260417` ### 关键源码树 - PyTorch:`/home/muyi/src/pytorch-clean-v291` - vLLM:`/home/muyi/src/vllm` 注意: - `vLLM` 这里不是直接 `pip install vllm` 的纯净 wheel 路线 - 而是**源码树运行** - 当前成功依赖的是本地补丁后的 `vLLM` 源码树 ## 2. 先说结论:这套路线里什么是必须的 这几件事是这套方案的硬前提: 1. 必须先 `source` 固化好的 DTK 环境脚本 2. 必须使用已经编好的 GPU 版 PyTorch venv 3. 必须把 `PYTHONPATH` 指到 `/home/muyi/src/vllm` 4. 必须设置 `USE_LIBUV=0` 5. 运行 `Gemma4` 时,当前这台机子上必须显式指定 `TRITON_ATTN` 6. 当前主入口是 **host 直接运行**,不是 Docker 如果你把其中任何一项换成“看起来更标准”的默认值,往往就会回退到不能跑的状态。 ## 3. 目录布局 先确认远端目录是这些: ```bash /home/muyi/envs/dtk26-z100l.sh /home/muyi/venvs/torch-gpu-z100l /home/muyi/src/pytorch-clean-v291 /home/muyi/src/vllm /home/muyi/z100l-smoke /home/muyi/models/google/gemma-4-E2B-it /home/muyi/models/cyankiwi/gemma-4-26B-A4B-it-AWQ-4bit ``` 如果你的目录不一样,可以改路径,但不要改技术路线。 ## 4. 第一步:加载 DTK 环境 先执行: ```bash source /home/muyi/envs/dtk26-z100l.sh ``` 这份脚本会统一设置: - `ROCM_SOURCE_DIR=/opt/dtk-26.04` - `ROCM_PATH=/opt/dtk-26.04` - `HIP_PATH=/opt/dtk-26.04/hip` - `PATH` - `LD_LIBRARY_PATH` - `PYTHONPATH` - `CMAKE_PREFIX_PATH` - `CMAKE_MODULE_PATH` 这一步不要省略。当前机器的 DTK 不是标准 `/opt/rocm` 布局,省略这一步后很多库和头文件都会找不到。 ## 5. 第二步:激活 Python 环境 执行: ```bash source /home/muyi/venvs/torch-gpu-z100l/bin/activate ``` 然后加上源码版 vLLM 的路径: ```bash export PYTHONPATH=/usr/local/hyhal/share/amd_smi:/home/muyi/src/vllm${PYTHONPATH:+:$PYTHONPATH} export USE_LIBUV=0 ``` 这里的 `USE_LIBUV=0` 不是可选项。当前这台机器上,PyTorch distributed/TCPStore 相关问题绕开它最稳。 ## 6. 第三步:先做底层 smoke test 不要直接上大模型。先确认 GPU 计算链路没坏。 执行: ```bash cd /home/muyi/z100l-smoke bash /home/muyi/z100l-smoke/run_all.sh ``` 这一步会依次验证: - HIP runtime - hipBLAS SGEMM - Python ctypes 直接调用 HIP runtime 如果这一步不过,就先别碰 vLLM。 ## 7. 第四步:验证当前 PyTorch / vLLM 版本 执行: ```bash python -c 'import torch; print(torch.__version__); print(torch.version.hip)' python -c 'import vllm; print(vllm.__version__)' ``` 本机当前应接近: ```text 2.9.1a0+gitd38164a 6.3.3 0.19.1.dev0+g2a69949bd.d20260417 ``` 这里 `vLLM` 的关键点是: - 你现在用的是**源码树运行** - 不是一个干净上游 wheel - 因为 `gfx906/Z100L` 的兼容性修正都在这棵树里 ## 8. 第五步:做最小成功验证(Gemma 4 E2B) 这是最适合先验证“整条链路已经通了”的模型。 ### 启动 API 服务 ```bash source /home/muyi/envs/dtk26-z100l.sh source /home/muyi/venvs/torch-gpu-z100l/bin/activate export PYTHONPATH=/usr/local/hyhal/share/amd_smi:/home/muyi/src/vllm${PYTHONPATH:+:$PYTHONPATH} export USE_LIBUV=0 cd /home/muyi/src/vllm python -m vllm.entrypoints.openai.api_server \ --host 0.0.0.0 \ --port 8000 \ --model /home/muyi/models/google/gemma-4-E2B-it \ --tokenizer /home/muyi/models/google/gemma-4-E2B-it \ --dtype float16 \ --gpu-memory-utilization 0.7 \ --max-model-len 512 \ --enforce-eager \ --attention-backend TRITON_ATTN ``` ### 另开一个终端验证 ```bash curl -s http://127.0.0.1:8000/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{ "model": "/home/muyi/models/google/gemma-4-E2B-it", "messages": [ {"role": "user", "content": "Say hello in exactly five words."} ], "temperature": 0.0, "max_tokens": 16 }' ``` 本机当前实测返回过: ```json { "choices": [ { "message": { "role": "assistant", "content": "Hello, how are you today?" } } ] } ``` 这一步如果通过,说明: - 模型加载 - tokenizer - Triton attention - decode - API server 这整条用户路径已经成立。 ## 9. 第六步:跑 32GB 显卡上真正实用的 Gemma 4 26B AWQ 如果你的目标是“在 32GB Z100L 上尽量跑更大的 Gemma4”,那当前实际可用的是这个模型: ```text /home/muyi/models/cyankiwi/gemma-4-26B-A4B-it-AWQ-4bit ``` ### 方式 A:最小 smoke test 直接运行: ```bash source /home/muyi/envs/dtk26-z100l.sh source /home/muyi/venvs/torch-gpu-z100l/bin/activate export PYTHONPATH=/usr/local/hyhal/share/amd_smi:/home/muyi/src/vllm${PYTHONPATH:+:$PYTHONPATH} export USE_LIBUV=0 python /home/muyi/docker-build/z100l-gemma4/smoke-gemma4-26b-awq.py ``` 本机最近一次复测结果: ```text LOAD_S=107.586 GEN_S=3.015 TOKENS_OUT=32 OUT_TPS=10.614 ``` 这个结果已经说明当前 host 侧 baseline 没回退。 ### 方式 B:启动 API 服务 ```bash source /home/muyi/envs/dtk26-z100l.sh source /home/muyi/venvs/torch-gpu-z100l/bin/activate export PYTHONPATH=/usr/local/hyhal/share/amd_smi:/home/muyi/src/vllm${PYTHONPATH:+:$PYTHONPATH} export USE_LIBUV=0 cd /home/muyi/src/vllm python -m vllm.entrypoints.openai.api_server \ --host 0.0.0.0 \ --port 8000 \ --model /home/muyi/models/cyankiwi/gemma-4-26B-A4B-it-AWQ-4bit \ --tokenizer /home/muyi/models/cyankiwi/gemma-4-26B-A4B-it-AWQ-4bit \ --dtype float16 \ --gpu-memory-utilization 0.82 \ --max-model-len 512 \ --enforce-eager \ --attention-backend TRITON_ATTN ``` 然后测试: ```bash curl -s http://127.0.0.1:8000/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{ "model": "/home/muyi/models/cyankiwi/gemma-4-26B-A4B-it-AWQ-4bit", "messages": [ {"role": "user", "content": "Say hello in exactly five words."} ], "temperature": 0.0, "max_tokens": 32 }' ``` ## 10. 当前已经验证过的结果 截至本文写作时,这台机器上已经验证过这些结果: ### Gemma 4 E2B - `vLLM` 可正常启动 - API 请求可正常返回 - 输出内容正确 ### Gemma 4 26B AWQ 4bit - 单卡 `32GB Z100L` 可运行 - host 侧短输出实测约 `10.6 tok/s` - 之前已验证过最大 prompt 长度约 `21967` tokens 这里要特别注意: - 这个 `21967` 是这套 patched host 路线的验证结果 - 不是任意机器、任意镜像、任意 `vLLM` 版本都自动成立 ## 11. 为什么这套方法能跑通 一句话概括: **不是把海光底层换掉,而是保留海光 DTK,尽量把上层拉回通用的 PyTorch + vLLM 路线。** 具体来说: - 底层继续用 `DTK/HIP/HSA` - PyTorch 用自编的 `2.9.1` 分支 - vLLM 用源码树版本 - 对 `gfx906/Z100L` 做少量必要兼容 真正关键的点主要是: - `gfx906` 下的 Triton attention / decode 兼容 - `Gemma4 + compile` 的错误区间 containment - `USE_LIBUV=0` - 不走 Docker 主路径 ## 12. 已知坑 ### 坑 1:不要默认以为 `/opt/rocm` 可用 这台机器不是标准 AMD ROCm 布局。 必须走 `/opt/dtk-26.04`,而且要先 `source /home/muyi/envs/dtk26-z100l.sh`。 ### 坑 2:不要直接装一个干净的上游 vLLM wheel 就指望能跑 当前可运行的是: - `/home/muyi/src/vllm` - 配合本地补丁 如果你换成干净 wheel,大概率会直接回到不能跑的状态。 ### 坑 3:不要把 Docker 路线当主入口 当前 Docker 镜像已经能打包和导出,但**容器内完整 vLLM 推理仍然有已知阻塞**。 现在真正可用的路线是 **host 直接运行**。 ### 坑 4:看到这条 warning 不要立刻误判失败 ```text rocblaslt warning: No paths matched /opt/dtk-26.04/lib/hipblaslt/library/*gfx906*co ``` 当前它是一个已知 warning,不等于这次启动一定失败。真正要看的是: - 模型能否加载完 - API 是否能返回 - 输出是否正确 ## 13. 推荐的最小日常启动模板 如果你只是想“以后直接照着跑”,最小模板就是: ```bash source /home/muyi/envs/dtk26-z100l.sh source /home/muyi/venvs/torch-gpu-z100l/bin/activate export PYTHONPATH=/usr/local/hyhal/share/amd_smi:/home/muyi/src/vllm${PYTHONPATH:+:$PYTHONPATH} export USE_LIBUV=0 cd /home/muyi/src/vllm python -m vllm.entrypoints.openai.api_server \ --host 0.0.0.0 \ --port 8000 \ --model /home/muyi/models/google/gemma-4-E2B-it \ --tokenizer /home/muyi/models/google/gemma-4-E2B-it \ --dtype float16 \ --gpu-memory-utilization 0.7 \ --max-model-len 512 \ --enforce-eager \ --attention-backend TRITON_ATTN ``` 如果你想跑更大的 26B AWQ,就把模型路径换成: ```text /home/muyi/models/cyankiwi/gemma-4-26B-A4B-it-AWQ-4bit ``` 并把: - `--gpu-memory-utilization` 改成 `0.82` ## 14. 最后一句 这套教程最重要的不是“某个命令行参数怎么写”,而是: **Z100L 现在已经证明可以沿着更通用的 PyTorch + vLLM 路线运行 Gemma4,而不是只能依赖海光私有 demo。** 如果后面继续升级 `vLLM`、继续上更大的模型、继续做 4 卡部署,应该都基于这条 host 侧成功基线继续推进,而不是回到 Docker 或 vendor demo 路线。 ## 以下是海光卡有群,有兴趣的加入 ![attachmentId-image.png](https://forum.sourcefind.cn/api-forum/file/RedirectImage?path=20260421/1776730183098_1776729680164.png)
全部评论(7)
只看楼主
M
muyi_muyi
楼主
4楼
attachmentId-image.png
8/11
M
muyi_muyi
楼主
3楼
attachmentId-image.png
7/1
L
lxlhxp
回复 @muyi_muyi
二维码过期了
8/5
M
muyi_muyi
回复 @lxlhxp
attachmentId-image.png
8/11
C
cnuo
2楼
二维码已过期:leiben:emoji
4/29
C
cnuo
回复 @muyi_muyi
感谢:baoquan:emoji
5/3
网
网友lj1Ocw
1楼
你的方案是有道理的:qiang:emoji,把vllm里的pytorch替换成dtk版的pytorch,pytorch的版本在2.9及其以上就具备跑vllm0.19的基础条件,vllm官网现在也在做公版算子库,还可以进一步优化算子的性能。
4/21
没有更多内容了
--
楼主
Level.6
0 帖子
楼主热帖
暂无数据