从零开始部署gemma4

操作系统配置指南:Ubuntu 22.04 LTS + NVIDIA 驱动 + Docker + vLLM

⚠️ 重要提示:本系统为带有定制驱动的 Ubuntu 22.04 LTS,务必锁定内核并关闭自动更新,避免驱动与内核版本不兼容导致系统故障。


🔐 一、内核锁定与自动更新管理

1.1 锁定当前内核版本

# 锁定当前运行的内核及头文件
sudo apt-mark hold linux-image-$(uname -r) linux-headers-$(uname -r)

# 验证锁定状态
apt-mark showhold

# (可选)取消锁定(注意:需使用与锁定时一致的包名)
sudo apt-mark unhold linux-image-$(uname -r) linux-headers-$(uname -r)

# 查看系统中已安装的内核包
dpkg --get-selections | grep linux-image

💡 建议:若需长期锁定所有通用内核包,可改为:

sudo apt-mark hold linux-generic linux-image-generic linux-headers-generic

1.2 关闭系统自动更新

# 查看 unattended-upgrades 服务状态
systemctl status unattended-upgrades

# 禁用自动更新配置(交互式)
sudo dpkg-reconfigure -p low unattended-upgrades
# 选择 "No" 以禁用

# 立即停止自动更新服务
sudo systemctl stop unattended-upgrades
sudo systemctl disable unattended-upgrades  # 建议同时禁用开机自启

📦 二、NVIDIA 驱动与 CUDA 安装

2.1 下载驱动安装包

# 下载 CUDA 13.2.0 + Driver 595.45.04 一体安装包
wget https://developer.download.nvidia.com/compute/cuda/13.2.0/local_installers/cuda_13.2.0_595.45.04_linux.run

2.2 安装驱动(推荐在文本模式下操作)

# 赋予执行权限
chmod +x cuda_13.2.0_595.45.04_linux.run

# 运行安装(建议添加 --silent 用于自动化,或交互式确认)
sudo sh cuda_13.2.0_595.45.04_linux.run

⚠️ 注意事项

  • 安装前建议关闭图形界面:sudo systemctl isolate multi-user.target
  • 若已安装旧驱动,建议选择 "Remove" 选项清理
  • 安装完成后执行 nvidia-smi 验证驱动状态

🐳 三、NVIDIA Container Toolkit 安装

# 配置 NVIDIA 容器仓库
distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
    sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 安装 toolkit
sudo apt update
sudo apt install -y nvidia-container-toolkit

# 生成 Docker 运行时配置(关键步骤)
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

🐋 四、Docker 安装与配置

4.1 安装 Docker

# 使用官方脚本一键安装
curl -fsSL https://get.docker.com | bash -s docker

# 将当前用户加入 docker 组(避免每次使用 sudo)
sudo usermod -aG docker $USER
# 生效组权限:重新登录或执行 newgrp docker

4.2 配置 Docker 守护进程

文件:/etc/docker/daemon.json

{
  "data-root": "/mnt/data0/docker",
  "runtimes": {
    "nvidia": {
      "path": "nvidia-container-runtime",
      "args": []
    }
  },
  "exec-opts": ["native.cgroupdriver=cgroupfs"]
}

4.3 配置 HTTP 代理(可选)

文件:/lib/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7897"
Environment="HTTPS_PROXY=http://127.0.0.1:7897"
Environment="NO_PROXY=localhost,127.0.0.1,.local"

4.4 配置端口转发(rinetd)

文件:/etc/rinetd.conf

# 格式:绑定地址 绑定端口 目标地址 目标端口
0.0.0.0 7897 10.70.200.20 7897
# 重启服务使配置生效
sudo systemctl restart rinetd
sudo systemctl restart docker

🚀 五、vLLM 镜像部署

5.1 拉取镜像

docker pull vllm/vllm-openai:gemma4-cu130

5.2 启动容器

docker run -d \
  --name gemma \
  --gpus all \
  --ipc=host \
  -v /mnt/data0:/data \
  -p 8000:8000 \
  -e TZ=Asia/Shanghai \
  vllm/vllm-openai:gemma4-cu130 \
  /data/models/gemma-4-31B-it \
  --served-model-name gemma4 \
  --tensor-parallel-size 4 \
  --max-model-len 262144 \
  --port 8000 \
  --reasoning-parser gemma4 \
  --enable-prefix-caching \
  --enable-auto-tool-choice \
  --tool-call-parser gemma4

💡 参数说明

  • --tensor-parallel-size 4:需 4 张 GPU 并行推理
  • --max-model-len 262144:支持超长上下文,需充足显存(建议 ≥80GB×4)
  • 模型路径 /data/models/gemma-4-31B-it 需提前下载并挂载

🧪 六、接口测试脚本

文件:test.sh

#!/bin/bash
# 用法:./test.sh "你的问题"

if [ -z "$1" ]; then
  echo "Usage: $0 \"Your prompt here\""
  exit 1
fi

# 使用 jq 安全构造请求体
JSON_DATA=$(jq -n \
  --arg content "$1" \
  --arg model "gemma4" \
  '{
    model: $model,
    messages: [{
      role: "user",
      content: [{ type: "text", text: $content }]
    }]
  }')

# 发送请求并解析响应
curl -s -X POST "http://172.21.19.29:8000/v1/chat/completions" \
  -H "Content-Type: application/json" \
  --data "$JSON_DATA" | jq -r '.choices[0].message.content'
# 赋予执行权限并测试
chmod +x test.sh
./test.sh "Hello, tell me about quantum computing"

🔍 附:常见问题排查

问题 检查命令 解决方案
驱动未加载 nvidia-smi 重新安装驱动,确认内核匹配
Docker 无法使用 GPU docker run --gpus all nvidia/cuda:12.0-base nvidia-smi 重装 nvidia-container-toolkit 并重启 Docker
容器启动失败 docker logs gemma 检查模型路径、显存、参数合法性
接口无响应 curl -v http://172.21.19.29:8000/health 确认容器运行状态、防火墙、代理配置

最佳实践:生产环境建议将上述步骤封装为 Ansible Playbook 或 Shell 脚本,并添加日志记录与回滚机制。

性能

  • genmma4:
    (EngineCore pid=269) INFO 04-27 17:03:11 [kv_cache_utils.py:1319] GPU KV cache size: 48,656 tokens
    (EngineCore pid=269) INFO 04-27 17:03:11 [kv_cache_utils.py:1324] Maximum concurrency for 262,144 tokens per request: 1.99x
  • qwen36:
    (EngineCore pid=410) INFO 04-27 13:09:41 [kv_cache_utils.py:1319] GPU KV cache size: 182,688 tokens
    (EngineCore pid=410) INFO 04-27 13:09:41 [kv_cache_utils.py:1324] Maximum concurrency for 262,144 tokens per request: 2.75x
posted @ 2026-04-27 18:37  evanbp  阅读(131)  评论(0)    收藏  举报