ARTICLE DETAIL

资讯详情

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

InternVL批量推理指南:用batch_chat让多模态推理效率翻倍

InternVL批量推理指南:用batch_chat让多模态推理效率翻倍 InternVL批量推理指南用batch_chat让多模态推理效率翻倍【免费下载链接】InternVL[CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的开源多模态对话模型项目地址: https://gitcode.com/GitHub_Trending/in/InternVLInternVL是上海人工智能实验室开源的多模态大模型家族CVPR 2024 Oral性能接近 GPT-4o。对新手来说逐个调用chat()处理一批图片往往慢得让人崩溃。而 InternVL 内置的batch_chat接口正是解决批量推理痛点的官方方案——一次前向生成多条回答让多模态推理效率成倍提升。本文用 5 分钟带你从零上手 InternVL 批量推理。为什么批量推理是多模态应用的刚需 想象一下这个场景你有一千张商品图需要生成描述、一批医学影像需要初步解读、或者要给视频抽帧做逐帧分析。如果用最朴素的方式——for循环 每次调用chat()每张图都要单独走一次完整推理流程GPU 利用率很低视觉编码和语言模型生成都无法摊薄开销总耗时几乎与图片数量成正比InternVL 的batch_chat把多张图 多条问题打包成一个 batch一次性调用generate()并行生成所有回答。批量越大单位图片的推理成本越低这正是效率翻倍的来源。 官方中文示例可在 README_zh.md 的单图批处理小节直接找到英文示例见 internvl_chat/README.md。1分钟读懂 batch_chat 接口 batch_chat定义在 InternVL 对话模型的核心源码 modeling_internvl_chat.py 中签名并不复杂参数作用tokenizer模型的 tokenizerpixel_values所有图片拼接后的大 tensor批量视觉输入questions与图片一一对应的问题列表generation_config生成参数如max_new_tokens、do_samplenum_patches_list关键参数记录每张图片各占多少个视觉 tile两个新手必须知道的限制只支持单轮传入history或return_historyTrue会直接抛出NotImplementedError源码见 L296-L298num_patches_list不能省InternVL 用动态分辨率把一张大图切成若干 tilebatch 内每张图的 tile 数量可能不同必须逐个告知模型。三步上手从加载图片到批量出结果 完整可运行的写法散见 internvl_chat/README.md核心流程只有三步第一步加载并切片图片。用官方load_image内部调用dynamic_preprocess动态分辨率切图把每张图转成 tile 序列max_num控制单图最多切多少块pixel_values1 load_image(./examples/image1.jpg, max_num12).to(torch.bfloat16).cuda() pixel_values2 load_image(./examples/image2.jpg, max_num12).to(torch.bfloat16).cuda()第二步拼接并记录每图的 tile 数。这一步是批量推理的对账本num_patches_list [pixel_values1.size(0), pixel_values2.size(0)] pixel_values torch.cat((pixel_values1, pixel_values2), dim0)第三步一次性调用 batch_chat。问题列表与图片一一对应questions [image\nDescribe the image in detail.] * len(num_patches_list) responses model.batch_chat( tokenizer, pixel_values, num_patches_listnum_patches_list, questionsquestions, generation_configgeneration_config)返回的responses是与输入等长的字符串列表zip(questions, responses)即可逐条打印。整个过程只需要一次model.generate()调用。批量推理性能调优5个实用技巧 ⚡控制 batch size 匹配显存batch 越大越高效但每张图的 tile 都会进显存。显存吃紧时先减小 batch或降低max_num上限max_num决定切图块数默认max_num12适合细节图批量处理普通照片可降到 1~4速度立竿见影统一用bfloat16pixel_values与模型精度保持一致避免运行时转换的额外开销批量场景关采样generation_config dict(max_new_tokens1024, do_sampleFalse)确定性解码在 batch 中更稳定、更可复现注意左填充源码中 tokenizer 会设置padding_sideleft见 L326-L327这是生成式 batch 的正确姿势你无需手动干预但排查输出异常时要知道它的存在。进阶批处理不止于静态图片 num_patches_list机制天然支持更复杂的批量场景视频逐帧分析官方示例中load_video会把视频抽成多帧每帧的 tile 数同样记入num_patches_list见 README_zh.md 的视频对话部分多图对比批处理多个样本各自带多张图questions中每个样本写多个image占位即可服务化部署仓库自带的 streamlit_demo/api.py 展示了如何把消息组织成send_messages格式请求推理 worker批量任务的工程化封装可直接参考。总结batch_chat是 InternVL 官方提供的批量推理入口一次generate()处理 N 个样本牢记三要素拼接pixel_values、对齐num_patches_list、问题列表与图片一一对应它只支持单轮对话多轮追问请回到chat()接口调优顺序先定 batch size再调max_num最后调max_new_tokens。掌握这套流程后无论是万级图片的描述生成还是视频帧的批量解读InternVL 的吞吐都能上一个台阶。完整的安装与调用细节建议通读一遍 internvl_chat/README.md。【免费下载链接】InternVL[CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的开源多模态对话模型项目地址: https://gitcode.com/GitHub_Trending/in/InternVL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表