单张显卡运行多个vllm模型
可以控制最大显存使用率,这对于在单张显卡上运行多个模型实例至关重要。
你可以通过 vLLM 的 --gpu-memory-utilization
参数来实现这一点。
参数说明
--gpu-memory-utilization <fraction>
- 这个参数用于指定 vLLM 实例可以使用的 GPU 显存的比例。
<fraction>
是一个 0 到 1 之间的小数。例如,0.5
表示使用 50% 的显存。- 通过为每个模型容器设置一个较低的比例,你可以为其他模型实例或其他在 GPU 上运行的程序预留出足够的显存。
操作示例:在单张显卡上启动两个模型
假设你有一张显卡,并且希望同时运行两个模型,每个模型大约使用 45% 的显存(留出 10% 的余量给系统和其他开销)。
-
启动第一个模型容器 (Model A)
- 将显存使用率限制在 45% (
0.45
)。 - 将服务端口映射到主机的
8001
。
docker run --runtime nvidia --gpus all \-v ~/.cache/huggingface:/root/.cache/huggingface \-p 8001:8000 \--ipc=host \vllm/vllm-openai:latest \--model /root/.cache/huggingface/hub/Qwen/Qwen2___5-0___5B-Instruct \--gpu-memory-utilization 0.45
- 将显存使用率限制在 45% (
-
启动第二个模型容器 (Model B)
- 同样将显存使用率限制在 45% (
0.45
)。 - 将服务端口映射到主机的
8002
(确保端口不冲突)。
docker run --runtime nvidia --gpus all \-v ~/.cache/huggingface:/root/.cache/huggingface \-p 8002:8000 \--ipc=host \vllm/vllm-openai:latest \--model /root/.cache/huggingface/hub/Qwen/Qwen2___5-3B-Instruct \--gpu-memory-utilization 0.45
- 同样将显存使用率限制在 45% (
重要注意事项:
- 模型大小:请确保分配给每个模型的显存(例如 45% 的总显存)足以加载该模型。如果模型太大,即使分配了 45% 的显存也不足以运行,那么容器将启动失败。
- 显存余量:总使用率最好不要设置为 1.0 (例如
0.5
+0.5
)。建议留出一些余量(如 5%-10%),因为操作系统、CUDA 上下文和驱动本身也需要消耗一部分显存。 - 性能影响:限制显存使用率会直接影响 vLLM 的性能。vLLM 的核心优势 PagedAttention 需要使用显存来存储 KV 缓存。可用的显存越少,能够处理的并发请求数和最大序列长度就会越有限,从而可能影响吞吐量。