陈天奇等人新作 mlc llm 能在任何设备上编译运行大语言模型,如何理解这一技术?有哪些应用场景? -云顶yd2223线路检测

最近人们都在研究 chatgpt,大语言模型(llm)彻底改变了科技领域的格局,但对于 ai 开发者来说,并不是人人都有上万块 a100 的。为了跑得…
关注者
99
被浏览
21,450

10 个回答

原作者们也在知乎做了相关介绍,大家可以移步:

如果我没理解错的话,目前的 demo 是基于 vicuna-v1-7b 模型,实现了在移动端 iphone、消费级 mac 乃至 chrome 浏览器[1]端的运行。

作者提供了 iphone 版本的 testflight[2](3个多g),我先去装一个试试。

(行吧…ip13带不动直接闪退,还是换媳妇的ip14 pro来测吧)

英文的回复速度和内容都是可以的。

(测试中文就会有奇怪的表现了…)


应该说这些工作并不是石头里蹦出来的,而是经历了 tvm 团队长期的专注和迭代,致力于解决机器学习编译工作中存在的问题,让各种模型都能更好地落地部署在不同的硬件条件中,最终使每个人都能够在自己的设备上本地开发、优化和部署 ai 模型。详见:

他们还推出了一门专门的课程[3],来讲解 mlc 技术:

由开源社区来做这样的工作无疑是有巨大的前景和现实意义的,也让每个人都能拥有自己的 llm 成为了可能。

从 chatglm-6b,到 llama,再到 alpaca 、vicuna 和 moss,大家对于开源模型的热情和其实现的效果,已经让我看到了开源社区在 llms 领域中可以拥有自己的一席之地。

尽管现阶段,所谓的本地部署指的也只是运行 pre-train 的模型来做 inference,但是随着社区工作的进一步完善和硬件算力的进一步发展,我们完全有可能可以在本地完成更多的工作。

至于其应用场景,原作者自己已经说的非常到位了[4]

出于定制化、个性化或者隐私性的目的,人们想要自己在各种终端设备中本地运行大语言模型,不需要/不希望连接互联网或者依赖于服务器。


再次致敬先行者,得益于大佬们无私的工作,我们将来才能获得更普惠的技术应用。

参考

  1. ^
  2. ^
  3. ^
  4. ^

不光是llm,所有大型深度神经网络(dnn)在做本地终端部署的时候,都会遇到这么几个关键问题:计算能力、内存管理、模型压缩和算法优化等。

具体来说,大型深度神经网络模型需要大量的计算资源才能在本地终端上运行,因此通常需要使用高性能的cpu、gpu或专用加速器来保证计算能力。

同时巨量的模型参数意味着需要占用大量的内存,以llm为例,现在的语言模型动不动就是几十亿上百亿的参数量,像gpt这种更是达到了千亿级别。

因此需要使用高效的内存管理技术来降低内存使用量,例如内存重用、内存压缩和模型裁剪等。

为了解决存贮空间的问题,通常需要使用模型压缩技术来减少存储需求。常用的压缩技术包括权重量化、剪枝、量化和低秩分解等。

而对于本地终端的计算资源有限的问题,需要使用高效的算法和数据结构来降低计算和存储需求,例如深度可分离卷积、膨胀卷积和深度可持久化数据结构等。同时还要做算法上的优化,使用高效的算法来减少计算需求。


mlc llm这个项目采用的云顶国际官网唯一官方网站的解决方案核心是机器学习编译(machine learning compilation,)技术。

  • 项目地址:
  • mlc技术:
mlc llm 框架

根据其github云顶yd2223线路检测主页的介绍,具体使用了以下技术。

dynamic shape:将一个语言模型作为tvm irmodule进行打包,支持原生的dynamic shape(这里一般指模型处理不同长度的文本序列),避免了额外填充到最大长度的需求,减少了计算量和内存使用量。
可组合的ml编译优化:使用了多种模型部署优化技术,例如更好的编译代码转换,融合,内存规划,库卸载和手动代码优化,可以轻松地作为tvm的irmodule转换为公开python api。
量化:我们利用低位量化来压缩模型权重,并利用tvm的循环级tensorir快速定制不同压缩编码方案的代码生成。
tvm runtime:生成的最终库在本地环境上运行,其基于的tvm runtime支持各种gpu驱动程序api以及 c、javascript 等本地语言的绑定。

后面这部分太过专业,有点看不太懂了。

但是在当下这个时间节点来看,mlc llm这样的工作还是非常有意义的。

因为随着各类aigc产品的出现,以及通用人工智能(agi)的发展趋势,未来可能很多的ai模型将会普及化。尽管现在有云计算、边缘计算等技术对大模型推算的算力支持,但是用户的个人数据安全和隐私也是不得不考虑的问题,那么模型的本地化部署一定会是一个重要的方向,甚至可能会成为刚需。

所以以后还会有更多类似mlc llm这样的项目出现。

以上。

现在llm已经大众化了!

这个叫 mlc llm 的项目可谓一步登天,因为它能让你「在任何设备上编译运行大语言模型。

什么是llm?

llm 与其他任何语言模型一样,也需要根据文本示例理解单词出现的几率。较为简单的模型会在特定语境下浏览,而大型模型则直接去理解句子甚至是段落。示例以训练数据集中的文本形式出现,包含从社交媒体、维基百科、书籍、github 等软件托管平台以及公共网络上抓取到的 tb 级、甚至是 pb 级数据素材。

而mlc llm 为我们在各类硬件上原生部署任意大型语言模型提供了云顶国际官网唯一官方网站的解决方案,可将大模型应用于移动端(例如 iphone)、消费级电脑端(例如 mac)和 web 浏览器。

比如:



mlc llm 的主要工作流基于 apache tvm unity。

mlc llm 提供可重复、系统化和可定制的工作流,使开发人员和 ai 系统研究人员能够以 python 优先的方法实现模型并进行优化。mlc llm 可以让研究人员们快速试验新模型、新想法和新的编译器 pass,并进行本地部署。

机器学习编译(mlc)是关键

举个例子来说,web llm如何做到“一切尽在浏览器”的。

根据团队介绍,其核心关键技术是机器学习编译(machine learning compilation,mlc)。

整体方案是站在开源生态系统这个“巨人肩膀”上完成的,包括hugging face、来自llama和vicuna的模型变体,以及wasm和webgpu等。

并且主要流程是建立在apache tvm unity之上。

关于应用场景,我个人觉得mlc llm都是隶属于ai大规模需要的,一方面在任何机器上运行,另外

同样具有大型语言模型的应用场景,其中一些主要应用场景包括:

问答系统:构建问答系统,回答用户的提问。

情感分析:识别文本中的情感倾向。

智能客服:构建智能客服系统,自动回答客户的问题。

自然语言理解(nlu):理解自然语言输入,如语音识别或文本理解。

机器翻译:翻译文本或语音。

数据增强:生成更多的训练数据来提高模型性能。

文本生成:生成文本,如文章、电子邮件、对话等。

聊天机器人:构建聊天机器人,与人类进行自然语言对话。

代替程序员编写代码:一般的工作量都可以使用llm技术进行了

所以,我觉得,现在是ai智能越来越大众化了!

短期影响有限,长期影响深远。

目前,短期而言,llm 的性能仍然取决于大量的参数和精度。

在本地尝试部署过 chatglm-6b 模型,使用了 int4 的量化后才勉强运行起来。虽然其有一定智能,但是在上下文理解和推理任务上不够聪明,反应速度也比较慢。

其他开源大模在降低参数量和精度后也有同类问题。并且 mlc 技术也使用了参数量化:

quantization: we utilize low-bit quantizations to compress the model weights and leverage tvm's loop-level tensorir to quickly customize code generations for different compression encoding schemes.

所以被 mlc 编译后的 llm 性能肯定是有损。

当下,想要 ai 有比较强的「智力」,大量的参数 高精度 算力仍是避免不了的。

但是,长期来看,该技术会促进很多创意。高智能的任务 native 端的 ai 完成不了,那可以让它完成一些低智能的任务,比如:

  • 通过自然语言搜索本地备忘录的信息。
  • 更能理解自然语言的本地语音助手。
  • 无需联网的本地多语言翻译器。

总之,「相对低智能」的 ai 可以完成「相对低智能」的任务。而且这类 ai 不需要提供泛用性,可以通过训练 finetune 让其只擅长某个细分领域的任务,再编译部署到本机。

后续,开源社区肯定会有基于 mlc 的 mlops 框架:从数据训练到 native 端发布。届时,基于 native 端的 llm 的应用会涌现。

长期来看,mlc 技术在促进 native 端的 ai 应用形态发展的同时,也会促进对算力的需求。就好像游戏的需求驱动了算力的发展,让游戏从简单的几个三角面,发展到现在复杂精细的模型。

以史为鉴,自 1995 年英伟达发布第一款显卡 nvidia stg-2000x (显存 1mb)起,显卡算力飞速发展。现在的消费级显卡动辄几 gb 的显存,专业卡动辄几十 / 上百 gb 的显存。

所以,本地算力也势必会受到本地 ai 应用的普及而发展。

在未来,ai 无处不在,辅助人类的生活,可能不会只是一个愿景了。

dynamic shape:将一个语言模型作为tvm irmodule进行打包,支持原生的dynamic shape(这里一般指模型处理不同长度的文本序列),避免了额外填充到最大长度的需求,减少了计算量和内存使用量。

可组合的ml编译优化:使用了多种模型部署优化技术,例如更好的编译代码转换,融合,内存规划,库卸载和手动代码优化,可以轻松地作为tvm的irmodule转换为公开python api。

量化:我们利用低位量化来压缩模型权重,并利用tvm的循环级tensorir快速定制不同压缩编码方案的代码生成。

tvm runtime:生成的最终库在本地环境上运行,其基于的tvm runtime支持各种gpu驱动程序api以及 c、javascript 等本地语言的绑定。