ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

vLLM 模型加载加速完整指南:快速启动、模型热加载与多机分片部署

vLLM 模型加载加速完整指南:快速启动、模型热加载与多机分片部署 vLLM 模型加载加速完整指南快速启动、模型热加载与多机分片部署【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm如果你曾为一个 70B 模型的权重读取进 GPU 内存等过十几分钟就会知道启动慢的代价。本文以 vLLM一个高性能 LLM 推理引擎为例讲清三件和模型加载加速直接相关的事用随机权重做快速启动、模型热加载、多机分片加载。读完你可以直接拿到参数和命令套在自己的部署流程里。场景一上线前验证配置一行参数完成 dummy 权重启动 ⚡正式放量前你多半想先跑一遍完整流程显存够不够、TP 配置会不会 OOM、服务端口通不通。为这次验证去加载真实权重纯属浪费时间。load_formatdummy就是为这类检查准备的。它的做法很直白vLLM 按真实模型的张量形状分配同规格内存随机填数跳过权重文件读取。引擎照常完成通信组初始化、显存分配、计算图构建然后开始提供端口。打个比方这像飞机的空载试飞——不带乘客跑完整检查单确认飞机没问题再放行。效果是真实权重需要几分钟启动的模型现在秒级就能拉起。要记住的只有一点此时的输出是随机文本毫无意义。它验证的是机器和配置没问题不是模型能力没问题。from vllm import LLM, SamplingParams llm LLM( modelQwen/Qwen3-0.6B, load_formatdummy, # 关键随机权重跳过真实加载 enforce_eagerTrue, tensor_parallel_size4, ) outputs llm.generate([Hello, my name is], SamplingParams(temperature0.8)) # 输出是乱码只用于验证显存、形状、端口是否就绪完整示例skip_loading_weights_in_engine_init.py为什么随机权重也能把引擎拉起来形状占位随机张量与真实权重同形状所以所有矩阵运算都能正常前向资源先到位显存、通信组、CUDA 上下文都在这一步分配完后续切换真实权重时不再发生图提前构建好推理计算路径走通避免上线后才暴露配置错误场景二不停服务更新模型三步实现零停机升级 服务跑起来之后模型版本还在迭代——新合并的 checkpoint、RLHF 训完的权重、A/B 实验的新版本。重启进程会丢掉所有在途请求端口抖动还会触发上游重试。vLLM 的做法是原地替换权重先用 RPC 告诉引擎下一份权重从哪来再让它就地读入整个过程进程不退出、端口不掉线。三步走改配置、换权重、验输出# 1. 把加载方式从 dummy 切回 auto llm.collective_rpc( update_config, args({load_config: {load_format: auto}},) ) # 2. 就地加载真实权重 llm.collective_rpc(reload_weights) # 3. 同一个请求输出恢复正常 outputs llm.generate(prompts, sampling_params)在线服务端也有对等的 HTTP 入口需开发模式启动一条 curl 就能触发curl -X POST http://localhost:8000/collective_rpc \ -H Content-Type: application/json \ -d {method:reload_weights}上图是热加载的完整数据流引擎始终存活变的只是内存里的权重内容。这是 LLM 引擎的内部结构。权重加载发生在模型执行器内部换完权重后调度器和批处理逻辑不需要任何重建这正是能不停服的原因。和睡眠模式的组合玩法如果是 RLHF 这种训练侧定期推权重的场景更省显存的路径是先sleep(level2)释放 GPU 显存训练侧写好新权重再唤醒后调reload_weights。细节见睡眠模式文档。场景三多机部署大模型用分片状态并行加载单个模型文件几十 GB 时默认的加载方式是每个 TP rank 都去读完整文件再切出属于自己的那份——磁盘 IO 和网络带宽被重复消费启动时间被拖长。sharded_state换一种存法先按目标 TP 布局把模型保存一次每张卡只存自己那份分片之后每次启动各 rank 只读自己的分片互不等待也不需要整文件过一遍网络。# 先按 TP8 布局保存分片状态 python save_sharded_state_offline.py \ --model /path/to/model \ --tensor-parallel-size 8 \ --output /path/to/saved/sharded/model # 加载时指定 sharded_state python load_sharded_state_offline.py \ --model /path/to/saved/sharded/model \ --load-format sharded_state \ # 关键按分片状态加载 --tensor-parallel-size 8 \ --max-tokens 50TP4 时引擎会拉起 4 个 worker 进程对应 4 张卡分片状态下每个进程只读自己那一份权重文件加载时间取决于单分片大小而不是完整模型。示例脚本load_sharded_state_offline.py、save_sharded_state_offline.py两个注意点保存时的tensor_parallel_size和加载时必须一致分片是按 TP 切分的另外 sharded_state 适合模型固定、集群固定的长期部署如果你的服务要频繁切换不同模型别走这条路。参数速查参数建议设置常见误区 / 坑load_format生产用auto验证配置用dummy从dummy切回时必须先update_config再reload_weights漏掉前一步读到的还是随机数tensor_parallel_size与本机 GPU 数一致分片状态保存与加载的 TP 数必须相同不一致会直接报错enforce_eager调试用True生产用False开着会禁用 CUDA Graph解码吞吐明显偏低验证完记得关quantization显存紧张时选awq/gptq等量化 checkpoint 与dummy验证不匹配先跑通真实加载再上 dummy 流程什么场景该用什么CI 冒烟测试、显存摸底、配置验证 →dummy快速启动生产服务更新模型版本、RLHF 权重同步 → 热加载update_configreload_weights配合睡眠模式更省显存多机多卡大模型、固定集群长期运行 →sharded_state多模型交替服务、闲时让出 GPU → 睡眠模式参见内存节省指南现在就可以试在你自己的机器上跑一遍 skip_loading_weights_in_engine_init.py——先看到不加载权重也能拉起服务再用两条 RPC 把它变回真模型整个链路十分钟以内能走通。参数细节查引擎参数文档即可。【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表