
Phi-4-Reasoning-Vision代码实例TextIteratorStreamer流式解析实战1. 项目概述Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具专为双卡RTX 4090环境优化。这个工具严格遵循官方SYSTEM PROMPT规范支持THINK/NOTHINK双推理模式能够处理图文多模态输入并实现流式输出与思考过程折叠展示。通过Streamlit搭建的宽屏交互界面该工具能够充分发挥15B大模型的深度推理能力为开发者提供专业级的多模态模型体验解决方案。2. 核心特性解析2.1 双卡并行优化针对15B大模型的显存占用问题我们实现了以下优化model AutoModelForCausalLM.from_pretrained( microsoft/phi-4-reasoning-vision-15B, device_mapauto, torch_dtypetorch.bfloat16, trust_remote_codeTrue )自动设备映射device_mapauto参数自动将模型拆分到两张4090显卡上精度优化使用torch.bfloat16精度加载模型平衡计算精度与显存占用显存管理模型层自动分配到cuda:0和cuda:1设备上充分利用双卡算力2.2 流式输出实现TextIteratorStreamer是实现流式输出的核心组件from transformers import TextIteratorStreamer streamer TextIteratorStreamer( tokenizer, skip_promptTrue, timeout60.0 ) def generate_response(): inputs processor(prompt, image, return_tensorspt).to(cuda) generation_kwargs dict( inputs, streamerstreamer, max_new_tokens1024, do_sampleTrue ) Thread(targetmodel.generate, kwargsgeneration_kwargs).start() return streamer异步生成使用独立线程处理模型生成避免阻塞主线程实时流式TextIteratorStreamer逐字返回生成结果超时控制设置60秒超时防止长时间无响应3. 多模态输入处理3.1 图文输入封装处理器将图片和文本封装为模型可接受的格式from transformers import AutoProcessor processor AutoProcessor.from_pretrained( microsoft/phi-4-reasoning-vision-15B, trust_remote_codeTrue ) def prepare_input(image_path, question): image Image.open(image_path).convert(RGB) prompt fUSER: image\n{question}\nASSISTANT: return prompt, image图片预处理统一转换为RGB格式提示词构造遵循官方SYSTEM PROMPT格式多模态封装处理器自动处理图文混合输入3.2 THINK/NOTHINK模式解析工具支持两种推理模式THINK模式模型展示完整思考过程输出格式thinking...thinking包裹中间推理适合需要解释的复杂问题NOTHINK模式直接输出最终答案简洁响应无中间过程适合简单问答场景4. 流式输出解析实战4.1 基础流式实现def stream_response(): generated_text for new_text in streamer: generated_text new_text yield generated_text逐字累积实时拼接新生成的文本生成器模式使用yield实现流式返回前端展示Streamlit通过st.write_stream()接收4.2 思考过程解析针对THINK模式的特殊处理def parse_think_response(text): think_blocks text.split(thinking)[1:] result {thinking: [], final: } for block in think_blocks: if thinking in block: think, final block.split(thinking, 1) result[thinking].append(think) result[final] final else: result[thinking].append(block) return result分隔符解析识别thinking标记内容分类分离思考过程和最终答案折叠展示前端将思考过程放入可折叠区域5. 完整代码示例5.1 后端核心逻辑import torch from threading import Thread from PIL import Image from transformers import ( AutoModelForCausalLM, AutoProcessor, TextIteratorStreamer ) class Phi4ReasoningVision: def __init__(self): self.model None self.processor None self.streamer None def load_model(self): self.model AutoModelForCausalLM.from_pretrained( microsoft/phi-4-reasoning-vision-15B, device_mapauto, torch_dtypetorch.bfloat16, trust_remote_codeTrue ) self.processor AutoProcessor.from_pretrained( microsoft/phi-4-reasoning-vision-15B, trust_remote_codeTrue ) def generate(self, image, question, think_modeTrue): prompt fUSER: image\n{question}\nASSISTANT: if think_mode: prompt thinking self.streamer TextIteratorStreamer( self.processor.tokenizer, skip_promptTrue, timeout60.0 ) inputs self.processor( textprompt, imagesimage, return_tensorspt ).to(cuda) generation_kwargs dict( inputs, streamerself.streamer, max_new_tokens1024, do_sampleTrue ) Thread(targetself.model.generate, kwargsgeneration_kwargs).start() return self.streamer5.2 Streamlit前端集成import streamlit as st from phi4_reasoning_vision import Phi4ReasoningVision st.cache_resource def load_model(): model Phi4ReasoningVision() model.load_model() return model def main(): st.title(Phi-4-Reasoning-Vision 多模态推理工具) model load_model() col1, col2 st.columns([1, 2]) with col1: image st.file_uploader(上传一张图片以供分析, type[jpg, png]) question st.text_area(提出你的问题, height100) think_mode st.checkbox(启用THINK模式, valueTrue) if st.button( 开始推理) and image: with st.spinner(正在唤醒双卡算力...): image Image.open(image).convert(RGB) streamer model.generate(image, question, think_mode) if think_mode: with st.expander(思考过程, expandedFalse): st.write_stream(stream_response(streamer)) else: st.write_stream(stream_response(streamer)) if __name__ __main__: main()6. 总结本文详细介绍了如何在Phi-4-Reasoning-Vision工具中实现TextIteratorStreamer流式解析关键要点包括双卡优化通过device_map自动分配模型层到双卡充分利用显存资源流式核心TextIteratorStreamer与多线程配合实现实时输出多模态处理处理器自动封装图文输入符合模型要求格式模式解析THINK/NOTHINK双模式支持灵活应对不同场景交互优化Streamlit前端实现思考过程折叠与实时展示这套方案不仅适用于Phi-4模型其流式处理和多模态适配思路也可迁移到其他大模型应用中。通过专业级的优化即使是15B参数的大模型也能在消费级双卡环境下流畅运行。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。