vllm同时开多个模型
vLLM 本身的设计是“一个进程服务一个模型”要实现“同时开多个模型”通常有两种主流做法。针对双卡 RTX 4090D (24GB x 2)的硬件配置有以下具体建议方法一启动多个独立的 vLLM 实例最推荐最稳定这是生产环境中最常用的方法。原理很简单就像你同时打开两个不同的软件一样你启动两个 vLLM 进程分别监听不同的端口并指定它们使用不同的显卡或切分同一张显卡的显存。1. 为什么推荐隔离性好模型 A 崩溃了不会影响模型 B。配置灵活你可以给模型 A 分配 1 张卡给模型 B 分配 1 张卡或者让它们共享显存。兼容性好不需要复杂的配置完全符合 vLLM 的原生逻辑。2. 在你的双卡 4090D 上如何操作假设你想同时跑Qwen-32B大模型和Qwen-7B小模型。步骤 1启动大模型占用双卡让大模型使用张量并行TP2横跨两张显卡。CUDA_VISIBLE_DEVICES0,1 vllm serve Qwen-32B-Instruct \ --tensor-parallel-size 2 \ --port 8000 \ --gpu-memory-utilization 0.85步骤 2启动小模型强制指定只用其中一张卡或者只用CPU不这很难注意如果大模型已经占满了两张卡小模型就没地方跑了。修正方案显存切分如果你必须同时跑你需要限制大模型的显存占用或者让它们“挤”在一起。但在双卡 4090 上最稳妥的策略是“一卡一模型”命令示例一卡一模型# 终端 1在显卡 0 上启动模型 A CUDA_VISIBLE_DEVICES0 vllm serve Qwen-7B-Instruct --port 8000 --gpu-memory-utilization 0.9 # 终端 2在显卡 1 上启动模型 B CUDA_VISIBLE_DEVICES1 vllm serve Llama-3-8B-Instruct --port 8001 --gpu-memory-utilization 0.9显卡 0跑Qwen-32B-Int4(需量化) 或Llama-3-8B。显卡 1跑Qwen-7B或其他小模型。方法二使用 LoRA 适配器高级玩法如果你指的“多个模型”是同一个基座模型的不同微调版本例如都是 Qwen-7B一个是“写作版”一个是“代码版”vLLM 支持LoRA 动态切换。原理只加载一个基座模型占用显存然后动态加载不同的 LoRA 权重占用极小显存。优点显存占用极低切换速度极快毫秒级。限制基座必须相同。你不能在一个进程中同时加载 Qwen 和 Llama。方法三单进程多模型不推荐/实验性虽然极少数脚本或旧版本尝试过在一个 Python 脚本里初始化多个LLM对象但这在 vLLM 中是不推荐的显存管理困难vLLM 启动时会预分配显存KV Cache多个实例在同一个进程中抢显存极易导致 OOM爆显存。阻塞风险一个模型在推理时可能会阻塞另一个模型的初始化。总结对于双卡 4090D1、如果你想同时服务两个完全不同的模型如 Qwen 和 Llama请使用Docker 容器化部署或多进程脚本。容器 A端口 8000绑定--gpus device0跑模型 A。容器 B端口 8001绑定--gpus device1跑模型 B。这是最干净、最不容易报错的方式。2、如果你想做 AB 测试同一个模型的不同版本使用 vLLM 的LoRA 功能。3、如果显存不够分怎么办利用 vLLM 的--gpu-memory-utilization参数。例如你可以强制两个模型都只使用 50% 的显存如果它们都在同一张卡上但这通常只适合非常小的模型。对于大模型物理隔离一卡一模型是王道。