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

news2024/9/25 7:24:00

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.coloradmin.cn/o/498067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】使用Print函数制作旋转的动画

1. 引言 如果你想有效地学习Python,这篇文章可能不适合你。接下来的一切都可能是愚蠢、和浪费时间,但哪有怎么样,毕竟这玩意很有趣呀! 2. 好玩的脚本 首先,我们来看两个好玩的Python脚本,如下&#xff1…

开关电源基础03:正激和反激开关电源拓扑(3)-反激拓扑

说在开头:关于不确定性原理 1927年2月,那个冬天对海森堡来说简直是一场噩梦,越来越多的人转向了薛定谔和他那该死的波动理论,把他的矩阵忘得一干二净;而最让他伤心和委屈的是,玻尔也转向了他的对立面&…

大规模并行处理架构Doris编译部署篇

目录 1 Doris编译1.1 使用 Docker 开发镜像编译(推荐)1.1.1 遇到的问题1.1.1 遇到的问题 1.2 直接编译(CentOS/Ubuntu)1.2.1 环境准备1.2.2 系统依赖(一次性安装)1.2.3 手动安装系统依赖1.2.3.1 CMake 3.11…

Linux驱动开发:SPI子系统

1、SPI简介 1.1 四根线 MISO:主设备数据输入,从设备数据输出。 MOSI:主设备数据输出,从设备数据输入。 SCLK:时钟信号,由主设备产生。 CS: 从设备片选信号,由主设备控制。 1.2…

《string类的使用介绍》

本文主要介绍string的常见的接口的使用 文章目录 一、什么是string类二、string类的使用1、string类对象的常见构造2、string类对象的容量操作3、string类对象的访问及遍历操作①operator[ ]的用法②迭代器③范围for 4、string类对象的修改操作①push_back②append③operator&a…

刷题笔记8| 344.反转字符串, 541. 反转字符串II, 剑指Offer 05.替换空格

344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 输入:s ["h","e",…

索引—MySQL

文章目录 1.定义以及相关知识1.1定义1.2数据库保存数据的基本单位 2.MySQL中索引分类2.1B树和B树2.2主键索引(聚簇索引)2.3非聚簇索引2.4覆盖索引2.5复合索引(联合索引)2.6基于B树的索引2.7hash索引 1.定义以及相关知识 1.1定义 …

okio篇--总览

看源码第一步,先去看看官网对okio的介绍: Okio 首先第一段: okio对bytes,做了两种形式的封装:ByteString和Buffer。 其中ByteString,是针对字符类的数据,内部封装一个byte数组,封…

网络协议与攻击模拟-06-ICMP重定向

■0网络不可达 ■2协议不可达 类型4源抑制 类型5重定向 2、 ICMP 常见的报文 响应请求 使用 ping 请求( type 0)响应( type 8) 目标不可达 type 3 源抑制 源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于 I…

Django初识

1、简介 Django,是用python语言写的开源web开发框架,并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt&#…

操作系统第二章——进程与线程(中)

和光同尘,与时舒卷 文章目录 2.2.1 调度的概念,层次知识总览调度的基本概念高级调度低级调度中级调度三层调度的联系,对比进程的挂起态和七状态模型知识回顾 2.2.2 进程调度的时机,切换与过程,方式知识总览进程调度的时…

【C++】第二站:类和对象(中)拷贝构造函数

文章目录 一、拷贝构造函数的概念二、拷贝构造函数的特性三、深度剖析拷贝构造函数不采用引用会无限递归的原因1.C对于传参的两个规定2.如何解开这个无穷递归 四、拷贝构造函数的其他特性五、拷贝构造的一些使用场景 一、拷贝构造函数的概念 拷贝构造函数:只有单个形…

2.2 Linux控制台访问CLI

系列文章目录 第1章 Linux Shell简介 第2章 Shell基础 <本章所在位置> 第3章 Bash Shell基础命令 第4章 Bash Shell命令进阶 第5章 Linux Shell深度理解 第6章 Linux环境变量 第7章 Linux文件权限 第8章 Linux文件系统的管理 第9章 Linux软件安装 第10章 Linux文本编辑器…

【MySQL】搭建出高可用性、高性能的MySQL集群要考虑的事是蛮多的,你看看会不会?

MySQL 架构设计数据同步负载均衡安全性监控和维护注意的点1. 确定节点数量和配置2. 选择合适的硬件和网络设备3. 避免单点故障4. 定期备份和恢复测试5. 定期更新和升级 Java工程师使用集群步骤最后 MySQL集群是一种高可用性、高性能的数据库解决方案&#xff0c;它可以通过多个…

基于Django实现的TMS物流管理系统(附源码下载)

基于Django实现的物流管理系统&#xff08;TMS&#xff0c;Transportation Management System&#xff09; 特点 前端基于Bootstrap 4框架和AdminLTE框架。使用MySQL作为数据库后端。实现了运单录入、发车出库、到货签收、客户签收等基本功能。拥有较为完善的报表功能和财务管…

Java—JDK8新特性—Lambda表达式【内含思维导图】

目录 JDK8新特性 2.Lambda表达式 思维导图 2.1 什么是Lambda表达式 2.2 为什么使用Lamdba表达式 2.3 Lambda表达式基本语法 2.4 类型推断 2.5 Lambda练习 2.6 Lambda常用场景 JDK8新特性 官网提供网址&#xff1a;JDK 8 Features 2.Lambda表达式 思维导图 2.1 什么是…

浅谈Dom和Bom(清晰易懂版)

DOM&#xff08;文档对象模型&#xff09; DOM 是浏览器提供的一种操作网页内容和结构的 API&#xff0c;它将 Web 页面表示为一个树形结构&#xff0c;其中每一个 HTML 元素都是一个节点&#xff0c;可以通过 DOM API 对其进行访问和操作。DOM API 包括了一系列方法和属性&am…

Shapes布局-文字环绕动画

文章目录 说明实现以及语法动画渐变裁切图形变换的动画效果 说明 Shapes也有形状、图形的意思&#xff0c;我们可以在页面中创建图形&#xff0c;并让内容环绕在定义的图形边上。 Shapes的官方文档&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Shapes/F…

YOLOv8 来了,快速上手实操

目录 YOLOv8的优点安装ultralytics使用YOLOv8n在图像上进行PredictTasks与 ModesModes - 模式分类Tasks - 任务分类 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;程序员半夏 , 一名全栈程序员&#xff0c;擅长使用各种编程语言和框架&#xff0c;如JavaScript、React、N…

SpringBoot集成Redis—缓存穿透解决方案与哨兵模式实战

目录 1、环境准备 1&#xff09;pom.xml引入Redis依赖 2) 演示业务场景 2、SpringBoot集成Redis单机模式 1&#xff09; 通过MyBatis逆向工程生成实体Bean和数据持久层 2) application.yml 中配置redis连接信息 3) 启动redis服务 4) XinTuProductRedisController类 5…