模型简介
模型特点
模型能力
使用案例
🚀 Phi-3.5-vision
Phi-3.5-vision是一款轻量级、先进的开源多模态模型。它基于包含合成数据和公开网站数据的数据集进行训练,专注于高质量、富含推理的文本和视觉数据。该模型属于Phi-3模型家族,多模态版本支持128K上下文长度(以令牌为单位)。
🚀 快速开始
Phi-3.5-vision模型适用于广泛的商业和研究用途,尤其在英文场景下表现出色。它可用于具有视觉和文本输入功能的通用AI系统和应用,能在内存/计算受限环境、低延迟场景中发挥作用,还可用于一般图像理解、光学字符识别、图表和表格理解、多图像比较以及多图像或视频片段总结等任务。
✨ 主要特性
- 轻量级与高性能:基于高质量数据集训练,在多模态任务中表现出色。
- 广泛的应用场景:适用于多种商业和研究用途,支持多种视觉和文本相关任务。
- 长上下文支持:多模态版本支持128K上下文长度,能处理更复杂的输入。
📦 安装指南
环境要求
当前transformers
版本可通过以下命令验证:pip list | grep transformers
。
所需的包示例如下:
flash_attn==2.5.8
numpy==1.24.4
Pillow==10.3.0
Requests==2.31.0
torch==2.3.0
torchvision==0.18.0
transformers==4.43.0
accelerate==0.30.0
Phi-3.5-vision-Instruct也可在Azure AI Studio中使用。
💻 使用示例
基础用法
from PIL import Image
import requests
from transformers import AutoModelForCausalLM
from transformers import AutoProcessor
model_id = "microsoft/Phi-3.5-vision-instruct"
# Note: set _attn_implementation='eager' if you don't have flash_attn installed
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
trust_remote_code=True,
torch_dtype="auto",
_attn_implementation='flash_attention_2'
)
# for best performance, use num_crops=4 for multi-frame, num_crops=16 for single-frame.
processor = AutoProcessor.from_pretrained(model_id,
trust_remote_code=True,
num_crops=4
)
images = []
placeholder = ""
# Note: if OOM, you might consider reduce number of frames in this example.
for i in range(1,20):
url = f"https://image.slidesharecdn.com/azureintroduction-191206101932/75/Introduction-to-Microsoft-Azure-Cloud-{i}-2048.jpg"
images.append(Image.open(requests.get(url, stream=True).raw))
placeholder += f"<|image_{i}|>\n"
messages = [
{"role": "user", "content": placeholder+"Summarize the deck of slides."},
]
prompt = processor.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
inputs = processor(prompt, images, return_tensors="pt").to("cuda:0")
generation_args = {
"max_new_tokens": 1000,
"temperature": 0.0,
"do_sample": False,
}
generate_ids = model.generate(**inputs,
eos_token_id=processor.tokenizer.eos_token_id,
**generation_args
)
# remove input tokens
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(response)
高级用法
# 若要实现最佳性能,多帧处理建议设置 num_crops=4,单帧处理建议设置 num_crops=16。
# 若要关闭 flash_attention,可设置 _attn_implementation='eager'。
📚 详细文档
输入格式
鉴于训练数据的性质,Phi-3.5-vision模型最适合使用以下聊天格式的提示:
- 单图像:
<|user|>\n<|image_1|>\n{prompt}<|end|>\n<|assistant|>\n
- 多轮对话:
<|user|>\n<|image_1|>\n{prompt_1}<|end|>\n<|assistant|>\n{response_1}<|end|>\n<|user|>\n{prompt_2}<|end|>\n<|assistant|>\n
对于多图像使用场景,在提示前面添加多个图像占位符。<|image_{}|>
索引应从1开始。示例提示如下:
<|user|>\n<|image_1|>\n<|image_2|>\n<|image_3|>\n<|image_4|>\n{prompt}<|end|>\n<|assistant|>\n
本地加载模型
获取Phi-3.5-vision-instruct模型检查点后,用户可使用上述示例代码进行推理。
模型信息
属性 | 详情 |
---|---|
模型类型 | Phi-3.5-vision具有42亿个参数,包含图像编码器、连接器、投影器和Phi-3 Mini语言模型。 |
输入 | 文本和图像,最适合使用聊天格式的提示。 |
上下文长度 | 128K令牌 |
GPU | 256个A100 - 80G |
训练时间 | 6天 |
训练数据 | 5000亿个令牌(视觉令牌 + 文本令牌) |
输出 | 针对输入生成的文本 |
训练日期 | 2024年7月至8月 |
状态 | 这是一个基于截止日期为2024年3月15日的离线文本数据集训练的静态模型。随着模型的改进,未来可能会发布调优后的版本。 |
发布日期 | 2024年8月 |
数据概述
训练数据来源广泛,包括:
- 经过严格质量筛选的公开文档、精选的高质量教育数据和代码。
- 精选的高质量图像 - 文本交错数据。
- 新创建的合成“教科书式”数据,用于教授数学、编码、常识推理、世界常识(科学、日常活动、心理理论等),以及新创建的图像数据(如图表、表格、图表、幻灯片)、多图像和视频数据(如短视频片段、相似图像对)。
- 涵盖各种主题的高质量聊天格式监督数据,以反映人类在指令遵循、真实性、诚实性和有用性等不同方面的偏好。 数据收集过程中,从公开文档中获取信息,并精心过滤掉不良文档和图像。为保护隐私,对各种图像和文本数据源进行了仔细过滤,以去除训练数据中任何潜在的个人数据。有关数据的更多详细信息,请参阅Phi-3技术报告。
微调方法
建议用户查看Phi-3 CookBook视觉微调配方。
基准测试
为了解模型能力,使用内部基准测试平台在多种零样本基准测试中对Phi-3.5-vision与一组模型进行了比较。以下是在代表性基准测试上的模型质量概述:
类别 | 基准测试 | Phi-3.5-vision-instruct | Intern-VL-2-4B | Intern-VL-2-8B | Gemini-1.5-Flash | GPT-4o-mini 2024-7-18 | Claude-3.5-Sonnet | Gemini-1.5-Pro | GPT-4o 2024-5-13 |
---|---|---|---|---|---|---|---|---|---|
流行聚合基准测试 | MMMU (val) | 43.0 | 44.22 | 46.33 | 49.33 | 52.1 | 52.67 | 54.11 | 61.78 |
MMBench (dev-en) | 81.9 | 83.4 | 87.0 | 85.7 | 83.8 | 82.3 | 87.9 | 88.4 | |
视觉科学知识推理 | ScienceQA (img-test) | 91.3 | 94.9 | 95.9 | 84.5 | 84.0 | 73.8 | 86.0 | 88.5 |
视觉数学推理 | MathVista (testmini) | 43.9 | 53.7 | 51.1 | 55.3 | 38.8 | 54.0 | 57.4 | 54.4 |
InterGPS (test) | 36.3 | 45.6 | 53.2 | 39.4 | 39.9 | 45.6 | 58.2 | 46.9 | |
图表推理 | AI2D (test) | 78.1 | 77.3 | 81.4 | 78.4 | 75.2 | 68.9 | 75.6 | 82.8 |
ChartQA (test) | 81.8 | 78.8 | 80.4 | 57.6 | 54.5 | 73.2 | 68.2 | 64.0 | |
文档智能 | TextVQA (val) | 72.0 | 66.2 | 68.8 | 67.4 | 70.9 | 70.5 | 64.5 | 75.6 |
对象视觉存在验证 | POPE (test) | 86.1 | 83.3 | 84.2 | 86.1 | 83.6 | 76.6 | 89.3 | 87.0 |
安全评估和红队测试
方法
Phi-3系列模型采用了强大的安全后训练方法。该方法利用了各种开源和内部生成的数据集。安全对齐采用的总体技术是监督微调(SFT)和基于人类反馈的强化学习(RLHF)方法的结合,利用人类标注和合成的英语数据集,包括专注于有用性和无害性的公开数据集以及针对多个安全类别的各种问答。
安全评估
利用各种评估技术,包括红队测试、对抗性对话模拟和安全评估基准数据集,评估Phi-3.5模型在多个风险类别中产生不良输出的倾向。采用多种方法来弥补单一方法的局限性。有关安全对齐的更多详细信息,请参阅技术报告。
🔧 技术细节
安全评估和红队测试
Phi-3家族模型采用了强大的安全后训练方法,结合了SFT和RLHF技术,利用多种开源和内部生成的数据集进行安全对齐。通过红队测试、对抗性对话模拟和安全评估基准数据集等多种评估技术,评估模型在多个风险类别中产生不良输出的倾向。
📄 许可证
该模型遵循MIT许可证。
商标说明
本项目可能包含项目、产品或服务的商标或标识。对微软商标或标识的授权使用需遵循微软商标和品牌指南。在本项目的修改版本中使用微软商标或标识不得造成混淆或暗示微软的赞助。任何第三方商标或标识的使用需遵循这些第三方的政策。
负责任的AI考虑
与其他模型一样,Phi系列模型可能存在不公平、不可靠或冒犯性的行为。开发者在使用模型时,应考虑以下潜在问题,并遵循负责任的AI最佳实践,确保特定用例符合相关法律法规:
⚠️ 重要提示
- 服务质量:Phi模型主要基于英文文本训练,非英文语言的性能可能较差。训练数据中代表性较低的英语变体的性能可能不如标准美式英语。
- 伤害表征和刻板印象延续:这些模型可能过度或不足表征某些人群,抹去某些群体的代表性,或强化贬低性或负面刻板印象。尽管进行了安全后训练,但由于不同群体的表征水平不同或训练数据中反映现实世界模式和社会偏见的负面刻板印象示例普遍存在,这些局限性可能仍然存在。
- 不适当或冒犯性内容:这些模型可能产生其他类型的不适当或冒犯性内容,在敏感环境中部署时,若无针对特定用例的额外缓解措施,可能不适合。
- 信息可靠性:语言模型可能生成无意义的内容或编造听起来合理但不准确或过时的内容。
- 代码范围有限:Phi-3的大部分训练数据基于Python,并使用常见包(如“typing, math, random, collections, datetime, itertools”)。如果模型生成使用其他包或其他语言脚本的Python脚本,强烈建议用户手动验证所有API使用情况。
💡 使用建议
- 分配问题:在没有进一步评估和额外去偏技术的情况下,模型可能不适用于对法律地位、资源分配或生活机会(如住房、就业、信贷等)有重大影响的场景。
- 高风险场景:开发者应评估在高风险场景中使用模型的适用性,在这些场景中,不公平、不可靠或冒犯性的输出可能代价极高或导致伤害。这包括在敏感或专业领域提供建议(如法律或健康建议),在应用层面应根据部署上下文实施额外的保障措施。
- 错误信息:模型可能产生不准确的信息。开发者应遵循透明度最佳实践,并告知最终用户他们正在与AI系统交互。在应用层面,开发者可以构建反馈机制和管道,将响应基于特定用例的上下文信息,即检索增强生成(RAG)技术。
- 有害内容生成:开发者应根据上下文评估输出,并使用适用于其用例的可用安全分类器或自定义解决方案。
- 滥用问题:可能存在其他形式的滥用,如欺诈、垃圾邮件或恶意软件生产,开发者应确保其应用不违反适用的法律法规。
- 个人识别:具有视觉功能的模型可能有能力在图像中唯一识别个人。安全后训练会引导模型拒绝此类请求,但开发者应根据各自司法管辖区的要求,酌情考虑并实施额外的缓解措施或用户同意流程(例如,在处理图像输入之前采取措施模糊面部)。








