docker环境部署 Qwen2.5-72B
·
这是目前最主流的部署方式之一。 使用 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 作为其“大脑”进行复杂的自动化任务。
高级配置与优化建议
- 使用 Docker Compose(生产环境推荐):便于管理环境变量、数据卷和多个服务。
- 挂载本地模型文件加速启动:如果已提前下载好模型权重,可以将其挂载到容器内,避免每次启动都重新下载。
- 性能调优:根据实际负载调整
--max-num-seqs(最大并发数)和--gpu-memory-utilization参数。 - 注意模型版本:确保拉取的镜像版本与 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兼容。
更多推荐



所有评论(0)