基于魔搭开源推理引擎 DashInfer实现CPU服务器大模型推理--理论篇

news2024/11/17 23:46:42

前言

        在人工智能技术飞速发展的今天,如何高效地在CPU上运行大规模的预训练语言模型(LLM)成为了加速生成式AI应用广泛落地的核心问题。阿里巴巴达摩院模型开源社区ModelScope近期推出了一款名为DashInfer的推理引擎,旨在解决这一挑战。

        DashInfer用于推理预训练大语言模型(LLM)的推理引擎。

        DashInfer采用C++ Runtime编写,提供C++和Python语言接口。DashInfer具有生产级别的高性能表现,适用于多种CPU架构,包括x86和ARMv9。DashInfer支持连续批处理(Continuous Batching)和多NUMA推理(NUMA-Aware),能够充分利用服务器级CPU的算力,为推理14B及以下的LLM模型提供更多的硬件选择。

DashInfer介绍

轻量级架构:仅需要最小程度的第三方依赖,并采用静态链接的方式引用依赖库。提供C++和Python接口,让DashInfer可以轻松集成到您的系统和其他编程语言中。

提供高精度实现:DashInfer经过严格的精度测试,能够提供与PyTorch、GPU引擎(vLLM)一致的推理精度。

优化的计算Kernel:结合OneDNN和自研汇编kernel,DashInfer能够在ARM和x86上发挥硬件的最大性能。ARM cpu+单batch条件下,推理Llama2-7B-Chat的16-bit权重和8-bit权重模型,DashInfer的生成性能分别是llama.cpp的1.5倍和1.9倍,详细性能测试结果参考performance.md

(https://github.com/modelscope/dash-infer/blob/main/documents/EN/performance.md)。

行业标准LLM推理技术:采用行业标准的LLM推理技术,例如:

  • 连续批处理(Continuous Batching),能够进行即时插入新请求,支持流式输出;

  • 基于请求的异步接口允许对每个请求的生成参数、请求状态等进行单独控制。

支持主流LLM开源模型:支持主流的开源LLM模型,包括Qwen、LLaMA、ChatGLM等,支持Huggingface格式的模型读取。

PTQ量化:使用DashInfer的InstantQuant(IQ),无需训练微调即可实现weight-only量化加速,提高部署效率。经过精度测试,IQ对模型精度不会产生影响。目前版本支持ARM CPU上的weight-only 8-bit量化。

优化的计算Kernel:结合OneDNN和自研汇编kernel,DashInfer能够在ARM和x86上发挥硬件的最大性能。

NUMA-Aware:支持多NUMA的tensor并行推理,充分发挥服务器级CPU的算力。通过numactl和多进程架构,精准控制计算线程的NUMA亲和性,充分利用多节点CPU的性能,并且避免跨NUMA访存带来性能下降问题。关于多NUMA的性能指导可以参考:Optimizing Applications for NUMA - Intel, What is NUMA?。

上下文长度(Context Length):目前版本支持11k的Context Length,未来还会继续支持更长Context Length。

提供多语言API接口:提供C++和Python接口,能够直接使用C++接口对接到Java、Rust等其他编程语言。

操作系统支持:支持Centos7、Ubuntu22.04等主流Linux服务器操作系统,并提供对应的Docker镜像。

硬件支持和数据类型

硬件支持

x86 CPU:

  • 要求硬件至少需要支持AVX2指令集。对于第五代至强(Xeon)处理器(Emerald Rapids)、第四代至强(Xeon)处理器(Sapphire Rapids)等(对应于阿里云第8代ECS实例,如g8i),采用AMX矩阵指令加速计算。

ARMv9 CPU:

  • 要求硬件支持SVE指令集。支持如倚天(Yitian)710等ARMv9架构处理器(对应于阿里云第8代ECS实例,如g8y),采用SVE向量指令加速计算。

数据类型

  • x86 CPU:支持FP32、BF16。

  • ARM Yitian710 CPU:FP32、BF16、InstantQuant。

InstantQuant

InstantQuant是一种weight-only量化技术。

在Yitian710 CPU(ARMv9)上,DashInfer支持weight-only量化。

要进行weight-only量化,需要修改模型配置文件的do_dynamic_quantize_convert和quantization_config字段,参数的详细说明参考Github。

weight-only量化,会在GroupSize的范围内求取weight的最大、最小值,并将weight数值映射到uint8的值域范围,计算公式如下:

图片

推理过程中,量化的weight会被恢复成bfloat16进行矩阵乘法计算。

软件框架

推理流程

图片

  1. 模型加载与序列化:此过程负责读取模型权重、配置模型转换参数及量化参数,并根据这些信息对模型进行序列化,并生成DashInfer格式(.asparam、.asgraph)的模型。此功能仅提供Python接口,并依赖于PyTorch和transformers库来访问权重。不同模型对PyTorch和transformers的版本要求可能有所不同,DashInfer本身并没有特殊的版本要求。

  2. 模型推理:此步骤负责执行模型推理,使用DashInfer推理序列化后的模型,不依赖PyTorch等组件。DashInfer采用DLPack格式的tensor来实现与外部框架(如PyTorch)的交互。DLPack格式的tensor,可以通过手动创建或由深度学习框架的tensor转换函数产生。对于C++接口,由于已经将几乎所有依赖静态编译,仅对openmp运行时库以及C++系统库的有依赖。我们进行了链接符号处理,以确保只有DashInfer的API接口符号可见,避免与客户系统中已有的公共库(如protobuf等)发生版本冲突。

说明:

.asparam、.asgraph是由DashInfer内核(allspark)定义的一种特殊的模型格式。

使用Python接口时,可以将步骤1和2的代码放在一起。由于缺少C++层面加载Huggingface模型的功能,C++接口只能进行DashInfer格式的模型推理,因此在使用C++接口前,必须先用Python接口先对模型进行序列化。

代码开源地址:

https://github.com/modelscope/dash-infer

推理体验地址:

https://www.modelscope.cn/studios/modelscope/DashInfer-Demo

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

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

相关文章

Ingress controller:Kubernetes 的瑞士军刀

原文作者:Brian Ehlert of F5 原文链接:Ingress controller:Kubernetes 的瑞士军刀 转载来源:NGINX 中文官网 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 许多人认为 Ingress controller(Ingress 控制器&…

CCF20211201——序列查询

CCF20211201——序列查询 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; #define Max 10000000 int a[Max]{0},b[Max]{0}; int main() {int n,m;int sum0,x0,flag0;cin>>n>>m;for(int i1;i<n;i){cin>>a[i];}for(int i0,x0;i&l…

闪电加载:Hexo博客性能优化全攻略

巴索罗缪大熊 前言 这些年积累了很多前端性能优化的知识点和思路&#xff0c;日常工作很少涉及技术层极限优化&#xff0c;近期终于一点点把博客独立搭建并部署了&#xff0c;对之前的一些技术点进行了深度探索&#xff0c;最终结果也达到了预期效果&#xff0c;由于水平有限&…

【安装笔记-20240528-Linux-在 Vultr 云服务器上安装 OpenWRT】

安装笔记-系列文章目录 安装笔记-20240528-Linux-在 Vultr 云服务器上安装测试 OpenWRT 文章目录 安装笔记-系列文章目录安装笔记-20240528-Linux-在 Vultr 云服务器上安装测试 OpenWRT 前言一、软件介绍名称&#xff1a;OpenWRT主页官方介绍 二、安装步骤测试版本&#xff1a…

【html+css(大作业)】二级菜单导航栏

目录 实现效果 代码及其解释 html部分 CSS部分 hello&#xff0c;hello好久不见&#xff01; 今天我们来写二级导航栏&#xff0c;所谓二级导航栏&#xff0c;简单来说就是鼠标放上去就有菜单拉出&#xff1a; 实现效果 代码及其解释 html部分 <!DOCTYPE html> &l…

白酒:新兴产区的发展与市场前景展望

云仓酒庄豪迈白酒作为新兴产区的重要代表&#xff0c;其发展与市场前景备受关注。随着消费者对白酒品质和口感的不断追求&#xff0c;新兴产区在继承传统酿造工艺的基础上&#xff0c;不断创新和发展&#xff0c;逐渐在市场上崭露头角。 首先&#xff0c;新兴产区在酿造工艺方面…

[源码+搭建教程]西游伏妖篇手游_GM_单机+和朋友玩

为了学习和研究软件内含的设计思想和原理&#xff0c;本人花心血和汗水带来了搭建教程&#xff01;&#xff01;&#xff01; 教程不适于服架设&#xff0c;严禁服架设&#xff01;&#xff01;&#xff01;请牢记&#xff01;&#xff01;&#xff01; 教程仅限学习使用&…

卧式混料机:混合设备的智慧之选

卧式混料机&#xff0c;顾名思义&#xff0c;是一种采用卧式结构的混合设备。它的设计精巧&#xff0c;结构紧凑&#xff0c;不仅占用空间小&#xff0c;而且操作简便&#xff0c;维护方便。与传统的立式混料机相比&#xff0c;卧式混料机在混合效率、混合均匀度以及物料适应性…

Suno进阶手册 | 创作歌曲玩法全攻略!

Suno进阶手册:创作歌曲玩法全攻略! 前言1. 基础模式2. 高级模式总结前言 前段时间,Suno V3 横空出世,与此前的V2相比,V3生成的作品质量明显提升! 该说不说,对比同类型工具,Suno的体验“遥遥领先”,没有AI生成常有的机械感,歌词押韵,甚至还附带有和声、分段。 虽然…

【一步一步了解Java系列】:类与对象的联系

看到这句话的时候证明&#xff1a;此刻你我都在努力加油陌生人个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff1a;小闭 对…

6.1 Go 数组

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【双层模型】分布式光伏储能系统的优化配置方法

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序模型参考《分布式光伏储能系统的优化配置方法》&#xff0c;分为上下层求解方式&#xff0c;上层采用粒子群算法确定储能的选址和容量方案&#xff0c;以全年购电成本、网络损耗、光伏运行成本、储能充放…

2024年618网购节各大电商超级红包二维码集合

一年一度的电商618网购节又要来了&#xff0c;下面收集了淘宝/京东/拼多多的618红包二维码&#xff0c;手机扫描或识别即可每天领红包&#xff0c;可参考好物分享中的商品下单&#xff1a; 淘宝618超级红包&#xff1a;即日起至2024.6.10&#xff0c;每天可领一次 京东618无门…

idea项目一直在build

IDEA项目一直在build的原因可能包括构建进程堆大小过小、缓存问题、依赖包下载缓慢或网络问题。12 构建进程堆大小过小&#xff1a;如果IDEA的构建进程堆大小设置得不够大&#xff0c;可能会导致构建过程缓慢或卡顿。解决方法是将构建进程堆大小参数扩大&#xff0c;例如将700…

web前端框架设计第十一课-常用插件

web前端框架设计第十一课-常用插件 一.预习笔记 1.路由的基础使用 2.动态路由 3.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c;犹豫拖延将不断滋养恐惧

再次疾呼:一稿多投是作者的合法权利!

近日&#xff0c;有作者反应在收到拒稿邮件之后另投他刊&#xff0c;竟然被判定一稿多投。 出版社解释说现在大多数期刊都是使用投稿系统收稿&#xff0c;如果被退稿后马上又投稿其他期刊&#xff0c;由于时间距离太近&#xff0c;仍然会被系统判定为一稿多投的。核心期刊编辑…

pikachu—exec“eval“

这是原画面 然后呢&#xff1f; 我们知道会传入到后台rce_eval.php来处理然后通过 eval()是啥? 在eval括号里面可以执行外来机器的命令 然后我们通过php的一个内置的命令 我们通过phpinfo()&#xff1b; 这是输入后的结果

Figma 文件批量导出到本地的方法

作为新一代UX设计师&#xff0c;我们应该熟练地使用市场上的许多设计软件&#xff0c;并更熟悉它们的软件功能。现在市场上的即时设计&#xff0c;作为一种在线合作设计工具&#xff0c;值得成为许多设计师的常用工具。最近&#xff0c;我了解到即时设计进行了新的功能更新&…

第二十五章CSS中的技巧(导航栏、下拉列表)

1.CSS精灵 1.什么是CSS精灵 英文叫法 CSS sprites&#xff0c;通常被解释为“CSS图像拼合”或“CSS贴图定位”;其实就是把网页中一些背景图片整合到一张图片文件中&#xff0c;再利用css“background-image”&#xff0c; “background-repeat”,“background-position”的组…

【Unity Shader入门精要 第11章】让画面动起来(二)

1. 顶点动画的原理 顶点动画的原理是&#xff0c;在顶点着色器中按照一定的规则或函数计算得到一段偏移量对顶点进行移动&#xff0c;最后将改变位置后的顶点变换到裁剪空间进行后续的渲染工作。 可见&#xff0c;与纹理动画只是改变从纹理中哪一部分开始显示图案不同&#x…