天天看点

MLC-LLM:让手机也能运行大语言模型

作者:ChatGPT扫地僧
MLC-LLM:让手机也能运行大语言模型

MLC-LLM 是一种通用 AI 模型本地化部署解决方案,可以在各种硬件平台和本地应用程序上原生部署任何语言模型,并为每个人提供一个高效的框架,以进一步优化模型性能,满足他们自己的用例需求。

它的使命是让每个人都能在自己的设备上本地开发、优化和部署AI模型。

MLC-LLM:让手机也能运行大语言模型

MLC-LLM 在本地运行,无需服务器支持,并且可以利用手机和笔记本电脑上的本地GPU进行加速。支持的平台包括:

  • iPhone、iPad
  • Android 手机
  • Apple Silicon 和 x86 MacBook
  • 通过 Vulkan 在 Windows 和 Linux 上的AMD、Intel 和 NVIDIA GPU
  • 通过 CUDA 在 Windows 和 Linux 上的 NVIDIA GPU
  • 通过浏览器的WebGPU(通过WebLLM项目实现)

MLC-LLM 是什么❓

近年来,在生成式人工智能(AI)和大型语言模型(LLM)方面取得了显著进展,这些模型越来越普遍。由于开源倡议,现在可以使用开源模型开发个人AI助手。然而,LLM往往对资源要求较高,需要大量计算资源。为了创建可扩展的服务,开发人员可能需要依赖强大的集群和昂贵的硬件来运行模型推断。此外,部署LLM也面临着一些挑战,如不断创新的模型、内存限制和潜在的优化技术需求。

这个项目的目标是在各种设备上进行AI模型的开发、优化和推断部署,包括不仅仅是服务器级硬件,还包括用户的浏览器、笔记本电脑和移动应用。为了实现这一目标,需要解决计算设备和部署环境的多样性。一些关键挑战包括:

  • 支持不同型号的CPU、GPU和其他协处理器和加速器。
  • 在用户设备的本地环境上部署,这些设备可能没有Python或其他必要的依赖库。
  • 通过仔细规划内存分配和积极压缩模型参数来解决内存限制的问题。

MLC LLM 提供了一个可重复、系统化和可定制的工作流程,使开发人员和AI系统研究人员能够以 Python 为中心的高效方法来实现模型和优化。这种方法使得可以快速尝试新模型、新思路和新编译器传递,然后将其本地部署到所需的目标上。此外,它还通过扩展TVM后端来不断扩展 LLM 加速,使模型编译更加透明和高效。

MLC如何实现通用本地部署❓

解决方案的核心是机器学习编译(MLC),利用它来高效地部署AI模型。它基于开源生态系统构建,包括Hugging Face和Google的标记器以及像 Llama、Vicuna、Dolly、MOSS、RWKV等开源LLM模型。我们的主要工作流程基于Apache TVM Unity,这是Apache TVM社区的一个令人兴奋的持续发展项目。

以下是它的一些关键方法:

  • 动态形状(dynamic shape):将语言模型作为TVM IRModule进行编译,支持本地动态形状,避免了对最大长度的额外填充,减少了计算量和内存使用。
  • 组合式 ML 编译优化:执行许多模型部署优化,如更好的编译代码转换、融合、内存规划、库卸载和手动代码优化,这些优化可以轻松地作为TVM的IRModule转换暴露为Python API。
  • 量化:利用低位量化来压缩模型权重,并利用TVM的循环级TensorIR快速定制不同压缩编码方案的代码生成。
  • 运行时:生成的最终库在本地环境中运行,使用TVM运行时,具有最小的依赖性,支持各种GPU驱动程序API和本地语言绑定(C、JavaScript等)。
MLC-LLM:让手机也能运行大语言模型

此外,它还提供了一个基于轻量级C++的示例CLI应用程序,展示了如何打包编译的组件以及必要的预处理/后处理过程,这将帮助理解将它们嵌入到本地应用程序的工作流程。

作为起点,MLC 为 CUDA、Vulkan 和 Metal 生成GPU着色器。通过改进 TVM 编译器和运行时,可以添加更多支持,如 OpenCL、sycl和webgpu-native。MLC 还通过 LLVM 支持 ARM 和 x86 等各种CPU目标。

它在很大程度上依赖于开源生态系统,特别是TVM Unity,这是TVM项目中令人兴奋的最新发展,它实现了以 Python 为中心的交互式MLC 开发体验,使我们能够轻松地在 Python 中组合新的优化策略,并逐步将我们的应用程序引入感兴趣的环境。还利用了一些优化技术,如融合量化内核、一流的动态形状支持和多样的GPU后端。

从源代码构建

有两种方法可以从源代码构建 MLC-LLM。第一种,方法是使用Hugging Face的URL直接下载模型参数,第二种,方法是使用包含参数的本地目录。

使用Hugging Face URL:

# 创建一个新的conda环境并安装依赖项
conda create -n mlc-llm-env python
conda activate mlc-llm-env
pip install torch transformers  # 安装PyTorch和Hugging Face transformers
pip install -I mlc_ai_nightly -f https://mlc.ai/wheels  # 安装TVM


# 如果尚未安装Git和Git-LFS,请安装它们。
# 它们用于从Hugging Face下载模型权重。
conda install git git-lfs
git lfs install


# 克隆MLC LLM仓库
git clone --recursive https://github.com/mlc-ai/mlc-llm.git
cd mlc-llm


# 创建本地构建目录并编译模型
# 这将自动从Hugging Face下载参数、分词器和配置文件
python build.py --hf-path=databricks/dolly-v2-3b           

使用本地目录:

如果你有一个包含模型参数、标记器和受支持模型的 config.json 文件的本地目录,可以运行以下构建命令:

# 创建本地构建目录并编译模型
python build.py --model=/path/to/local/directory


# 如果模型路径的形式是`dist/models/model_name`,
# 可以简化构建命令为
# python build.py --model=model_name           

构建成功后,编译的模型将位于`dist/dolly-v2-3b-q3f16_0`(具体路径因模型类型和指定的量化而异)。之后按照特定平台的说明来构建和运行 MLC - LLM,支持 iOS、Android 和 CLI。

https://github.com/mlc-ai/mlc-llm/blob/main/ios/README.md

iOS

https://github.com/mlc-ai/mlc-llm/blob/main/android/README.md

Android

https://github.com/mlc-ai/mlc-llm/tree/main/cpp/README.md

CLI

如何试一试❓

iPhone

https://testflight.apple.com/join/57zd7oxa

TestFlight

iOS用户如果想测试,可以从 TestFlight 页面(限制前9000名用户)安装使用已经为iPhone构建的iOS聊天应用程序。Vicuna-7B 需要4GB的RAM,而 RedPajama-3B 需要 2.2GB的RAM才能运行。考虑到iOS和其他正在运行的应用程序,需要一台 6GB 内存的iPhone才能运行Vicuna-7B,或者一台 4GB 内存的iPhone才能运行RedPajama-3B。该应用程序仅在 iPhone 14 Pro Max、iPhone 14 Pro 和 iPhone 12 Pro 上进行了测试。

注意:iOS应用程序上的文本生成速度可能会不稳定。它可能在开始时运行缓慢,然后恢复到正常速度。

Android

https://github.com/mlc-ai/binary-mlc-llm-libs/raw/main/

APK

Android 用户如果想测试,可以下载APK文件并在手机上安装应用。然后就可以与LLM开始聊天。首次打开应用程序时,需要下载参数,加载过程可能会比较慢。在以后的运行中,参数将从缓存中加载(这很快),并且可以离线使用该应用程序。当前依赖于手机上的OpenCL 支持,并且需要约6GB 的 RAM。

如果想自己构建移动应用可以根据上面#从源代码构建#方式来自己构建移动应用。

引用链接

Github:https://github.com/mlc-ai/mlc-llm

Website:https://mlc.ai/mlc-llm

继续阅读