模型简介
模型特点
模型能力
使用案例
🚀 Phi-3.5 Mini-4K-Instruct模型
Phi-3.5 Mini-4K-Instruct是一款轻量级的开源模型,具有38亿参数。它基于Phi-3数据集训练,涵盖合成数据和高质量公开网站数据,在常识、语言理解、数学、代码、长上下文和逻辑推理等基准测试中表现出色,适用于内存/计算受限、低延迟场景以及强推理需求的通用AI系统和应用。
🚀 快速开始
Phi-3 Mini-4K-Instruct已集成在transformers
的4.41.2
版本中。可使用以下命令验证当前transformers
版本:
pip list | grep transformers
所需依赖包示例
flash_attn==2.5.8
torch==2.3.1
accelerate==0.31.0
transformers==4.41.2
你也可以在Azure AI Studio中使用该模型。
示例推理代码
以下代码片段展示了如何在GPU上快速运行该模型:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
torch.random.manual_seed(0)
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3-mini-4k-instruct",
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-4k-instruct")
messages = [
{"role": "system", "content": "You are a helpful AI assistant."},
{"role": "user", "content": "Can you provide ways to eat combinations of bananas and dragonfruits?"},
{"role": "assistant", "content": "Sure! Here are some ways to eat bananas and dragonfruits together: 1. Banana and dragonfruit smoothie: Blend bananas and dragonfruits together with some milk and honey. 2. Banana and dragonfruit salad: Mix sliced bananas and dragonfruits together with some lemon juice and honey."},
{"role": "user", "content": "What about solving an 2x + 3 = 7 equation?"},
]
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
)
generation_args = {
"max_new_tokens": 500,
"return_full_text": False,
"temperature": 0.0,
"do_sample": False,
}
output = pipe(messages, **generation_args)
print(output[0]['generated_text'])
注意:如果你想使用快速注意力机制(flash attention),可以在调用AutoModelForCausalLM.from_pretrained()
时添加attn_implementation="flash_attention_2"
参数。
✨ 主要特性
- 轻量级高性能:仅38亿参数,在多种基准测试中,与参数更多的模型表现相当。
- 多场景适用:适用于内存/计算受限环境、低延迟场景以及需要强推理能力(特别是数学和逻辑推理)的通用AI系统和应用。
- 持续优化:基于用户反馈更新,在指令遵循、结构化输出和推理能力上有显著提升。
📦 安装指南
Phi-3 Mini-4K-Instruct已集成在transformers
的4.41.2
版本中。你可以使用以下命令验证当前transformers
版本:
pip list | grep transformers
依赖安装
确保安装以下依赖包:
flash_attn==2.5.8
torch==2.3.1
accelerate==0.31.0
transformers==4.41.2
💻 使用示例
基础用法
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
torch.random.manual_seed(0)
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3-mini-4k-instruct",
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-4k-instruct")
messages = [
{"role": "system", "content": "You are a helpful AI assistant."},
{"role": "user", "content": "Can you provide ways to eat combinations of bananas and dragonfruits?"},
{"role": "assistant", "content": "Sure! Here are some ways to eat bananas and dragonfruits together: 1. Banana and dragonfruit smoothie: Blend bananas and dragonfruits together with some milk and honey. 2. Banana and dragonfruit salad: Mix sliced bananas and dragonfruits together with some lemon juice and honey."},
{"role": "user", "content": "What about solving an 2x + 3 = 7 equation?"},
]
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
)
generation_args = {
"max_new_tokens": 500,
"return_full_text": False,
"temperature": 0.0,
"do_sample": False,
}
output = pipe(messages, **generation_args)
print(output[0]['generated_text'])
高级用法
如果你想使用快速注意力机制(flash attention),可以在调用AutoModelForCausalLM.from_pretrained()
时添加attn_implementation="flash_attention_2"
参数:
model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-3-mini-4k-instruct",
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
attn_implementation="flash_attention_2"
)
📚 详细文档
预期用途
主要用例
该模型主要用于英文的商业和研究。适用于以下通用AI系统和应用场景:
- 内存/计算资源受限的环境;
- 对延迟有要求的场景;
- 需要强推理能力(特别是数学和逻辑推理)的场景。
该模型旨在加速语言和多模态模型的研究,可作为生成式AI功能的构建模块。
非预期用例
该模型并非针对所有下游用途进行设计和评估。开发者在选择用例时,应考虑语言模型的常见局限性,并在特定下游用例中使用之前,评估和缓解准确性、安全性和公平性问题,特别是在高风险场景中。
开发者应遵守与用例相关的适用法律法规(包括隐私、贸易合规等法律)。
发布说明
本次更新基于有价值的客户反馈,在原始指令微调的Phi-3-mini版本上进行改进。模型使用了额外的训练后数据,在指令遵循和结构化输出方面有显著提升。同时,还提高了多轮对话质量,明确支持<|system|>
标签,并显著增强了推理能力。
以下表格展示了新版本在公开和内部基准数据集上,在指令遵循、结构化输出和推理方面的改进:
基准测试 | 原始版本 | 2024年6月更新版本 |
---|---|---|
Instruction Extra Hard | 5.7 | 6.0 |
Instruction Hard | 4.9 | 5.1 |
Instructions Challenge | 24.6 | 42.3 |
JSON Structure Output | 11.5 | 52.3 |
XML Structure Output | 14.4 | 49.8 |
GPQA | 23.7 | 30.6 |
MMLU | 68.8 | 70.9 |
平均 | 21.9 | 36.7 |
负责任的AI考虑
与其他语言模型一样,Phi系列模型可能存在不公平、不可靠或冒犯性的行为。需要注意的一些局限性包括:
- 服务质量:Phi模型主要基于英文文本训练,非英文语言的性能会较差。训练数据中代表性较少的英语变体,其性能可能不如标准美式英语。
- 伤害表示与刻板印象延续:这些模型可能过度或不足地表示某些人群,抹去某些群体的代表性,或强化贬低性或负面的刻板印象。尽管进行了安全训练后处理,但由于不同群体的表示水平不同,或训练数据中反映现实世界模式和社会偏见的负面刻板印象示例普遍存在,这些局限性可能仍然存在。
- 不适当或冒犯性内容:这些模型可能产生其他类型的不适当或冒犯性内容,在没有针对特定用例进行额外缓解措施的情况下,可能不适合在敏感环境中部署。
- 信息可靠性:语言模型可能生成无意义的内容,或编造听起来合理但不准确或过时的内容。
- 代码范围有限:Phi-3的大部分训练数据基于Python,并使用常见的包,如"typing, math, random, collections, datetime, itertools"。如果模型生成的Python脚本使用其他包或其他语言的脚本,强烈建议用户手动验证所有API的使用。
开发者应应用负责任的AI最佳实践,并确保特定用例符合相关法律法规(如隐私、贸易等法律)。需要考虑的重要方面包括:
- 分配:在没有进一步评估和额外去偏技术的情况下,模型可能不适用于对法律地位、资源分配或生活机会有重大影响的场景(如住房、就业、信贷等)。
- 高风险场景:开发者应评估在高风险场景中使用模型的适用性,在这些场景中,不公平、不可靠或冒犯性的输出可能代价高昂或导致伤害。这包括在敏感或专业领域提供建议,其中准确性和可靠性至关重要(如法律或健康建议)。应根据部署环境在应用层面实施额外的保障措施。
- 错误信息:模型可能产生不准确的信息。开发者应遵循透明度最佳实践,并告知最终用户他们正在与AI系统交互。在应用层面,开发者可以构建反馈机制和管道,将响应基于特定用例的上下文信息,即检索增强生成(RAG)技术。
- 有害内容生成:开发者应根据上下文评估输出,并使用适用于其用例的可用安全分类器或自定义解决方案。
- 滥用:可能存在其他形式的滥用,如欺诈、垃圾邮件或恶意软件生产,开发者应确保其应用不违反适用的法律法规。
跨平台支持
ONNX runtime现在支持跨平台和硬件运行Phi-3 mini模型。
优化后的phi-3模型也以ONNX格式发布,可在CPU和GPU上跨设备运行,包括服务器平台、Windows、Linux和Mac桌面以及移动CPU,具有适合每个目标的精度。Windows桌面GPU(AMD、Intel和NVIDIA)支持DirectML GPU加速。
以下是添加的一些优化配置:
- 用于int4 DML的ONNX模型:通过AWQ量化为int4
- 用于fp16 CUDA的ONNX模型
- 用于int4 CUDA的ONNX模型:通过RTN量化为int4
- 用于int4 CPU和移动设备的ONNX模型:通过R量化为int4
软件依赖
硬件要求
默认情况下,Phi-3 Mini-4K-Instruct模型使用快速注意力机制(flash attention),需要特定类型的GPU硬件才能运行。已在以下GPU类型上进行测试:
- NVIDIA A100
- NVIDIA A6000
- NVIDIA H100
如果你想在以下设备上运行模型:
- NVIDIA V100或更早一代的GPU:调用
AutoModelForCausalLM.from_pretrained()
时添加attn_implementation="eager"
参数。 - CPU:使用4K的GGUF量化模型。
- 在GPU、CPU和移动设备上进行优化推理:使用4K的ONNX模型。
🔧 技术细节
模型
- 架构:Phi-3 Mini-4K-Instruct是一个具有38亿参数的密集解码器Transformer模型。该模型通过监督微调(SFT)和直接偏好优化(DPO)进行微调,以确保与人类偏好和安全准则保持一致。
- 输入:文本,最适合使用聊天格式的提示。
- 上下文长度:4K个标记。
- GPU:512个H100-80G。
- 训练时间:10天。
- 训练数据:4.9万亿个标记。
- 输出:对输入的生成文本响应。
- 日期:模型于2024年5月至6月期间训练。
- 状态:这是一个基于截止到2023年10月的离线数据集训练的静态模型。随着模型的改进,可能会发布微调模型的未来版本。
- 发布日期:2024年6月。
数据集
训练数据包括多种来源,总计4.9万亿个标记,由以下部分组成:
- 经过严格质量过滤的公开文档、精选的高质量教育数据和代码;
- 为教授数学、编码、常识推理、世界常识(科学、日常活动、心智理论等)而新创建的合成“教科书式”数据;
- 涵盖各种主题的高质量聊天格式监督数据,以反映人类在指令遵循、真实性、诚实性和帮助性等不同方面的偏好。
我们专注于可能提高模型推理能力的数据质量,并过滤公开文档,以包含适当水平的知识。例如,某一天英超联赛的比赛结果可能是前沿模型的良好训练数据,但对于小尺寸模型,我们需要去除此类信息,以便为推理留出更多模型容量。有关数据的更多详细信息,请参阅Phi-3技术报告。
微调
此处提供了一个使用TRL和Accelerate模块进行多GPU监督微调(SFT)的基本示例。
基准测试
我们报告了Phi-3-Mini-4K-Instruct在标准开源基准测试中,以完成格式衡量的模型推理能力(包括常识推理和逻辑推理)的结果。并与Mistral-7b-v0.1、Mixtral-8x7b、Gemma 7B、Llama-3-8B-Instruct和GPT3.5-Turbo-1106进行了比较。
所有报告的数字都是使用完全相同的管道生成的,以确保数字具有可比性。由于评估中的细微差异,这些数字可能与其他发布的数字不同。
按照现在的标准,我们使用少样本提示在温度为0的情况下评估模型。提示和样本数量是Microsoft内部评估语言模型工具的一部分,特别是我们没有对Phi-3的管道进行优化。具体来说,我们不更改提示、选择不同的少样本示例、更改提示格式或对模型进行任何其他形式的优化。
每个基准测试的少样本示例数量如下表所示:
类别 | 基准测试 | Phi-3-Mini-4K-Ins | Gemma-7B | Mistral-7b | Mixtral-8x7b | Llama-3-8B-Ins | GPT3.5-Turbo-1106 |
---|---|---|---|---|---|---|---|
流行聚合基准测试 | AGI Eval 5-shot |
39.0 | 42.1 | 35.1 | 45.2 | 42 | 48.4 |
MMLU 5-shot |
70.9 | 63.6 | 61.7 | 70.5 | 66.5 | 71.4 | |
BigBench Hard CoT 3-shot |
73.5 | 59.6 | 57.3 | 69.7 | 51.5 | 68.3 | |
语言理解 | ANLI 7-shot |
53.6 | 48.7 | 47.1 | 55.2 | 57.3 | 58.1 |
HellaSwag 5-shot |
75.3 | 49.8 | 58.5 | 70.4 | 71.1 | 78.8 | |
推理 | ARC Challenge 10-shot |
86.3 | 78.3 | 78.6 | 87.3 | 82.8 | 87.4 |
BoolQ 0-shot |
78.1 | 66 | 72.2 | 76.6 | 80.9 | 79.1 | |
MedQA 2-shot |
56.5 | 49.6 | 50 | 62.2 | 60.5 | 63.4 | |
OpenBookQA 10-shot |
82.2 | 78.6 | 79.8 | 85.8 | 82.6 | 86 | |
PIQA 5-shot |
83.5 | 78.1 | 77.7 | 86 | 75.7 | 86.6 | |
GPQA 0-shot |
30.6 | 2.9 | 15 | 6.9 | 32.4 | 30.8 | |
Social IQA 5-shot |
77.6 | 65.5 | 74.6 | 75.9 | 73.9 | 68.3 | |
TruthfulQA (MC2) 10-shot |
64.7 | 52.1 | 53 | 60.1 | 63.2 | 67.7 | |
WinoGrande 5-shot |
71.6 | 55.6 | 54.2 | 62 | 65 | 68.8 | |
事实知识 | TriviaQA 5-shot |
61.4 | 72.3 | 75.2 | 82.2 | 67.7 | 85.8 |
数学 | GSM8K CoT 8-shot |
85.7 | 59.8 | 46.4 | 64.7 | 77.4 | 78.1 |
代码生成 | HumanEval 0-shot |
57.3 | 34.1 | 28.0 | 37.8 | 60.4 | 62.2 |
MBPP 3-shot |
69.8 | 51.5 | 50.8 | 60.2 | 67.7 | 77.8 | |
平均 | 67.6 | 56.0 | 56.4 | 64.4 | 65.5 | 70.4 |
我们在下表中更详细地查看了100个公开基准数据集的不同类别:
类别 | Phi-3-Mini-4K-Instruct | Gemma-7B | Mistral-7B | Mixtral 8x7B | Llama-3-8B-Instruct | GPT-3.5-Turbo |
---|---|---|---|---|---|---|
流行聚合基准测试 | 61.1 | 59.4 | 56.5 | 66.2 | 59.9 | 67.0 |
推理 | 70.8 | 60.3 | 62.8 | 68.1 | 69.6 | 71.8 |
语言理解 | 60.5 | 57.6 | 52.5 | 66.1 | 63.2 | 67.7 |
代码生成 | 60.7 | 45.6 | 42.9 | 52.7 | 56.4 | 70.4 |
数学 | 50.6 | 35.8 | 25.4 | 40.3 | 41.1 | 52.8 |
事实知识 | 38.4 | 46.7 | 49.8 | 58.6 | 43.1 | 63.4 |
多语言 | 56.7 | 66.5 | 57.4 | 66.7 | 66.6 | 71.0 |
鲁棒性 | 61.1 | 38.4 | 40.6 | 51.0 | 64.5 | 69.3 |
总体而言,仅38亿参数的模型在语言理解和推理能力方面达到了与更大模型相似的水平。然而,由于模型大小的限制,在某些任务上仍然存在局限性。例如,该模型在TriviaQA上的表现较低,因为它没有足够的容量来存储过多的世界知识。我们相信可以通过为Phi-3-Mini添加搜索引擎来解决这一弱点。
📄 许可证
该模型遵循MIT许可证。
商标说明
本项目可能包含项目、产品或服务的商标或徽标。经授权使用Microsoft商标或徽标需遵循Microsoft商标和品牌指南。在本项目的修改版本中使用Microsoft商标或徽标不得造成混淆或暗示Microsoft的赞助。任何第三方商标或徽标的使用需遵循这些第三方的政策。



