必须手动配置设备映射和并发服务层,因默认单卡加载会使全部负载集中于第一张卡、其余闲置;需通过nvidia-smi和torch.cuda.device_count()确认多卡识别,加载时显式指定device_map="balanced_low_0"或手动分层,配合vllm张量并行或fastapi双实例分流实现真正并发。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

想让DeepSeek在多张NVIDIA显卡上同时跑多个请求,避免单卡排队卡死,必须手动配置设备映射和并发服务层——默认的单卡加载方式会把全部负载压在第一张卡上,第二张卡完全闲置。
确认多卡识别与驱动状态
打开终端,运行 nvidia-smi,确认所有GPU都处于“Running”状态且显存未被其他进程占用。如果只看到一张卡或显示“No devices were found”,说明驱动未正确安装或PCIe插槽供电异常。
执行 torch.cuda.device_count() 检查PyTorch是否识别全部显卡。若返回值小于物理卡数,需重装CUDA Toolkit并匹配当前PyTorch版本(例如torch 2.4.0需CUDA 12.1)。
模型加载阶段:启用多卡张量并行
使用Hugging Face Transformers时,不能依赖device_map="auto"——它默认只用单卡,必须显式指定device_map="balanced_low_0"或"sequential"。
在加载模型时传入device_map="balanced_low_0"参数,系统会将模型层自动拆分到所有可用GPU上,每张卡分配相近显存;若某卡显存明显偏高,可改用device_map={"transformer.h.0": 0, "transformer.h.1": 1, ...}手动分配前缀层。
【关键前提】模型权重必须为Hugging Face标准格式(含config.json和pytorch_model-*.bin),GGUF格式不支持张量并行,强行加载会报KeyError: 'model.layers.0'。
启动并发API服务
方法一:用vLLM启动多实例服务
安装vLLM:pip install vllm,然后运行:
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
vllm-run --model deepseek-ai/DeepSeek-V2-Lite --tensor-parallel-size 2 --port 8000
其中--tensor-parallel-size 2表示启用两张卡做张量并行,不是启动两个独立服务。
方法二:用FastAPI+自定义路由实现请求分流
在server.py中初始化两个独立模型实例:
model_0 = AutoModelForCausalLM.from_pretrained(..., device_map={"": 0})<br>model_1 = AutoModelForCausalLM.from_pretrained(..., device_map={"": 1})
再通过FastAPI路由判断请求ID奇偶性,自动分发到不同模型对象,避免显存争抢。
注意:不要在同一个Python进程中用torch.cuda.set_device()切换卡号来复用模型——这会导致CUDA上下文冲突,首次推理后直接卡死。
验证并发吞吐量
第一步:用curl并发发送10个请求测试基础响应
第二步:用ab -n 100 -c 10 http://localhost:8000/generate压测QPS,观察nvidia-smi中各卡GPU-Util是否同步跳动至60%以上
第三步:检查日志里是否有RuntimeError: CUDA error: invalid device ordinal——出现即说明某次请求错误指定了不存在的GPU ID,需回查device_map配置与物理卡序号是否一致









