Phi-3模型是由微软开发的一系列小型语言模型(SLM),以其卓越的性能和高性价比著称,在多种语言、推理、编码和数学基准测试中,超越了同类及更大尺寸的模型。
Phi-3系列包含不同尺寸的变体。其中,Phi-3-mini是一个3.8亿参数的语言模型,训练于3.3万亿个标记上,性能可与Mixtral 8x7B和GPT-3.5媲美。该模型足够紧凑,可以部署到客户端设备上,在网络连接有限或隐私敏感的场景中发挥重要作用。
为了在计算、内存和功耗方面受限的客户端设备上运行大语言模型,需要压缩和优化模型并使用轻量级运行时。本文将展示如何利用ONNX Runtime在手机和浏览器中运行Phi-3-mini模型。
获取压缩和优化的Phi-3-mini模型
量化技术可以降低神经网络权重和激活值的精度,从而显著减少模型大小和推理时间,但会带来一定程度的准确性下降。图融合是通过最小化基本计算并充分利用内核优化和硬件加速来实现高性能的另一有效方法。
我们对网络和移动模型均采用了4位块量化。由于平台和实现的特点,这两种版本在图融合和数据类型上存在细微差异。例如,网络模型使用多头注意力融合,而移动模型使用分组查询注意力融合。此外,网络模型的输出logits保持为float32,因为JavaScript不支持float16。经过优化后,移动和网络模型的尺寸比原始PyTorch版本减少了2.5倍以上。
我们将所有这些预先量化和优化集成到Olive中,这是一个硬件感知的模型优化工具,允许用户轻松生成针对各种硬件目标的压缩和优化模型。可以在Hugging Face上下载预优化的移动模型(https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-onnx/tree/main/cpu_and_mobile)和网络模型(https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-onnx-web)。
在移动设备和网络上使用ONNX Runtime运行Phi-3
ONNX Runtime是一个跨平台的推理引擎,用于运行标准ONNX格式的机器学习模型。它支持广泛的硬件平台,并提供多种优化和加速技术以提高性能和效率。这里我们主要介绍它在设备端推理的两种解决方案:ONNX Runtime Mobile和ONNX Runtime Web。两者都允许客户定制构建,以减少二进制文件大小和运行时内存占用。
使用ONNX Runtime Mobile运行Phi-3
ONNX Runtime Mobile提供了一个轻量级推理引擎,可以轻松将ONNX模型集成到Android、iOS、React Native和MAUI/Xamarin的移动应用中。它支持多种针对移动设备的硬件加速器,例如默认的CPU加速器和适用于所有移动平台的XNNPACK加速器,以及特定平台的加速器如iOS的CoreML和Android的NNAPI和QNN。为了便于集成到不同的移动开发环境中,它还提供了一套丰富的语言绑定,包括C、C++、Java、Objective-C和C#。
我们利用ONNX Runtime Mobile的默认CPU加速器在手机上进行4位量化Phi-3模型的推理。在ONNX Runtime中,开发了优化的ARM64内核来加速INT4量化矩阵乘法。此外,它还可以在输入端处理量化的8位整数,从而在接受精度损失的情况下进一步提高INT4量化矩阵乘法的性能。此外,ONNX Runtime还支持分组查询注意力,这是一种专门设计的操作符,可以有效地执行注意力,同时允许过去和现在的KV共享同一个缓冲区。这些优化共同使ONNX Runtime在移动设备上能够实现高性能的CPU执行。这里,我们展示了在三星Galaxy S21上的Phi-3-mini token 生成性能。ONNX Runtime Mobile在小提示长度和生成 token 数量较少的情况下优于llama.cpp,而在其他情况下表现相当。
这里有一个在Android上使用ONNX Runtime Mobile运行Phi-3-mini的完整示例(https://github.com/microsoft/onnxruntime-inference-examples/tree/main/mobile/examples/phi-3/android)。它利用了ONNX Runtime Generate() API,这一API加快了ONNX模型生成式AI循环的推理过程,包括推理、处理logits、进行搜索和采样以及管理KV缓存。由于官方的ONNX Runtime Generate() API的移动绑定仍在进行中,该示例使用了C API,通过创建JNI包装器来实现生成API的C API与Java层调用之间的通信。有关ONNX Runtime Generate() API的更多细节,请参考文档(https://onnxruntime.ai/docs/genai/)。
使用ONNX Runtime Web运行Phi-3
ONNX Runtime Web是一个JavaScript库,使得在浏览器和其他网络平台上运行ONNX模型成为可能。对于CPU推理,ORT Web使用Emscripten将本地ONNX Runtime CPU引擎编译为WASM后端。此外,ONNX Runtime Web支持多种后端,例如WebGPU和WebNN,以进一步利用底层硬件加速进行推理。ONNX Runtime Web可以轻松集成到Web应用和框架中,如ReactJS和渐进式Web应用。
由于Phi-3模型的体积庞大和计算需求,在浏览器中使用CPU进行推理的性能效率并不高。WebGPU引入了一种现代的Web API,允许开发者利用GPU的计算能力,当CPU在浏览器中进行ML计算不足的情况下提供显著的优势。微软和英特尔一直在合作完善ONNX Runtime Web中的WebGPU功能。在ONNX Runtime 1.17版本中,我们引入了WebGPU后端,并增加了对量化Phi-3 Web模型的4位块量化支持。我们还实现了融合的WebGPU操作符,如多头注意力和旋转嵌入,这些操作符简化了计算图并显著提高了性能。为了在运行具有动态形状(dynamic shapes)的Phi-3模型时减少内存使用,我们采用了一种分桶空闲列表方法,并在80个热门模型中进行了调优,以平衡性能和内存效率。大型语言模型在生成期间通过缓存前一个 token 的计算结果来实现状态保存。
为支持这一点,我们引入了在模型输入和输出中传递GPU缓冲区引用的能力,从而消除了跨设备复制的需求,提高了整体性能。通过这些优化,ONNX Runtime Web能够在Nvidia RTX 4090上以每秒超过70个 token 的速度运行Phi-3-mini!不要错过这个E2E示例(https://github.com/microsoft/onnxruntime-inference-examples/tree/main/js/chat),它展示了在浏览器中运行Phi-3-mini的ONNX Runtime Web。
ONNX Runtime Web还支持Transformers.js(https://huggingface.co/docs/transformers.js/index),这是一个可以在浏览器中直接运行Hugging Face transformers的库。该库是开发者在浏览器中运行最先进的预训练模型的热门选择,只需几行代码即可实现。
利用ONNX Runtime Web的WebAssembly后端,Transformers.js支持了多个模型(https://huggingface.co/docs/transformers.js/index#supported-tasksmodels)在自然语言处理、视觉、音频、表格和多模态领域的应用。现在,Hugging Face和微软正在合作,通过ONNX Runtime Web在Transformers.js中实现WebGPU支持(https://github.com/xenova/transformers.js/pull/545),以进一步加快性能,团队进展中将发布新的演示。最新的Phi-3-mini演示为用户提供了一个私人(且强大的)聊天机器人体验。你可以在Hugging Face Spaces(https://huggingface.co/spaces/Xenova/experimental-phi3-webgpu)上试用。
在你的设备上享受Phi-3
是否期待在你的设备上拥有一个私人且强大的聊天机器人?在无需担心数据隐私或网络连接的情况下,享受无缝通信吧。你可以下载预优化的Phi-3模型或利用Olive优化你的自定义版本,然后使用ONNX Runtime将优化后的模型部署到手机或直接在浏览器中运行!试试看吧!欢迎在ONNX Runtime Github(https://github.com/microsoft/onnxruntime)分享你的反馈!
译自: https://huggingface.co/blog/Emma-N/enjoy-the-power-of-phi-3-with-onnx-runtime
作者:Emma Ning (Microsoft), Scott McKay(Microsoft), Guenther Schmuelling(Microsoft), Joshua Lochner (Hugging Face)
译者: 闲从容
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/72024.html