MLC LLM - 大模型本地部署解决方案

news/2024/11/9 0:30:17/

MLC LLM 是一种通用解决方案,它允许将任何语言模型本地部署在各种硬件后端和本地应用程序上,此外还提供了一个高效的框架,供每个人根据自己的用例进一步优化模型性能。

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

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

一切都在本地运行,无需服务器支持,并通过手机和笔记本电脑上的本地 GPU 加速。 支持的平台包括:

  • 苹果手机、iPad
  • 金属 GPU 和 Intel/ARM MacBook;
  • AMD、Intel 和 NVIDIA GPU,通过 Windows 和 Linux 上的 Vulkan;
  • 在 Windows 和 Linux 上通过 CUDA 的 NVIDIA GPU;
  • 浏览器上的 WebGPU(通过配套项目 WebLLM)。

在这里插入图片描述

1、什么是 MLC LLM?

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

该项目的目标是支持开发、优化和部署 AI 模型,以便跨各种设备进行推理,不仅包括服务器级硬件,还包括用户的浏览器、笔记本电脑和移动应用程序。 为实现这一目标,我们需要解决计算设备和部署环境的多样性问题。 一些主要挑战包括:

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

MLC LLM 提供可重复、系统化和可定制的工作流程,使开发人员和 AI 系统研究人员能够以以生产力为中心、Python 优先的方法实施模型和优化。 这种方法可以快速试验新模型、新想法和新编译器通道,然后本地部署到所需目标。 此外,我们通过扩展 TVM 后端不断扩展 LLM 加速,使模型编译更加透明和高效。

2、MLC 如何实现通用原生部署?

我们解决方案的基石是机器学习编译 (MLC:Machine Learning Compilation),我们利用它来高效部署 AI 模型。 我们建立在开源生态系统的基础上,包括来自 HuggingFace 和 Google 的分词器,以及 Llama、Vicuna、Dolly、MOSS 等开源 LLM。 我们的主要工作流基于 Apache TVM Unity,这是 Apache TVM 社区中一项令人兴奋的持续开发。

  • 动态形状:我们将语言模型烘焙为具有原生动态形状支持的 TVM IRModule,避免了对最大长度进行额外填充的需要,并减少了计算量和内存使用量。
  • 可组合的 ML 编译优化:我们执行许多模型部署优化,例如更好的编译代码转换、融合、内存规划、库卸载和手动代码优化可以很容易地合并为 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 支持各种 CPU 目标,包括 ARM 和 x86。

我们严重依赖开源生态系统,更具体地说,TVM Unity,这是 TVM 项目中令人兴奋的最新开发,它支持 python 优先的交互式 MLC 开发体验,使我们能够轻松地在 Python 中编写新的优化,并逐步将我们的应用程序带到 感兴趣的环境。 我们还利用了融合量化内核、一流动态形状支持和多样化 GPU 后端等优化。


原文链接:MLC LLM - 手机大模型 | BimAnt


http://www.ppmy.cn/news/484309.html

相关文章

浅谈MLC LLM(轻设备大模型)

从此,大模型可以在任何设备上编译运行。 「我把大语言模型下到我的 iPhone 上,它神奇地跑起来了!」 还在五一假期美梦中,大模型领域的技术就已经发展到了这种程度。Amazing~~~ 对于陈天奇等人开源的新技术,大家一致的…

我的TOP1编程语言

作为一名程序员,选择一门厉害的编程语言确实很重要,那么,我的TOP1编程语言是什么呢?在我的眼中,Python是一门具有魔力且实用的编程语言,通过它的学习,我体会到了其易用性、强大的工具生态环境以…

SLC、MLC、TLC与QLC的区别

概述 现在电脑基本大部分都是使用固态硬盘(ssd)了,大家也都知道固态硬盘相较于机械硬盘(ssd)它的体积更小,速度更快,当然这些也是它的优势。不过还有很多小伙伴担心固态硬盘的数据安全性与寿命,固态硬盘的各种级别各种参数也会给挑…

闪存(SSD)技术,MLC和SLC差距到底有多大?

过去,NAND闪存技术的发展,还是遵循传统的内存技术发展的轨迹,如SRAM、DRAM、EEPROM (EEPROM)等,在每个存储单元中存储一个二进制数据,然而这种类型的NAND技术被称为Single Level Cell或SLC。 在竞争中,为了…

512G MLC颗粒 固态U盘 DIY

一般大家日常使用笔记本电脑,久而久之大概都会感觉电脑容量越来越不够用了,硬盘全部被各种“学习资料”塞得满满当当,这时候可能大都会买外接移动机械硬盘作为容量扩充。 不过移动机械硬盘这个东西,速度慢体积大不说,…

uuid 概念与运用

1. 概念与特点 UUID(Universally Unique Identifier)是一种标识符,用于唯一地标识信息或实体。它是一个128位的值,通常以32个十六进制数表示,以连字符或其他分隔符分隔成不同的部分。 UUID的设计目的是在分布式系统中…

什么是面向对象?

1什么是对象? Everything is objec(万物皆对象),对象到底是什么,我们可以从两个层次来理解。 1.1对象是单个事物的抽象 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以…

Netty底层的实现原理和模型结构

Netty框架实际上就是实现了多Reactor多线程模式mainReactor ———— bossGroup(NioEventLoopGroup) 中的某个NioEventLoopsubReactor ———— workerGroup(NioEventLoopGroup) 中的某个NioEventLoopacceptor ———— ServerBootstrapAcceptorThreadPool ———— 用户自定义…