6.0 KiB
好的,以下是完整的阶段二:vLLM + Qwen3-30B-A3B 量化部署方案。
阶段二:vLLM 部署 Qwen3-30B-A3B
内存约束分析
你的服务器限制:16GB 显存 + 16GB 内存。各量化版本的显存需求:
| 量化格式 | 模型大小 | 显存需求(含KV Cache) | 能否单卡运行 |
|---|---|---|---|
| BF16 原版 | ~60GB | ~65GB | ❌ |
| FP8 | ~30GB | ~32GB | ❌ |
| INT8 (GPTQ-Int8) | ~30GB | ~32GB | ❌ |
| AWQ INT4 | ~16GB | ~17-18GB | ⚠️ 需调参 |
| W4A16 (GPTQ INT4) | ~15GB | ~16GB | ✅ 推荐 |
结论:必须使用 INT4 量化版本,且需要配合 --cpu-offload-gb 将少量溢出部分卸载到内存 。 huggingface
第一步:安装 Miniconda 环境
# 下载 Miniconda(走代理)
export http_proxy=http://192.168.233.206:7899
export https_proxy=http://192.168.233.206:7899
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh
bash /tmp/miniconda.sh -b -p /opt/miniconda3
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
# 初始化 bash
/opt/miniconda3/bin/conda init bash
echo 'export PATH="/opt/miniconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 3. 切换为清华 conda 源(避免后续因访问 Anaconda 官方源速度慢)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
# 创建 Python 3.11 环境(配合 CUDA 13.0)
conda create -n vllm python=3.11 -y
conda activate vllm
第二步:安装 vLLM(清华 pip 源)
CUDA 13.0 对应的 Driver 580,直接使用最新 vLLM 即可 : vllm.hyper
# 配置清华 pip 镜像(永久生效)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 安装 vLLM(清华源,无需代理)
pip install vllm
# 验证安装
python -c "import vllm; print(vllm.__version__)"
第三步:安装 ModelScope 并下载模型
国内使用 ModelScope 下载,速度远比 HuggingFace 快 : blog.csdn
pip install modelscope
# 下载 AWQ INT4 量化版(ModelScope 国内源,约 16GB)
python - <<'EOF'
from modelscope import snapshot_download
model_dir = snapshot_download(
'swift/Qwen3-30B-A3B-AWQ',
cache_dir='/data/models'
)
print(f"模型已下载至: {model_dir}")
EOF
模型存储路径约 16GB,确保
/data/models所在分区空间充足(你的/挂载点还有 467GB 可用)。
第四步:启动 vLLM 服务
由于 AWQ INT4 模型加载后约占 17GB,略超 16GB 显存,需要将约 2GB 溢出卸载到内存(CPU Offload) : blog.csdn
conda activate vllm
# 关键参数说明见下方
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True \
VLLM_USE_MODELSCOPE=True \
nohup vllm serve swift/Qwen3-30B-A3B-AWQ \
--host 0.0.0.0 \
--port 8000 \
--dtype float16 \
--gpu-memory-utilization 0.88 \
--max-model-len 8192 \
--cpu-offload-gb 2 \
--max-num-seqs 4 \
--enable-prefix-caching \
--served-model-name Qwen3-30B-A3B \
--trust-remote-code > /var/log/vllm.log 2>&1 &
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export VLLM_USE_MODELSCOPE=True
vllm serve swift/Qwen3-30B-A3B-AWQ \
--host 0.0.0.0 \
--port 8000 \
--dtype float16 \
--gpu-memory-utilization 0.90 \
--max-model-len 4096 \
--max-num-seqs 2 \
--cpu-offload-gb 2 \
--enforce-eager \
--disable-log-stats \
--served-model-name Qwen3-30B-A3B \
--trust-remote-code
echo "vLLM 已在后台启动,查看日志: tail -f /var/log/vllm.log"
参数说明
| 参数 | 值 | 原因 |
|---|---|---|
--gpu-memory-utilization |
0.92 |
充分利用 16GB 显存 |
--max-model-len |
8192 |
限制上下文长度以节省 KV Cache 显存 |
--cpu-offload-gb |
2 |
将 2GB 模型权重卸载到 16GB 内存(速度略降) |
--max-num-seqs |
4 |
低并发限制,节省显存 |
PYTORCH_CUDA_ALLOC_CONF |
expandable_segments:True |
防止显存碎片化 OOM |
第五步:验证服务是否启动成功
# 等待约 60-120 秒模型加载完毕
tail -f /var/log/vllm.log
# 看到如下日志说明启动成功:
# INFO: Uvicorn running on http://0.0.0.0:8000
# 查看已加载模型
curl http://localhost:8000/v1/models
若显存仍然不足的备用方案
# 进一步降低上下文长度和并发
vllm serve swift/Qwen3-30B-A3B-AWQ \
--max-model-len 4096 \
--cpu-offload-gb 4 \
--max-num-seqs 2 \
--gpu-memory-utilization 0.90 \
...(其余参数同上)
✅ 确认 curl http://localhost:8000/v1/models 返回模型信息后,告诉我,我将给出阶段三:完整的 API 调用方式(OpenAI 兼容接口、Python SDK、流式输出等)。
1. 彻底删除旧环境
conda deactivate conda env remove -n vllm -y
2. 创建新环境
conda create -n vllm python=3.11 -y conda activate vllm
3. 设置清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
5. 安装 torch(走代理)
export http_proxy=http://192.168.233.206:7899
export https_proxy=http://192.168.233.206:7899
pip install torch torchvision torchaudio
--index-url https://download.pytorch.org/whl/cu128
--no-cache-dir
6. 安装 vllm 和 modelscope(关闭代理走清华源)
unset http_proxy https_proxy pip install vllm modelscope --no-cache-dir
7. 一次性验证
python -c " import torch print('CUDA:', torch.cuda.is_available()) print('GPU:', torch.cuda.get_device_name(0)) import vllm print('vllm:', vllm.version) import modelscope print('modelscope:', modelscope.version) print('ALL OK') "