资讯动态

实时流式输出与批量推理双提速:InternVL3-14B-Pretrained TextIteratorStreamer与batch_chat完整示例

发布时间:2026/10/18 1:22:29 来源:尧图企业网站定制
【免费下载链接】InternVL3-14B-Pretrained项目地址https://ai.gitcode.com/OpenGVLab/InternVL3-14B-Pretrained点击查看免费下载InternVL3-14B-Pretrained 是 OpenGVLab 发布的 InternVL3 系列 14B 多模态大模型的预训练版本基于 InternViT-300M 视觉编码器 Qwen2.5-14B 语言模型支持图文对话、视频理解等任务。本文带你掌握它的两大推理提速技巧用 TextIteratorStreamer 实现字级实时流式输出以及用 batch_chat 批量处理多张图片配套完整示例代码新手也能照着跑通。 提示本仓库是预训练版Pretrained未经 SFT/MPO 后训练指令跟随能力弱于正式版。如果你的任务是日常问答或指令执行建议优先选用后训练版本本文的代码接口在两个版本中完全通用。两种输出模式解决两类等待多模态模型生成内容时默认是憋大招——等全部 token 生成完才一次性返回。这在两个场景下很吃亏场景痛点解决方案交互式对话聊天界面、Web 前端用户盯着屏幕干等几十秒没反馈TextIteratorStreamer 流式输出逐字返回批量任务图文数据集标注、批量描述逐张调用chat串行等待浪费 GPUbatch_chat批量推理一次 generate两者都基于同一个入口模型的generate方法。视觉特征先由 ViT 抽取、再注入到文本嵌入中随后交给语言模型解码——区别只在于解码结果的消费方式。上图即为examples/image1.jpg仓库自带的示例图片也是下面两个示例的输入素材流式输出完整示例TextIteratorStreamer 三步接入TextIteratorStreamer是 transformers 自带的输出流对象模型每解码出一个新 token就把它推进队列主线程迭代队列即可实时拿到文本片段。核心思路只有三步建流 → 塞进 generation_config → 开线程跑 chat主线程迭代。from transformers import TextIteratorStreamer from threading import Thread # 1. 初始化流式器跳过 prompt 与特殊 token10 秒超时保护 streamer TextIteratorStreamer(tokenizer, skip_promptTrue, skip_special_tokensTrue, timeout10) # 2. 把 streamer 放进生成配置 generation_config dict(max_new_tokens1024, do_sampleFalse, streamerstreamer) # 3. 子线程执行 chat主线程逐段消费流 thread Thread(targetmodel.chat, kwargsdict( tokenizertokenizer, pixel_valuespixel_values, questionquestion, historyNone, return_historyFalse, generation_configgeneration_config, )) thread.start() for new_text in streamer: if new_text model.conv_template.sep: # 遇到对话分隔符即结束 break print(new_text, end, flushTrue) # 实时打印每个片段几个关键参数说明skip_promptTrue不把输入提示回显出来只输出模型新生成的部分timeout10两次取词间隔超过 10 秒就结束迭代防止主线程被挂起do_sampleFalse流式演示建议贪心解码输出稳定、便于观察逐字效果为什么必须开线程model.chat内部会阻塞直到生成完毕若在主线程执行for new_text in streamer永远轮不到运行。完整可运行的加载与流式输出代码见 README.md 的Streaming Output小节模型加载bf16 加载、BNB 8-bit 量化、多卡切分示例也在同一文件的Model Loading小节。批量推理完整示例batch_chat 一次喂多张图如果你的任务是对 100 张图分别做描述串行调用chat意味着 100 次等待而batch_chat会把多条样本左侧对齐、填充拼接一次generate全部完成。它的实现位于 modeling_internvl_chat.py。多模态批量有个特殊点动态分辨率。每张图会被切成 112 个 448×448 的 tile见max_num参数不同图片的 tile 数往往不同因此需要num_patches_list告诉模型每张图占几块# 加载两张示例图各自动态切分为 tile 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 数量并把所有 tile 拼成一个大 batch num_patches_list [pixel_values1.size(0), pixel_values2.size(0)] pixel_values torch.cat((pixel_values1, pixel_values2), dim0) 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) for question, response in zip(questions, responses): print(fUser: {question}\nAssistant: {response})内部发生了什么对照源码 batch_chat 可以看到为每个问题独立套对话模板把image占位符替换成num_image_token × num_patches个视觉 tokentokenizer.padding_side left——左填充是批量生成的关键保证所有样本的起始位置对齐一次generate得到整个 batch 的输出再用batch_decode解码并按sep截断。load_image等预处理函数含dynamic_preprocess动态切 tile 逻辑的完整定义在 README.md 的Inference with Transformers代码块中整段复制即可使用。两者怎么选速查对照对比项TextIteratorStreamerbatch_chat适用场景在线交互、低延迟体验离线批处理、数据标注吞吐表现首 token 延迟极低总时长不变批量吞吐显著提升多轮对话支持传history❌ 仅单轮代码侵入性需开线程一个方法调用新手常见坑位batch_chat 不支持多轮传入history或return_historyTrue会直接抛NotImplementedError见 modeling_internvl_chat.py。多轮交互请改用chatnum_patches_list必须与问题数量、顺序一一对应且所有 tile 数之和要等于pixel_values.shape[0]否则 assert 报错别忘记版本要求README 明确需要transformers4.37.2并传trust_remote_codeTrue显存预算README 注明 14B 模型在 8-bit 量化下需 2 张 80GB GPU非量化至少 3 张 80GB GPU批量推理前请先核对batch size × 输出长度的显存占用。相关资料索引文件内容README.md模型加载、单轮/多轮对话、流式输出、批量推理、视频理解全套示例modeling_internvl_chat.pybatch_chat批量推理实现左填充 一次 generatemodeling_internvl_chat.pychat单轮/多轮对话实现modeling_internvl_chat.py视觉特征注入与generate核心逻辑config.json模型架构配置ViT、LLM、template 等一句话总结交互式应用上流式离线任务上批量——TextIteratorStreamer 让用户体验从干等变成边生成边阅读batch_chat 让吞吐从串行变成并行两者配合即可覆盖 InternVL3-14B-Pretrained 的绝大多数推理场景。赞分享【免费下载链接】InternVL3-14B-Pretrained项目地址https://ai.gitcode.com/OpenGVLab/InternVL3-14B-Pretrained点击查看免费下载相关推荐批量推理提速指南InternVL3-38B-Instruct batch_chat 批处理实战批量推理提速指南InternVL3 38B Instruct batch_chat 批处理实战 InternVL3 38B Instruct 是 OpenGVInternVL3-2B-AWQ进阶5技巧流式输出、多图对比与批量推理完整清单InternVL3 2B AWQ进阶5技巧流式输出、多图对比与批量推理完整清单 InternVL3 2B AWQ 是 InternVL3 系列中参数量仅 2BSerial Studio 的 C20 惯用法Concepts、RAII、移动语义与并发模式的源码级解析Serial Studio 的 C20 惯用法Concepts、RAII、移动语义与并发模式的源码级解析 Serial Studio 是一个支持 UART上一篇3分钟掌握ArchWSL包依赖分析从数据到可视化的完整流程下一篇capacitor-updater实战案例3步实现生产环境热更新部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑