TinyChatEngine

TinyChatEngine

面向边缘设备的高效语言模型推理库

TinyChatEngine是一个专为边缘设备设计的语言模型推理库,支持运行大型语言模型(LLM)和视觉语言模型(VLM)。该库采用SmoothQuant和AWQ等先进的模型压缩技术,兼容x86、ARM和CUDA等多种平台架构,无需依赖外部库。TinyChatEngine具备跨平台兼容性、高性能和易用性等特点,能在笔记本电脑、汽车和机器人等设备上实现实时推理,提供快速响应的同时保护数据隐私。

TinyChatEngineLLMVLMAWQSmoothQuantGithub开源项目

tinychat_logo

TinyChatEngine:设备端LLM/VLM推理库

在边缘设备上运行大型语言模型(LLMs)和视觉语言模型(VLMs)很有用:可以在笔记本电脑、汽车、机器人等设备上提供助手服务(编程、办公、智能回复)。用户可以获得即时响应,同时由于数据在本地,隐私保护更好。

这得益于LLM模型压缩技术:SmoothQuantAWQ(激活感知权重量化),它们与实现压缩低精度模型的TinyChatEngine协同设计。

欢迎查看我们的幻灯片了解更多详情!

NVIDIA GeForce RTX 4070笔记本上的Code LLaMA演示:

coding_demo_gpu

Apple MacBook M1 Pro上的VILA演示:

vlm_demo_m1

Apple MacBook M1 Pro上的LLaMA聊天演示:

chat_demo_m1

概述

LLM压缩:SmoothQuant和AWQ

SmoothQuant:通过将量化难度从激活转移到权重来平滑激活异常值,这是一种数学上等价的变换(1001 = 1010)。

smoothquant_intuition

AWQ(激活感知权重量化):通过分析激活幅度而非权重来保护重要的权重通道。

LLM推理引擎:TinyChatEngine

  • 通用性:支持x86(Intel/AMD)、ARM(Apple M1/M2、Raspberry Pi)、CUDA(Nvidia GPU)。
  • 无库依赖:从零开始的C/C++实现。
  • 高性能:在Macbook和GeForce笔记本上实现实时运行。
  • 易于使用:下载并编译后即可使用!

overview

新闻

  • (2024/05) 🏆 AWQ和TinyChat在MLSys 2024获得了最佳论文奖。🎉
  • (2024/05) 🔥 我们发布了对Llama-3模型系列的支持!查看我们的示例模型库
  • (2024/02) 🔥AWQ和TinyChat已被MLSys 2024接收!
  • (2024/02) 🔥我们扩展了对视觉语言模型(VLM)的支持。欢迎尝试在您的边缘设备上运行VILA
  • (2023/10) 我们扩展了对编程助手Code Llama的支持。欢迎查看我们的模型库
  • (2023/10) ⚡我们发布了新的CUDA后端,支持计算能力≥6.1的Nvidia GPU(包括服务器和边缘GPU)。其性能比之前版本提升了约40%。欢迎尝试!

前提条件

MacOS

对于MacOS,通过以下命令安装boost和llvm:

brew install boost brew install llvm

对于M1/M2用户,从AppStore安装Xcode以启用metal编译器以支持GPU。

Windows(CPU版本)

对于Windows,使用MSYS2下载并安装GCC编译器。按照此教程进行安装:https://code.visualstudio.com/docs/cpp/config-mingw

  • 使用MSYS2安装所需依赖
pacman -S --needed base-devel mingw-w64-x86_64-toolchain make unzip git
  • 将二进制目录(例如C:\msys64\mingw64\bin和C:\msys64\usr\bin)添加到环境路径

Windows(Nvidia GPU版本,实验性)

  • 为Windows安装CUDA工具包(链接)。安装CUDA时,请将安装路径更改为不包含"空格"的其他路径。

  • 安装带有C和C++支持的Visual Studio:按照说明进行操作。

  • 按照以下说明操作,并使用Visual Studio中的x64 Native Tools Command Prompt编译TinyChatEngine。

使用TinyChatEngine部署Llama-3-8B-Instruct的步骤

这里,我们提供从头开始使用TinyChatEngine部署Llama-3-8B-Instruct的详细步骤。

  • 下载仓库。
    git clone --recursive https://github.com/mit-han-lab/TinyChatEngine cd TinyChatEngine
  • 安装Python包
    • TinyChatEngine的主要代码库是用纯C/C++编写的。Python包仅用于从我们的模型库下载(和转换)模型。
      conda create -n TinyChatEngine python=3.10 pip -y conda activate TinyChatEngine pip install -r requirements.txt
  • 从我们的模型库下载量化后的Llama模型。
    cd llm
    • 在x86设备上(如Intel/AMD笔记本)
      python tools/download_model.py --model LLaMA_3_8B_Instruct_awq_int4 --QM QM_x86
    • 在ARM设备上(如M1/M2 Macbook, 树莓派)
      python tools/download_model.py --model LLaMA_3_8B_Instruct_awq_int4 --QM QM_ARM
    • 在CUDA设备上(如Jetson AGX Orin, PC/服务器)
      python tools/download_model.py --model LLaMA2_7B_chat_awq_int4 --QM QM_CUDA
    • 查看这个表格获取支持的模型的详细列表
  • (仅CUDA) 根据您使用的平台和GPU的计算能力,相应修改Makefile。如果在使用Nvidia GPU的Windows上,请修改第54行中的-arch=sm_xx。如果在使用Nvidia GPU的其他平台上,请修改第60行中的-gencode arch=compute_xx,code=sm_xx
  • 编译并在本地启动聊天。
    make chat -j ./chat TinyChatEngine由MIT HAN实验室开发: https://github.com/mit-han-lab/TinyChatEngine 使用模型: LLaMA_3_8B_Instruct 使用AWQ进行4比特量化: https://github.com/mit-han-lab/llm-awq 正在加载模型... 完成! 用户: 为并行计算课程编写一个教学大纲。 助手: 以下是并行计算课程的示例教学大纲: **课程名称:** 并行计算 **授课教师:** [姓名] **课程描述:** 本课程涵盖并行计算的基本概念,包括并行算法、编程模型和架构。学生将学习如何使用各种语言和框架设计、实现和优化并行程序。 **先修要求:** 基本的计算机科学和编程概念知识。 **课程目标:** * 理解并行性原理及其应用 * 学习如何使用不同的语言(如OpenMP, MPI)编写并行程序 ...

使用TinyChatEngine部署视觉语言模型(VLM)聊天机器人

TinyChatEngine不仅支持LLM,还支持VLM。我们为VLM引入了一个复杂的聊天机器人。这里,我们提供了易于遵循的说明,用于使用TinyChatEngine部署视觉语言模型聊天机器人(VILA-7B)。我们建议使用M1/M2 MacBook进行此VLM功能。

  • 按照上面的说明设置基本环境,即先决条件使用TinyChatEngine部署Llama-3-8B-Instruct的步骤

  • 为了在终端中展示图像,请下载并安装以下工具包。

    • 安装termvisage
    • (对于MacOS)安装iTerm2
    • (对于其他操作系统)请参考这里准备适当的终端。
  • 从我们的模型库下载量化后的VILA-7B模型。

    • 在x86设备上(如Intel/AMD笔记本)
      python tools/download_model.py --model VILA_7B_awq_int4_CLIP_ViT-L --QM QM_x86
    • 在ARM设备上(如M1/M2 Macbook, 树莓派)
      python tools/download_model.py --model VILA_7B_awq_int4_CLIP_ViT-L --QM QM_ARM
  • (对于MacOS)在本地启动聊天机器人。请使用适当的终端(如iTerm2)。

    • 图像/文本到文本

      ./vila ../assets/figures/vlm_demo/pedestrian.png
      • ../assets/figures/vlm_demo路径下有几张图片。随意在您的设备上尝试使用VILA处理不同的图像!
    • 对于其他操作系统,请修改vila.sh中的第4行以使用正确的终端。

后端支持

精度x86<br /> (Intel/AMD CPU)ARM<br /> (Apple M1/M2 & RPi)Nvidia GPU
FP32
W4A16
W4A32
W4A8
W8A8
  • 对于树莓派,我们建议使用8GB RAM的板子。我们的测试主要在Raspberry Pi 4 Model B Rev 1.4(aarch64)上进行。对于其他版本,请随意尝试,如果遇到任何问题,请告诉我们。
  • 对于Nvidia GPU,我们的CUDA后端可以支持计算能力 >= 6.1的Nvidia GPU。对于计算能力 < 6.1的GPU,请随意尝试,但我们还没有测试过,因此无法保证结果。

量化和模型支持

TinyChatEngine的目标是在各种设备上支持多种量化方法。例如,目前它支持使用提供的转换脚本opt_smooth_exporter.pysmoothquant生成的int8 opt模型的量化权重。对于LLaMA模型,有可用的脚本将Huggingface格式的检查点转换为我们的int4权重格式,并将它们量化为基于您的设备的特定方法。在转换和量化模型之前,建议应用来自AWQ的伪量化以获得更好的精度。我们目前正在努力支持更多模型,敬请期待!

设备特定的int4权重重排

为了减少运行时权重重排的开销,TinyChatEngine在模型转换过程中离线执行此过程。在本节中,我们将探讨QM_ARM和QM_x86的权重布局。这些布局分别为ARM和x86 CPU定制,支持128位SIMD和256位SIMD操作。我们还支持用于Nvidia GPU(包括服务器和边缘GPU)的QM_CUDA。

平台指令集量化方法
Intel和AMDx86-64QM_x86
Apple M1/M2 Mac和树莓派ARMQM_ARM
Nvidia GPUCUDAQM_CUDA
  • QM_ARM布局示例:对于QM_ARM,考虑128位权重向量的初始配置[w0, w1, ... , w30, w31],其中每个wi是4位量化权重。TinyChatEngine通过交错权重的下半部分和上半部分,将这些权重重新排列为序列[w0, w16, w1, w17, ..., w15, w31]。这种新安排便于使用128位AND和移位操作解码上下两半,如后续图所示。这将消除运行时重排开销并提高性能。

TinyChatEngine模型库

我们提供了一系列经过TinyChatEngine测试的模型。这些模型可以直接下载并部署在您的设备上。要下载模型,请在下表中找到目标模型的ID,并使用相关脚本。查看我们的模型库点击这里

<table> <thead> <tr> <th>模型</th> <th>精度</th> <th>ID</th> <th>x86后端</th> <th>ARM后端</th> <th>CUDA后端</th> </tr> </thead> <tbody> <tr> <td rowspan="2">LLaMA_3_8B_Instruct</td> <td>fp32</td> <td>LLaMA_3_8B_Instruct_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td> int4</td> <td> LLaMA_3_8B_Instruct_awq_int4</td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td rowspan="2">LLaMA2_13B_chat</td> <td> fp32</td> <td> LLaMA2_13B_chat_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td>int4</td> <td>LLaMA2_13B_chat_awq_int4</td> <td> ✅ </td> <td> ✅ </td> <td> ✅ </td> </tr> <tr> <td rowspan="2">LLaMA2_7B_chat</td> <td>fp32</td> <td>LLaMA2_7B_chat_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td> int4</td> <td> LLaMA2_7B_chat_awq_int4</td> <td> ✅ </td> <td> ✅ </td> <td> ✅ </td> </tr> <tr> <td rowspan="2">LLaMA_7B</td> <td> fp32</td> <td> LLaMA_7B_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td>int4</td> <td>LLaMA_7B_awq_int4</td> <td> ✅ </td> <td> ✅ </td> <td> ✅ </td> </tr> <tr> <td rowspan="2">CodeLLaMA_13B_Instruct</td> <td> fp32</td> <td> CodeLLaMA_13B_Instruct_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td>int4</td> <td>CodeLLaMA_13B_Instruct_awq_int4</td> <td> ✅ </td> <td> ✅ </td> <td> ✅ </td> </tr> <tr> <td rowspan="2">CodeLLaMA_7B_Instruct</td> <td> fp32</td> <td> CodeLLaMA_7B_Instruct_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td>int4</td> <td>CodeLLaMA_7B_Instruct_awq_int4</td> <td> ✅ </td> <td> ✅ </td> <td> ✅ </td> </tr> <tr> <td rowspan="2">Mistral-7B-Instruct-v0.2</td> <td> fp32</td> <td> Mistral_7B_v0.2_Instruct_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td>int4</td> <td>Mistral_7B_v0.2_Instruct_awq_int4</td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td rowspan="2">VILA-7B</td> <td> fp32</td> <td> VILA_7B_CLIP_ViT-L_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td> int4</td> <td> VILA_7B_awq_int4_CLIP_ViT-L </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td rowspan="2">LLaVA-v1.5-13B</td> <td> fp32</td> <td> LLaVA_13B_CLIP_ViT-L_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td> int4</td> <td> LLaVA_13B_awq_int4_CLIP_ViT-L </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td rowspan="2">LLaVA-v1.5-7B</td> <td> fp32</td> <td> LLaVA_7B_CLIP_ViT-L_fp32 </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td> int4</td> <td> LLaVA_7B_awq_int4_CLIP_ViT-L </td> <td> ✅ </td> <td> ✅ </td> <td> </td> </tr> <tr> <td rowspan="2">StarCoder</td> <td>fp32</td> <td>StarCoder_15.5B_fp32</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td>int4</td> <td>StarCoder_15.5B_awq_int4</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td rowspan="3">opt-6.7B</td> <td>fp32</td> <td>opt_6.7B_fp32</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td>int8</td> <td>opt_6.7B_smooth_int8</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td>int4</td> <td>opt_6.7B_awq_int4</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td rowspan="3">opt-1.3B</td> <td>fp32</td> <td>opt_1.3B_fp32</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td>int8</td> <td>opt_1.3B_smooth_int8</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td>int4</td> <td>opt_1.3B_awq_int4</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td rowspan="3">opt-125m</td> <td>fp32</td> <td>opt_125m_fp32</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td>int8</td> <td>opt_125m_smooth_int8</td> <td>✅</td> <td>✅</td> <td></td> </tr> <tr> <td>int4</td> <td>opt_125m_awq_int4</td> <td>✅</td> <td>✅</td> <td></td> </tr> </tbody> </table> 例如,要下载量化后的 LLaMA-2-7B-chat 模型:(对于 int4 模型,使用 --QM 选择适合您设备的量化模型)
  • 在 Intel/AMD 笔记本上:
    python tools/download_model.py --model LLaMA2_7B_chat_awq_int4 --QM QM_x86
  • 在 M1/M2 Macbook 上:
    python tools/download_model.py --model LLaMA2_7B_chat_awq_int4 --QM QM_ARM
  • 在 Nvidia GPU 上:
    python tools/download_model.py --model LLaMA2_7B_chat_awq_int4 --QM QM_CUDA

要使用 TinyChatEngine 部署量化模型,请编译并运行聊天程序。

  • 在 CPU 平台上
make chat -j # ./chat <模型名称> <精度> <线程数> ./chat LLaMA2_7B_chat INT4 8
  • 在 GPU 平台上
make chat -j # ./chat <模型名称> <精度> ./chat LLaMA2_7B_chat INT4

相关项目

TinyEngine:用于微控制器的高效且高性能的神经网络库

SmoothQuant:大型语言模型的准确高效后训练量化

AWQ:用于 LLM 压缩和加速的激活感知权重量化

致谢

llama.cpp

whisper.cpp

transformers

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多