随着AI技术的快速发展,OpenAI的ChatGPT风靡全球,各类开源大模型如雨后春笋般涌现。但这些模型有时会产生不准确的回答,且依赖网络运行可能导致隐私泄露。为了应对这些问题,本地离线运行成为了一种有效的解决方案。如何使用手机实现大模型的离线推理呢?一位仓颉开发者给出了他的答案– AI Chat Pro,一款使用仓颉编程语言编写的离线AI鸿蒙原生应用,确保了智能化体验的同时也兼顾了安全性。传递仓颉开发者声音,我们对本项目的开发者进行了访谈。
您好,请问您是什么时候开始开发AI Chat Pro这个项目的?可以为我们简单介绍一下项目的情况吗?
如果只计算项目相关时间,应该是三周前;但实际上,这个项目有很多前置工作,这些前置工作大约花费了两个月。AI Chat Pro这个项目使用仓颉编程语言对接OpenAI或者其他兼容OpenAI的接口,完成聊天相关服务。当前相关内容已合并到仓颉的官方示例仓库。
当然可以。
最初接触鸿蒙、仓颉与相关模型部署过程要追溯到在一个普通的夜晚:我在京东上偶然看到了华为的昇腾310b开发板。拿到开发板后,我跟随官方视频学习了一个月左右,基本掌握了昇腾NPU的原理和开发。随后,我开始尝试在开发板上运行大模型,经过两三周的摸索,最终通过导出onnx权重并转换成CANN(华为NPU开发包,类似英伟达的cuda)专用的om模型,成功完成了模型推理。
图1:基于香橙派AI PRO适配通义千问大模型过程分享(发表于华为昇腾论坛)
帖子链接:https://www.hiascend.com/forum/thread-0265157816828965515-1-1.html
之后,我恰巧看到了华为鸿蒙Next和仓颉编程语言的内测信息,便尝试报名,幸运的通过了。接下来,我开始学习仓颉语言编程,大约花了两周时间。我之前有rust语言基础,学习起来相对轻松。随后,我开始学习仓颉版的鸿蒙Next开发,跟随各种的入门视频进行学习,并用仓颉实现,大约又花了两周时间。
接下来就是实践环节了!我先尝试开发了一个纯后端运行的AI聊天功能,使用仓颉开发,并接入API,取名为OpenAI Chat,即兼容OpenAI接口的AI聊天应用。随后,我开始尝试将其移植到鸿蒙Next上,大约只花了2-3天时间就完成了,这个项目我取名为AI Chat,目前两个项目都已合并到仓颉的官方示例仓库。
前端“壳”完成后,接下来就是后端“核”了。通过查阅开发文档,我了解到鸿蒙本身内置了AI功能,但仅支持Mindpore-lite模型文件以及专有的NCHW输入与输出格式。通过进一步修改之前在昇腾310b开发板上的模型文件,使其满足相关条件,并成功用python完成了mindspore-lite的模型推理。随后,我参考了官方的Mindspore-lite案例,将其从ArkTS开发修改为使用仓颉编程语言开发。这表明仓颉本身是可以在鸿蒙Next上完成离线AI推理的。最后,整个项目都完成了仓颉编程语言的覆盖编写,在PC端推理成功后,我将其移植到手机端并采用了之前的AI Chat皮肤,最终成品就此诞生。
其实我本人从事AI算法工作,并对推理优化和新编程语言颇感兴趣。在服务器端的大模型推理优化方面,我也取得了一些成绩,比如去年我获得了“英伟达生成式AI模型优化赛”的冠军和“特别贡献奖”。基于兴趣爱好,我曾在鸿蒙4.x上离线推理过通义千问18亿参数版,当时使用的是mlc-llm和mediapipe,但由于两者都是基于安卓系统,无法调用华为的NPU,导致推理速度慢、发热卡顿严重。因此,我萌生了用华为手机的NPU进行推理的想法。后来加入了鸿蒙Next内测和仓颉编程语言内测,能够使用中国人自己的编程语言和操作系统,在自己的芯片上进行国产AI大模型的离线推理,我觉得这个过程非常有意义,对我来说也是一件非常有价值的事情。
整体而言,从昇腾310b的学习入门到仓颉完成大模型离线推理,过程相对顺畅,没有太大的波折。最大的困难是将tokenizer的编码(文本转数字id)和解码(数字id转向量)功能移植到仓颉。起初,我尝试用原生仓颉实现rust版的tokenizer,大约花了2-3周时间,发现工作量还不到一半,时间过长,不利于我快速验证项目可行性。后来,我尝试了另一种方案,即通过rust导出c库再给仓颉绑定,结果只用了半天就搞定了。这让我意识到,有时候换一种选择尝试一下,未必不能快速抵达终点。当然,如果有机会,我还是会继续尝试方案一,因为它对开发者编译本项目而言会简单很多,而方案二配置环境相对复杂一些。
有听众问这个应用最后会开源吗?或者是否会上架应用商店?
在开发完成的那一刻,我就已经开源了。目前还有一些小功能待完善,但源码已经合并到了仓颉开发鸿蒙Next的实例仓库,项目名为AIChatPro,大家可以通过这个链接进行学习:https://gitcode.com/Cangjie/HarmonyOS-Examples/blob/main/AIChatPro/README.md。至于是否上架应用商店,由于大模型属于阿里团队开发,上架可能会有版权问题,所以目前没有上架应用商店的计划。
感谢开发者的详细分享,让我们对从仓颉入门到鸿蒙Next端侧模型部署的整个过程有了更深入的了解。接下来请您演示一下这个应用的实际效果吧!
图8:采用模拟器,CPU环境离线运行qwen2-0.5b-instruct模型
通过这个演示,我们可以看到,即使在离线状态下,AI Chat Pro也能提供流畅且准确的回答,这得益于开发者对模型和系统的深入优化。再次感谢开发者的辛勤工作和精彩分享以及对仓颉编程语言的支持,让我们期待未来更多基于国产技术和平台的创新应用,共同建设仓颉编程语言社区繁荣,也欢迎屏幕前的小伙伴一起加入我们。今天的采访就到这里,谢谢大家!
开发者简介:
广州大学工程管理专业,目前担任 NLP 算法工程师,主要研究留学教育领域的信息抽取与智能对话,同时对大模型推理加速与行业落地也有较大兴趣。曾获得第二十一届中国计算语言学大会(CCL2022)航旅纵横杯一等奖(子任务二)和三等奖(子任务一),NVIDIA TensorRT Hackathon 2023⽣成式AI模型优化赛 冠军与“特别贡献奖”,2023年阿⾥云& NVIDIA(英伟达) 通义千问AI挑战赛 - Agent赛道 “魔搭最佳应⽤奖”
欢迎关注下方公众号投稿参与本系列,讲述你与仓颉语言的故事