ToB企服应用市场:ToB评测及商务社交产业平台

标题: Mozilla 开源 llamafile:大语言模子分发与摆设新范式 [打印本页]

作者: 络腮胡菲菲    时间: 2024-8-6 21:58
标题: Mozilla 开源 llamafile:大语言模子分发与摆设新范式
弁言
随着 ChatGPT、BERT 等大型语言模子(Large Language Model, LLM)在自然语言处理领域掀起巨大波澜,AI 技能正从前所未有的速率走近大众生存。然而,这些 LLM 的训练和推理对计算资源提出了极高要求,动辄数十以致数百 GB 的模子体积也给分发和摆设带来诸多不便。为了让 LLM 真正为更多人所用,我们不但需要更强大的硬件和算法,还需要打造全新的工具链和底子设施。
正是基于这一考虑,Mozilla 创新团队于客岁底发布了 llamafile 项目。通过奥妙联合 llama.cpp 和 Cosmopolitan Libc 两大开源项目,llamafile 可将 LLM 权重文件直接转换为可实行文件,让用户无需编程即可在多种环境一键摆设 AI 服务。自首发以来,在社区开发者的积极到场下,llamafile 迭代了多个重大版本,新增了一系列激动民气的特性,有力推动了 LLM 技能的遍及。本文将深入分析 llamafile 的计划理念和关键实现,探究其在 LLM 工程化中的重要意义。
LLM 摆设的技能挑战
随着 Transformer[1]等新架构的发明,LLM 的参数规模和计算开销呈指数级增长。以 GPT-3[2] 为例,其参数量高达 1750 亿,训练时使用了多达 10000 个 GPU,泯灭了数百万美元的算力成本。即便是在推理阶段,为了得到最佳的响应速率,仍然需要 TB 量级显存的支持。这对绝大多数潜在用户而言是难以企及的。
为了降低准入门槛,LLM 的开发者们开始探索各种优化技能,包括:
- 模子蒸馏[3]:将大模子的知识提炼到小模子中,在保存核心能力的同时大幅淘汰参数量。
- 量化感知训练[4]:通过低比特表示权重,在牺牲部分精度的条件下显著降低存储和带宽占用。
- 希罕注意力[5]:利用注意力矩阵的希罕特性,避免计算无关Token之间的相关度,节流算力。
经过这些优化,LLM 的体积得以大幅压缩,如今流行的开源模子如 LLaMA[6] 和 GPT-J[7] 的体积已降至百 GB 以下,资源占用也在业余爱好者可担当的范围内。但与此同时,模子文件格式也出现出多样化的趋势。由于缺乏统一的尺度,不同的模子在权重生存方式上存在显著差异。好比有的接纳 NumPy 的 npz 格式,有的则使用 PyTorch 的 pt 格式,还有的会自界说一套序列化方案。这就导致了模子利用的碎片化问题,不利于推广遍及。
除了格式不一致,LLM的硬件适配也面临诸多停滞。一方面,尽管上述优化在降低推理开销上已经卓有成效,但对于复杂的任务而言,CPU 计算能力仍嫌不足,必须借助 GPU、TPU 等专用加速器。而这些异构装备在编程模子上存在显著差异,且驱动设置繁琐,应用程序很难做到一次编写,随处运行。另一方面,由于模子体积仍然较大,单机内存很难将其全部装载,因此通常需要分布式推理,这进一步加剧了环境依赖。
由此可见,要真正遍及 LLM 技能,我们需要在工具链和底子设施层面做出改变。具体而言,期望有如许一套方案,可以或许:
1. 屏蔽 LLM 文件格式的差异,提供统一的模子描述和转换机制。
2. 封装异构硬件差异,实现可移植、高性能的加速方案。  
3. 简化分布式环境设置,做到开箱即用、按需扩缩。
llamafile 正是基于这些考量应运而生。通过在两个成熟项目标底子上提供薄薄一层"胶水",它奥妙地化解了上述抵牾,让摆设 LLM 变得无比简单。
llama.cpp:为 LLM 注入 C 的性能
在介绍 llamafile 的核心计划之前,我们有必要先了解其重要组成部分:llama.cpp[8]。
众所周知,Python 以简洁优雅著称,是呆板学习研究人员的首选语言。但在工程实践中,Python 的运行效率一直饱受诟病。这在 LLM 推理场景下尤为突出,由于模子体积巨大,稍有不慎就会引入性能瓶颈。为了避免这一问题,llama.cpp 的作者选择用 C/C++ 从头实现 LLM 推理。
具体而言,llama.cpp 提供了一个通用的推理引擎,可以加载 LLaMA、GPT-J、GPT-NeoX 等主流模子,并实行高效的文本生成。它接纳自界说的权重格式,将模子划分为若干个分片,每个分片包含其全部参数。这种构造方式可以充分利用局部性原理,在加载和访问权重时尽可能淘汰缓存缺失和页面调理。
在算法实现上,llama.cpp 对矩阵乘等关键路径举行了极致优化,充分利用了 SIMD、Loop Unrolling[9] 等现代 CPU 特性,再加上精心调教的多线程并行,使其在工业级服务器上的推理性能可比肩商用办理方案。
为了方便地与现有应用集成,llama.cpp 还提供了一个兼容 OpenAI API 的 HTTP 服务器。用户只需将哀求发送至指定端口,即可得到雷同于 GPT-3 的对话体验。这极大降低了二次开发的门槛。
然而,llama.cpp 仍存在一些不足之处:
1. 尽管提供了 Python binding,但在实际使用中仍不可避免地需要一些 C++ 知识,对非专业开发者不太友爱。
2. 固然权重格式经过优化,但转换过程需要花费较长时间,且占用大量磁盘空间。
3. 固然已经适配了 CUDA 后端,但设置过程较为繁琐,且未考虑 AMD 平台。
llamafile 通过引入 Cosmopolitan Libc,奥妙地办理了这些问题。
Cosmopolitan Libc:赋予 C 跨平台的魂魄
谈到跨平台,很多人首先想到 Java 的"一次编写,随处运行"。然而,对于偏好 C/C++ 的系统级开发者而言,这一理念似乎遥不可及。一个主要原因是,不同操作系统在底层 API 的语义和调用规范上存在显著差异。为了适配多种环境,开发者不得不编写大量胶水代码,人工处理各种边界环境,既繁琐又轻易堕落。这严峻拦阻了 C/C++ 程序的可移植性。
Cosmopolitan Libc[10] 试图从根本上办理这一困境。它的核生理念是:通过提供一层统一的系统调用抽象,让开发者只需面向 Cosmopolitan API 编程,生成的目标码就可以不经修改地在 Linux、Windows、macOS 等各种环境直接运行。
实现这一点的关键是 Cosmopolitan 的链接器。传统的链接器如 ld 只负责剖析符号、分配地点,对目标平台并不作过多假设。而 Cosmopolitan 的链接器则内置了一个微型操作系统,可在裸机环境直接启动。在入口函数实行之前,它会初始化 GDT、页表等关键数据结构,并提供线程调理、虚拟内存、动态链接等现代操作系统的核心功能。这使得 Cosmopolitan 程序可以不依赖宿主机内核,直接控制硬件资源。
在 API 层面,Cosmopolitan 参考了 POSIX 规范,提供了文件、网络、多线程等常用系统服务。为了适配不同 ISA,它还实现了通用的原子操作、锁机制等并发原语。对于跨平台必须的组件如 libc、libm,Cosmopolitan 也提供了自己的实现。这些努力最终使得开发者只需遵照 Cosmopolitan 的编程规范,就能编写可移植的系统级应用。
但光有可移植性还不够,Cosmopolitan 还需为高性能计算提供支持,这主要表如今两个方面:
1. 动态链接。LLM 推理通常需要调用 CUDA、BLAS 品级三方库。为此,Cosmopolitan 实现了自己的动态链接器,可以加载宿主机的共享对象,并自动完成重定位。
2. GPU 加速。考虑到异构计算的广泛应用,Cosmopolitan 通过封装 CUDA driver API,使得 GPU 内核可以直接内联到 Cosmopolitan 程序中,避免了 JIT 编译带来的额外开销。
这两个特性是 Cosmopolitan 区别于传统 Libc 的关键所在,也是 llamafile 实现其计划目标的重要基石。
融合创新:llamafile 的架构计划
有了前面的铺垫,我们就可以具体解读 llamafile 的核心计划思路了。
简单来说,llamafile 直接利用 llama.cpp 作为 LLM 推理后端,通过 Cosmopolitan Libc 将其打包为可实行文件。这里的关键是,llamafile 将模子权重硬编码到可实行文件中,使得最终产物可脱离源码独立运行,且不受环境约束。
具体实现上,llamafile 主要经过如下步调:
1. 模子转换。首先使用 llama.cpp 提供的工具,将各种常见格式的权重文件转换为 llama.cpp 定制格式。这个过程是一次性的,转换结果可供重复使用。
2. 构建 blob。利用 Cosmopolitan 的链接器 objcopy,将转换后的权重文件以 blob 的情势内嵌到目标文件中。
3. 链接可实行文件。将 llama.cpp 的核心代码、Cosmopolitan Libc、权重 blob 等目标文件一起链接,生成最终的可实行文件。在这个过程中,链接器会举行符号剖析和重定位,并生成元数据供启动期使用。
4. 运行时加载。当可实行文件启动时,首先由 Cosmopolitan 运行时完成初始化,并剖析命令行参数。随后,llamafile 利用 mmap 将嵌入的权重 blob 映射到内存,模拟 llama.cpp 的模子加载过程,继而可以开始推理。
整个过程无需依赖 Python 表明器,权重加载也省去了从文件系统读取的 I/O 开销,再加上 Cosmopolitan 对资源的细粒度控制,使得 llamafile 的端到端性能接近原生应用。
为了进一步提高性能,llamafile 还在 Cosmopolitan 的底子上实现了以下增强:
- 利用 GPU 加速矩阵运算,针对 NVIDIA 平台封装了 cuBLAS API,AMD 平台则使用 ROCm。
- 针对 NUMA 架构举行 NUMA-aware 内存分配和线程调理优化。
- 引入 Cosmopolitan 对 JIT 编译的支持,可在运行时生成高度优化的计算内核。
- 在模子并行方面,llamafile 支持多 GPU 横向扩展,并利用 NCCL 实现高效通信。
同时,llamafile 还致力于提供开箱即用的用户体验:
- 提供 llamafile-convert 工具简化模子转换,并与 Hugging Face 等社区生态深度集成。 
- 持续美满 API server,提供易用的 RESTful 接口,同时兼容各种应用框架。
- 针对 CPU 后端实施 Lazy Tensor 优化,淘汰不必要的显存占用。
这些计划使得 llamafile 不但在性能上拔得头筹,也让 LLM 开发和使用前所未有地便捷。
推动大语言模子民主化进程
自面世以来,llamafile 敏捷俘获了开源社区的芳心。凭借卓越的性能和体验,它已跃升为 Mozilla 最受接待的项目之一。在众多贡献者的推动下,llamafile 正以惊人的速率迭
代码开源,技能创新,社区协作,这是 llamafile 项目标三大法宝,也是它不停突破自我、续写传奇的力量源泉。
自 v0.1 发布以来,llamafile 几乎以每月一版的速率迭代。在 v0.8 中,它不但支持了 Meta 最新发布的 LLaMA 3 等 SOTA 模子,还带来了一系列性能优化:通过手写汇编实现的 BLAS 内核将 CPU 运算效率提高了一个数量级;针对 NVIDIA 和 AMD GPU 的异构调理计谋也更加美满;为树莓派等 ARM 平台提供了专门的低比特量化方案,即便在这些小型装备上也能实实际时对话。如此迅猛的进化速率,展现了开源力量的惊人魅力。
与此同时,llamafile 还在架构层面做出了前瞻性的尝试。好比在 v0.7 中,它引入了混合实行引擎,可以根据模子规模和硬件条件动态调整实行计谋。对于超大规模模子,它会自动接纳流水线并行、张量融合等图优化技能,最小化数据移动;对于中小规模模子,则会利用 Lazy Tensor 避免无谓的显存分配,提高缓存利用率。这为 LLM 推理提供了一套全局优化的范式。
llamafile 也在积极拥抱社区生态。通过提供兼容 OpenAI 的 API,它可以直接取代商业方案,为各种创新应用提供底子支持。在 LangChain、AutoGPT 等热门项目中,我们已经可以看到 llamafile 的身影。Mozilla 还专门成立了 MIECO(Mozilla Internet Ecosystem)项目,为 llamafile 等开源技能搭建产学研用协同创新的平台,推动 AI 生态良性发展。
展望未来,随着算法优化的不停突破,以及晶圆代工工艺的持续进步,LLM 推理已展现出阿米巴原生的趋势特性。从云到边、从数据中心到终端,llamafile 如许的"苹果核"有望成为 AI 民主化的助推器,让智能应用遍地开花。
作为这一厘革的先行者,Mozilla 正在 llamafile 的底子上谋划更弘大的蓝图。相信在可见的未来,它必将开释出比肩操作系统和浏览器的颠覆性力量,成为 AI 新纪元的基石。让我们拭目以待,见证 llamafile "出圈"的那一天。
小结
llamafile 是 Mozilla 为推动 LLM 普通化做出的重要努力。它奥妙联合了 llama.cpp 和 Cosmopolitan Libc 两大开源项目,通过将模子权重内嵌到可实行文件,彻底办理了 LLM 分发和摆设的困难。
性能方面,得益于 Cosmopolitan 细粒度的系统调用抽象和 llamafile 在 GPU 加速、BLAS 优化等方面的卓越工作,其端到端响应速率可比肩商业方案,且可轻松横向扩展。
体验方面,llamafile 提供了丰富的工具链支持,简化了模子转换和自界说流程。其 API server 更是开箱即用,无需过多设置即可实现机动调用。
llamafile 的成功离不开开源社区的积极到场。Mozilla 不但以 MIECO 的情势搭建产学研用协同创新的平台,更以 llamafile 为起点规划 AI 普惠的宏伟蓝图。
站在 IT 发展的新起点,Mozilla 正以 llamafile 为引擎,驱动 AI 技能向更广阔的应用场景渗透。我们有来由相信,这场由开源力量领跑的 AI 革命,必将像当年的个人电脑和互联网一样,以摧枯拉朽之势重塑数字世界的格局。让我们携手共进,做 AI 新期间的见证者和开创者!
参考文献
[1] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.
[2] Brown T, Mann B, Ryder N, et al. Language models are few-shot learners[J]. Advances in neural information processing systems, 2020, 33: 1877-1901.
[3] Sanh V, Debut L, Chaumond J, et al. DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter[J]. arXiv preprint arXiv:1910.01108, 2019.
[4] Gholami A, Kwon K, Wu B, et al. Squeezebert: What can computer vision teach nlp about efficient neural networks?[J]. arXiv preprint arXiv:2006.11316, 2020.
[5] Beltagy I, Peters M E, Cohan A. Longformer: The long-document transformer[J]. arXiv preprint arXiv:2004.05150, 2020.
[6] Touvron H, Lavril T, Izacard G, et al. Llama: Open and efficient foundation language models[J]. arXiv preprint arXiv:2302.13971, 2023.
[7] Wang B, Komatsuzaki A. GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model. https://github.com/kingoflolz/mesh-transformer-jax, May 2021.
[8] Dettmers T. LLaMA.cpp: Port of Facebook's LLaMA model in C/C++. https://github.com/ggerganov/llama.cpp, Mar 2023.
[9] Granlund T, Kenner R. Eliminating branches using a superoptimizer and the GNU C compiler[C]//Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation. 1992: 341-352.
[10] Pitts A. Cosmopolitan Libc. https://justine.lol/cosmopolitan/index.html, Jan 2023.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4