内容提要
vLLM 是加速大语言模型推理的框架,通过近乎零浪费的 KV 缓存解决内存管理瓶颈。本文提供离线推理教程,演示 Florence-2、Mllama、Whisper 三个多模态模型的隐式与显式提示用法,包含完整代码示例,并统计生成耗时与 RPS。
延伸解读
隐式与显式提示的适用场景
文章通过 Florence-2、Mllama 和 Whisper 的示例,展示了两种提示格式:隐式提示将任务指令和多模态数据合并为一个 prompt,适合简单直接的调用;显式提示则分离 encoder_prompt 和 decoder_prompt,允许对编码器和解码器输入分别控制。对于需要精细控制模型输入结构的场景,显式提示更灵活,但代码复杂度也更高。
多模态模型配置的关键参数
每个模型的 EngineArgs 都设置了 limit_mm_per_prompt 来限制每个提示的多模态数据数量,例如 Florence-2 和 Mllama 限制为 1 张图片,Whisper 限制为 1 段音频。同时,max_num_seqs 控制并发序列数,dtype='half' 使用半精度以节省显存。这些参数直接影响推理时的内存占用和吞吐量,需要根据硬件条件调整。
性能统计与基准参考
示例代码在生成结束后打印总耗时和 RPS(每秒请求数),为读者提供了简单的性能测量方法。由于采样参数固定为 temperature=0、top_p=1.0、max_tokens=64,不同模型和输入下的耗时与 RPS 可作为初步对比依据。但需注意,这些数据受硬件和模型规模影响,实际部署时应重新测试。
Q&A
vLLM 是什么?它主要解决什么问题?
vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。
vLLM 离线推理示例支持哪些多模态模型?
示例支持 Florence-2、Mllama 和 Whisper 三个多模态模型。
在 vLLM 中,隐式提示和显式提示有什么区别?
隐式提示使用单一的 'prompt' 字段,包含任务 token 或多模态数据;显式提示则分别使用 'encoder_prompt' 和 'decoder_prompt' 字段,允许为编码器和解码器指定不同的提示内容。
如何为 Florence-2 模型设置 vLLM 的 EngineArgs?
EngineArgs 设置包括:model='microsoft/Florence-2-large',tokenizer='facebook/bart-large',max_num_seqs=8,trust_remote_code=True,limit_mm_per_prompt={'image': 1},dtype='half'。
vLLM 离线推理示例中如何统计生成耗时和 RPS?
在生成前后记录时间,计算 duration = time.time() - start,然后 RPS = len(prompts) / duration。
运行 vLLM 离线推理示例时,如何指定模型类型和随机种子?
通过命令行参数 --model-type(或 -m)指定模型类型,默认是 mllama;通过 --seed 设置随机种子,默认是 None。