HuggingFace镜像/Phi-3-vision-128k-instruct
模型介绍文件和版本分析
下载使用量0

模型概述

Phi-3-Vision-128K-Instruct 是一款轻量级、最先进的开放式多模态模型,其构建基础包括合成数据和经过筛选的公开网站数据,重点关注文本和视觉领域高质量、推理密集型数据。该模型属于 Phi-3 模型家族,其多模态版本支持 128K 上下文长度(以 tokens 为单位)。模型经过严格的增强流程,融合了监督微调与直接偏好优化技术,以确保精准遵循指令并具备稳健的安全措施。

资源与技术文档:

  • Phi-3 微软博客
  • Phi-3 技术报告
  • Azure AI Studio 上的 Phi-3
  • Phi-3 实践指南
短上下文长上下文
Mini4K [HF] ; [ONNX] ; [GGUF]128K [HF] ; [ONNX]
Small8K [HF] ; [ONNX]128K [HF] ; [ONNX]
Medium4K [HF] ; [ONNX]128K [HF] ; [ONNX]
Vision128K [HF]

预期用途

主要使用场景

该模型旨在面向英语的广泛商业和研究用途。它适用于具备视觉和文本输入能力的通用人工智能系统及应用,尤其适合以下场景:

  1. 内存/计算资源受限的环境;
  2. 延迟敏感型场景;
  3. 通用图像理解;
  4. 光学字符识别(OCR);
  5. 图表和表格理解。

我们的模型旨在加速高效语言模型和多模态模型的研究,并作为生成式人工智能驱动功能的基础组件。

使用场景考量

我们的模型并非针对所有下游用途进行专门设计或评估。开发人员在选择使用场景时,应考虑语言模型的常见局限性,并在特定下游用途中使用之前,对准确性、安全性和公平性进行评估和缓解,尤其是在高风险场景中。 开发人员应了解并遵守与其使用场景相关的适用法律或法规(包括隐私、贸易合规法律等)。

本模型卡片中的任何内容均不应被解释为或视为对模型发布所依据的许可的限制或修改。

使用方法

Phi-3-Vision-128K-Instruct 已集成到 transformers 的开发版本(4.40.2)中。在通过 pip 发布官方版本之前,请确保执行以下操作之一:

  • 加载模型时,确保将 trust_remote_code=True 作为 from_pretrained() 函数的参数传入。

  • 将本地 transformers 更新至开发版本:pip uninstall -y transformers && pip install git+https://github.com/huggingface/transformers。此命令是克隆并从源代码安装的替代方法。

可通过 pip list | grep transformers 验证当前 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.40.2

Phi-3-Vision-128K-Instruct 也可在 Azure AI Studio 中获取。

对话格式

鉴于训练数据的特性,Phi-3-Vision-128K-Instruct 模型最适合处理单张图像输入,并使用如下对话格式的提示词。 你可以按照以下通用模板,将提示词与单张图像一同提供:

<|user|>\n<|image_1|>\n{prompt}<|end|>\n<|assistant|>\n 

模型在 <|assistant|> 之后生成文本。在多轮对话的情况下,提示词可按以下格式设置:

<|user|>\n<|image_1|>\n{prompt_1}<|end|>\n<|assistant|>\n{response_1}<|end|>\n<|user|>\n{prompt_2}<|end|>\n<|assistant|>\n 

示例推理代码

以下代码片段展示了如何快速在 GPU 上运行模型:

from PIL import Image 
import requests 
from transformers import AutoModelForCausalLM 
from transformers import AutoProcessor 

model_id = "microsoft/Phi-3-vision-128k-instruct" 

model = AutoModelForCausalLM.from_pretrained(model_id, device_map="cuda", trust_remote_code=True, torch_dtype="auto")

processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True) 

messages = [ 
    {"role": "user", "content": "<|image_1|>\nWhat is shown in this image?"}, 
    {"role": "assistant", "content": "The chart displays the percentage of respondents who agree with various statements about their preparedness for meetings. It shows five categories: 'Having clear and pre-defined goals for meetings', 'Knowing where to find the information I need for a meeting', 'Understanding my exact role and responsibilities when I'm invited', 'Having tools to manage admin tasks like note-taking or summarization', and 'Having more focus time to sufficiently prepare for meetings'. Each category has an associated bar indicating the level of agreement, measured on a scale from 0% to 100%."}, 
    {"role": "user", "content": "Provide insightful questions to spark discussion."} 
] 

url = "https://assets-c4akfrf5b4d3f4b7.z01.azurefd.net/assets/2024/04/BMDataViz_661fb89f3845e.png" 
image = Image.open(requests.get(url, stream=True).raw) 

prompt = processor.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

inputs = processor(prompt, [image], return_tensors="pt").to("cuda:0") 

generation_args = { 
    "max_new_tokens": 500, 
    "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) 

其他基础示例可在此处获取。

负责任的 AI 考量

与其他模型类似,Phi 系列模型可能会表现出不公平、不可靠或冒犯性的行为。需要注意的一些局限性行为包括:

  • 服务质量:Phi 模型主要基于英文文本进行训练。非英语语言的性能会较差。训练数据中代表性不足的英语变体,其性能可能不如标准美式英语。
  • 伤害表征与刻板印象的延续:这些模型可能会过度或不足地代表某些人群,抹去某些群体的代表性,或强化贬低性或负面的刻板印象。尽管经过了安全训练,但由于不同群体的代表性水平不同,或者训练数据中反映现实世界模式和社会偏见的负面刻板印象示例的普遍性,这些局限性可能仍然存在。
  • 不当或冒犯性内容:这些模型可能会生成其他类型的不当或冒犯性内容,这可能使其在没有针对特定用例的额外缓解措施的情况下,不适用于敏感场景。
  • 信息可靠性:语言模型可能会生成无意义的内容或编造听起来合理但不准确或过时的内容。
  • 代码范围有限:Phi-3 的大部分训练数据基于 Python,并使用常见的包,如“typing、math、random、collections、datetime、itertools”。如果模型生成的 Python 脚本使用了其他包或其他语言的脚本,我们强烈建议用户手动验证所有 API 的使用。

开发人员应应用负责任的 AI 最佳实践,并负责确保特定用例符合相关法律法规(例如隐私、贸易等)。需要考虑的重要领域包括:

  • 分配:在可能对法律地位或资源、生活机会分配(例如住房、就业、信贷等)产生重大影响的场景中,若未进行进一步评估和额外的去偏技术处理,模型可能不适用。
  • 高风险场景:开发人员应评估在高风险场景中使用模型的适用性,在这些场景中,不公平、不可靠或冒犯性的输出可能会造成极高代价或导致伤害。这包括在准确性和可靠性至关重要的敏感或专业领域提供建议(例如法律或健康建议)。应根据部署环境在应用层面实施额外的安全措施。
  • 错误信息:模型可能会产生不准确的信息。开发人员应遵循透明度最佳实践,并告知最终用户他们正在与 AI 系统交互。在应用层面,开发人员可以构建反馈机制和管道,将响应基于特定用例的上下文信息,这种技术称为检索增强生成(RAG)。
  • 有害内容生成:开发人员应根据其上下文评估输出,并使用适用于其用例的可用安全分类器或自定义解决方案。
  • 滥用:可能存在其他形式的滥用,如欺诈、垃圾邮件或恶意软件制作,开发人员应确保其应用程序不违反适用法律法规。
  • 个人识别:具有视觉功能的模型可能具有在图像中唯一识别人的潜力。安全训练会引导模型拒绝此类请求,但开发人员应考虑并根据其各自司法管辖区的要求实施适当的额外缓解措施或用户同意流程(例如,在处理前对图像输入中的人脸进行模糊处理的措施)。

训练

模型

  • 架构:Phi-3-Vision-128K-Instruct 拥有 42 亿参数,包含图像编码器、连接器、投影器和 Phi-3 Mini 语言模型。
  • 输入:文本和图像。最适合使用聊天格式的提示词。
  • 上下文长度:128K tokens
  • 显卡:512 张 H100-80G
  • 训练时间:1.5 天
  • 训练数据:5000 亿视觉和文本 tokens
  • 输出:针对输入生成的文本
  • 日期:我们的模型在 2024 年 2 月至 4 月期间进行训练
  • 状态:这是一个基于离线文本数据集训练的静态模型,数据截止日期为 2024 年 3 月 15 日。随着模型的改进,我们可能会发布未来版本的调优模型。
  • 发布类型:开放权重发布
  • 发布日期:模型权重于 2024 年 5 月 21 日发布。

数据集

我们的训练数据来源广泛,主要包括以下几类:

  1. 经过严格质量筛选的公开文档,精选的高质量教育数据和代码;
  2. 精选的高质量图文交错数据;
  3. 新创建的合成“教科书式”数据,用于教授数学、编码、常识推理、世界通用知识(科学、日常活动、心智理论等),以及新创建的图像数据,例如图表/表格/示意图/幻灯片;
  4. 高质量的聊天格式监督数据,涵盖各种主题,以反映人类在指令遵循、真实性、诚实性和帮助性等不同方面的偏好。

数据收集过程涉及从公开可用文档中获取信息,并采用细致的方法过滤掉不良文档和图像。为保护隐私,我们仔细筛选了各种图像和文本数据源,以从训练数据中移除或清理任何潜在的个人数据。

更多详细信息可参见 Phi-3 技术报告。

基准测试

为了解模型能力,我们使用内部基准测试平台,在各种零样本基准测试中对 Phi-3-Vision-128K-Instruct 与一系列模型进行了比较。

基准测试Phi-3 Vision-128K-InLlaVA-1.6 Vicuna-7BQWEN-VL ChatLlama3-Llava-Next-8BClaude-3 HaikuGemini 1.0 Pro VGPT-4V-Turbo
MMMU40.434.239.036.440.742.055.5
MMBench80.576.375.879.462.480.086.1
ScienceQA90.870.667.273.772.079.775.7
MathVista44.531.529.434.833.235.047.5
InterGPS38.120.522.324.632.128.641.0
AI2D76.763.159.866.960.362.874.7
ChartQA81.455.050.965.859.358.062.3
TextVQA70.964.659.455.762.764.768.1
POPE85.887.282.687.074.484.283.7

软件

  • PyTorch
  • Transformers
  • Flash-Attention

硬件

请注意,默认情况下,Phi-3-Vision-128K模型使用Flash Attention,这需要特定类型的GPU硬件才能运行。我们已在以下GPU类型上进行了测试:

  • NVIDIA A100
  • NVIDIA A6000
  • NVIDIA H100

在Windows上运行或不使用Flash Attention

要在这些环境中启用模型,您可以考虑按照以下步骤操作:

步骤1:在modeling_phi3_v.py文件中,注释掉第52行至第56行的Flash Attention导入代码。

# if is_flash_attn_2_available():
#     from flash_attn import flash_attn_func, flash_attn_varlen_func
#     from flash_attn.bert_padding import index_first_axis, pad_input, unpad_input  # noqa

#     _flash_supports_window_size = "window_size" in list(inspect.signature(flash_attn_func).parameters)

步骤 2:在 config.json 中将 _"attn_implementation" 从 "flash_attention_2" 更改为 "eager",或者在创建模型时按以下方式禁用 flash attention。

model = AutoModelForCausalLM.from_pretrained('microsoft/Phi-3-vision-128k-instruct', device_map="cuda", trust_remote_code=True, torch_dtype="auto", _attn_implementation="eager")

许可协议

本模型根据 MIT 许可协议 进行许可。

商标

本项目可能包含项目、产品或服务的商标或徽标。Microsoft 商标或徽标的授权使用受 Microsoft 商标与品牌指南 约束,且必须遵循该指南。在本项目的修改版本中使用 Microsoft 商标或徽标不得造成混淆或暗示 Microsoft 的赞助。任何第三方商标或徽标的使用均受该第三方政策的约束。