模型简介
模型特点
模型能力
使用案例
🚀 Phi-4-multimodal-instruct
Phi-4-multimodal-instruct 是一款轻量级的开源多模态基础模型,它利用了为 Phi-3.5 和 4.0 模型所做的语言、视觉和语音研究及数据集。该模型能够处理文本、图像和音频输入,并生成文本输出,拥有 128K 的上下文长度。此外,该模型经过了增强处理,结合了监督微调、直接偏好优化和基于人类反馈的强化学习(RLHF),以支持精确的指令遵循和安全措施。
🚀 快速开始
Phi-4-multimodal-instruct 模型可用于广泛的多语言和多模态商业及研究用途。以下是使用该模型的基本步骤:
- 环境准备:确保安装了所需的 Python 包,如
transformers
、torch
等。 - 模型加载:从 Hugging Face 下载模型权重,并使用
transformers
库加载模型。 - 输入处理:根据不同的任务,准备相应的文本、图像或音频输入。
- 推理生成:使用加载的模型对输入进行推理,生成文本输出。
以下是一个简单的代码示例,展示了如何在本地加载模型并进行推理:
import requests
import torch
import os
import io
from PIL import Image
import soundfile as sf
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
from urllib.request import urlopen
# Define model path
model_path = "microsoft/Phi-4-multimodal-instruct"
# Load model and processor
processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
attn_implementation='flash_attention_2',
).cuda()
# Load generation config
generation_config = GenerationConfig.from_pretrained(model_path)
# Define prompt structure
user_prompt = '<|user|>'
assistant_prompt = '<|assistant|>'
prompt_suffix = '<|end|>'
# Part 1: Image Processing
print("\n--- IMAGE PROCESSING ---")
image_url = 'https://www.ilankelman.org/stopsigns/australia.jpg'
prompt = f'{user_prompt}<|image_1|>What is shown in this image?{prompt_suffix}{assistant_prompt}'
print(f'>>> Prompt\n{prompt}')
# Download and open image
image = Image.open(requests.get(image_url, stream=True).raw)
inputs = processor(text=prompt, images=image, return_tensors='pt').to('cuda:0')
# Generate response
generate_ids = model.generate(
**inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
generate_ids = generate_ids[:, inputs['input_ids'].shape[1]:]
response = processor.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)[0]
print(f'>>> Response\n{response}')
# Part 2: Audio Processing
print("\n--- AUDIO PROCESSING ---")
audio_url = "https://upload.wikimedia.org/wikipedia/commons/b/b0/Barbara_Sahakian_BBC_Radio4_The_Life_Scientific_29_May_2012_b01j5j24.flac"
speech_prompt = "Transcribe the audio to text, and then translate the audio to French. Use <sep> as a separator between the original transcript and the translation."
prompt = f'{user_prompt}<|audio_1|>{speech_prompt}{prompt_suffix}{assistant_prompt}'
print(f'>>> Prompt\n{prompt}')
# Downlowd and open audio file
audio, samplerate = sf.read(io.BytesIO(urlopen(audio_url).read()))
# Process with the model
inputs = processor(text=prompt, audios=[(audio, samplerate)], return_tensors='pt').to('cuda:0')
generate_ids = model.generate(
**inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
generate_ids = generate_ids[:, inputs['input_ids'].shape[1]:]
response = processor.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)[0]
print(f'>>> Response\n{response}')
✨ 主要特性
- 多模态支持:能够处理文本、图像和音频输入,并生成文本输出。
- 多语言能力:支持多种语言,包括阿拉伯语、中文、捷克语、丹麦语等。
- 强大的推理能力:在数学和逻辑推理方面表现出色,支持函数和工具调用。
- 视觉理解:具备一般图像理解、光学字符识别、图表和表格理解等能力。
- 语音处理:支持语音识别、翻译、问答和总结等任务。
📦 安装指南
依赖安装
Phi-4 系列已集成在 transformers
的 4.48.2
版本中。可以使用以下命令验证当前 transformers
版本:
pip list | grep transformers
以下是所需的 Python 包示例:
flash_attn==2.7.4.post1
torch==2.6.0
transformers==4.48.2
accelerate==1.3.0
soundfile==0.13.1
pillow==11.1.0
scipy==1.15.2
torchvision==0.21.0
backoff==2.2.1
peft==0.13.2
模型下载
可以从 Hugging Face 下载 Phi-4-multimodal-instruct 模型的权重:
from transformers import AutoModelForCausalLM, AutoProcessor
model_path = "microsoft/Phi-4-multimodal-instruct"
model = AutoModelForCausalLM.from_pretrained(model_path)
processor = AutoProcessor.from_pretrained(model_path)
💻 使用示例
基础用法
以下是一个简单的文本生成示例:
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
model_path = "microsoft/Phi-4-multimodal-instruct"
model = AutoModelForCausalLM.from_pretrained(model_path)
processor = AutoProcessor.from_pretrained(model_path)
generation_config = GenerationConfig.from_pretrained(model_path)
prompt = "<|user|>How to explain Internet for a medieval knight?<|end|><|assistant|>"
inputs = processor(text=prompt, return_tensors='pt')
generate_ids = model.generate(
**inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
response = processor.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)[0]
print(response)
高级用法
以下是一个处理图像和音频输入的示例:
import requests
import torch
import os
import io
from PIL import Image
import soundfile as sf
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
from urllib.request import urlopen
model_path = "microsoft/Phi-4-multimodal-instruct"
model = AutoModelForCausalLM.from_pretrained(model_path)
processor = AutoProcessor.from_pretrained(model_path)
generation_config = GenerationConfig.from_pretrained(model_path)
# Image processing
image_url = 'https://www.ilankelman.org/stopsigns/australia.jpg'
image = Image.open(requests.get(image_url, stream=True).raw)
image_prompt = '<|user|><|image_1|>What is shown in this image?<|end|><|assistant|>'
image_inputs = processor(text=image_prompt, images=image, return_tensors='pt')
image_generate_ids = model.generate(
**image_inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
image_response = processor.batch_decode(
image_generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)[0]
print("Image response:", image_response)
# Audio processing
audio_url = "https://upload.wikimedia.org/wikipedia/commons/b/b0/Barbara_Sahakian_BBC_Radio4_The_Life_Scientific_29_May_2012_b01j5j24.flac"
audio, samplerate = sf.read(io.BytesIO(urlopen(audio_url).read()))
audio_prompt = '<|user|><|audio_1|>Transcribe the audio to text, and then translate the audio to French. Use <sep> as a separator between the original transcript and the translation.<|end|><|assistant|>'
audio_inputs = processor(text=audio_prompt, audios=[(audio, samplerate)], return_tensors='pt')
audio_generate_ids = model.generate(
**audio_inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
audio_response = processor.batch_decode(
audio_generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)[0]
print("Audio response:", audio_response)
📚 详细文档
输入格式
Phi-4-multimodal-instruct 模型支持多种输入格式,包括文本、图像和音频。以下是不同输入格式的示例:
文本聊天格式
用于一般对话和指令:
<|system|>You are a helpful assistant.<|end|><|user|>How to explain Internet for a medieval knight?<|end|><|assistant|>
工具启用的函数调用格式
当用户希望模型根据给定工具提供函数调用时使用:
<|system|>You are a helpful assistant with some tools.<|tool|>[{"name": "get_weather_updates", "description": "Fetches weather updates for a given city using the RapidAPI Weather API.", "parameters": {"city": {"description": "The name of the city for which to retrieve weather information.", "type": "str", "default": "London"}}}]<|/tool|><|end|><|user|>What is the weather like in Paris today?<|end|><|assistant|>
视觉-语言格式
用于包含图像的对话:
<|user|><|image_1|>Describe the image in detail.<|end|><|assistant|>
语音-语言格式
用于各种语音和音频任务:
<|user|><|audio_1|>{task prompt}<|end|><|assistant|>
视觉-语音格式
用于包含图像和音频的对话:
<|user|><|image_1|><|audio_1|><|end|><|assistant|>
输入要求
图像
- 格式:支持常见的 RGB/灰度图像格式,如
.jpg
、.png
等。 - 分辨率:取决于 GPU 内存大小。训练时支持 64 个裁剪,正方形图像的分辨率约为 (8448 x 8448)。多图像输入时,最多支持 64 帧,但随着帧数增加,每帧的分辨率需要降低以适应内存。
音频
- 格式:支持
soundfile
包可以加载的任何音频格式。 - 长度:为保证性能,建议最大音频长度为 40 秒。对于总结任务,建议最大音频长度为 30 分钟。
模型加载
可以使用 transformers
库在本地加载模型:
from transformers import AutoModelForCausalLM, AutoProcessor
model_path = "microsoft/Phi-4-multimodal-instruct"
model = AutoModelForCausalLM.from_pretrained(model_path)
processor = AutoProcessor.from_pretrained(model_path)
🔧 技术细节
模型架构
Phi-4-multimodal-instruct 是一个具有 56 亿参数的多模态 Transformer 模型,以预训练的 Phi-4-Mini-Instruct 作为骨干语言模型,并配备了先进的视觉和语音编码器及适配器。
训练数据
模型的训练数据包括多种来源,总计 5 万亿文本令牌,具体包括:
- 公开文档:经过质量过滤的公开文档、精选的高质量教育数据和代码。
- 合成数据:新创建的合成“教科书式”数据,用于教授数学、编码、常识推理和世界通用知识。
- 人工标注数据:高质量的聊天格式人工标注数据。
- 图像-文本数据:精选的高质量图像-文本交织数据。
- 图像和视频数据:合成和公开可用的图像、多图像和视频数据。
- 语音-文本数据:匿名的内部语音-文本对数据,带有强/弱转录。
- 语音数据:精选的高质量公开可用和匿名的内部语音数据,带有特定任务的监督。
- 合成语音数据:合成语音数据。
- 视觉-语音数据:合成视觉-语音数据。
训练过程
模型采用了监督微调(SFT)、直接偏好优化(DPO)和基于人类反馈的强化学习(RLHF)等技术进行训练,以提高模型的指令遵循能力和安全性。
基准测试
为了评估模型的性能,使用了多种基准测试数据集,包括视觉、语音和安全相关的数据集。具体的基准测试设置和数据集信息请参考附录 A。
📄 许可证
该模型遵循 MIT 许可证。









