模型简介
模型特点
模型能力
使用案例
🚀 Phi-3.5小模型128K指令模型
Phi-3-Small-128K-Instruct是一款参数为70亿的轻量级、最先进的开源模型。它使用Phi-3数据集进行训练,该数据集包含合成数据和经过筛选的公开网站数据,注重高质量和强推理能力。此模型属于Phi-3家族的小版本,有8K和128K两种上下文长度(以标记为单位)的变体。
🎉 Phi-3.5相关模型链接
✨ 主要特性
- 轻量级设计:70亿参数,适用于内存和计算资源受限的环境。
- 强大推理能力:在代码、数学和逻辑推理方面表现出色。
- 多语言支持:支持多种语言,不过在英语上表现最佳。
- 长上下文处理:支持高达128K的上下文长度。
📦 安装指南
Phi-3-Small-128K-Instruct已集成到transformers
的开发版本(4.40.2)中。在通过pip
发布官方版本之前,请确保执行以下操作之一:
- 安装
tiktoken (0.6.0)
和triton (2.3.0)
。 - 加载模型时,确保在
from_pretrained()
函数中传入trust_remote_code=True
参数。 - 将本地的
transformers
更新到开发版本:
pip uninstall -y transformers && pip install git+https://github.com/huggingface/transformers
可以使用以下命令验证当前transformers
的版本:
pip list | grep transformers
💻 使用示例
基础用法
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
torch.random.manual_seed(0)
model_id = "microsoft/Phi-3-small-128k-instruct"
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype="auto",
trust_remote_code=True,
)
assert torch.cuda.is_available(), "This model needs a GPU to run ..."
device = torch.cuda.current_device()
model = model.to(device)
tokenizer = AutoTokenizer.from_pretrained(model_id)
messages = [
{"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,
device=device
)
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'])
注意事项
⚠️ 重要提示
某些应用程序或框架可能不会在对话开始时包含BOS标记 (
<|endoftext|>
),请确保包含该标记,因为这会提供更可靠的结果。
聊天格式
鉴于训练数据的性质,Phi-3-Small-128K-Instruct模型最适合使用以下聊天格式的提示。可以按照以下通用模板以问题的形式提供提示:
<|endoftext|><|user|>\nQuestion <|end|>\n<|assistant|>
例如:
<|endoftext|><|user|>
How to explain Internet for a medieval knight?<|end|>
<|assistant|>
在少样本提示的情况下,提示可以格式化为以下形式:
<|endoftext|><|user|>
I am going to Paris, what should I see?<|end|>
<|assistant|>
Paris, the capital of France, is known for its stunning architecture, art museums, historical landmarks, and romantic atmosphere. Here are some of the top attractions to see in Paris:\n\n1. The Eiffel Tower: The iconic Eiffel Tower is one of the most recognizable landmarks in the world and offers breathtaking views of the city.\n2. The Louvre Museum: The Louvre is one of the world's largest and most famous museums, housing an impressive collection of art and artifacts, including the Mona Lisa.\n3. Notre-Dame Cathedral: This beautiful cathedral is one of the most famous landmarks in Paris and is known for its Gothic architecture and stunning stained glass windows.\n\nThese are just a few of the many attractions that Paris has to offer. With so much to see and do, it's no wonder that Paris is one of the most popular tourist destinations in the world."<|end|>
<|user|>
What is so great about #1?<|end|>
<|assistant|>
📚 详细文档
预期用途
主要用例
该模型旨在广泛用于英语的商业和研究。适用于以下通用人工智能系统和应用:
- 内存/计算资源受限的环境。
- 对延迟有要求的场景。
- 需要强大推理能力(特别是代码、数学和逻辑推理)的场景。
使用案例考虑
我们的模型并非专门为所有下游用途而设计或评估。开发者在选择使用案例时应考虑语言模型的常见局限性,并在特定下游用例中使用之前评估和缓解准确性、安全性和公平性问题,特别是在高风险场景中。开发者应了解并遵守与其用例相关的适用法律或法规(包括隐私、贸易合规法等)。
负责任的AI考虑
与其他语言模型一样,Phi系列模型可能会出现不公平、不可靠或冒犯性的行为。需要注意的一些局限性包括:
- 服务质量:Phi模型主要在英语文本上进行训练,非英语语言的性能会较差。训练数据中代表性较少的英语变体的性能可能比标准美式英语差。
- 伤害表示和刻板印象延续:这些模型可能会过度或不足地表示某些人群,抹去某些群体的代表性,或强化贬低性或负面的刻板印象。尽管进行了安全后训练,但由于不同群体的表示水平不同或训练数据中反映现实世界模式和社会偏见的负面刻板印象示例普遍存在,这些局限性可能仍然存在。
- 不适当或冒犯性内容:这些模型可能会产生其他类型的不适当或冒犯性内容,在没有针对特定用例进行额外缓解措施的情况下,可能不适合在敏感环境中部署。
- 信息可靠性:语言模型可能会生成无意义的内容或编造听起来合理但不准确或过时的内容。
- 代码范围有限:Phi-3的大部分训练数据基于Python,并使用常见的包,如“typing, math, random, collections, datetime, itertools”。如果模型生成使用其他包或其他语言的Python脚本,我们强烈建议用户手动验证所有API的使用。
开发者应应用负责任的AI最佳实践,并负责确保特定用例符合相关法律和法规。需要考虑的重要领域包括:
- 分配:在没有进一步评估和额外去偏技术的情况下,模型可能不适用于对法律地位、资源分配或生活机会有重大影响的场景(如住房、就业、信贷等)。
- 高风险场景:开发者应评估在高风险场景中使用模型的适用性,在这些场景中,不公平、不可靠或冒犯性的输出可能会造成极大的代价或伤害。这包括在准确性和可靠性至关重要的敏感或专业领域提供建议(如法律或健康建议)。应根据部署上下文在应用层面实施额外的保障措施。
- 错误信息:模型可能会产生不准确的信息。开发者应遵循透明度最佳实践,并告知最终用户他们正在与AI系统进行交互。在应用层面,开发者可以构建反馈机制和管道,将响应基于特定用例的上下文信息,这种技术称为检索增强生成(RAG)。
- 有害内容生成:开发者应根据上下文评估输出,并使用适用于其用例的可用安全分类器或自定义解决方案。
- 滥用:可能存在其他形式的滥用,如欺诈、垃圾邮件或恶意软件生产,开发者应确保其应用不违反适用的法律和法规。
训练
模型
- 架构:Phi-3 Small-128K-Instruct有70亿参数,是一个密集的仅解码器Transformer模型,具有交替的密集和块稀疏注意力。该模型通过监督微调(SFT)和直接偏好优化(DPO)进行微调,以确保与人类偏好和安全准则保持一致。
- 输入:文本。最适合使用聊天格式的提示。
- 上下文长度:128K标记
- GPU:1024个H100 - 80G
- 训练时间:18天
- 训练数据:4.8T标记
- 输出:对输入的生成文本响应
- 日期:我们的模型在2024年2月至4月之间进行训练。
- 状态:这是一个基于截止日期为2023年10月的离线数据集训练的静态模型。随着我们对模型的改进,未来可能会发布调优模型的新版本。
- 发布日期:模型权重于2024年5月21日发布。
数据集
我们的训练数据包括各种来源,总计4.8万亿标记(包括10%的多语言数据),是以下数据的组合:
- 经过严格质量筛选的公开可用文档、选定的高质量教育数据和代码。
- 为教授数学、编码、常识推理、世界常识(科学、日常活动、心智理论等)而新创建的合成“教科书式”数据。
- 涵盖各种主题的高质量聊天格式监督数据,以反映人类在指令遵循、真实性、诚实性和有用性等不同方面的偏好。
我们专注于可能提高模型推理能力的数据质量,并过滤公开可用文档以包含正确的知识水平。例如,某一天英超联赛的比赛结果可能是前沿模型的良好训练数据,但对于小尺寸模型,我们需要去除此类信息,以便为推理留出更多的模型容量。有关数据的更多详细信息,请参阅Phi-3技术报告。
基准测试
我们报告了Phi-3-Small-128K-Instruct在标准开源基准测试中的结果,这些测试衡量了模型的推理能力(包括常识推理和逻辑推理)。我们将其与Mixtral-8x7b、Gemini-Pro、Gemma 7B、Llama-3-8B-Instruct、GPT-3.5-Turbo-1106和GPT-4-Turbo-1106进行了比较。
所有报告的数字都是使用完全相同的管道生成的,以确保数字具有可比性。由于评估中的细微差异,这些数字可能与其他发布的数字不同。
按照惯例,我们使用少样本提示在温度为0的情况下评估模型。提示和少样本示例的数量是Microsoft内部评估语言模型工具的一部分,特别是我们没有对Phi-3的管道进行任何优化。具体来说,我们没有更改提示、选择不同的少样本示例、更改提示格式或对模型进行任何其他形式的优化。
每个基准测试的少样本示例数量如下表所示:
基准测试 | Phi-3-Small-128K-Instruct 7b |
Gemma 7B |
Mixtral 8x7B |
Llama-3-Instruct 8b |
GPT-3.5-Turbo version 1106 |
Gemini Pro |
GPT-4-Turbo version 1106 (Chat) |
---|---|---|---|---|---|---|---|
AGI Eval 5-shot |
43.9 | 42.1 | 45.2 | 42.0 | 48.4 | 49.0 | 59.6 |
MMLU 5-shot |
75.5 | 63.6 | 70.5 | 66.5 | 71.4 | 66.7 | 84.0 |
BigBench Hard 3-shot |
77.6 | 59.6 | 69.7 | 51.5 | 68.3 | 75.6 | 87.7 |
ANLI 7-shot |
55.8 | 48.7 | 55.2 | 57.3 | 58.1 | 64.2 | 71.7 |
HellaSwag 5-shot |
79.6 | 49.8 | 70.4 | 71.1 | 78.8 | 76.2 | 88.3 |
ARC Challenge 10-shot |
90.8 | 78.3 | 87.3 | 82.8 | 87.4 | 88.3 | 95.6 |
ARC Easy 10-shot |
97.3 | 91.4 | 95.6 | 93.4 | 96.3 | 96.1 | 98.8 |
BoolQ 2-shot |
83.7 | 66.0 | 76.6 | 80.9 | 79.1 | 86.4 | 91.3 |
CommonsenseQA 10-shot |
80.8 | 76.2 | 78.1 | 79.0 | 79.6 | 81.8 | 86.7 |
MedQA 2-shot |
46.3 | 49.6 | 62.2 | 60.5 | 63.4 | 58.2 | 83.7 |
OpenBookQA 10-shot |
87.8 | 78.6 | 85.8 | 82.6 | 86.0 | 86.4 | 93.4 |
PIQA 5-shot |
88.1 | 78.1 | 86.0 | 75.7 | 86.6 | 86.2 | 90.1 |
Social IQA 5-shot |
78.7 | 65.5 | 75.9 | 73.9 | 68.3 | 75.4 | 81.7 |
TruthfulQA (MC2) 10-shot |
69.6 | 52.1 | 60.1 | 63.2 | 67.7 | 72.6 | 85.2 |
WinoGrande 5-shot |
80.1 | 55.6 | 62.0 | 65.0 | 68.8 | 72.2 | 86.7 |
TriviaQA 5-shot |
66.0 | 72.3 | 82.2 | 67.7 | 85.8 | 80.2 | 73.3 |
GSM8K Chain of Thought 8-shot |
87.3 | 59.8 | 64.7 | 77.4 | 78.1 | 80.4 | 94.2 |
HumanEval 0-shot |
59.1 | 34.1 | 37.8 | 60.4 | 62.2 | 64.4 | 79.9 |
MBPP 3-shot |
70.3 | 51.5 | 60.2 | 67.7 | 77.8 | 73.2 | 86.7 |
平均 | 74.6 | 61.8 | 69.8 | 69.4 | 74.3 | 75.4 | 85.2 |
我们在下表中更详细地查看了80个公共基准测试数据集的不同类别:
基准测试 | Phi-3-Small-128K-Instruct 7b |
Gemma 7B |
Mixtral 8x7B |
Llama-3-Instruct 8b |
GPT-3.5-Turbo version 1106 |
Gemini Pro |
GPT-4-Turbo version 1106 (Chat) |
---|---|---|---|---|---|---|---|
流行聚合基准测试 | 70.6 | 59.4 | 66.2 | 59.9 | 67.0 | 67.5 | 80.5 |
推理 | 80.3 | 69.1 | 77.0 | 75.7 | 78.3 | 80.4 | 89.3 |
语言理解 | 67.4 | 58.4 | 64.9 | 65.4 | 70.4 | 75.3 | 81.6 |
代码生成 | 60.0 | 45.6 | 52.7 | 56.4 | 70.4 | 66.7 | 76.1 |
数学 | 48.1 | 35.8 | 40.3 | 41.1 | 52.8 | 50.9 | 67.1 |
事实知识 | 41.7 | 46.7 | 58.6 | 43.1 | 63.4 | 54.6 | 45.9 |
多语言 | 62.6 | 63.2 | 63.4 | 65.0 | 69.1 | 76.5 | 82.0 |
鲁棒性 | 68.7 | 38.4 | 51.0 | 64.5 | 69.3 | 69.7 | 84.6 |
🔧 技术细节
软件
硬件
默认情况下,Phi-3-Small模型使用Flash Attention 2和Triton块稀疏注意力,这需要特定类型的GPU硬件才能运行。我们在以下GPU类型上进行了测试:
- NVIDIA A100
- NVIDIA A6000
- NVIDIA H100
如果要在以下设备上运行模型:
- 在GPU、CPU和移动设备上进行优化推理:使用ONNX模型。
跨平台支持
ONNX运行时生态系统现在支持Phi3小模型跨平台和硬件运行。优化后的phi-3模型也以ONNX格式发布,可在CPU和GPU上跨设备运行,包括服务器平台、Windows、Linux和Mac桌面以及移动CPU,具有适合每个目标的精度。Windows桌面GPU(AMD、Intel和NVIDIA)支持DirectML GPU加速。
除了DML,ONNX运行时还为Phi3 Small提供跨CPU、GPU和移动设备的跨平台支持。以下是我们添加的一些优化配置:
- 适用于int4 DML的ONNX模型:通过AWQ量化为int4。
- 适用于fp16 CUDA的ONNX模型。
- 适用于int4 CUDA的ONNX模型:通过RTN量化为int4。
- 适用于int4 CPU和移动设备的ONNX模型:通过RTN量化为int4。
📄 许可证
该模型根据MIT许可证发布。
商标
本项目可能包含项目、产品或服务的商标或徽标。对Microsoft商标或徽标的授权使用需遵循Microsoft商标和品牌指南。在本项目的修改版本中使用Microsoft商标或徽标不得造成混淆或暗示Microsoft的赞助。任何第三方商标或徽标的使用均需遵循这些第三方的政策。



