基础篇| 全网最全详解12个大模型推理框架

在这里插入图片描述

01 什么是框架?

开始介绍之前, 我们先了解一下什么是框架?xx框架-IT人经常听到的名词。但是又有多少人知道框架的意思?

框架(framework)是一个框子:指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题。在IT软件领域,软件框架(software framework)的标准定义:通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

简而言之,框架其实就是某种应用的半成品,就是一组组件,开发可以基于框架已有的规范和标准,快速实现自己的需求,让开发者聚焦业务领域代码。

常见的Java后端框架:Mybatis、Spring、SpringMVC、SpringBoot。前端框架有:Bootstrap、jQuery、Vue、React。这些框架无一另外都是让开发者快速开发业务逻辑。按照框架规范,定义自己业务参数。

02 为什么需要大模型推理框架

之前介绍过《Transformer原理》 ,我们知道现在LLM都是基于深度学习模型开发,训练,深度学习开发、训练等常见框架有TensorFlow、Pytorch以及Mxnet等。这些框架提供了丰富的函数库和模块,可以帮助研究人员快速构建和训练复杂的深度学习模型。但是现在单卡资源难以满足大模型训练,我们需要分布式、多卡等方式训练和推理。

对于一个深度学习工程师而言,当你在pytorch或者tensorflow写好了一个大模型,要怎么样分布式训练起来?你要怎么才能把它实际部署到云端或具体的设备上给用户使用?当你面对不同的硬件,不同的平台环境,你要如何去让代码适配并成功高效运行?难道要针对每个平台都写一套单独的代码吗?会不会工作量太大了?等等问题摆在面前。

针对以上问题, 我们不得不请出我们大模型推理框架: 大模型推理框架是一种基于深度学习技术的推理框架,旨在支持大规模深度学习模型的训练和部署。它提供了一系列的工具和服务,使得开发者能够高效地在大规模数据集上训练和部署深度学习模型,并进行推理任务。这一框架通常包括模型训练框架、分布式推理引擎、数据存储与检索等功能模块,以满足不同场景下的需求。

03 大模型推理框架指标

模型推理框架最重要的2个指标:

(1) 吞吐量: 吞吐量告诉我们我们的系统可以有效处理多少用户。吞吐量代表推理服务器在用户的多个请求中每秒生成的token数, 关于token数的含义可以查看之前文章《常识| 大模型收费计量单位之Token概念》。

(2)延迟: 另一方面反映了服务器和模型在输出序列中生成完整输出所花费的时间, 简而言之, 延迟是用户的感受——从聊天机器人收到答案所需的时间。

04 大模型推理框架对比

框架特点说明

优点

缺点

vLLM:

一个开源的大模型推理加速框架,通过PagedAttention高效地管理attention中缓存的张量,实现了比HuggingFace Transformers高14-24倍的吞吐量。它兼容OpenAI的接口服务,并与HuggingFace模型无缝集成。

  • 高效的服务吞吐量:vLLM可以快速处理大量的并发请求。

  • 支持模型种类多。

  • 内存高效:vLLM使用了一种名为PagedAttention的技术,可以高效地管理注意力键和值的内存

  • 文本生成的速度:实验多次,发现vLLM的推理速度是最快的;

  • 吞吐量服务:支持各种解码算法,比如parallel sampling, beam search等;

  • OpenAI API兼容:如果使用OpenAI API,只需要替换端点的URL即可;

  • 你需要确保你的设备有GPU,CUDA或者RoCm.

  • 添加自定义模型:虽然可以合并自己的模型,但如果模型没有使用与vLLM中现有模型类似的架构,则过程会变得更加复杂。例如,增加Falcon的支持,这似乎很有挑战性;

  • 缺乏对适配器(LoRA、QLoRA等)的支持:当针对特定任务进行微调时,开源LLM具有重要价值。然而,在当前的实现中,没有单独使用模型和适配器权重的选项,这限制了有效利用此类模型的灵活性。

  • 缺少权重量化:有时,LLM可能不需要使用GPU内存,这对于减少GPU内存消耗至关重要。

transformers:

Hugging Face推出的库

  • 自动模型下载

  • 提供代码片段

  • 非常适合实验和学习

  • 需要对ML和NLP有深入了解

  • 需要编码和配置技能

HuggingFace TGI (Text Generation Inference)

作为支持HuggingFace Inference API的工具,旨在支持大型语言模型的优化推理。它支持多GPU多节点扩展,可推理万亿规模参数

  • 简单的启动LLM

  • 使用Flash Attention和Paged Attention进行推理的优化的transformers代码

  • 使用bitsandbytes GPT-Q EETQ AWQ Safetensors进行量化

  • 使用 Open Telemetry,Prometheus 指标进行分布式跟

Text Generation Inference(TGI)和Transformer模型的推理方式有一些区别,主要体现在以下几个方面:

  • 并行计算:TGI和Transformer都支持并行计算,但TGI更进一步,它使用了Rust和Python联用的方式,实现了服务效率和业务灵活性的平衡。这使得TGI在处理大型语言模型时,能够更有效地利用计算资源,提高推理效率。

  • 优化技巧:TGI引入了一些优化技巧,如continuous batching、Flash Attention和Paged Attention等,这些技巧可以进一步提高推理的效率和性能1。而传统的Transformer模型可能没有这些优化技巧。

  • 模型支持:TGI支持部署GPTQ模型服务,这使得我们可以在单卡上部署拥有continuous batching功能的,更大的模型。而传统的Transformer模型可能没有这样的支持。

需要处理的任务或数据与TGI的优化技巧不匹配时,使用传统的Transformer推理可能会更合适。目前测试效果TGI的推理速度不如vLLM。

  • 缺乏对适配器的支持:需要注意的是,尽管可以使用适配器部署LLM但目前还没有官方支持或文档;

  • 源代码Rust+CUDA内核)编译:对于不熟悉Rust的人,将客户化代码纳入库中变得很有挑战性;

  • 文档不完整:所有信息都可以在项目的自述文件中找到。尽管它涵盖了基础知识,但必须在问题或源代码中搜索更多细节;

DeepSpeed: 
微软出品的高性能推理框架,DeepSpeed-FastGen 利用分块 KV 缓存和动态分割融合连续批处理,提供了比vLLM更好的吞吐。
  • 支持不同的模型库:支持多个开源模型库,如Hugging Face、FairSeq、EluetherAI等;

  • 量化延迟和降低成本:可以显著降低非常昂贵的语言模型的推理成本;

  • Native和Azure集成:微软开发的MII框架提供了与云系统的出色

  • 支持模型的数量有限:不支持Falcon、LLaMA2和其他语言模型;

  • 缺乏对适配器LoRA、QLoRA等)的支持

Llama.cpp:

Llama.cpp是一个基于C++的推理引擎,专门为Apple Silicon优化,可以运行Meta的Llama2模型。它针对GPU和CPU都做了推理优化。

  • 性能高于基于Python的解决方案,支持在适度的硬件上运行大型模型,如Llama 7B,并提供绑定,可以用其他语言构建AI应用程序,同时通过Llama.cpp运行推理。

模型支持有限,需要构建工具。

Llamafile:

由Mozilla开发,基于C++开发,它使用了llama.cpp,这是一个C++库,提供了运行自托管大型语言模型(LLMs)所需的各种功能。通过llama.cpp,开发人员可以轻松地创建、加载和运行LLM模型,而无需担心底层环境的复杂性。此外,Llamafile还提供了一个简洁的API接口,使得开发人员可以更加方便地与LLM进行交互,从而实现各种复杂的应用场景.

与Llama.cpp相同的速度优势,你可以构建一个嵌入模型的单个可执行文件。

项目仍处于早期阶段,不是所有模型都支持,只支持Llama.cpp支持的模型。

Ollama:

是Llama.cpp和Llamafile的一个更加用户友好的替代品。你下载一个可执行文件,它会在你的机器上安装一个服务。安装完成后,你打开一个终端并运行。

易于安装和使用,可以运行llama和vicuña模型,运行速度非常快。

提供有限的模型库,自己管理模型,你不能重用自己的模型,无法调整选项来运行LLM,暂时没有Windows版本。

TensorRT-LLM:

英伟达新推出了TensorRT-LLM,相对来说更加易用,后续FasterTransformer将不再维护了。

  • 层融合(Layer fusion)

  • 自回归模型的推理优化(激活缓存)

  • Attention 机制按照演进顺序可以分为 MHA(Multi-head Attention)、MQA(Multi-query Attention)以及 GQA(Group-query Attention)机制

  • Graph Rewriting,TensorRT-LLM提供了一组 Python API 用于定义 LLMs,并且使用最新的优化技术将 LLM 模型转换为 TensorRT Engines,在将 LLM 模型编译为 TensorRT Engines 时会对神经网络进行优化,推理时直接使用优化后的 TensorRT Engines。

  • TensorRT-LLM目前还不是完全开源的

  • 需要支持基于RESTFul API的流式输出(例如,类似OpenAI的LLM推理API接口),还需要进一步配合FastAPI才能支持流式输出

MLC LLM:
Machine Learning Compilation for Large Language Models (MLC LLM) 是一个高性能的通用部署解决方案,支持任何大语言模型的原生部署。MLC LLM支持以下平台和硬件:AMD GPU、 NVIDIA GPU、 Apple GPU、 Intel GPU、 Linux / Win、 macOS、 Web 浏览器、 iOS / iPadOS、 Android.
  • 可以部署到iOS 和 Android 设备上。

  • 在浏览器上运行SD模型和LLM模型。

  • 使用LLM模型的功能有限:不支持适配器,无法更改精度等,该库主要用于编译不同设备的模型;

  • 只支持分组量化 这种方法表现良好,但是在社区中更受欢迎的其他量化方法(bitsandbytes和GPTQ)不支持;

  • 复杂的安装:安装需要花几个小时,不太适合初学者开发人员;

OpenLLM:

OpenLLM是一个用于在生产中操作大型语言模型(LLM)的开放平台。

  • 良好的社区支持:不断开发和添加新功能;

  • 集成新模型:可以添加用户自定义模型;

  • 量化:OpenLLM支持使用bitsandbytes[12]和GPTQ[13]进行量化;

  • LangChain集成:可以使用LangChian与远程OpenLLM服务器进行交互;

  • 缺乏批处理支持:对于大量查询,这很可能会成为应用程序性能的瓶颈;

  • 缺乏内置的分布式推理:如果你想在多个GPU设备上运行大型模型,你需要额外安装OpenLLM的服务组件Yatai;

CTranslate2:

CTranslate2是一个C++和Python库,用于使用Transformer模型进行高效推理。

  • 并行和异步执行:可以使用多个GPU或CPU核心并行和异步处理多个批处理;

  • Prompt缓存:在静态提示下运行一次模型,缓存模型状态,并在将来使用相同的静态提示进行调用时重用;

  • 磁盘上的轻量级:量化可以使模型在磁盘上缩小4倍,而精度损失最小;

  • 没有内置的REST服务器:尽管仍然可以运行REST服务器,但没有具有日志记录和监控功能的现成服务

  • 缺乏对适配器LoRA、QLoRA等)的支持

Ray Serve:

Ray Serve是一个可扩展的模型服务库,用于构建在线推理API。Serve与框架无关,因此可以使用一个工具包来为深度学习模型的所有内容提供服务。

  • 文档支持:开发人员几乎为每个用例撰写了许多示例;

  • 支持生产环境部署:这是本列表中所有框架中最成熟的;

  • 本地LangChain集成:您可以使用LangChian与远程Ray Server进行交互;

  • 缺乏内置的模型优化:Ray Serve不专注于LLM,它是一个用于部署任何ML模型的更广泛的框架,必须自己进行优化;

  • 入门门槛高:该库功能多,提高了初学者进入的门槛;

05 推理框架适用场景

上面列出那么多推理框架,是不是被搞懵逼了,虽然从文字说明各个推理框架优缺点,但是依然显得有些干涩. 国外有些伙伴从不同维度对比了各个主流(不是上面的全部)推理框架, 方便大家快速理解,不同框架的优势和劣势, 其中vLLM在Tokens吞吐量优势明显。

image.png

上图说明各个推理框架某些特质各有千秋,不同推理引擎在不同平台,硬件和模式下分别具有各自的优势.我们可以从不同应用场景去推荐推理框架。

(1)De****epSpeed:如果你的任务需要高性能的推理,那么DeepSpeed可能是一个好选择。DeepSpeed提供了一系列优化技术,如ZeRO(零冗余优化器),3D并行(数据并行、模型并行和流水线并行的结合),1比特Adam等,这些技术可以显著提升大模型训练和推理的效率。

(2)oll****ama:如果你需要一个易于使用的工具,那么ollama可能更适合你。ollama的主要优点在于其易用性,用户可以通过简单的命令行界面运行模型。

(3)L****lamafile:如果你需要创建一个嵌入模型的单个可执行文件,那么Llamafile可能是一个好选择。Llamafile以其便携性和创建单文件可执行文件的能力而闻名。

(4)TG****I (Text Generation Inference):如果需要本机 HuggingFace 支持并且不打算为核心模型使用多个适配器,选择文本生成推理。如果你的任务需要在多种硬件环境下进行高效推理,那么TGI可能是一个好选择。TGI提供了一系列优化技术,如模型并行、张量并行和流水线并行等,这些技术可以显著提升大模型推理的效率。

(5)vLLM:当需要批处理和最大速度时,请使用vLLM, 如果你的任务需要处理大规模的自然语言处理任务,如文本分类、情感分析等,那么使用vLLM可能是一个好选择。vLLM是一个大规模的预训练模型,可以在各种自然语言处理任务上实现优秀的性能。

(6)llama.cpp : 如果CPU推理,llama.cpp 结合模型int4量化,会是一个比较好的选择。

(7)MLCM: 手机终端推理,MLC LLM是不错的选择, 可在客户端(边缘计算)(例如,在Android或iPhone平台上)本地部署LLM。

06 总结

LLM和LLM 推理的技术如雨后春笋发展, 现在业界尚不存在各方面都远超其同类产品的推理框架. 针对不同需求和应用场景,不同推理框架优势不一样. 有些推理不仅仅只提供引擎的功能(Engine)、也提供http/rpc api的接口,比如Text Generation Inference。

同时仅仅依靠推理引擎功能,离一个完整大模型应用开发平台还有一段距离, 大模型应用开发平台的工具除了支持基本的模型推理,还有标准化的api,以及配套管理工具,可以方便去开发和管理AI应用。

image.png

推理框架作为大模型应用开发平台的引擎, 其重要性不在赘述,毫不夸张的说,为自己应用场景选择一款适合的推理框架,是LLM应用场景开发平台成功的关键.所以对大模型推理框架要全面、客观、有效的评估。

推荐阅读:

常识| 大模型收费计量单位之Token概念

【大模型应用篇3】LLM时代下的智能体

Transformer原理

更多合集文章请关注我的公众号,一起学习一起进步:

参考文章

https://blog.csdn.net/dfagag/article/details/137930387

https://betterprogramming.pub/frameworks-for-serving-llms-60b7f7b23407

https://www.e2enetworks.com/blog/a-comprehensive-guide-to-llms-inference-and-serving-2

https://www.run.ai/blog/serving-large-language-models

https://cloud.tencent.com/developer/article/2396136

https://qiankunli.github.io/2024/02/02/llm_inference_framework.html

https://github.com/DefTruth/Awesome-LLM-Inference

https://mp.weixin.qq.com/s/zMEuDdXKhqF0Er5x0B1iUg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3280495.html

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

相关文章

新作品,一个通用的 Cloudflare Workers HTTP 反向代理

本文介绍我最近写的新作品:使用 Cloudflare Workers/Pages 搭建 HTTP 反向代理,代码已经全部开源在 GitHub,按照 README 里面的脚本搭建就可以了,非常简单。 GitHub:https://github.com/jonssonyan/cf-workers-proxy …

数字图像处理 第三章 灰度变换和空间滤波(上)

文章目录 本章简介一、背景知识 P62 - P641.1 灰度变换和空间滤波基础 P62 - P63二、一些基本的灰度变换函数 P64 - P712.1 图像反转 P642.2 对数变换 P64 - P662.3 幂律(伽马变换 P66 - P682.4 分段线性变换函数 P68 - P71本章知识点总结本章简介 本章讨论在空间域中的图像增强…

【C/C++】关于 extern “C“ 的理解

详细解释 #ifdef __cplusplus extern "C" 在C中,#ifdef __cplusplus 和 extern "C" 是用于处理C和C混合编程中的名称修饰(name mangling)问题的预处理器指令和关键字。 #ifdef __cplusplus __cplusplus 是一个预处理器…

人工智能大模型发展带来的风险挑战和对策

经过近70年的发展,人工智能技术发展经历了三次起伏,2022年以来,以ChatGPT、Sora等为代表的预训练大模型持续取得突破,推动着人工智能技术从感知向认识,从分析判断式向生成式,从专用向通用进入快速发展的新阶…

PythonDjangoMysql外卖app系统32762-计算机毕业设计项目选题推荐(附源码)

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,餐饮外卖当然也不例外。 外卖app系统主要功能模块包括后台首页,轮播图,资源管理(餐饮…

【CTFWP】ctfshow-web40

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 题目介绍:题目分析:payload:payload解释:payload2:payload2解释:flag 题目介绍: …

高等数学 第七讲 一元函数积分学的概念和性质_不定积分_定积分_变限积分_反常积分

1.不定积分 文章目录 1.不定积分1.1 原函数1.1.1 原函数与不定积分的定义1.1.2 原函数存在定理 2.定积分2.1 定积分的定义2.2 定积分的精确定义2.3 定积分的几何意义2.4 定积分的存在定理2.5 定积分的性质 3.变限积分3.1 变限积分的定理3.2 变限积分的性质 4.反常积分(待更新) …

红酒标签设计:艺术与品味的结合

在红酒的世界里,每一瓶酒都如同一位优雅的舞者,在酒柜的舞台上静静诉说着自己的故事。而红酒的标签,则是这位舞者身上较华丽的舞裙,它不仅是红酒的身份证明,更是艺术与品味的很好结合。今天,我们就来聊聊红…

重载云台摄像机如何通过国标28181接入到统一视频接入平台(视频国标接入平台)

目录 一、国标GB/T 28181介绍 1、国标GB/T28181 2、内容和特点 二、重载云台摄像机 1、定义 2、结构与设计 3、功能和优势 4、特点 5、应用场景 二、接入准备工作 1、确定网络环境 (1)公网接入 (2)专网传输 2、检查重…

STC单片机UART映射printf

文章目录 使用STC-ISP生成UART初始化函数 增加如下函数&#xff0c;注意使用printf函数需要添加 #include <stdio.h> 头文件 #include <stdio.h>void Uart1_Init(void) //9600bps12.000MHz {SCON 0x50; //8位数据,可变波特率AUXR | 0x01; //串口1选择定时器2为…

Vue2从基础到实战(v-bind对于样式控制的增强-操作style,v-model在其他表单元素的使用)

v-bind对于样式控制的增强-操作style 语法&#xff1a;style"样式对象" <div class"box" :style"{ CSS属性名1: CSS属性值, CSS属性名2: CSS属性值 }"></div> 代码解析&#xff1a; HTML结构&#xff1a; 包含了一个div元素&…

OSI七层网络模型:构建网络通信的基石

在计算机网络领域&#xff0c;OSI&#xff08;Open Systems Interconnection&#xff09;七层模型是理解网络通信过程的关键框架。该模型将网络通信过程细分为七个层次&#xff0c;每一层都有其特定的功能和职责&#xff0c;共同协作完成数据从发送端到接收端的传输。接下来&am…

申请美区 Apple ID 完整步骤图解,轻松免费创建账户

苹果手机在下载一些软件时需要我们登录其 Apple ID 才能下载&#xff0c;但是由于一些限制国内的 Apple ID 在 App Store 中有一些限制不能下载某些软件&#xff0c;如何解决这个问题&#xff1f;那就是申请一个美区 Apple ID&#xff0c;怎么申请国外苹果账户呢&#xff1f;下…

WebLogic: CVE-2020-14882/14883【getshell】

记录第一次getshell公网设备 漏洞介绍 CVE-2020-14882&#xff1a;允许 未授权 的用户绕过管理控制台 &#xff08;Console&#xff09;的权限验证访问后台 CVE-2020-14883&#xff1a;允许后台任意用户通过HTTP协议 执行任意命令 使用这两个漏洞组成的利用链&#xff0c;可通过…

Java----代理

什么是代理&#xff1f; 在Java中&#xff0c;代理是一种用于创建一个或多个服务的中间层&#xff0c;它可以拦截并处理程序对实际服务对象的请求。代理模式是一种设计模式&#xff0c;属于结构型模式&#xff0c;它允许程序员在不修改实际对象代码的情况下&#xff0c;增强或控…

【C语言】C语言期末突击/考研--数据的类型

目录 一、编程环境的搭建 二、数据的类型、数据的输入输出 2.1.数据类型 2.2.常量 2.3.变量 2.4.整型数据 2.4.1.符号常量 2.4.2.整型变量 2.5.浮点型数据 2.5.1.浮点型常量 2.5.2.浮点型变量 2.6.字符型数据 2.6.1字符型常量 2.6.2.字符数据在内存中的存储形式及…

解决jenkins配置extendreport不展示样式

下载插件&#xff1a;Groovy 、 HTML Publisher plugin 配置&#xff1a; 1&#xff09;Post Steps &#xff1a; 增加 Execute system Groovy script &#xff0c; 内容&#xff1a; System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "&qu…

MyBatis基础配置

一、M y B a t i s 配 置 文 件 1.为什么学习MyBatis配置文件 功能&#xff1a;构建SqlSessionFactory的依据。 意义&#xff1a;MyBatis最为核心的内容&#xff0c;对MyBatis的使用影响很大。 注意&#xff1a;配置文件的层次顺序不能颠倒&#xff0c;一旦颠倒会出现异常。 …

清空了最近删除的照片可以找回吗 照片删除了 最近删除里面也清空了 怎么恢复

我们会把喜欢的照片保存在电脑中&#xff0c;并经常会删除一些不再需要的照片。由于电脑中的照片太多&#xff0c;我们可能会出现一些失误操作。我们每次删除照片之后都要及时查看电脑中的照片&#xff0c;如果发现有失误操作导致照片被删除&#xff0c;可以立即采取措施恢复照…