一、部署環境準備
1. 基礎環境要求
- 操作系統:Linux(推薦歐拉系統、Ubuntu 等)
- Python 版本:3.8 及以上
- 依賴工具:
pip
、git
、curl
- 可選依賴:
- GPU 環境:NVIDIA GPU(支持 CUDA 11.7+)、
nvidia-smi
- GPU 環境:NVIDIA GPU(支持 CUDA 11.7+)、
2. 依賴安裝腳本 install_vllm.sh
#!/bin/bash# 創建并激活虛擬環境
python3 -m venv vllm_env
source vllm_env/bin/activate# 安裝vLLM及其依賴
pip install vllm fastapi uvicorn huggingface_hub requestsecho "依賴安裝完成,請使用以下命令激活環境:"
echo "source vllm_env/bin/activate"
二、模型獲取與部署流程
1. 模型下載方法
方法 1:通過huggingface-cli
直接下載(推薦)
# 臨時設置國內鏡像加速(解決網絡限制)
export HF_ENDPOINT=https://hf-mirror.com# 下載模型到指定目錄
huggingface-cli download --resume-download \deepseek-ai/deepseek-llm-7b-chat \--local-dir /data/VLLM_MODE/deepseek-llm-7b-chat
方法 2:手動下載(網絡嚴格受限場景)
- 在可聯網機器下載模型:
# 本地機器執行 huggingface-cli download --resume-download \deepseek-ai/deepseek-llm-7b-chat \--local-dir ./deepseek-llm-7b-chat
- 通過
scp
上傳到服務器:# 本地機器執行,上傳到目標服務器 scp -r ./deepseek-llm-7b-chat root@服務器IP:/data/storage/data/VLLM_MODE/
2. 部署腳本準備(deploy_model.py
)
# deploy_model.py
import argparse
import os
import torch
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Dict, Any
from vllm import LLM, SamplingParamsapp = FastAPI(title="LLM Inference Service")# 全局 LLM 實例
llm = Noneclass InferenceRequest(BaseModel):prompt: strtemperature: float = 0.7max_tokens: int = 1024def main():global llmparser = argparse.ArgumentParser(description='Deploy LLM with vLLM')# 核心參數parser.add_argument('--model', type=str, required=True, help="模型本地路徑或Hugging Face倉庫ID")parser.add_argument('--port', type=int, default=8000, help="服務端口")parser.add_argument('--host', type=str, default='0.0.0.0', help="綁定主機地址(0.0.0.0允許外部訪問)")# 可選參數parser.add_argument('--cache-dir', type=str, default=None, help="模型緩存目錄")parser.add_argument('--tensor-parallel-size', type=int, default=1, help="GPU并行數量")parser.add_argument('--gpu-memory-utilization', type=float, default=0.9, help="GPU內存利用率(0.0-1.0)")parser.add_argument('--max-model-len', type=int, default=4096, help="模型最大序列長度")parser.add_argument('--use-cpu', action='store_true', help="強制使用CPU運行")parser.add_argument('--quantization', type=str, default=None, help="量化方式(如awq、gptq-4bit)")args = parser.parse_args()# 設置GPUif args.gpu:os.environ["CUDA_VISIBLE_DEVICES"] = args.gpuprint(f"Using GPUs: {args.gpu}")# 設置設備if args.use_cpu:device = "cpu"kwargs = {"dtype": torch.float32, # CPU不支持半精度}print("Running model on CPU")else:device = "cuda"kwargs = {}print(f"Running model on GPU with {args.tensor_parallel_size} devices")# 初始化LLMllm = LLM(model=args.model,tensor_parallel_size=args.tensor_parallel_size,trust_remote_code=args.trust_remote_code,download_dir=args.cache_dir, # 指定模型下載路徑**kwargs)# 啟動API服務print(f"Model {args.model} loaded. Serving on port {args.port}")import uvicornuvicorn.run(app, host="0.0.0.0", port=args.port)@app.post("/generate")
async def generate(request: InferenceRequest):try:sampling_params = SamplingParams(temperature=request.temperature,max_tokens=request.max_tokens,)outputs = llm.generate(request.prompt,sampling_params,)return {"prompt": request.prompt,"generated_text": outputs[0].outputs[0].text,}except Exception as e:raise HTTPException(status_code=500, detail=str(e))if __name__ == "__main__":main()
3. 啟動服務命令
python deploy_model.py \--model /VLLM_MODE/deepseek-llm-7b-chat \--cache-dir /VLLM_MODE \--port 8000 \
?啟動腳本:run?deepseek-llm-7b-chat 腳本 可下載多個模型運行 只需修改端口和GPU(GPU內容有限)
#!/bin/bash# 激活虛擬環境cd /vllm_env上級目錄
source vllm_env/bin/activate# 啟動API服務器
python deploy_model.py \--model /VLLM_MODE/deepseek-llm-7b-chat \--cache-dir /VLLM_MODE \--port 8000 \
三、常見問題與解決方案
1. 網絡連接問題
錯誤表現
- 提示 “Failed to establish a new connection: Network is unreachable”
- 模型下載停滯或無法克隆 GitHub 倉庫
解決方案
- 使用國內鏡像:
bash
# 永久設置Hugging Face鏡像(歐拉系統) echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc source ~/.bashrc # 立即生效
- GitHub 倉庫鏡像克隆:
bash
git clone https://gitclone.com/github.com/deepseek-ai/DeepSeek-VL
- 檢查防火墻:
bash
# 開放8000端口(允許外部訪問服務) firewall-cmd --add-port=8000/tcp --permanent firewall-cmd --reload
2. 模型下載相關問題
問題 1:模型未出現在指定目錄
- 原因:
huggingface_hub
默認將模型移動到~/.cache/huggingface/hub
- 解決:使用
local_dir
參數強制指定路徑(見 “模型下載方法 1”)
問題 2:下載中斷或文件損壞
- 解決:使用
--resume-download
斷點續傳:bash
huggingface-cli download --resume-download \deepseek-ai/deepseek-llm-7b-chat \--local-dir /data/storage/data/VLLM_MODE/deepseek-llm-7b-chat
3. GPU 相關錯誤
錯誤 1:CUDA 內存不足(CUDA out of memory)
- 表現:日志出現 “torch.OutOfMemoryError: CUDA out of memory”
- 解決:
bash
# 1. 釋放占用GPU的進程 nvidia-smi # 查看進程ID(PID) kill -9 <PID> # 終止占用進程# 2. 降低內存占用(可選) python deploy_model.py ... \--quantization awq \ # 使用量化--gpu-memory-utilization 0.95 # 提高內存利用率
錯誤 2:KV 緩存容量不足
- 表現:提示 “The model's max seq len is larger than KV cache”
- 解決:
bash
# 方法1:增加KV緩存容量 python deploy_model.py ... --gpu-memory-utilization 0.95# 方法2:降低最大序列長度 python deploy_model.py ... --max-model-len 1952
4. 服務啟動問題
問題 1:端口未啟動或無法訪問
- 原因:端口被占用、未指定
--host 0.0.0.0
或防火墻攔截 - 解決:
bash
# 檢查端口占用 netstat -tulpn | grep 8000# 更換端口或終止占用進程 python deploy_model.py ... --port 8001
問題 2:參數不識別(如 --host)
- 原因:腳本未定義該參數
- 解決:在
deploy_model.py
的argparse
部分添加參數(見腳本示例)
5. CPU 運行配置
- 適用場景:無 GPU 或 GPU 內存不足
- 啟動命令:
bash
python deploy_model.py \--model /data/storage/data/VLLM_MODE/deepseek-llm-7b-chat \--port 8000 \--use-cpu
- 注意:7B 模型需 32GB 以上內存,生成速度較慢
四、服務驗證與測試
檢查服務狀態:
bash
netstat -tulpn | grep 8000 # 確認端口監聽
發送測試請求:
bash
curl -X POST "http://localhost:8000/generate" \-H "Content-Type: application/json" \-d '{"prompt": "你好,請介紹一下自己", "temperature": 0.7, "max_tokens": 200}'
預期響應:
json
{"prompt": "你好,請介紹一下自己","generated_text": "我是DeepSeek-LLM-7B-Chat,是一款由深度求索(DeepSeek)開發的對話模型..." }
五、擴展說明
- 模型存儲路徑:建議將模型統一存儲在
/data/storage/data/VLLM_MODE
等大容量目錄 - 多模型部署:不同模型使用不同端口(如 8000、8001)避免沖突
- 性能優化:GPU 環境下優先使用量化(AWQ/INT4)和合理設置
gpu-memory-utilization
- 日志排查:啟動時添加
--log-level debug
查看詳細日志,便于定位問題