昇腾CANN 7.0 黑科技:大模型推理部署技术解密

CANN作为最接近昇腾AI系列硬件产品的一层,通过软硬件联合设计,打造出适合昇腾AI处理器的软件架构,充分使能和释放昇腾硬件的澎湃算力。针对大模型推理场景,CANN最新发布的CANN 7.0版本有机整合各内部组件,支持大模型的量化压缩、分布式切分编译、分布式加载部署,并在基础加速库、图编译优化、模型执行调度等方面针对大模型进行极致性能优化。

自动并行切分实现大模型分布式部署:

针对LLM模型巨大的计算和内存开销,CANN提供自动并行切分能力,实现大模型在昇腾集群的分布式部署。自动并行切分过程可以分为5个步骤:

自动切分的策略以物理集群信息和模型结构为输入,进行负载切分优化的空间建模,通过策略生成-策略应用-性能模拟的多轮迭代,进而搜索得到优化的切分部署策略。

KV Cache机制减少重复推理计算:

LLM模型推理计算的过程可以分为prompt处理和后续输出token的自回归计

算。前者有大量数据的矩阵乘,是典型的计算密集型处理,而后者随着LLM的执行,会积累越来越多的对话内容,基于历史输出计算得到新的token输出。以“盘古是一个语言模型”为例,输入内容后,每一个token都会生成对应的Q、K和V向量,在attention部分进行矩阵乘和softmax等计算。在这个过程中,用户prompt加上已经输出的token都要作为下一次迭代的输入,都要重新计算相应的QKV,这造成了大量的重复计算。

为此,业界提出了KV Cache方法,将已经出现的token所计算得出的K和V向量保存在内存,仅计算最新一个token的QKV,再进行矩阵乘和softmax计算,本质上是以空间换时间。

目前,CANN已经全面支持KV Cache,并实现了KV Cache的分布式存储、更新和复位,有效加速自回归阶段计算。

量化技术有效降低内存占用:

量化是AI领域的常见技术,在大模型时代,量化还有不同的特点和要求。LLM的权重分布相对均匀,而FM数据存在很多离群点。传统量化算法中,直接抛弃离群点或将所有离群点纳入量化范围,均会导致精度损失,为此CANN支持仅Weight量化,INT8量化场景相比FP16可降低50%权重内存空间占用。

同时支持KV Cache量化,KV Cache本质上是空间换时间,随模型层数、sequence length的线性增长,KV Cache量化可降低一半存储。

FlashAttention融合算子降低访存开销:

LLM模型中大量使用了Multi-Head Atten-tion结构,这不仅带来了巨大的计算量,保存数据所需的内存容量也是计算系统的关键瓶颈。对此,业界提出了FlashAttention融合算子,其原理是对attention处理过程进行切分和计算等价,使得attention的多个步骤可以在一个算子中完成,并且通过多重循环、每次处理一小部分数据,以近似流式的方式访问HBM,减少了HBM访问的总数据量,并能够将计算和数据搬运更好的重叠隐藏。

来源:https://arxiv.org/pdf/2205.14135.pdf

CANN针对昇腾AI处理器的HBM和缓存大小,以及数据搬运通路,优化实现FlashAttention融合算子,充分利用片上缓存,提升Attention处理性能可达50%。

Auto Batching调度提升算力利用率:

面对input阶段compute-bound、output阶段memory-bound的计算特征,以及LLM业务的时延需求,CANN支持多个input和output计算集群的异构部署,并支持LLM计算任务的auto batching调度,提升AI算力利用率。它的原理是将不同的服务请求尽可能地聚合处理:在input阶段通过单batch和预置的多种sequence length模型推理,尽量降低每个请求的启动开销;在output阶段以iteration粒度调度多个服务,尽可能拼成batch处理,以提升计算密度,平衡计算和访存。

支持Torch.Compile计算图提高编程效率:

为了使开发者能够更简单的将LLM在昇腾平台运行推理,CANN实现了PyTorch的计算图支持。开发者只需要使用PyTorch原生的torch.-compile接口,CANN使能的NPU后端就会对PyTorch生成的FX Graph进行接管,基于trace逻辑将AtenIR转换为AIR,再进行端到端的图编译深度优化,从而降低推理阶段的内存需求、提升计算性能,同时最大程度的减少开发者的修改工作。

来源:https://pytorch.org/get-started/pytorch-2.0/

这里有一个CANN大模型推理上手的示例。在编译阶段使用ATC工具对pb或onnx模型进行编译,命令参数与CV等经典AI模型类似,只是增加了集群信息和切分信息的输入。打开集群开关以及并行切分开关,同时传入集群配置文件和切分方式的配置文件,ATC就会在编译过程中自动实现模型的切分和通信算子插入。

atc --model=./matmul2.pb 
--soc_version=Ascend910 
--output=test910_parallel
--distributed_cluster_build=1 
--cluster_config=./numa_config_910_2p.json 
--enable_graph_parallel="1" 
--graph_parallel_option_path=./parallel_option.json
 

在执行阶段,通过LoadGraph接口载入om离线模型,CANN会将各个模型切片载入到相应的昇腾AI处理器device上,然后再使用既有的RunGraph接口即可执行推理。

经过计算/通信并行、图优化、算子调优等优化,LLAMA 65B推理性能可较优化前提升一倍以上,端到端耗时可以达到8s左右,仍有提升空间。

总而言之,在大模型技术日新月异不断迭代的时代背景下,昇腾CANN将会持续深耕大模型优化&加速技术,比如继续探索面向在线服务的调度优化,缩短服务时延;基于计算图的weight预取与Cache驻留优化,提升访存性能;亲和FlashAttention业界最新融合算子,提升计算性能;支持更丰富的量化计算组合、模型稀疏,降低内存占用...随着大模型规模化商业落地,以昇腾CANN为核心的昇腾AI基础软硬件平台,将持续提升大模型推理部署场景的核心竞争力,为客户提供最优选择!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue路由介绍及使用

一、单页应用程序介绍 1.概念 单页应用程序:SPA【Single Page Application】是指所有的功能都在一个html页面上实现,当切换不同的功能时,页面不会进行刷新,类似Ajax请求,但请求地址会发生部分变化。 2.具体示例 单…

深度学习环境搭建入门环境搭建(pytorch版本)

从Python安装到深度学习环境搭建 1. Anaconda安装 python可以通过官网下载exe,这里提供的是使用anaconda创建多个虚拟 的python环境,使用Anaconda Prompt管理虚拟环境更方便。 官网地址:Free Download|Anaconda 下载到本地后双击此文…

WPF中数据绑定验证深入讲解

WPF中数据绑定验证深入讲解 WPF在用户输入时,提供了验证功能,通常验证使用以下两种方式来实现: 在数据对象中引发错误。通常是在属性设置过程中抛出异常,或者在数据类中实现INotifyDataErrorInfo或IDataErrorInfo接口。在绑定级…

技术分享 | 测试平台开发-前端开发之数据展示与分析

测试平台的数据展示与分析,我们主要使用开源工具ECharts来进行数据的展示与分析。 ECharts简介与安装 ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表&#xff…

Appium —— 初识移动APP自动化测试框架Appium

说到移动APP自动化测试,代表性的测试框架非Appium莫属,从今天开始我们将从APP结构解析、Appium框架学习、安卓/iOS自动化测试实战、自动遍历回归测试、自动化测试平台及持续集成,多个维度一起由浅入深的学废Appium 今天我们先来初步认识Appi…

C++中将数据添加到文件的末尾

参考:https://blog.csdn.net/qq_23880193/article/details/44279283 C中文件的读取需要包含fstream文件,即:#include 文件的读取和写入是是通过流操作来的,这不像输入、输出流那样,库中已经定义了对象cin和cout 文件的读取需要声…

加速度jsudo:小企业会遇到哪些瓶颈期?

什么是瓶颈期?瓶颈期,就是你无论怎么努力,成绩都是上不去,还是停留在原地;而自己表现的还是很匆忙,却不知道如何下手?就像水桶效益一样,水桶的木板高度层次不齐,像极了自…

Spark Core

Spark Core 本文来自 B站 黑马程序员 - Spark教程 :原地址 第一章 RDD详解 1.1 为什么需要RDD 分布式计算需要 分区控制shuffle控制数据存储、序列化、发送数据计算API等一系列功能 这些功能,不能简单的通过Python内置的本地集合对象(如…

在外包干了3年,彻底废了...

前言 先简单说下,我18年的大专生,通过校招去了一家软件公司,在里面干了快3年的功能测试,后面我感觉自己不能够在这样下去了,长时间重复性工作且呆在一个舒适的环境会毁掉一个人,而我已经在一个企业干了3年…

技术分享 | Appium 用例录制

下载及安装 下载地址: github.com/appium/appi… 下载对应系统的 Appium 版本,安装完成之后,点击 “Start Server”,就启动了 Appium Server。 在启动成功页面点击右上角的放大镜,进入到创建 Session 页面。配置好…

PostCSS通过px2rem插件和lib-flexible将px单位转换为rem(root em)单位实现大屏适配

目录 文档postcss中使用postcss-plugin-px2rem安装postcss-plugin-px2rem示例默认配置 webpack中使用postcss-plugin-px2rem项目结构安装依赖文件内容 大屏适配参考文章 文档 类似的插件 postcss-plugin-px2rem https://www.npmjs.com/package/postcss-plugin-px2remhttps://g…

嵌入式系统设计与应用---ARM指令集(学习笔记)

目录 本文图片截取自书本和老师的ppt 概述 指令格式 指令的条件码 ARM的寻址方式 立即寻址 寄存器寻址 寄存器间接寻址 寄存器移位寻址 变址寻址 多寄存器寻址 相对寻址 堆栈寻址 块复制寻址 ARM指令集简介 跳转指令 1.B指令 2.BL指令 数据处理指令 1.数据传…

南昌大学漏洞报送证书

获取来源:edusrc(教育漏洞报告平台) url:https://src.sjtu.edu.cn/ 兑换价格:20金币 获取条件:南昌大学任意中危或以上级别漏洞

XShelll-修改快捷键-xftp-修改编辑器

文章目录 1.XShelll-修改快捷键2.Xftp-修改文本编辑器3.总结 1.XShelll-修改快捷键 工具>选项 鼠标键盘,右键编辑,新建快捷键。 复制粘贴改成shiftc,shiftv。更习惯一些。 2.Xftp-修改文本编辑器 xftp修改服务器文件默认的编辑器,是记…

我是如何快速入门音视频开发的?

最近有读者留言,说“想转行音视频开发,怎么做”,正巧,前几天我还在知乎上,看到有人在问音视频的学习资料,还是个大一的学生。 想说一句:真有眼光。 如今这个时代,想赚钱&#xff0c…

动手学Matplotlib画图,Matplotlib 是一个非常强大的 Python 画图工具。【Matplotlib学习笔记】

一、第一章 1.基本用法 import matplotlib.pyplot as plt import numpy as npx np.linspace(-1,1,50) y 2*x 1 plt.plot(x,y) plt.show()2.figure图像 import matplotlib.pyplot as plt import numpy as npx np.linspace(-1,1,50) y1 2*x 1 y2 x**2 plt.figure() plt…

Java http请求工具连接超时时间

研究了一下三种java常用的http请求工具框架hutool、okhttp3、spring RestTemplate 对于连接超时和读超时的处理机制。 运行环境 jdk8 windows 连接超时 hutool、okhttp3、spring RestTemplate 三种请求,底层使用的都是jdk里的java.net.DualStackPlainSocketImpl#…

Linux 安装 Nginx 并配置为系统服务(超详细)

目录 前言安装 Nginx安装依赖项下载Nginx解压Nginx编译和安装防火墙设置启动Nginx 配置 Nginx 为系统服务配置 Nginx 服务文件启动 Nginx 服务设置开机自启动检查 Nginx 状态停止 Nginx 服务重启 Nginx 服务 卸载 Nginx结语 前言 Nginx是一款卓越的高性能Web服务器&#xff0c…

概率论和数理统计(二) 数字特征与大数定律

前言 有了“概率”数据,怎么反应情况.数学期望与方差,大数,极限 数学期望 期望是数字特征之一,其描述的是随机试验在同样的机会下重复多次,所有那些可能状态的平均结果. 平均数和加权平均数 离散型随机变量期望 连续型随机变量期望 随机变量函数的期望 g ( x , …

Java EE进阶2

包如果下载不下来怎么办? 1,确认包是否存在 2.如果包存在就多下载几次 3.如果下载了很多次都下载不下来,看看是不是下面几步出现了问题? 1)是否配置了国内源 settings.xml 2)目录是否为全英文,存在中文的话就修改路径 3)删除本地仓库的 jar 包,重新下载(可能由于网络的原…