好的,以下是完整的**阶段二: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](https://huggingface.co/Qwen/Qwen3-30B-A3B/discussions/12) *** ## 第一步:安装 Miniconda 环境 ```bash # 下载 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](https://vllm.hyper.ai/docs/0.8.x/getting-started/installation/) ```bash # 配置清华 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](https://blog.csdn.net/xiezhipu/article/details/145956308) ```bash 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](https://blog.csdn.net/qq_43692950/article/details/150066140) ```bash 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 | *** ## 第五步:验证服务是否启动成功 ```bash # 等待约 60-120 秒模型加载完毕 tail -f /var/log/vllm.log # 看到如下日志说明启动成功: # INFO: Uvicorn running on http://0.0.0.0:8000 # 查看已加载模型 curl http://localhost:8000/v1/models ``` *** ## 若显存仍然不足的备用方案 ```bash # 进一步降低上下文长度和并发 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') "