这是目前最主流的部署方式之一。 使用 Docker 部署 Qwen2.5-72B 能实现环境隔离、一键部署和便捷管理。结合 vLLM 推理后端,可以充分发挥您 4 张 RTX 3090 的性能。

核心部署方案:vLLM 官方镜像 + 多 GPU 支持

最推荐使用 vLLM 官方预构建的 Docker 镜像,它原生支持多 GPU 张量并行,与 OpenClaw 的 OpenAI 兼容 API 完美对接。

详细部署步骤

1. 前提条件
  • 系统:已安装 Docker 和 NVIDIA Container Toolkit(确保 docker run --gpus all 能正常工作)。
  • 显存:4 张 RTX 3090(共 96GB),足够运行 Qwen2.5-72B 的 INT4 量化版本。
  • 磁盘:至少 150GB 可用空间(用于镜像和模型缓存)。
  • 内存:建议 64GB 以上系统内存。
2. 一键启动命令(针对 4 张 GPU)

执行以下命令,它将从 Hugging Face 自动下载模型并启动服务:

docker run -d \
  --name qwen72b \
  --gpus all \
  -e HTTP_PROXY="http://127.0.0.1:19019" \
  -e HTTPS_PROXY="http://127.0.0.1:19019" \
  --network=host \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  vllm/vllm-openai:latest \
  --model Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4 \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.9 \
  --max-model-len 8192 \
  --served-model-name qwen72b

关键参数说明

  • --tensor-parallel-size 4:将模型均匀分布到 4 张 GPU 上,这是实现多卡推理的核心。
  • --gpu-memory-utilization 0.9:设定 GPU 显存利用率目标为 90%,为系统留出缓冲。
  • --max-model-len 8192:设置最大上下文长度,可根据需要调整(最高支持 32K)。
  • --served-model-name qwen72b:指定服务对外暴露的模型名称,OpenClaw 将使用此名称连接。
3. 验证服务是否正常运行
# 查看容器日志
docker logs -f qwen72b
# 等待出现 “Uvicorn running on http://0.0.0.0:8000” 等字样

# 测试 API 接口
curl http://localhost:8000/v1/models

如果返回包含 "id": "qwen72b" 的 JSON 信息,说明服务已就绪。

4. 在 OpenClaw 中配置连接

在 OpenClaw 的模型设置中,进行如下配置:

  • 模型类型:选择 “OpenAI API”
  • API Base URL:填写 http://localhost:8000/v1
  • 模型名称:填写 qwen72b(与 --served-model-name 参数一致)
  • API Key:可留空或任意填写(vLLM 默认无需密钥)

配置完成后,OpenClaw 即可将 Qwen2.5-72B 作为其“大脑”进行复杂的自动化任务。

高级配置与优化建议

  1. 使用 Docker Compose(生产环境推荐):便于管理环境变量、数据卷和多个服务。
  2. 挂载本地模型文件加速启动:如果已提前下载好模型权重,可以将其挂载到容器内,避免每次启动都重新下载。
  3. 性能调优:根据实际负载调整 --max-num-seqs(最大并发数)和 --gpu-memory-utilization 参数。
  4. 注意模型版本:确保拉取的镜像版本与 vLLM 版本兼容。最新版镜像通常支持最新的模型和特性。

1.升级cuda

wget https://developer.download.nvidia.com/compute/cuda/13.2.1/local_installers/cuda_13.2.1_595.58.03_linux.run
sudo sh cuda_13.2.1_595.58.03_linux.run

2.下载权重

hg下载

# 进入锁文件目录
cd /root/.cache/huggingface/hub/.locks/models--Qwen--Qwen2.5-72B-Instruct-GPTQ-Int4/

# 查看锁文件
ls -la

# 删除所有相关的锁文件
rm -f *.lock

# 回到blobs目录
cd /root/.cache/huggingface/hub/models--Qwen--Qwen2.5-72B-Instruct-GPTQ-Int4/blobs

# 查看不完整文件
ls -lh *.incomplete

# 删除所有不完整文件
rm -f *.incomplete

hf download Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4 

有点慢

wget 下载

#!/bin/bash

# =================================================================
# 下载 Qwen2.5-72B-Instruct-GPTQ-Int4 模型的脚本
# 支持断点续传,自动处理 11 个分片文件
# 使用方法: ./download_qwen.sh
# =================================================================
export https_proxy=http://127.0.0.1:19019
export http_proxy=http://127.0.0.1:19019
# 设置变量
REPO="Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4"
# 使用国内镜像站,如需原站可改为: BASE_URL="https://huggingface.co"
BASE_URL="https://hf-mirror.com"

# 创建下载目录
DOWNLOAD_DIR="Qwen2.5-72B-Instruct-GPTQ-Int4"
mkdir -p "$DOWNLOAD_DIR"
cd "$DOWNLOAD_DIR" || exit 1

echo "=============================================="
echo "开始下载 Qwen2.5-72B-Instruct-GPTQ-Int4 模型"
echo "保存目录: $(pwd)"
echo "=============================================="
echo ""

# 函数:下载文件(支持断点续传)
download_file() {
    local filename="$1"
    local url="$BASE_URL/$REPO/resolve/main/$filename"
    
    echo "正在下载: $filename"
    
    if [[ -f "$filename" ]]; then
        local file_size=$(stat -c%s "$filename" 2>/dev/null || stat -f%z "$filename" 2>/dev/null)
        echo "  文件已存在,大小: $((file_size / 1024 / 1024)) MB"
        
        # 检查文件是否完整(可选,大文件可能耗时)
        # 这里只做简单存在性检查,wget 会自动处理续传
    fi
    
    # 使用 wget 下载,-c 参数支持断点续传
    # -t 3: 重试3次
    # -T 30: 超时30秒
    # -c: 断点续传
    # --no-check-certificate: 跳过证书检查(解决SSL问题)
    wget -c -t 3 -T 30 --no-check-certificate "$url"
    
    if [[ $? -eq 0 ]]; then
        echo "  ✓ 下载完成: $filename"
    else
        echo "  ✗ 下载失败: $filename"
        echo "  手动下载链接: $url"
    fi
    
    echo ""
}

# 1. 先下载配置文件(小文件,验证连接)
echo "下载配置文件..."
echo "------------------"
config_files=(
    "config.json"
    "tokenizer.json"
    "tokenizer_config.json"
    "generation_config.json"
    "model.safetensors.index.json"
    "special_tokens_map.json"
    "README.md"
)

for config_file in "${config_files[@]}"; do
    download_file "$config_file"
done

echo ""
echo "下载模型分片文件..."
echo "=================="

# 2. 下载 11 个模型分片文件
for i in {1..11}; do
    # 格式化数字为 5 位数,如 00001
    num=$(printf "%05d" $i)
    filename="model-${num}-of-00011.safetensors"
    
    download_file "$filename"
done

# 3. 下载其他可能的大文件
other_files=(
    "model-00001-of-00011.safetensors.index.json"
    "pytorch_model.bin.index.json"
)

for other_file in "${other_files[@]}"; do
    if [[ ! -f "$other_file" ]]; then
        download_file "$other_file"
    fi
done

echo "=============================================="
echo "下载完成!"
echo ""
echo "文件校验:"
echo "1. 检查文件数量:"
ls -la *.safetensors *.json 2>/dev/null | wc -l
echo ""
echo "2. 检查文件大小:"
du -sh ./*.safetensors 2>/dev/null | head -5
echo ""
echo "3. 如果需要重新下载某个文件,请删除该文件后重新运行此脚本"
echo "=============================================="

运行

docker run -d \
  --name qwen72b \
  --gpus all \
  -e HTTP_PROXY="http://127.0.0.1:19019" \
  -e HTTPS_PROXY="http://127.0.0.1:19019" \
  --network=host \
  -v ~/Qwen2.5-72B-Instruct-GPTQ-Int4:/models/qwen72b-local \
  vllm/vllm-openai:latest \
  --model /models/qwen72b-local \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.9 \
  --max-model-len 8192 \
  --served-model-name qwen72b

验证

在火狐安装page assist插件,使用openai的api兼容。
在这里插入图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐