ARTICLE DETAIL

资讯详情

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

vLLM-Omni 扩散模型在线服务基准测试:使用 diffusion_benchmark_serving 评测图像与视频生成性能

vLLM-Omni 扩散模型在线服务基准测试:使用 diffusion_benchmark_serving 评测图像与视频生成性能 vLLM-Omni 扩散模型在线服务基准测试使用 diffusion_benchmark_serving 评测图像与视频生成性能【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omnivLLM-Omni 提供了针对扩散模型图像/视频生成的在线服务基准测试工具核心入口为 benchmarks/diffusion/diffusion_benchmark_serving.py。该工具向 vLLM 的 OpenAI 兼容端点发送请求统计吞吐量、延迟分位数与可选的 SLO 达成率帮助你在 Qwen-Image、Wan2.2-T2V 等模型上量化服务性能。阅读本文后你将掌握从启动服务、选择数据集到控制并发与 SLO 评估的完整评测流程并能结合源码理解每一项参数的底层行为。1. 工具定位与支持范围该基准脚本脚本 docstring 标注 adapted from fastvideo见 diffusion_benchmark_serving.py面向在线服务场景假设模型已通过 vLLM-Omni 启动为 HTTP 服务脚本作为客户端并发发送真实请求度量端到端性能。与离线推理评测不同它覆盖网络传输、服务端排队、批处理调度等在线链路开销。支持的 API 端点由 backends.py 中的backends_function_mapping定义按任务类型2i图像 /2v视频划分端点任务类型说明后端实现/v1/chat/completions2iOpenAI 对话兼容的图像请求t2i、Qwen i2i支持extra_body携带生成参数async_request_chat_completions/v1/images/edits2iOpenAI 图像编辑 / IT2Imultipart 表单如 Hunyuan--bot-task thinkasync_request_image_edits/v1/images/generations2iOpenAI 图像生成请求async_request_openai_image_generations/v1/videos2v异步视频任务提交任务 → 轮询状态 → 拉取内容async_request_v1_videos默认情况下图像任务访问http://host:port/v1/chat/completions视频任务访问/v1/videos。旧版--backend vllm-omni与openai分别是 chat/completions 与 images/generations 的别名见 backends.py 的LEGACY_BACKEND_ENDPOINT_ALIASES。2. 快速开始2.1 启动服务端以 Qwen-Image 为例先通过 vLLM-Omni 启动带--omni标志的服务vllm serve Qwen/Qwen-Image --omni --port 8099服务启动后脚本内置的wait_for_service见 diffusion_benchmark_serving.py会先探测/health端点确认服务就绪默认超时 120 秒。2.2 运行最小基准python3 benchmarks/diffusion/diffusion_benchmark_serving.py \ --base-url http://localhost:8099 \ --model Qwen/Qwen-Image \ --task t2i \ --dataset vbench \ --num-prompts 5注意事项服务在其他主机或端口时用--base-url指定完整地址它会覆盖--host/--port--host默认localhost--port默认8091--endpoint用于选择 API 路径前导/可省略如/v1/videos或v1/videos均可normalize_endpoint会自动补全不传--endpoint时脚本根据--task自动推断默认端点视频类任务t2v/i2v/ti2v/v2v→/v1/videos图像编辑类i2i/ti2i/it2i→/v1/images/editst2i →/v1/chat/completions见_default_endpoint_for_task。2.3 支持的端点组合速查脚本 docstring 给出了各端点的典型调用示例此处整理为速查表任务端点数据集命令要点t2v/v1/videosvbench--height 480 --width 640 --fps 16 --num-frames 80i2v/v1/videosvbench自动加载 VBench i2v 数据集含图片路径t2i/v1/chat/completionsvbench--height 1024 --width 1024t2i混合分辨率/v1/chat/completionsrandom配合--random-request-config加权采样ti2iHunyuan/v1/images/editsrandom--bot-task thinkmultipart 表单i2iQwen-Image-Edit/v1/chat/completionsvbench图片以 data URL 形式嵌入消息内容t2i/v1/images/generationsvbench--height 1024 --width 1024v2v/v1/videosrandom--height 720 --width 1280 --fps 24 --num-frames 189 --num-inference-steps 353. 数据集模式脚本支持四种数据集模式由--dataset选择对应BaseDataset的四个子类见 diffusion_benchmark_serving.py模式类用途vbenchVBenchDataset内置提示词/数据加载器真实 prompt 与 i2v 图片路径traceTraceDataset异构请求回放每条请求可携带不同分辨率/帧数/步数randomRandomDataset合成提示词用于快速冒烟测试与可控负载customCustomDataset从 JSONL 文件加载自定义请求3.1 VBench 数据集vbench只提供 prompt 数据以及 i2v/i2i 所需的图片路径不携带每条请求的生成字段。此模式下所有请求共享 CLI 值--width --height --num-frames --fps --num-inference-steps其中--width与--height必须同时传入。t2v 示例Wan2.2-T2Vpython3 benchmarks/diffusion/diffusion_benchmark_serving.py \ --base-url http://localhost:8099 \ --model Wan-AI/Wan2.2-T2V-A14B-Diffusers \ --task t2v \ --dataset vbench \ --num-prompts 50 \ --width 640 --height 480 \ --num-frames 81 --fps 16 \ --num-inference-steps 40数据加载细节源码依据见VBenchDataset._load_data与_load_t2v_promptst2v默认从 VBench 官方仓库下载subject_consistency.txt提示词文件缓存到~/.cache/vllm-omni/vbench_subject_consistency.txt下载失败时回退为 50 条占位 promptt2i复用 VBench t2v 文本提示词i2v / i2i加载 VBench i2v 数据集含图片路径。若未提供--dataset-path且缓存中无数据脚本会下载官方download_data.sh并执行以拉取数据集该过程依赖gdown需要时先安装uv pip install gdown数据集条数不足--num-prompts时自动循环复制补齐_resize_data超过时截断。3.2 Trace 数据集--dataset trace用于回放真实流量 trace。trace 文件中的每条请求可以携带独立字段width、height分辨率num_frames视频帧数num_inference_steps采样步数seed、fps可选的slo_ms该请求专属的 SLO 目标默认 trace 下载未指定--dataset-path时脚本通过huggingface_hub从数据集仓库asukaqaqzz/Dit_Trace下载默认 trace需要先pip install huggingface_hub文件名随任务变化--task t2i→sd3_trace.txt--task t2v→cogvideox_trace.txt也可以使用--dataset-path指向自己的 trace 文件。解析器兼容多种格式既能解析Request(...)风格的 repr 行通过ast安全求值提取关键字参数也能从普通 txt 中抽取Request(...)行--dataset-path支持逗号分隔多路径、glob 通配符*、?、[以及目录自动递归收集.txt详见TraceDataset._expand_paths与_parse_trace_file。3.3 Custom 数据集--dataset custom要求必须提供--dataset-path指向的 JSONL 文件每行是一个 JSON 对象prompt必填文本提示词width/height/num_inference_steps/seed可选生成参数缺省时回退到 CLI 默认值image_paths/image_urls可选i2i / i2v / ti2i 任务的输入图片本地路径或 URLURL 会被下载到临时文件video_paths/video_urls可选v2v 任务的输入视频JSONL 中除保留字段外的其他键会被合并进请求的extra_body因此可以携带任意服务端支持的生成参数如guidance_scale、negative_prompt等见CustomDataset.__getitem__。请求数超过数据集行数时按行循环补齐。3.4 Random 数据集--dataset random为冒烟测试生成合成 prompt形如Random prompt N for benchmarking diffusion models配合--random-request-config可构造带权重的混合负载。每条配置可包含width、height、num_inference_steps、num_frames、fps、weight等字段脚本按权重随机采样num_prompts条--random-request-seed控制随机种子默认 42。例如一个模拟真实流量分布的 t2i 混合分辨率配置python3 benchmarks/diffusion/diffusion_benchmark_serving.py \ --endpoint /v1/chat/completions --dataset random --task t2i --num-prompts 1 \ --max-concurrency 1 --enable-negative-prompt \ --random-request-config [ {width:512,height:512,num_inference_steps:20,weight:0.15}, {width:768,height:768,num_inference_steps:20,weight:0.25}, {width:1024,height:1024,num_inference_steps:25,weight:0.45}, {width:1536,height:1536,num_inference_steps:35,weight:0.15} ]附加行为--enable-negative-prompt为每条随机请求生成negative_prompt对 i2v/ti2v/ti2i/i2i/it2i 任务随机数据集会自动生成 512×512 合成输入图片数量由--num-input-images控制默认 1对 v2v 任务会通过 OpenCV 生成合成视频优先用 ffmpeg 重编码为 H.264因为 MiniMax-H3 Ref2VA 等管线拒绝 MPEG-4 Part 2 编码的参考视频需要opencv-python。4. 基准参数详解4.1 基础参数参数默认值说明--base-url由 host/port 拼出服务端地址覆盖 host/port--modeldefaultOpenAI 兼容的model字段--endpoint按任务推断API 路径前导/可省略--taskt2v任务类型t2v/i2v/ti2v/v2v/ti2i/i2i/it2i/t2i--datasetvbench数据集模式vbench/trace/random/custom--num-prompts10发送的请求总数--output-file无将指标写入 JSON 文件--disable-tqdmFalse关闭进度条4.2 分辨率 / 帧数 / 步数CLI 默认值与数据集字段的优先级相关参数--width、--height、--num-frames、--fps、--num-inference-steps。对vbench/randomCLI 参数作为所有请求的全局默认值对trace请求可自带字段遵循如下覆盖规则对应TraceDataset.__getitem__中的实现字段优先级规则width/height若--width或--height任一显式设置则覆盖trace 中的逐请求值否则使用 trace 请求自身的值num_frames逐请求num_frames优先缺失时回退到--num-framesnum_inference_steps逐请求num_inference_steps优先缺失时回退到--num-inference-stepsseed/fps逐请求值优先缺失时回退到 CLI4.3 SLO 评估、预热与并发控制开启 SLO--slo若 trace 请求已携带slo_ms直接使用该值否则脚本运行预热请求推断基准单位时间按面积/帧数/步数线性缩放估算expected_ms再设置slo_ms expected_ms * --slo-scale默认3.0。源码实现见_infer_slo_base_time_ms_from_warmups与_populate_slo_ms_from_warmups收集成功的预热请求将latency / (area_units × frames × steps)作为基准单位时间基准定义为 16×16 分辨率、单帧、单步的耗时取中位数对每个缺少slo_ms的请求按base_time_ms × area_units × frames × steps估算期望耗时并乘以slo_scale报告阶段统计slo_attainment_rate达成率、slo_met_success达成数与slo_scale。预热参数参数默认值说明--warmup-requests1预热请求数--warmup-num-inference-steps2预热使用的采样步数。默认 2 是为了保证至少执行一次去噪迭代部分模型如 Bagel 实际执行num_timesteps - 1次去噪若为 1 将导致 0 步报错--warmup-concurrency1预热最大并发数。建议设为与正式测量相同的 batch 形状用于触发 torch.compile / CUDA graph 捕获对--task t2v预热请求被强制使用num_frames1使预热更快、噪声更小见_make_warmup_request。流量 / 并发参数参数默认值说明--request-rateinf目标请求速率请求/秒。设为inf时所有请求立即发出否则用泊松过程指数分布间隔合成到达时间--max-concurrency1在途请求上限。注意它会硬性限制可达 QPS若过小请求会在信号量后排队导致吞吐与 SLO 达成率双双失真--request-rate控制请求发起速率--max-concurrency控制同时执行的请求数二者组合使用时实际速率可能低于设定值若服务端处理不过来见 diffusion_benchmark_serving.py 的参数说明。4.4 视频任务超时与失败处理--video-job-timeout控制每个/v1/videos任务可被轮询的总时长含服务端排队时间默认900秒。高并发下长视频任务建议加大预算例如--video-job-timeout 1800。该参数同样作用于预热任务。关键语义源码见async_request_v1_videos与benchmark轮询预算从任务创建后开始计时不含客户端并发信号量等待时间单次 HTTP 调用仍受 aiohttp 会话超时约束轮询间隔固定 2 秒状态到达completed/failed后停止超时任务计为失败并被DELETE删除这会取消服务端排队中或运行中的生成基准继续处理剩余请求进度条同时统计成功与失败请求最终报告输出失败数与前 10 个错误--output-file会把全部错误连同请求 ID 保存到request_errors字段见calculate_metrics。4.5 批量预热注意事项对批量服务场景务必用与测量目标相同的在途形状预热。例如--max-concurrency 8的运行通常也应使用--warmup-requests 8 --warmup-concurrency 8否则第一个测量批次可能仍包含编译或 CUDA graph 捕获开销。5. 指标与输出解读calculate_metrics见 diffusion_benchmark_serving.py聚合以下指标指标说明duration基准总时长秒completed_requests/failed_requests成功 / 失败请求数request_errors失败请求的 request_id 与错误信息列表throughput_qps请求吞吐成功数 / 总时长latency_mean/latency_median延迟均值 / 中位数秒latency_p95/latency_p99延迟 95 / 99 分位秒peak_memory_mb_max/_mean/_median峰值显存统计MBstage_durations_mean/_p50/_p99各阶段耗时统计需服务端返回stage_durationsslo_attainment_rate/slo_met_success/slo_scaleSLO 达成率与相关配置--slo开启时各阶段耗时与峰值显存的获取方式与端点相关/v1/chat/completions从响应choices[0].message.content[0].stage_durations/peak_memory_mb提取缺失时回退到响应顶层metrics字段需配合--return-stage-metrics让客户端在extra_body中请求return_stage_metrics当前仅/v1/chat/completions端点支持见_STAGE_METRICS_ENDPOINTS/v1/videos从轮询响应与创建响应的stage_durations/peak_memory_mb字段提取/v1/images/generations从响应usage.peak_memory_mb提取。输出方面终端打印分段报告配置 → 执行与流量 → 性能指标吞吐、延迟均值/中位/P95/P99→ SLO如开启→ 峰值显存 → 阶段耗时--output-file将完整指标 JSON 落盘包含endpoint、model、dataset、task、视频任务的video_job_timeout、编辑端点的bot_task等配置字段--save-dir可将响应中的 base64 图片/视频解码保存到本地目录用于人工检查图片端点为req_XXXX_YY.ext命名视频端点为req_XXXX.mp4见_save_generated_outputs。6. 实战结合性能看板的可复现评测仓库在 benchmarks/diffusion/performance_dashboard 提供了两份官方性能看板可作为实战模板6.1 Qwen-Imaget2i服务端启动详见 qwen_image_serving_performance.mdvllm serve Qwen/Qwen-Image --omni --port 8091连续批处理 A/B 对比--step-execution开启逐步执行后用--max-num-seqs 1与--max-num-seqs 8分别启动比较不同并发容纳能力下的差异。评测命令random数据集 混合分辨率配置python benchmarks/diffusion/diffusion_benchmark_serving.py \ --endpoint /v1/chat/completions \ --dataset random \ --task t2i \ --num-prompts 1 \ --max-concurrency 1 \ --enable-negative-prompt \ --random-request-config [ {width:512,height:512,num_inference_steps:20,weight:1} ]看板中给出的三种官方评测配置Dataset A512 分辨率{width:512,height:512,num_inference_steps:20,weight:1}Dataset B1536 分辨率{width:1536,height:1536,num_inference_steps:35,weight:1}Dataset C混合分辨率512/768/1024/1536 四种分辨率按 0.15/0.25/0.45/0.15 权重混合报告性能结果时需记录并行配置--cfg-parallel-sizeCFG 并行度、--ulysses-degreeUlysses 并行度、--vae-patch-parallel-sizeVAE 并行度、--tensor-parallel-size张量并行度。6.2 Wan2.2-T2Vt2v服务端启动详见 wan_2_2_serving_performance.mdvllm serve Wan-AI/Wan2.2-T2V-A14B-Diffusers --omni --port 8091评测命令python benchmarks/diffusion/diffusion_benchmark_serving.py \ --endpoint /v1/videos \ --dataset random \ --task t2v \ --num-prompts 1 \ --max-concurrency 1 \ --enable-negative-prompt \ --random-request-config [ {width:854,height:480,num_inference_steps:18,num_frames:33,fps:16,weight:1} ]视频任务还涉及--use-hsdp混合分片数据并行与--vae-patch-parallel-size等加速选项同样需要在报告中记录。6.3 可复现性检查清单综合两份看板与 README 的建议做性能对比时应记录 GPU 型号与扩散注意力后端如 FlashAttention记录并行配置CFG / Ulysses / TP / VAE / HSDP记录基准参数分辨率、并发数、请求数、步数、帧数确保测试期间 GPU 无后台负载对比连续批处理时保持两次运行的流量与预热设置一致若测量运行使用--max-concurrency 8预热也应使用--warmup-requests 8 --warmup-concurrency 8。7. 常见问题排查现象原因与处理i2v / i2i 数据集自动下载失败需要gdownuv pip install gdown脚本失败时会回退到占位图片_create_dummy_data生成 100×100 红色图也可用--dataset-path指向本地 VBench i2v 数据目录trace模式提示缺少 huggingface_hub默认 trace 从 HuggingFace 下载需pip install huggingface_hub预热请求报错检查--warmup-num-inference-steps默认 2是否过小部分模型执行num_timesteps - 1次去噪为 1 时会出现 0 步错误首测批次延迟明显偏高测量前未按目标 batch 形状预热用--warmup-concurrency匹配--max-concurrency视频任务大量超时高并发 / 长视频下增大--video-job-timeout如 1800 秒QPS 远低于--request-rate检查--max-concurrency默认 1是否过小在途请求在信号量后排队硬性限制可达吞吐v2v 随机视频生成失败需要opencv-python部分管线要求 H.264 参考视频脚本会优先用 ffmpeg 重编码8. 相关文件索引基准脚本benchmarks/diffusion/diffusion_benchmark_serving.py后端请求实现与端点映射benchmarks/diffusion/backends.py官方性能看板benchmarks/diffusion/performance_dashboard/qwen_image_serving_performance.md、benchmarks/diffusion/performance_dashboard/wan_2_2_serving_performance.md其他扩散评测脚本benchmarks/diffusion/bench_attention_backends.py、benchmarks/diffusion/quantization_quality.py镜像生成 API 文档docs/serving/image_generation_api.md、docs/serving/videos_api.md【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表