vllm 启动模型
# nvidia 驱动安装
sudo apt install gcc g++ make
wget https://cn.download.nvidia.com/tesla/550.163.01/NVIDIA-Linux-x86_64-550.163.01.run
sudo sh NVIDIA-Linux-x86_64-550.163.01.run
# nvidia-container-toolkit 安装
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
sudo sh cuda_12.4.1_550.54.15_linux.run
apt-get install -y nvidia-container-toolkit
apt-get install -y nvidia-fabricmanager
# python环境
bash https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
conda -V
conda create -n vllm python=3.12 -y
conda activate vllm
# 模型下载
pip install modelscope
modelscope download --model deepseek-ai/DeepSeek-R1 --local_dir /mnt/nvme01/models/deepseek671
modelscope download --model BAAI/bge-m3 --local_dir /mnt/nvme01/models/bge-m3
modelscope download --model BAAI/bge-reranker-base --local_dir /mnt/nvme01/models/bge-reranker-base
# 安装依赖
# 然后到PyTorch 官网(https://pytorch.org/get-started/locally/)查看相符的安装命令,执行
pip install torch==2.1.2 torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple --extra-index-url https://download.pytorch.org/whl/cu118
# 安装成功后,验证PyTorch 是否正确调用 GPU
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
# 返回类似True NVIDIA GeForce RTX 4090就代表安装成功了
#安装显卡状态查看工具nvitop
pip install nvitop
nvitop
# vllm 安装
#安装vllm, pip install "vllm[triton]" 命令中的[triton]代表我们要安装VLLM的可选组件triton。它是OpenAI 开源的深度学习算子编译框架,vLLM 使用它来实现高性能的「Token 并行生成机制」,使VLLM在运行时性能会得到显著提升,推荐安装
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
# 验证是否安装成功
python -c "import vllm; print(vllm.__version__)" #如果打印出VLLM相关的东西,则代表安装成功了
# vllm 启动模型
# 模型参数详解
python -m vllm.entrypoints.openai.api_server #启动 vLLM 的 OpenAI API 服务接口,符合 OpenAI API 格式的调用方式
--model /home/xx/model/deepseek # 模型路径,可以使用本地路径,或 huggingface等远程路径。必填
--model-name mydeepseek # 最定义模型名称。用户或客户端需要指定模型名,所以你必须提前定义清楚它叫什么。非必填(默认为模型自己的名称)
--tokenizer /home/xx/model/deepseek # 指定分词器的位置或名称,模型文件结构规范的情况下可以不填。它的作用是防止模型文件夹结构不规范导致报错。日常不需要使用
--dtype float16 # 张量精度。支持auto(默认值。vLLM 会根据模型配置自动判断 dtype)、float32(单精度浮点数,最精确但显存占用大)、float16(半精度浮点数,推理快,占用小,当前主流推荐)等等参数。非必填(默认auto)
--port 8088 # 指定模型启动时占用的端口。最好必填
--host 0.0.0.0 # 指定模型启动时的地址,设为 0.0.0.0 允许所有 IP 访问。最好必填
--max-model-len 4068 # 最大输入 + 输出 token 长度。需模型支持。非必填。默认为模型的默认值
--gpu-memory-utilization 0.8 # 使用 GPU 显存的比例。0为最小,1为最大。(1.0=100%,0.1=%10)。调小可以保留一部分显存给系统或其他程序,防止OOM(Out Of Memory显存溢出)。非必填(默认0.9)
--tensor-parallel-size 2 # 用于多 GPU 并行推理。1 表示单卡运行(比如我的机器有2张显卡,就可以设置为2)。非必填(默认为1)
--swap-space 4 # 为内存不足时预留的 swap 空间(“交换空间”Swap Space)(单位 GB),在显存爆掉时能缓解崩溃。非必填(默认为4)
--disable-log-requests False # 是否禁用日志输出请求内容(保护隐私时可加)。非必填(默认为False)
--max-num-batched-tokens 4068 # 每一批请求最多允许的 token 总数。这个数越大,吞吐量高但延迟可能变大;越小,响应快但效率低。非必填(默认为自动)
--max-num-seqs 6 # 最大同时处理的请求数量,用于多并发的情况。非必填(默认为自动)
--seed 42 # 控制生成内容的一致性,设置固定值可复现生成(同样输入,生成的输出可能会不一样。但是如果设置了比如--seed 42,则会出现回答与之前完全一致的情况出现)。非必填(默认为随机)
--trust-remote-code False # 如果你从 HuggingFace 加载模型并需要运行自定义模型代码(如 LLaVA),必须加此参数。非必填(默认为False)
# vllm 启动 deepseek
nohup python -m vllm.entrypoints.openai.api_server \
--model /mnt/nvme01/models/deepseek671 \
--served-model-name deepseek14 \
--dtype float16 \
--port 8000 \
--host 0.0.0.0 \
--max-model-len 4068 \
--gpu-memory-utilization 0.8 \
--tensor-parallel-size 8 \
--swap-space 8 \
--max-num-batched-tokens 4068 \
--max-num-seqs 6 &
nohup python -m vllm.entrypoints.openai.api_server \
--model="/mnt/nvme01/models/DeepSeek-R1-Distill-Qwen-32B" \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.88 \
--dtype half \
--served-model-name "DeepSeek-R1-Distill-Qwen-32B" \
--host 0.0.0.0 \
--port 8000 --max-model-len 20480 \
--chat-template /root/soft/deepseek_r1.jinja &
# vllm启动Embedding模型bge-m3
CUDA_VISIBLE_DEVICES=0 nohup python -m vllm.entrypoints.openai.api_server \
--model="/mnt/nvme01/models/bge-m3" \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.1 \
--dtype half \
--served-model-name "bge-m3" \
--host 0.0.0.0 \
--port 8001 --max-model-len 4096 &
# vllm启动Reranker模型bge-reranker-base
CUDA_VISIBLE_DEVICES=1 nohup python -m vllm.entrypoints.openai.api_server \
--model="/mnt/nvme01/models/bge-reranker-base" \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.1 \
--dtype half \
--served-model-name "bge-reranker-base" \
--host 0.0.0.0 \
--port 8002 &
# vllm启动Qwen3
#下载模型
modelscope download --model Qwen/Qwen3-235B-A22B --local_dir /mnt/nvme02/models/Qwen3-235B-A22B
#启动模型
nohup python -m vllm.entrypoints.openai.api_server \
--model /mnt/nvme02/models/Qwen3-235B-A22B \
--served-model-name qwen3 \
--tensor_parallel_size 8 \
--host 0.0.0.0 \
--port 8004 \
--gpu-memory-utilization 0.8 \
--max-num-seqs 16 \
--enable-expert-parallel \
--max-model-len 4096 \
--enable-reasoning \
--reasoning-parser deepseek_r1 &
dify 添加 vllm 启动的模型
vllm 同时跑多个模型资源调度可能会出现问题,看到网上有帖子说vgpu的方式可解决,待研究~
links
https://blog.csdn.net/qq_23435961/article/details/147981790