极客说|微软 Phi 系列小模型和多模态小模型

作者:胡平 - 微软云人工智能高级专家

「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」,与行业顶尖专家一起探索科技的无限可能!

在人工智能领域,虽然大模型(Large language model)在理解和生成自然语言方面表现出了很大的优势,在问答、翻译、文本生成等多种任务中展现了惊人的能力,但是随着模型规模的不断扩大,训练和运行这些大模型所需要的计算资源也日益紧张,而且端侧的设备上的算力通常都是有限的,这在一定程度上限制了他们的广泛使用。我们的日常生活中存在着非常多的端侧设备,智能化家具家电,智能座舱等,都对端侧的模型的使用提出了要求。在这样的背景下,小模型(Small Language Models, SLMs)的研究就显得非常重要。小模型以其相对较小的规模和较低的计算算力需求,为资源有限的端侧设备环境提供了一种可行的解决方案。微软在小模型方面也持续进行了很长时间的研究,推出了 Phi 系列模型,证明了即使在较小的模型规模下,也能够实现强大的语言理解能力,生成能力,和多模态理解能力。

Phi-1


Phi-1 模型是这个系列的起点,它是一个基于 Transformer 架构的模型,拥有 1.3 亿参数。尽管其规模相对较小,但 Phi-1 在 Python 编程任务上展现出了令人印象深刻的性能,特别是在 HumanEval 和 MBPP 基准测试中,它的表现接近或超过了当时一些大型模型。

Phi-1.5


Phi-1.5 模型在 Phi-1 的基础上进行了进一步地优化和扩展。它同样拥有 1.3 亿参数,但在训练数据上进行了重大改进,引入了专门用于教授模型常识推理和通用知识的新数据源。这些数据源包括科学、日常活动和心智理论等领域的教科书内容,以及从互联网上筛选出的高质量数据。Phi-1.5 在自然语言任务上的表现与比其大五倍的模型相当,甚至在更复杂的推理任务上超越了大多数非前沿的 LLMs。

Phi-2


Phi-2 的参数数量有 2.7 亿,模型通过创新的知识转移技术,在 Phi-1.5 的基础之上,通过从 Phi-1.5 中嵌入知识,加速了训练过程并提升了性能。这种知识转移方法不仅加速了训练过程的收敛,而且在基准测试中显著提高了 Phi-2 的得分。在 Phi2 提出的时间节点,在多个复杂基准测试中,Phi-2 能够匹配或超越比其规模大25倍的模型。此外,Phi-2 在安全性和偏见方面也有所改进。尽管它没有经过人类反馈的强化学习对齐(RLHF)或指令微调,但与经过对齐的现有开源模型相比,Phi-2 在毒性和偏见方面的行为表现得更好。这归功于其定制的数据筛选技术,这种技术有助于减少模型生成有害内容的可能性。

 

Phi-3 系列


Phi3 系列有三个不同量级的小模型,分别叫做 Phi-3 mini, Phi-3 small 和 Phi-3 medium。

Phi-3-mini

Phi-3-mini 有 3.8B 的参数,3.3T token 的训练数据。它标配 4K 上下文,使用 LongRope 位置嵌入可拓展至 128K,即 Phi-3-mini-128k。在多个学术基准测试中,Phi-3-mini 性能接近或等同于市场上的大型模型,例如在 MMLU 测试中得分为 69%,在 MT-bench 测试中得分为 8.38 分。将 Phi-3-mini 量化(quantize)为 4-bits,其所需存储空间约为 1.8GB。测试中量化版 Phi-3-mini 在 iPhone 14 上的推理速度可达到 12 tokens/s。同时也可以将它部署在 Android 或者 HarmonyOS 操作系统的手机上,如下图4所示就是用 Ollama 在 HarmonyOS 上部署的量化版本的 Phi-3-mini 模型做问答任务时的截图。

Phi-3-small

Phi-3-small-7B 是 Phi3 系列新增的一个更大规模参数版本的Phi模型,参数 7.0B,但是 tokenizer 换成了 tiktoken,使之有更好的多语言能力,词汇表大小也拓展到了 100352,默认上下文长度是 8K,模型也有分组查询注意力机制(Group Query Attention,GQA),模型的数据训练量达到了 4.8万亿 tokens。

Phi-3-medium

Phi-3-medium 的参数有 14B,架构与最小的 Phi-3-mini-3.8B 相同,但是训练的 epoch 更多,训练的数据量和 Phi-3-small 一样,4.9万亿 tokens。

Phi-3-vision

此外,Phi3 系列还包含了一个 4.2B 参数的多模态模型,叫做 Phi-3-vision,融合了视觉和语言的功能。它是 Phi 系列中的首个多模态模型,能够结合文本和图像进行推理,从图像中提取和推理文本,还能优化对图表和图像的理解,用于生成见解和回答,在小型模型中提供了出色的语言和图像推理质量。

将 Phi-3-vision 部署在 PC 的 CPU 上,采用的是 https://huggingface.co/microsoft/Phi-3-vision-128k-instruct-onnx  的模型版本,这里,通过 RTN 的 int4 量化得到 CPU 上运行的 onnx 版本的模型,其中,Phi-3-v-128k-instruct-text.onnx.data 有 2.33G,Phi-3-v-128k-instruct-vision.onnx.data 有 445M。用它来进行多模态的问答的测试结果如图5所示。这里给了模型带有雪山的汽车的图片,让 Phi-3-vision 根据画面进行描述,可以看到右侧生成的结果很好的描述了雪山的细节和车的细节。

此外,我们还对驾驶员有没有系安全带进行了测试,如图6和图7所示。我们分别选取了没有系安全带的司机和系安全带的司机来作为我们的输入图像,而且考虑到司机坐姿的不同,图像拍摄角度的不同和车型的不同,这里我们分别选取了有代表性的两类,公共汽车司机和小轿车司机。然后,我们以此作为输入,分别让 Phi-3-vision 来进行回答,图片中的司机是否系了安全带。这里为了验证模型的有效性,我们还变化了提问的 Prompt 的写法,一种写法是:Is the person in the picture wearing a seat belt? 另一种 Prompt 的问法是:Is there a seat belt?图6 和图7 的下面是通过 Phi-3-vision 模型得到的回答的结果,分别给出了公共机车司机没有系安全带,和小轿车司机系了安全带的正确回答。

Figure 4. 手机上跑 Phi-3-mini 做问答任务的截图

Figure 5. PC 上用 Phi-3-Vision 进行图像的问答测试

Figure 6. PC 上用 Phi-3-vision 进行公交司机是否系安全带的图像问答测试

Figure7. PC 上用 Phi-3-visio 进行轿车司机是否系安全带的图像问答测试

Phi-3.5 系列


Phi-3.5 系列小模型是最新一代的 Phi 系列小模型,该系列包括了 Phi-3.5-mini、Phi-3.5-MoE 和 Phi-3.5-vision 三个模型,分别针对轻量级推理、混合专家系统和多模态任务设计。Phi 3.5 支持多种语言,包括阿拉伯语、中文、英语、法语、德语、日语、韩语和西班牙语等。它使用了组查询注意力机制,每个注意力头的 KV 缓存中使用 4 个查询共享 1 个键。为了进一步提高训练和推理速度,它使用了块稀疏注意力模块,能根据不同的稀疏模式有效地划分上下文,减少 KV 缓存的使用量。

Phi-3.5-mini

Phi-3.5-mini 指令微调模型有 3.8B 的参数,该模型专为遵守指令而设计,支持快速推理任务。它支持 128K 上下文,适合处理长文本数据。适合在内存或计算资源受限的环境,来执行代码生成、数学问题求解和基于逻辑的推理任务等。在多语言和多轮对话任务中表现出色,并且在 RepoQA 基准测试中,测量“长上下文代码理解”的性能超越了其他类似大小的模型,如 Llama-3.1-8B-instruct 和 Mistral-7B-instruct。

Phi-3.5-MoE

Phi-3.5-MoE 有大约 41.9B 的参数,该模型采用了混合专家架构,也是微软Phi系列中的首个 MoE 模型,拥有 6.6B 活动激活参数,将多个不同类型的模型组合成一个,每个模型专门处理不同的任务。它支持 128k token 的上下文长度,适合处理复杂的多语言和多任务场景。在代码、数学和多语言理解方面表现出色,在 5-shot MMLU (大规模多任务语言理解)基准测试中,在 STEM、人文学科、社会科学等多个学科的不同层次上超越了 GPT-4o mini。

Phi-3.5-vision

Phi-3.5-vision 模型拥有 4.2B 的参数,集成了文本和图像处理功能,使其能够处理多模态数据。适用于图像理解、光学字符识别、图表和表格理解以及视频摘要等任务。由于支持 128K 标记上下文长度,特别擅长处理复杂的多帧视觉任务。Phi-3.5-vision 模型使用合成数据集和筛选后的公开数据集进行训练,重点放在高质量、推理密集的数据上,对于 TextVQA 和 ScienceQA 等任务,提供高质量的视觉分析。

基于 GPU 的推理部署和测试——以 Phi-3.5-vision 为例 


接下来,我们就以 Phi-3.5-vision 为例来实现一下它基于 GPU 的推理部署和测试。

先来看一下 Phi-3.5-vision 模型在 GPU 的部署。这里我们在 Azure Machine Learning 里创建了一台 A100 的 GPU,它已经自带了 cuda 和 anaconda 的环境配置。部署的时候,第一步先安装 swift,用如下的命令:

git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .[llm]

之后,就可以用如下命令运行 Phi3_5-vision-instruct 的推理模型了:

CUDA_VISIBLE_DEVICES=0 swift infer --model_type phi3_5-vision-instruct --use_flash_attn false

推理模型运行起来之后,如图8所示。之后,就可以和模型进行问答的交互了,譬如,我们问它,who are you? 得到结果如图9所示,它会回答:I am Phi, an AI developed by Microsoft to assist with providing information, answering questions, and helping users find solutions to their queries. How can I assist you today? 这是我们和它进行文本问答的结果。

Figure 8. Phi3_5-vision-instruct 推理时的运行界面

Figure 9. 与部署的 Phi3_5-vision-instruct 模型进行文本问答的界面

我们也可以利用它的多模态能力,输入图片,得到回答。这里先用 +prompt 的输入格式,输入我们的文本提示词,同时提示模型我们还要输入图片,之后再输入图片的地址。图片地址可以是 http 链接,也可以是本地的图片路径。这里我们测试了多张不同类型的图片如图10、11所示。图10中,对不同的网络上的图片,一张是猫的,一张是兔子围着一盆饺子的,进行了详细的描述。左边是原图,右边是用 Phi3_5-vision-instruct 进行提问,输入图片网址链接,和得到结果的截图。图11是对于数学运算来进行计算的结果,可以看到对于整数的乘法的三个运算,结果都是正确的。当用 A100 的 GPU 跑 Phi3_5-vision-instruct 进行推理的时候,大概会产生 10G 的 GPU 显存占用,如图12所示。

Figure 10. 用 Phi3_5-vision-instruct 对不同的图片进行描述的多模态交互用例

Figure 11. 用 Phi3_5-vision-instruct 对图片中的数学公式进行计算的测试用例

 

Figure 12. 用 Phi3_5-vision-instruct 在 GPU 上做推理的时候的 GPU 占用

资料推荐


智能 GitHub Copilot 副驾驶® 提示和技巧icon-default.png?t=O83Ahttps://info.microsoft.com/GC-DevOps-CNTNT-FY25-08Aug-23-Smart-GitHub-Copilot-Tips-and-Tricks-SRGCM12801_LP01-Registration---Form-in-Body.html

Azure OpenAI 生成式人工智能白皮书icon-default.png?t=O83Ahttps://info.microsoft.com/GC-AzureAI-CNTNT-FY25-08Aug-21-Azure-OpenAI-Generative-Artificial-Intelligence-White-Paper-SRGCM12789_LP01-Registration---Form-in-Body.html

利用 AI 和 DevOps 重新定义开发人员体验icon-default.png?t=O83Ahttps://info.microsoft.com/ww-landing-redefining-the-developer-experience.html?lcid=ZH-CN

SAP on Microsoft Cloudicon-default.png?t=O83Ahttps://info.microsoft.com/GC-SAP-CNTNT-FY25-08Aug-27-SAP-on-Microsoft-Cloud-SRGCM12804_LP01-Registration---Form-in-Body.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502962.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

封装/前线修饰符/Idea项目结构/package/impore

目录 1. 封装的情景引入 2. 封装的体现 3. 权限修饰符 4. Idea 项目结构 5. package 关键字 6. import 关键字 7. 练习 程序设计:高内聚,低耦合; 高内聚:将类的内部操作“隐藏”起来,不需要外界干涉&#xff1b…

【C++】P5733 【深基6.例1】自动修正

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述💯解题思路概述💯第一种实现方式:直接使用字符ASCII值计算代码实现代码分析 💯第二种实现方式:直接修改…

【Elasticsearch】文档操作:添加、更新和删除

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、插入方式 💯2.1 单条插入实体2.2 批量 插入实体2.3 根据字典插入2.4 根据 Dat…

权限掩码umask

1 、 设置新建文件或目录的默认权限 在 Linux 系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask 值有关,其具体关系是: 新建文件的默认权限 0666-umask 值 新建…

202-01-06 Unity 使用 Tip1 —— UnityHub 模块卸载重装

文章目录 1 卸载模块2 更新配置文件3 重启 UnityHub 起因: ​ WebGL 平台打包程序报错,懒得修复了,因此粗暴地删了重装。但是 UnityHub 不支持卸载模块,因此手动配置。 1 卸载模块 ​ 以 Unity 6000.0.26f1c1 为例,其…

打造三甲医院人工智能矩阵新引擎(二):医学影像大模型篇--“火眼金睛”TransUNet

一、引言 1.1 研究背景与意义 在现代医疗领域,医学影像作为疾病诊断与治疗的关键依据,发挥着不可替代的作用。从传统的X射线、CT(计算机断层扫描)到MRI(磁共振成像)等先进技术,医学影像能够直观呈现人体内部结构,为医生提供丰富的诊断信息,涵盖疾病识别、病灶定位、…

国产编辑器EverEdit - 两种删除空白行的方法

1 使用技巧:删除空白行 1.1 应用场景 用户在编辑文档时,可能会遇到很多空白行需要删除的情况,比如从网页上拷贝文字,可能就会存在大量的空白行要删除。 1.2 使用方法 1.2.1 方法1: 使用编辑主菜单 选择主菜单编辑 …

李宏毅机器学习笔记-Transformer

目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列,输出也是一个序列,输出的长度是由机器自己…

GitLab集成Runner详细版--及注意事项汇总【最佳实践】

一、背景 看到网上很多用户提出的runner问题其实实际都不是问题,不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner,因为这类文章写得好的特别多,本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…

指针 const 的组合

1、首先来了解一下常量 const int num 5; 那么num的值是5, num的值不可修改 2、来了解一下指针 int value 5; int* p &value; 我喜欢吧指针和类型放一起,来强调p是一个指针类型, 而赋值的时候就得赋值一个int类型的地址…

《C++11》各种初始化方式的详细列举与对比

在 C 中,初始化对象的方式多种多样。随着 C 标准的演进,特别是 C11 的引入,初始化方式得到了显著的扩展和改进。本文将详细列举 C 中的各种初始化方式,并对它们进行对比,帮助开发者更好地理解和应用这些特性。 1. C98…

前端小案例——520表白信封

前言:我们在学习完了HTML和CSS之后,就会想着使用这两个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…

【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习(L14+L15+L16)

文章目录 Section 4:The Vim Help System(Vim 帮助系统)S04L14 Getting Help1 打开帮助系统2 退出帮助系统3 查看具体命令的帮助文档4 查看帮助文档中的主题5 帮助文档间的上翻、下翻6 关于 linewise7 查看光标所在术语名词的帮助文档8 关于退…

10-C语言项目池

C语言项目池 《个人通讯录》 《火车订票系统》 管理员用户1录入火车票信息区间查询/购票2显示火车票信息打印购票信息3查询火车票信息退票4修改火车票信息5添加火车票信息 《学生学籍管理系统》 1录入学生信息2添加学生信息3显示学生信息4查找学生信息5删除学生信息6修改学…

Android 绘制学习总结

1、刷新率介绍 我们先来理一下基本的概念: 1、60 fps 的意思是说,画面每秒更新 60 次 2、这 60 次更新,是要均匀更新的,不是说一会快,一会慢,那样视觉上也会觉得不流畅 3、每秒 60 次,也就是 1…

每日一题:BM1 反转链表

文章目录 [toc]问题描述数据范围示例 C代码实现使用栈实现(不符合要求,仅作为思路) 解题思路 - 原地反转链表步骤 C语言代码实现 以前只用过C刷过代码题目,现在试着用C语言刷下 问题描述 给定一个单链表的头结点 pHead&#xff…

78、使用爱芯派2_AX630C开发板 3.2T高有效算力 低功耗 支持AI-ISP真黑光实验

基本思想:使用爱心元智最新的版本开发板进行实验 AX630C、AX620Q 都是 620E 这一代 一、参考这个官方教程,先把代码在本地交叉编译完成 https://github.com/AXERA-TECH/ax620e_bsp_sdk 然后在拷贝到620c设备上 root@ax630c:~/ax620e_bsp_sdk/msp/out/arm64_glibc/bin# ./…

【Redis经典面试题七】Redis的事务机制是怎样的?

目录 一、Redis的事务机制 二、什么是Redis的Pipeline?和事务有什么区别? 三、Redis的事务和Lua之间有哪些区别? 3.1 原子性保证 3.2 交互次数 3.3 前后依赖 3.4 流程编排 四、为什么Lua脚本可以保证原子性? 五、为什么R…

企业网络性能监控

什么是网络性能监控 网络性能监控(NPM)是指对计算机网络的性能进行持续测量、分析和管理的过程,通过监控流量、延迟、数据包丢失、带宽利用率和正常运行时间等关键指标,确保网络高效、安全地运行,并将停机时间降至最低…