在MkSaaS中接入本地大模型,显存规划不需要一开始就猜测显卡容量。先确认推理后端,再根据模型大小和量化方式估算权重占用,接着用配置限制并发与上下文长度,最后用nvidia-smi观测实际占用来修正参数。这个流程可以让你在购买显卡或调整配置前,先有一个可执行的判断边界。
部署本地大模型前,先用参数量×量化位宽÷8估算权重显存,并额外预留KV Cache与激活内存。MkSaaS中通过限制并发数和序列长度可以降低峰值占用。若发生OOM,调整顺序依次为降低batch size、降低上下文长度、切换量化格式。实际显存以nvidia-smi观测为准,估算值仅作为初始边界。
先确认 MkSaaS 推理模块使用的后端
首先确定MkSaaS的推理请求发送到哪个后端,因为vLLM、TGI、Ollama等对显存的管理方式不同。vLLM使用PagedAttention,显存碎片更少,且支持动态批处理;TGI也做了KV Cache优化;Ollama则可能按需加载或卸载模型。识别方法:查看MkSaaS的启动命令中是否包含'vllm'、'text-generation-inference'或'ollama'这样的进程名或镜像名;也可以查看MkSaaS的配置文件,通常有'inference_backend'或'model_server'这样的键。如果模型服务由外部提供,还可以通过服务地址的端口或返回头判断。
后端类型决定了可调的显存参数。vLLM和TGI通常提供'`--max-num-seqs`'、'`--max-model-len`'这类参数;Ollama则主要通过环境变量'OLLAMA_NUM_GPU'控制。明确后端后,后续估算和调参才有对应目标。
根据模型参数量与量化精度估算显存
显存估算公式:
显存需求 ≈ 参数量(个) × 每参数字节数 + KV Cache + 激活内存每参数字节数由量化精度决定:FP16为2字节,INT8为1字节,INT4约0.5字节。KV Cache与模型层数、注意力头数、序列长度和并发数相关,通常在上下文较长时增长很快。激活内存主要用于前向计算中的中间张量,受batch size影响较大。
例如,一个7B参数模型以FP16加载,权重占约14GB(7×10^9×2字节),还没有算KV Cache。如果上下文长度设为8192、并发4,KV Cache可能需要数GB。因此,估算时除了权重,还要按序列长度和并发量额外预留。
在 MkSaaS 配置中限制并发与上下文长度
MkSaaS通常会透传后端参数,或者在自己的配置文件中定义对应项。以下示例是常见结构,具体键名以后端实际为准:
inference:
backend: vllm
max_num_seqs: 4 # 最大并发序列数
max_model_len: 8192 # 最大上下文长度(输入+输出)
max_tokens: 2048 # 单次生成最大长度如果找不到对应键名,可以查看MkSaaS的日志中实际传给后端的启动参数。把并发数从默认值降到4~8,把max_model_len限制在8192或4096,是降低显存峰值的有效手段。这些值直接影响KV Cache大小:序列长度和并发每变小一倍,KV Cache占用大约也减少一倍。
通过 nvidia-smi 对比实际占用与预设值
启动模型后,用以下命令实时监控GPU显存:
nvidia-smi `--query-gpu`=memory.used,memory.total `--format`=csv -l 1同时,在MkSaaS日志中查找当前请求的序列长度,通常每个请求会记录输入token数和输出token数,两者相加就是实际消耗的上下文长度。将nvidia-smi显示的“Memory-Usage”与你在配置中设定的max_model_len和max_num_seqs关联起来。
如果显存占用持续接近或达到上限,说明并发或上下文设置过高,优先降低max_num_seqs;如果占用远低于上限,且请求经常排队,可以尝试增加并发。对比时注意区分:nvidia-smi显示的进程占用可能包含CUDA context开销,与理论估算不直接相等,只要峰值不触发OOM,就有调整空间。
遇到 OOM 时优先调整 batch size 还是切换量化格式
当OOM发生时,按这个顺序调整:
- 先降低batch size(并发数)。在MkSaaS中通常是max_num_seqs或并发请求限制,把值从当前配置减半。这一步不改精度,也不损失长文本能力,是最快止血方式。
- 如果OOM仍在,降低上下文长度。对应配置中的max_model_len或max_tokens。注意这可能会截断过长的输入,需要评估业务场景。
- 最后才考虑切换量化格式。把FP16换成INT8或INT4,需要在加载模型时指定量化方式,例如在vLLM启动参数中加`--quantization`,或者替换为量化后的模型文件。这个操作成本高且可能影响精度,所以放到最后。
这样排序的依据是:batch size和上下文长度是运行时可调的,修改后立即生效;切换量化格式需要重新加载模型,且引入精度和兼容性风险。在MkSaaS中,不要直接修改模型文件,优先通过上层配置调整。