在AI浪潮风起云涌的当下,AI正在不断地重塑着每一个行业。在各大厂先后争先恐后地推出一系列大模型的同时,也不断出现了很多开源的大模型。今天介绍的这个出现在GitHub热榜上的项目是MLC LLM。它是一种通用解决方案,可以在各种硬件后端和本地应用程序上原生部署任何语言模型,同时为所有人提供一个高效的框架,以进一步优化模型性能以适应其自身的用例。 一切都在本地运行,无需服务器支持,并且可以在手机和笔记本电脑上通过本地GPU加速。
项目的github地址为:GitHub - mlc-ai/mlc-llm: Enable everyone to develop, optimize and deploy AI models natively on everyone's devices.[1]
MLC LLM是一种通用解决方案,可以在各种硬件后端和本地应用程序上原生部署任何语言模型,同时为所有人提供一个高效的框架,以进一步优化模型性能以适应其自身的用例。一切都在本地运行,无需服务器支持,并且可以在手机和笔记本电脑上通过本地GPU加速。请查看我们的GitHub存储库,了解我们是如何实现的。您也可以阅读下面的说明来尝试演示。
本节包含了在您的环境中本地运行大型语言模型和聊天机器人的说明。
•iPhone •Android •Windows Linux Mac •Web浏览器
iPhone
请尝试使用TestFlight页面(限于前9000个用户)安装和使用我们为iPhone构建的示例iOS聊天应用程序。Vicuna-7B需要4GB的内存,RedPajama-3B需要2.2GB的内存才能运行。考虑到iOS和其他正在运行的应用程序,我们需要一部具有6GB内存的较新iPhone来运行Vicuna-7B,或者具有4GB内存的较新iPhone来运行RedPajama-3B。该应用程序仅在iPhone 14 Pro Max、iPhone 14 Pro和iPhone 12 Pro上进行了测试。
要从源代码构建iOS应用程序,您也可以查看我们的GitHub存储库。
注意:iOS应用程序的文本生成速度可能会不稳定。它可能在开始时运行缓慢,然后恢复到正常速度。
Android
在此处下载APK文件并在您的手机上安装。然后,您可以开始与LLM进行聊天。当您第一次打开应用程序时,需要下载参数,加载过程可能会很慢。在后续运行中,参数将从缓存中加载(速度较快),您可以离线使用该应用程序。我们目前的演示依赖于手机上的OpenCL支持,占用约6GB的内存,如果您有一部带有最新骁龙芯片的手机,可以尝试我们的演示。
我们在三星Galaxy S23上测试了我们的演示。由于OpenCL支持有限,它尚不能在Google Pixel上运行。我们将继续提供支持,并欢迎开源社区的贡献。您还可以查看我们的GitHub存储库,以从源代码构建Android应用程序。
请查看我们的博文,了解在使MLC-LLM适用于Android过程中的技术细节。
Windows Linux Mac
我们提供一个命令行界面(CLI)应用程序,可在终端中与机器人聊天。在安装CLI应用程序之前,我们需要先安装一些依赖项。
我们使用Conda来管理我们的应用程序,因此需要安装一个Conda版本。您可以安装Miniconda或Miniforge。 对于Windows和Linux,聊天机器人应用程序通过Vulkan平台在GPU上运行。对于Windows和Linux用户,请安装最新的Vulkan驱动程序。对于NVIDIA GPU用户,请确保安装了Vulkan驱动程序,因为CUDA驱动程序可能不好。 在安装所有依赖项之后,只需按照安装CLI应用程序下面的说明操作即可。
# Create a new conda environment and activate the environment.
conda create -n mlc-chat
conda activate mlc-chat
# Install Git and Git-LFS if you haven't already.
# They are used for downloading the model weights from HuggingFace.
conda install git git-lfs
git lfs install
# Install the chat CLI app from Conda.
conda install -c mlc-ai -c conda-forge mlc-chat-nightly --force-reinstall
# Create a directory, download the model weights from HuggingFace, and download the binary libraries
# from GitHub. Select one of the following `LOCAL_ID` for a prebuilt LLM.
mkdir -p dist/prebuilt
git clone https://github.com/mlc-ai/binary-mlc-llm-libs.git dist/prebuilt/lib
# Download prebuilt weights of Vicuna-7B
cd dist/prebuilt
git clone https://huggingface.co/mlc-ai/mlc-chat-vicuna-v1-7b-q3f16_0
cd ../..
mlc_chat_cli --local-id vicuna-v1-7b-q3f16_0
# Download prebuilt weights of RedPajama-3B
cd dist/prebuilt
git clone https://huggingface.co/mlc-ai/mlc-chat-RedPajama-INCITE-Chat-3B-v1-q4f16_0
cd ../..
mlc_chat_cli --local-id RedPajama-INCITE-Chat-3B-v1-q4f16_0
# Download prebuilt weights of RWKV-raven-1.5B/3B/7B
cd dist/prebuilt
git clone https://huggingface.co/mlc-ai/mlc-chat-rwkv-raven-1b5-q8f16_0
# or git clone https://huggingface.co/mlc-ai/mlc-chat-rwkv-raven-3b-q8f16_0
# or git clone https://huggingface.co/mlc-ai/mlc-chat-rwkv-raven-7b-q8f16_0
cd ../..
mlc_chat_cli --local-id rwkv-raven-1b5-q8f16_0 # Replace your local id if you use 3b or 7b model.
Web浏览器
请查看我们的伴侣项目WebLLM[3],它可以原生地部署模型到浏览器中。这里的一切都在浏览器中运行,无需服务器支持,并且通过WebGPU进行加速。
链接
•请查看我们的GitHub存储库[4],了解我们如何构建、优化和部署大型语言模型到各种设备和后端。 •请查看我们的伴侣项目WebLLM[5],可以在您的浏览器中纯粹运行聊天机器人。 •您可能还对Web Stable Diffusion[6]感兴趣,它可以在浏览器中纯粹运行stable-diffusion模型。 •您可能想要查看我们的在线公开机器学习编译课程[7],以系统地了解我们的方法。
免责声明
预打包的演示仅供研究目的,受模型许可证约束。
MLC LLM
| 项目页面[8] | 博客[9] | WebLLM[10] | WebStableDiffusion[11] | [Discord][discord-url]
MLC LLM 是一个通用解决方案 ,允许任何语言模型 在多样化的硬件后端和本机应用程序上原生部署 ,并为每个人提供了一个高效的框架 ,以进一步优化模型性能,以适应自己的用例。
我们的使命是让每个人都能够在自己的设备上原生开发、优化和部署 AI 模型 。
一切都在本地运行,无需服务器支持,并通过手机和笔记本电脑上的本地 GPU 加速。 支持的平台[12] 包括:
•iPhone、iPad; •Android 手机; •Apple Silicon 和 x86 MacBook; •通过 Vulkan 在 Windows 和 Linux 上的 AMD、Intel 和 NVIDIA GPU; •通过 CUDA 在 Windows 和 Linux 上的 NVIDIA GPU; •浏览器上的 WebGPU(通过伴侣项目 WebLLM[13])。
点击此处加入我们的 Discord 服务器![14]
查看我们的指南页面以尝试![15]
什么是MLC LLM?
近年来,生成式人工智能(AI)和大型语言模型(LLM)取得了显著进展,越来越普遍。借助开源倡议,现在可以使用开源模型开发个人AI助手。然而,LLM往往需要大量资源和计算能力。为了创建可扩展的服务,开发人员可能需要依赖强大的集群和昂贵的硬件来运行模型推断。此外,部署LLM也面临一些挑战,例如不断演进的模型创新、内存限制以及潜在的优化技术需求。
本项目的目标是在各种设备上实现AI模型的开发、优化和推断部署,包括不仅仅是服务器级硬件,还包括用户的浏览器、笔记本电脑和移动应用。为了实现这一目标,我们需要解决计算设备和部署环境的多样性。其中一些关键挑战包括:
•支持不同型号的CPU、GPU以及其他协处理器和加速器。 •部署到用户设备的本地环境,可能没有Python或其他必要的依赖项。 •通过精心规划分配和积极压缩模型参数来解决内存限制。
MLC LLM提供了一个可重复、系统化和可定制的工作流程,赋予开发人员和AI系统研究人员在以Python为中心的高效工作方法中实现模型和优化的能力。这种方法论使得能够快速尝试新模型、新想法和新编译器传递,并在所需的目标上进行本地部署。此外,我们通过扩展TVM后端来不断扩大LLM的加速范围,使得模型编译更加透明高效。
MLC如何实现通用本地部署?
我们解决方案的基石是机器学习编译(MLC),通过它我们能够高效地部署AI模型。我们在开源生态系统的基础上构建,其中包括Hugging Face和Google的分词器,以及开源的LLM,如Llama、Vicuna、Dolly、MOSS、RWKV等。我们的主要工作流程基于Apache TVM Unity,这是Apache TVM社区中一个正在进行中的令人兴奋的发展项目。
•动态形状:我们将语言模型作为一个具有本地动态形状支持的TVM IRModule进行编译,避免了对最大长度的额外填充,减少了计算量和内存使用。 •组合式机器学习编译优化:我们进行了许多模型部署优化,例如更好的编译代码转换、融合、内存规划、库卸载和手动代码优化,这些都可以作为TVM的IRModule转换以Python API的形式轻松实现。 •量化:我们利用低位量化来压缩模型权重,并利用TVM的循环级TensorIR快速定制不同压缩编码方案的代码生成。 •运行时:生成的最终库在本地环境中运行,使用TVM运行时,它具有最小的依赖关系,支持各种GPU驱动程序API和本地语言绑定(C、JavaScript等)。
此外,我们还提供了一个基于轻量级C++的示例CLI应用程序,展示了如何打包编译后的产品和必要的预处理/后处理,这将有助于阐明将它们嵌入到本地应用程序的工作流程。
作为起点,MLC为CUDA、Vulkan和Metal生成GPU着色器。通过改进TVM编译器和运行时,可以添加更多的支持,如OpenCL、sycl、webgpu-native等。MLC还通过LLVM支持包括ARM和x86在内的各种CPU目标。
我们在很大程度上依赖于开源生态系统,尤其是TVM Unity,这是TVM项目中令人兴奋的最新发展,它实现了以Python为先的交互式MLC开发体验,让我们可以轻松地组合新的优化策略,逐步将我们的应用程序带入感兴趣的环境中。我们还利用了融合量化内核、一流的动态形状支持和多样化的GPU后端等优化。
从源代码构建
有两种方法可以从源代码构建MLC LLM。第一种方法是使用Hugging Face的URL直接下载模型参数,第二种方法是使用包含参数的本地目录。
Hugging Face URL
要从支持的模型的现有Hugging Face存储库中下载权重,可以按照以下说明操作:
# 创建一个新的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
成功构建后,编译的模型将位于dist/dolly-v2-3b-q3f16_0
(确切路径因模型类型和指定的量化而异)。请按照特定平台的说明构建和运行MLC LLM,包括iOS[16]、Android[17]和CLI[18]。
本地目录
如果您有一个包含模型参数、分词器和支持的模型的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[19]、Android[20]和CLI[21]。
链接
•您可能还对我们的衍生项目WebLLM[22]感兴趣,该项目专注于将LLM引入浏览器。 •请访问项目主页[23]获取详细的说明。 •iOS应用程序的本地构建说明[24]。 •您可能想要查看我们在线公开的机器学习编译课程[25],以系统地了解我们的方法。
致谢
该项目由CMU catalyst、UW SAMPL、SJTU、OctoML和MLC社区的成员发起。我们很愿意继续开发和支持开源的ML社区。
感谢我们所依赖的开源生态系统,使这个项目成为可能。我们要感谢Apache TVM社区和TVM Unity项目的开发者。开源的ML社区成员使这些模型公开可用。感谢PyTorch和Hugging Face社区使这些模型易于访问。我们还要感谢Vicuna、SentencePiece、LLaMA、Alpaca、MOSS和RWKV团队。我们还要感谢Vulkan、Swift、C++、Python和Rust社区,使得这个项目成为可能。
References
[1]
GitHub - mlc-ai/mlc-llm: Enable everyone to develop, optimize and deploy AI models natively on everyone's devices.: https://github.com/mlc-ai/mlc-llm
[2]
MLC LLM介绍: https://mlc.ai/mlc-llm/
[3]
WebLLM: https://mlc.ai/web-llm/
[4]
GitHub存储库: https://github.com/mlc-ai/mlc-llm
[5]
WebLLM: https://mlc.ai/web-llm/
[6]
Web Stable Diffusion: https://mlc.ai/web-stable-diffusion/
[7]
机器学习编译课程: https://mlc.ai/
[8]
项目页面: https://mlc.ai/mlc-llm/
[9]
博客: https://mlc.ai/blog/2023/05/01/bringing-accelerated-llm-to-consumer-hardware
[10]
WebLLM: https://mlc.ai/web-llm/
[11]
WebStableDiffusion: https://mlc.ai/web-stable-diffusion/
[12]
支持的平台: https://github.com/mlc-ai/mlc-llm/issues/15
[13]
WebLLM: https://github.com/mlc-ai/web-llm/tree/main
[14]
点击此处加入我们的 Discord 服务器!: https://discord.gg/9Xpy2HGBuD
[15]
查看我们的指南页面以尝试!: https://mlc.ai/mlc-llm/
[16]
iOS: https://github.com/mlc-ai/mlc-llm/blob/main/ios/README.md
[17]
Android: https://github.com/mlc-ai/mlc-llm/blob/main/android/README.md
[18]
CLI: https://github.com/mlc-ai/mlc-llm/tree/main/cpp/README.md
[19]
iOS: https://github.com/mlc-ai/mlc-llm/blob/main/ios/README.md
[20]
Android: https://github.com/mlc-ai/mlc-llm/blob/main/android/README.md
[21]
CLI: https://github.com/mlc-ai/mlc-llm/tree/main/cpp/README.md
[22]
WebLLM: https://github.com/mlc-ai/web-llm/tree/main
[23]
项目主页: site/index.md
[24]
iOS应用程序的本地构建说明: ios/README.md
[25]
机器学习编译课程: https://mlc.ai