学习来源: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
注意:这个终端会被服务占死,启动日志会经过这几个阶段:
Resolved architecture: Gemma4ForConditionalGeneration--- 架构解析Loading safetensors checkpoint shards: 100% Completed--- 权重加载Loading weights took 8.49 seconds--- 15 GiB 权重进显存Cache the graph of compile range (1, 2048) for later use--- torch.compile 在做 cudagraph capture,需要 1--3 分钟,耐心等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重定向到本地 vLLMANTHROPIC_API_KEY/ANTHROPIC_AUTH_TOKEN:vLLM 不校验认证,填dummy即可- 三个
*_MODEL:让 Claude Code 把不同档位的请求都路由到 Gemma 4