【Hello-ROCm】vLLM 跑通 Gemma4-E4B

学习来源:Datawhale × AMD AI 学习中心 Day1-2 实操任务

第一步:确认云环境和模型目录

1.1 检查 GPU

bash 复制代码
amd-smi

输出(节选):

复制代码
| AMD-SMI 26.2.2+e1a6bc5663    amdgpu version: 6.14.14  ROCm version: 7.2.1
| VBIOS version: 00162356
| 0000:43:00.0    AMD Radeon Graphics | 0 %  34 °C  0  8/241 W |
|   0     0     N/A   N/A            | 0 %  20.0 %   26/49136 MB |

"AMD Radeon Graphics" 不是型号 ------VBIOS 没填产品名时的 fallback。容量看 Mem-Usage 第二列:49136 MB ≈ 48 GiB,功耗上限 241W

真实型号要靠 lspci -nn -s 43:00.0 拿 PCI Device ID 推断。我这里候选是 W7900(RDNA3, 48 GiB GDDR6, gfx1100)。注意 W7900 是工作站卡,出现在云上有点奇怪,但容量+功耗都对得上。

1.2 验证 PyTorch 能看到 GPU

bash 复制代码
python -c "import torch; print('PyTorch:', torch.__version__); print('ROCm available:', torch.cuda.is_available()); print('Device:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'N/A')"

预期:

复制代码
PyTorch: 2.x.x+rocm7.2.1
ROCm available: True
Device: AMD Radeon Graphics

ROCm available: True 这一行是金标准,看到它就可以放心往下走。


第二步:下载 Gemma 4 模型

4.1 切国内 pip 源(加速)

bash 复制代码
pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple/

4.2 装 ModelScope

ModelScope 是阿里达摩院的国内开源模型社区,服务器在国内,下载比 HuggingFace 稳定得多。

bash 复制代码
pip install modelscope

4.3 下载 Gemma 4-E4B-it

bash 复制代码
modelscope download --model google/gemma-4-E4B-it --cache_dir "./models"

4.4 验证

bash 复制代码
ls -lh ./models/google/gemma-4-E4B-it/

关键文件 model.safetensors 应该 15G 左右。模型下载齐了,"原料"就位。

第三步:启动 vLLM 服务

5.1 更新 vLLM

容器自带的 vLLM 往往版本太旧,装最新版才能跑 Gemma 4

bash 复制代码
uv pip uninstall torchvision torchaudio
uv pip install vllm torchvision torchaudio \
  --no-cache \
  --index-url https://mirrors.aliyun.com/pypi/simple/ \
  --extra-index-url https://wheels.vllm.ai/rocm/ \
  -U

5.2 启动 vLLM 服务

bash 复制代码
vllm serve ./models/google/gemma-4-E4B-it/ --served-model-name gemma-4-E4B-it

注意:这个终端会被服务占死,启动日志会经过这几个阶段:

  1. Resolved architecture: Gemma4ForConditionalGeneration --- 架构解析
  2. Loading safetensors checkpoint shards: 100% Completed --- 权重加载
  3. Loading weights took 8.49 seconds --- 15 GiB 权重进显存
  4. Cache the graph of compile range (1, 2048) for later use --- torch.compile 在做 cudagraph capture,需要 1--3 分钟,耐心等
  5. Application startup complete. / Uvicorn running on http://0.0.0.0:8000 --- 服务就绪

第一次启动比较慢是因为要编译 cuda graph。只要日志还在滚动就是正常

5.3 显存不足怎么办

把最大上下文长度收一收:

bash 复制代码
vllm serve ./models/google/gemma-4-E4B-it/ \
  --served-model-name gemma-4-E4B-it \
  --max-model-len 8192

不够就降到 4096。48 GiB 显卡一般能跑默认 131072 的 Gemma 4,但开多个会话容易 OOM,稳一点用 8192


第四步:打开新终端对话测试

回到 JupyterLab,新开一个终端(原来的那个被 vllm 服务占着):

bash 复制代码
vllm chat --url http://localhost:8000/v1 --model gemma-4-E4B-it

进入交互模式后输入:

复制代码
你是谁,你能做什么

模型回答出来,就说明 Gemma 4 在 AMD ROCm 容器里跑通了。

常见报错httpcore.ConnectError: [Errno 111] Connection refused ------ vllm chat 是客户端,需要先有服务在跑。回第一个终端看 Application startup complete. 出现没,没出现就等。

进阶玩法:把 Gemma 4 接进 Claude Code

任务四步只到"对话测试"为止。但既然 vLLM 0.23.0 已经原生支持 Anthropic Messages API 兼容端点/v1/messages),完全可以让本地 Claude Code 客户端通过 ANTHROPIC_BASE_URL 指向这个 vLLM 实例------等于让 Claude Code 用 Gemma 4 当后端。

8.1 vLLM 端要开 tool-calling

bash 复制代码
tmux new -s vllm -d 'vllm serve ./models/google/gemma-4-E4B-it/ \
  --served-model-name gemma-4-E4B-it \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4 \
  --host 0.0.0.0 \
  --port 8000 \
  --max-model-len 32768 \
  --enforce-eager'

关键 flag 说明

  • --enable-auto-tool-choice:开启 tool calling。不开的话,Claude Code 发过来的 tool_use 会被模型当文本原样吐出来,不真执行。
  • --tool-call-parser gemma4:vLLM 内置的 Gemma 4 parser(源码目录里有,文档没列)。备选 hermes(通用)、pythonic(Pythonic 风格)。
  • --max-model-len 32768:从默认的 131072 收口,预防 KV cache OOM。

8.2 Claude Code 端设环境变量

bash 复制代码
export ANTHROPIC_BASE_URL=http://localhost:8000
export ANTHROPIC_API_KEY=dummy
export ANTHROPIC_AUTH_TOKEN=dummy
export ANTHROPIC_DEFAULT_HAIKU_MODEL=gemma-4-E4B-it
export ANTHROPIC_DEFAULT_SONNET_MODEL=gemma-4-E4B-it
export ANTHROPIC_DEFAULT_OPUS_MODEL=gemma-4-E4B-it

claude

四个 env var 的作用

  • ANTHROPIC_BASE_URL:把 Claude Code 的请求从 api.anthropic.com 重定向到本地 vLLM
  • ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN:vLLM 不校验认证,填 dummy 即可
  • 三个 *_MODEL:让 Claude Code 把不同档位的请求都路由到 Gemma 4
相关推荐
DevOps老兵18 小时前
AI Infra实战05:用Helm在K8s中部署vLLM,从安装到压测全流程
人工智能·kubernetes·helm·vllm·大模型推理·ai infra
方方洛2 天前
vllm教程-02-核心原理
人工智能·算法·vllm
苏子寒3 天前
Nano-VLLM全代码解析笔记(10)-GemmaRMSNorm和MRoPE
笔记·机器学习·ai·nlp·vllm
缘友一世5 天前
GLM-5.3-NVFP4 部署实战系列[八]启动加速:编译缓存挂载与 CUDA 图捕获裁剪,首启 8 分钟 → 3 分钟
vllm·glm5.3 nvfp4·sm80
方方洛5 天前
vllm教程-00-前言与导读
人工智能·算法·vllm
缘友一世5 天前
GLM-5.3-NVFP4 部署实战系列[二]Docker 镜像选择与补丁镜像构建:纯 Python overlay,不重编一行 CUDA
python·docker·容器·vllm
缘友一世5 天前
GLM-5.3-NVFP4 部署实战系列[七]正确的部署脚本与一键部署:deploy.sh参数拆解
vllm·glm5.3 nvfp4·sm80
JAI科研5 天前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
缘友一世5 天前
GLM-5.3-NVFP4 部署实战系列[四]问题深拆①:sm80 没有稀疏 MLA 注意力后端怎么办
vllm·glm5.3 nvfp4·sm80