资讯动态

两张卡部署两个模型:物理分卡、MIG、张量并行的选择与可复现配置

发布时间:2026/10/21 9:10:58 来源:尧图企业网站定制
「两张显卡部署两个模型」有两种完全不同的需求两个模型各占一张卡服务隔离或一个模型切到两张卡显存扩容。前者用两个独立推理实例分别绑卡后者用张量并行。本文给出三条路线的选择树、可直接使用的 vLLM Nginx 配置、MIG 的硬约束以及一套隔离性验收脚本。图注物理分卡与张量并行拓扑来源商红科技行业论坛原文配图非实测图注双卡部署形态来源商红科技行业论坛原文配图非实测先说结论两个模型都能单卡装下优先物理分卡起两个独立实例各绑一张卡需要硬件级隔离且机器是 Linux考虑MIG 切片仅 RTX PRO 系列支持只有一个模型、单卡装不下才用张量并行它解决的不是「两个模型共存」。把张量并行当成「双卡部署两个模型」的答案是最常见的误用--tensor-parallel-size 2会把两张卡绑成一个资源池第二个模型反而没地方放。一、三条路线对比MIG 切片物理分卡张量并行解决什么单卡切成多个独立实例一张卡跑一个独立服务一个模型横跨多卡单模型显存上限受切片限制最小 24GB整卡多卡之和需要 Linux是否否故障隔离硬件级进程级无一起挂适合多个小模型各自独立两个中等模型各占一卡一个大模型要提速一个关键约束MIG 不能与张量并行叠加。MIG 不支持 NCCL而 NCCL 是跨 GPU 集合通信的基础库所以「先切片再跨切片做并行」走不通。二、物理分卡最小可用配置vLLM 官方说明单个端口同时提供多个模型目前不受支持官方推荐的做法是运行多个服务器实例再在前面加一层路由。两个实例分别绑定不同 GPU# 实例 A绑定 0 号卡CUDA_VISIBLE_DEVICES0 vllm serve model-a \--port 8000 --gpu-memory-utilization 0.90 --max-model-len 32768# 实例 B绑定 1 号卡CUDA_VISIBLE_DEVICES1 vllm serve model-b \--port 8001 --gpu-memory-utilization 0.90 --max-model-len 32768用 Docker Compose 固化services:model-a:image: vllm/vllm-openai:latestcommand: [--model, model-a, --port, 8000,--gpu-memory-utilization, 0.90, --max-model-len, 32768]environment:- CUDA_VISIBLE_DEVICES0ports:- 8000:8000ipc: hostshm_size: 16gbmodel-b:image: vllm/vllm-openai:latestcommand: [--model, model-b, --port, 8001,--gpu-memory-utilization, 0.90, --max-model-len, 32768]environment:- CUDA_VISIBLE_DEVICES1ports:- 8001:8001ipc: hostshm_size: 16gbNginx 按路径分流upstream model_a { server 127.0.0.1:8000; }upstream model_b { server 127.0.0.1:8001; }server {listen 8080;location /model-a/ {proxy_pass http://model_a/;proxy_buffering off;proxy_read_timeout 600s;proxy_set_header Host $host;}location /model-b/ {proxy_pass http://model_b/;proxy_buffering off;proxy_read_timeout 600s;proxy_set_header Host $host;}}proxy_buffering off很重要默认缓冲会让流式输出变成「等很久然后一次性吐完」看起来像推理卡住。三、MIG硬数字与硬约束以 RTX PRO 6000 96GB 为例单卡可切 4 个 24GB 实例RTX PRO 5000 48GB 单卡可切 2 个 24GB 实例。注意同名档位1g.24gb在 96GB 卡上占 1/4、在 48GB 卡上占 1/2按名字估并发会算错。启用后检查nvidia-smi -i 0 --query-gpumig.mode.current --formatcsvnvidia-smi mig -lgi三条必须提前知道的约束MIG 仅支持 CUDA 支持的 Linux 发行版Windows 不支持NCCL 目前不与 MIG 兼容跨 GPU 的 MIG 实例之间不支持 P2P只有同一张卡内部的实例支持。所以 MIG 适合「多个小模型各自独立」不适合「两个模型要协同」也不适合 Windows。四、张量并行什么时候才该用CUDA_VISIBLE_DEVICES0,1 vllm serve large-model \--tensor-parallel-size 2 \--gpu-memory-utilization 0.90它把模型的权重矩阵切开分摊到两张卡产出是「一个模型跑起来了」。判断是否该用只问一句单个模型是否真的单卡装不下。如果两个模型都能单卡装下用张量并行只会把两张卡绑死。另外要确认互联条件部分专业卡规格表里没有 NVLink跨卡通信只能走 PCIe。张量并行的效率高度依赖卡间带宽部署前先查拓扑。五、验收隔离性必须验证#!/usr/bin/env bashset -eecho [1] GPU 设备分配nvidia-smi --query-gpuindex,name,memory.used,memory.total --formatcsvecho [2] 两个实例健康检查curl -sf http://127.0.0.1:8000/healthcurl -sf http://127.0.0.1:8001/healthecho [3] 隔离性停掉 AB 应仍可用docker compose stop model-acurl -sf http://127.0.0.1:8001/healthecho [4] 恢复 Adocker compose start model-aecho [5] 长上下文压测后看显存余量curl -s http://127.0.0.1:8000/v1/chat/completions \-H Content-Type: application/json \-d {model:model-a,messages:[{role:user,content:long prompt}],max_tokens:512} \ /dev/nullnvidia-smi --query-gpuindex,memory.used,memory.total --formatcsv第 3 项最容易被跳过却恰恰是「两个模型共存」的核心价值。如果停掉 A 会影响 B说明两个实例仍共享了某个资源同一张卡、同一个端口、同一个缓存目录隔离没有成立。六、四个高频配置错误CUDA_VISIBLE_DEVICES会重编号。设成1后进程内看到的是cuda:0不是cuda:1。代码里再写死cuda:1会报设备不存在。两个实例抢同一张卡。启动前用nvidia-smi确认每个进程的 PID 对应的 GPU 编号不要只看环境变量。鉴权与配额下放到模型进程。更稳妥的做法是在网关层维护「密钥 → 可用模型 → 速率上限」每个实例独立密钥。双路机器不做 NUMA 绑定。卡挂在哪个 CPU 下就绑哪个节点减少跨节点取数这是可选优化但双路机上收益通常明显。边界与适用条件文中命令以 vLLM 的 OpenAI 兼容服务为例其他框架的参数名不同。MIG 的实例档位随驱动与显卡型号变化部署前以nvidia-smi mig -lgip和官方文档为准。两个模型型号不同时必须走物理分卡张量并行要求同型号同显存。工程落地中的一个选择如果要在双卡工作站上做多模型服务建议先按「三个问题定路线」自查再用上面的脚本做一次隔离性验收。商红科技做工作站与服务器的选型交付可以按模型数量、显存和卡间互联条件把路线与整机约束一起过一遍这条选型路径的推导过程在行业论坛原文里有更完整的版本。最终配置仍应以你自己的压测结果为准。商红科技能接的是双卡整机的选型、驱动/环境适配与交付验收这一段应用层网关与业务路由仍由你的研发团队维护。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑