使用 ONNX Runtime 在 iPhone 上运行 Phi-3-mini

更多科技分享,请关注公众号:ONE生产力

之前我们介绍了微软最新开源的小规模模型Phi-3-mini,其计算资源占用极少,非常适合嵌入式应用和移动智能终端。今天我们将探讨在iPhone上,通过ONNX Runtime运行Phi-3-mini模型。

什么是ONNX Runtime

在人工智能时代,AI模型的可移植性非常重要。ONNX Runtime可以轻松地将训练好的模型部署到不同的设备上。开发者不需要关注推理框架,使用统一的API就可以完成模型推理。在生成式AI的时代,ONNX Runtime也进行了代码优化。通过优化后的ONNX Runtime,可以在不同的终端上推理量化的生成性AI模型。在ONNX Runtime的生成性AI中,你可以通过Python、C#、C/C++的API进行AI模型推理。当然,iPhone上的部署可以利用C++的ONNX Runtime API来实现生成性AI的推理。

操作步骤

准备工作

  1. macOS 14+
  2. Xcode 15+
  3. iOS SDK 17.x
  4. 安装 Python 3.10+(建议使用 Conda)
  5. 安装 Python 库 - python-flatbuffers
  6. 安装 CMake

编译ONNX Runtime for iOS

git clone https://github.com/microsoft/onnxruntime.gitcd onnxruntime./build.sh --build_shared_lib --ios --skip_tests --parallel --build_dir ./build_ios --ios --apple_sysroot iphoneos --osx_arch arm64 --apple_deploy_target 17.4 --cmake_generator Xcode --config Release

注意:

1、在编译之前,您必须确保Xcode配置正确,并在终端上进行设置:

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

2、ONNX Runtime需要根据不同的平台进行编译。对于iOS,您可以基于arm64/x86_64进行编译。

3、建议直接使用最新的iOS SDK进行编译。当然,您也可以降低版本以兼容过去的SDK。这样可以确保您的应用与最新的操作系统特性和安全性能保持同步,同时也能支持旧版本的设备。

编译Generative AI with ONNX Runtime for iOS

git clone https://github.com/microsoft/onnxruntime-genaicd onnxruntime-genaigit checkout yguo/ios-build-genaimkdir ortcd ortmkdir includemkdir libcd ../cp ../onnxruntime/include/onnxruntime/core/session/onnxruntime_c_api.h ort/includecp ../onnxruntime/build_ios/Release/Release-iphoneos/libonnxruntime*.dylib* ort/libpython3 build.py --parallel --build_dir ./build_ios_simulator --ios --ios_sysroot iphoneos --osx_arch arm64 --apple_deployment_target 17.4 --cmake_generator Xcode

在Xcode中创建应用

将ONNX量化的INT4模型复制到App应用程序项目中

我们需要导入ONNX格式的INT4量化模型,首先需要下载它。

下载完成后,您需要将其添加到Xcode项目的“资源”目录中。

在ViewControllers添加C++ API

1、将相应的 C++ 头文件添加到项目中

2、在 Xcode 中添加 onnxruntime-genai.dylib

3、直接使用 C 示例上的代码在此示例中进行测试。也可以直接添加更多运行(如ChatUI)

4、因为需要调用C++,所以请将 ViewController.m 更改为 ViewController.mm

NSString *llmPath = [[NSBundle mainBundle] resourcePath];char const *modelPath = llmPath.cString;auto model =  OgaModel::Create(modelPath);auto tokenizer = OgaTokenizer::Create(*model);const char* prompt = "<|system|>You are a helpful AI assistant.<|end|><|user|>Can you introduce yourself?<|end|><|assistant|>";auto sequences = OgaSequences::Create();tokenizer->Encode(prompt, *sequences);auto params = OgaGeneratorParams::Create(*model);params->SetSearchOption("max_length", 100);params->SetInputSequences(*sequences);auto output_sequences = model->Generate(*params);const auto output_sequence_length = output_sequences->SequenceCount(0);const auto* output_sequence_data = output_sequences->SequenceData(0);auto out_string = tokenizer->Decode(output_sequence_data, output_sequence_length);auto tmp = out_string;

运行效果

在iPhone 12(A14)上,Phi-3-mini运行速度依然可以接受,如果使用更新的设备,或能获得硬件加速支持,我相信运行效果能够更佳。

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

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

相关文章

基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统

1 基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统 文章目录 1 基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统1.1 二、基于qemu固件安装操作系统1.1.1 1、virt-manager安装1.1.2 2、创建虚拟机1.1.2.1 Ubuntu系统开机等待时间长问题解决 1.1.3 3、virt-manager日常使用1.1.4 4、…

实现mysql的主从复制、实现MySQL的读写分离与负载均衡

实验环境 &#xff08;注明&#xff09;以下的所有关于yum和rpm以及tar的软件需要自己准备&#xff0c;没有的话可以私信博主 实验目标&#xff1a; 1.实现mysql主从复制 2.实现mysql读写分离与负载均衡 实验一、搭建mysql主从复制 1.建立时间同步环境&#xff0c;在主节…

【Linux】高效文本处理命令

目录 一.sort命令&#xff08;排序&#xff09; 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 二.unip命令&#xff08;去重&#xff09; 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 三.tr命令&#xff08;替换&#xff09; 1.语法格式 2.常用选项 3.相关示例…

通过 Apple Vision Pro 释放创造力:深入研究空间计算

Apple 最新进军空间计算领域的 Apple Vision Pro,标志着重新定义我们与技术交互方式的重大飞跃。空间计算超越了传统界限,允许用户以无缝集成到物理世界的方式参与 2D 和 3D 内容。 我们可以关注两种类型的体验: 在空间中渲染 2D 内容。这涉及将现有设备窗口投影到空间领域…

广东芬蓝环境亮相2024上海生物发酵系列展

芬尼成立于2002年&#xff0c;是国家工信部评定的“制造业单项冠军示范企业”。公司拥有热泵行业领先水平的生产及研发实力&#xff0c;在固废处理处置领域&#xff0c;是《带式干化机》团标主笔起草单位。公司拥有三个制造基地&#xff0c;公司员工超过2000人&#xff0c;其中…

⭐️宁波ISO14000认证:⭐️成就“绿色环保”王者之路⭐️

&#x1f308;宁波ISO14000认证&#xff1a;&#x1f498;成就“绿色环保”&#x1f432;王者之路&#x1f34e; &#x1f936;宁波ISO14000认证&#xff1a;&#x1f42f;铸就环保先锋&#xff0c;&#x1f984;引领绿色发展新征程&#x1face; &#x1f682;宁波&#xff0c…

cpu卡片详解(FM1208)

​ 目录 ​1. 引言 1.1 FM1208 CPU卡芯片 2. FM1208 CPU卡芯片概述 2.1 FM1208及其在智能卡中的作用 2.2 FM1208功能框图 3.FM1208的技术规格 4.FM1208工作流程 5.&#xff26;&#xff2d;1208文件结构 6.FM1208与其他智能卡技术的比较 7.FM1208安全特性 7.1 DES/…

【Threejs进阶教程-算法篇】1.常用坐标系介绍与2d/3d随机点位算法

2d/3d随机算法 学习ThreeJS的捷径坐标系简介平面直角坐标系和极坐标系空间直角坐标系圆柱坐标系球坐标系球坐标系与直角坐标系的转换 基于坐标系系统的随机点位算法平面直角坐标系随机平面直角坐标系随机的变形 空间直角坐标系随机二维极坐标系随机圆柱坐标系随机基于Cylinderc…

从0开始理解云原生架构

一、云原生发展历史 云原生概念最早起源于2013年&#xff0c;由 Matt Stine 首次提出“Cloud Native”这一术语&#xff0c;这个概念强调了应用需要充分利用云的优势&#xff0c;如弹性、可扩展性和服务化。2015年&#xff0c;Matt Stine出版了《迁移到云原生架构》一书&am…

AI绘图Stable Diffusion,如何无损高清放大图片,保姆级教程建议收藏!

前言 我们在用 stable diffusion 制作AI图片时&#xff0c;默认生成图片的尺寸为512*512&#xff0c;即使是竖图一般也就是512*768&#xff0c;如果再把尺寸设置大一些&#xff0c;就会因为硬件算力不够而造成系统崩溃&#xff0c;今天就来跟大家聊一聊&#xff0c;如何将制作…

使用Pixi.js 图片切换特效(图片分段下滑以及复原)

1.效果: 2.实现原理: 将图片按宽高切分为x*y(具体可以自己调整)个矩形区域&#xff0c;对每个顶点分配一个随机值noiseValue(-1到1之间),在顶点着色器中根据这个随机值而做出不同的y轴位移效果从而实现出分段的下滑或者复原的效果。 3.代码实现: 首先是顶点着色器的代码,其中…

仓库数据同步难题如何轻松破解?

一、客户介绍 某食品科技有限公司&#xff0c;是一家集研发、生产、销售于一体的现代化食品科技企业。公司的经营范围广泛&#xff0c;涵盖饮料生产、食品生产、食品经营&#xff08;销售散装食品&#xff09;、食品互联网销售以及货物进出口等多个领域。通过数字化冷链物流监…