推理降本与提升资源效率的实践

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 本课程从业务角度探讨大模型推理部署及资源利用率提升。首先分析大模型与GPU发展趋势,包括模型开源、规模增长及多模态能力增强;其次介绍高效部署大模型推理业务的步骤,涵盖业务场景选择、架构优化及显存规划;接着讲解如何通过DeepCPU-LLM框架和DeepNCCL通讯库优化推理效率;最后探讨通过KuberGPU实现细粒度GPU资源管理,提升整体资源利用率,降低推理成本。

本节课将从业务方的角度,讨论如何部署大模型推理业务以及如何提升资源利用率的问题。本次课程内容分为四部分,首先,介绍当前大模型及gpu发展的趋势;然后重点介绍如何部署高效的大模型业务系统,强调其中应注意的问题;接下来,了解如何提升资源利用率;最后介绍如何提升大模型的性价比。

 

一、模型与GPU发展趋势

1、大模型的发展趋势

通过2024年以来更新的大模型情况数据分析当前大模型发展的趋势。


第一,模型开源的趋势十分明显。较为出名的大模型基本上都实现了开源,如千问发布的2.5、Llama3.1模型、DeepSeek、Mistral模型等。当然,也有闭源的专业模型比较流行。很多时候,大家都会使用开源模型进行优化,开发适合自己的业务形态。


第二,模型大小的爆炸式增长。2024年更新的模型多是70B以上的模型结构,还有更大的Llama稠密模型,其达到了405B。


第三,随着模型的增长,其能力也在增加,很少有模型只能处理对话系统,或只能处理问答,多模态是模型增长后的必备能力,几乎所有的模型都能处理文本、图片及视频理解等方面的内容。


第四,MOE模型和稠密模型两种模型的结构是目前大模型的两个发展方向,两者各有千秋。基于基模开发的公司或团队都在向这两个方向发展。通义兼具两种模型。


第五,另外一项突出的能力是长文本处理。从前的大模型只能处理32k的长文本,而现在基本所有的模型至少可以处理128K的文本。最近,也进行了相应的评估,如是否真正具备128k的模型长文本处理能力,在某个时间点或某个长度的点处理时,推理效果或性能是否急剧下降。


2、GPU卡的架构演进

随着模型越来越大,GPU卡从几年的a10 24G的显存到48G、96G。现在,若是既适于训练又适于推理的单模型推理,至少是192G的显存。另外,对于显存的带宽,模型推理方面对其要求较高,新的模型多是4TB的带宽。算子也从以前的BF16发展至FB8、FB6,后面的GPU卡甚至会发展至INT4或FB4。随着卡芯片本身的架构演进,出现了Scale up和Scale out。尤其是在NV link跨机互联逐步流行的过程中Rock level的设计出现,两者的边界较为模糊。就传统意义而言,机器单机8卡、单机16卡,OS管理卡的能力逐渐增加,即Scale up。一般而言,通过NV link网络互联、通过网络包的通讯库互联增加执行规模就是Scale out。现在模型训练基本上都已达到万卡级别,大模型训练的架构由HPN6.1升级到7.0,网络结构更加扁平化。

 

二、部署高效的大模型推理业务

1、考虑的两个方向

高效部署大模型要注意两个方面。第一是业务方向的判断,第二是架构方向的选择。


(1)业务方向

首先,需要明确大模型业务部署的场景,如对话场景、代码补全、长文本处理、阅读理解、会议总结等等。只有确定了目标场景,才能确定SLO(service level objective),即模型业务的服务等级。其中包括两个核心要点,即Sotoken的延时和吞吐量,具体业务指标如何选择后面会展开说明。有了明确的业务场景和业务指标后,还需要选择合适的评估数据集帮助评估GPU的选型、架构的选型是否满足了SLO。


(2)架构方向

当前的卡,尤其是推理方向卡的选择非常多,有A10系列的小模型,甚至有些模型可以在端侧手机上运行,相对较大的可以用L系列或H系列的gpu使用。对于框架的选择,每个大厂可能都自有一套推理引擎,现在开源上流行的包括vLLM、TRT-LLM推理引擎,可以选择基于Pass的Blade或基于ACE的ECS推理引擎。部署业务形态后还要管理gpu资源,我们需要了解每个GPU的运行状态,因为所有的业务形态都有可能运行在容器中,如何进行控制也是一个问题。


2、大模型推理的基础结构

模型推理由两个关键点,第一个基本结构是Prefill阶段,第二个是Decoding阶段。

前面在介绍模型的服务化SLO标准时,其核心点是Sotoken的延时,其对应的是Prefill过程。模型吞吐的token吞吐量对应的是Decoding的过程。对GPU卡来说,这两个过程的区别在于它们对算力和显存的需求不同,主要区别在于KV cache(显存的缓存逻辑)的处理上,前者产生KV cache,后者使用KV cache。KV cache是非常消耗显存的一个过程,Prefill包含大量的计算,它把计算缓存在KV cache中,Decoding会读取这些计算缓存。因此,Prefill对算力要求很高,Decoding是token的吞吐阶段,需要将计算的结果重新读取,因此对显存的带宽要求很高。另外,TTFT是Sotoken的时间,TPOT/TPS是token的吞吐量,Req/s是每秒钟的并发的request,这些都是非常重要的服务指标。


3、部署的步骤

(1)明确业务的目标场景与服务化指标

首先,明确服务场景,可能是对话场景、代码补全、文本序列、会议系统的总结等等,包括sotoken延时跟token的吞吐量。对于一般的对话系统,sotoken延时最多为三秒钟,token的吞吐量最多为200~300毫秒。接下来,选用数据集。每种场景都有各自的数据集,对话场景使用ShareGPT方式评估系统。图中列出了各个数据集的情况,数据集之间除了内容不同,input sequence lens和output sequence lens也存在区别。对于对话系统,input sequence lens和output sequence lens均为512足够;对于代码补全,input sequence lens为512,output sequence lens约为2k;对于阅读理解,要支持128k的长文本处理,加上数字可能需要200k,则会影响后面KV cache及显存的用量。

图中展出了一组数据,包括TTFT、TPOT,理解其对业务系统选择的影响。如千问的1.5-72B的模型。在部署该对话系统模型时,有几种GPU卡的方式可供选择。首先,确定TTFT。保证 sotoken的延时不超过三秒,据此查看sotoken延时的信息,如果是L系列的GPU,并发不能超过5;如果使用Hopper,并发可以达到10。同样,确定token的吞吐量。若保证吞吐量不超过300毫秒,则无论是4卡或是8卡,Hopper GPU基本不会有问题,如果是L系列的GPU,4卡规模的并发数不能超过3。


(2)选择合适的ECS GPU实例并规划显存分配

在部署业务系统时,核心的要点是如何规划显存。在确定了场景、SLO标准之后,就要规划的显存用量,即选择卡。对于显存包括两部分,一个是模型本身,如要部署70B的模型,模型本身就占据了140GB的显存,另一部分是KV cache的用量。以200k长文本处理的方式,进入和输出总和为200k,Llama 7B中每个request会用到100GB KV cache的用量,Llama 13B会用到156GB KV cache的用量,Llama 3 KV cache的用量会下降到62GB,Llama 3 KV cache用量下降的原因在于其模型结构发生了改变,它使用了group query attention的方式,即使如此对于显存的节约也非常有限。如果是三并发服务,显存用量仅为模型本身的140GB,再加KV cache的190GB,此时必须使用48G显存的8卡才能服务。


此外,还需确定TP的策略,选择并行的卡的数量,它影响响应时间和性价比。对于7B模型,如果使用1张卡,单个Req大约需要消耗10秒钟;如果使用2张卡,大约需要消耗8秒钟;如果使用4张卡,大约需要消耗4秒。这些都与SLO的服务指标有关。


4、大模型推理框架与优化

确定了场景、评估数据集之后,选择合适的推理框架和优化策略也很重要。优化程度的优劣可能会产生50%以上的性能差。大模型的优化核心在处理KV cache和Attention逻辑,优化策略有很多,如Page Attention,它可以显著提升显存利用率,再如Flush Attention专门针对卡的spind特点优化性能。


全球风暴架构中使用不同的颜色标出了在各个阶段每个算子的开销,可以发现无论是Prefill还是Decoding阶段,self-attention的计算都是耗时非常大,在Prefill阶段约占78%,Decoding阶段约占59%。即便是59%中还有很多算力消耗在显存的读取上。


总之,对算力拆分有很多优化措施,它们会针对KV cache、算力、模型结构做优化。如Page Attention可以提升显存利用率;Continuous batch功能集成到各种模型框架中,可以显著提升每秒的并发数量;模型的量化(端侧一般量化到int 4,业务上部署的大模型多量化到int8等)可以显著降低显存用量,提高推理的性价比;算子优化的技术要求较高,很多优秀的推理框架已经实现了该项优化,如soft max跟前后做融合,linux算子与激活函数做融合等;系统级的优化,如Prefill-Decoding进行架构分离,部署在两台服务器上,这也是前段时间业内讨论较多的一种方式。

 

三、DeepCPU-LLM提升推理效率

前面从场景选择、SLO选择、性能调优等方面介绍了部署大模型业务。这一部分介绍DeepGPU推理框架。


1、DeepCPU-LLM提升推理效率

它是基于Iaas层ECS实例的推理框架,支持免费试。它的优点在于其完全兼容HUGGINGFACE的接口,如果使用HUGGINGFACE,就可以用DeepGPU的方式进行推理,而无需额外的适配工作;此外,其性能也优于VLLM,对比VLLM的0.5.3版本,其性能的优势约为10%以上,对于Llama70B,其优势更明显。


2、DeepCPU-NCLL提升通讯库效率

优化工具是的NCCL版本,把对于通讯库的优化给剥离出来。今天的各种模型优化多是多机多卡的方式,其中通讯库的优化与模型适配非常关键。之所以将其剥离,是因为很多客户在业务系统集成时不希望变动框架,把通讯库优化剥离出来避免了适配成本。使用DeepNCCL的方式与NCCL完全相同,但可以大大提升其性能。

以72B的8卡L系列的GPU为例,对比仅使用了标准NCCL而不启用DeepNCCL,以及使用优化过的DeepNCCL采集性能,后者的吞吐量提升了14%,sotoken的时延降低了15%,仅通过简单的适配就得到了性价比的提升。

 

四、GPU容器的细粒度资源控制提升效率

在业务全部部署在系统上后,如何管理系统也非常重要。当今,绝大部分的业务运行都以容器化的形式,一个GPU的pod服务各种各样的业务,这是在K8S层的调度层面。事实上,对于GPU的管理还需要细粒度的GPU的管理工具,它可以显示pod中的GPU的当前的状态,包括显存的用量、算力,确定是否有资源浪费,显存的使用是否合理,调度系统如何使用,KuberGPU可以实现该功能。


1、KuberGPU是什么

KuberGPU是技术解决方案,而非产品,在用户创建ACS或ACK时背后就会使用到该技术站。它提供了以下几项能力:

(1)GPU虚拟化

第一,虚拟化是指似的GPU可以提供0.25、0.5算力或0.75算力,通过这种虚拟化的方式,在容器层使用使用高阶功能时无需再关心其底层的实现方式。第二,它支持GPU workload的抢占及显存的高阶管理。


(2)GPU弹性管理

它可以支持一定程度的业务迁移和GPU POD迁移的能力。


(3)GPU管理

它自带GPU监控、故障诊断以及GPU异常预测等,数据采集等工作都在底层完成,再通过某种途径把信息汇报到K8S层。


(4)GPU池化

在业务方需要pod时,它可以指定一定算力的GPU容器,还可以动态调整分配给pod的算力大小甚至显存大小,使其在某种程度上可以进行各种业务的混合,调度更加灵活。

这些功能都会与ACS和ACK两个容器实例相结合。其使用方式较为简单,是通过yaml文件的配置实现的,而无需感知其底层的配置方式。


2、推理业务的容器化与资源精细管理

KuberGPU会对K8S的Phrigin以及Exporter标准组件做扩展,并将其数据上报给K8S层。

以KuberGPU用于离在线混合部署为例,其数据来源于几年前小模型运行的数据。可以看到,在实际业务中,集群的GPU利用率较低,仅有4%,但在业务高峰期或是接受业务请求时,则需要占到80%左右GPU的算力。如果在收到业务请求后再创建实例、部署业务系统是远远来不及的。


其GPU利用率低与其波峰波谷的措施有直接关系,业务自身多种任务的特点也会对齐造成影响,此外,也与如今卡的显存、容量、算力越来越大有关。除70B的模型之外,还有很多13B、7B的模型,它们使用2G显存即可完成部署。此外,还有很多传统的模型,其使用的GPU值较低,会导致资源粒度太大不利于管理,也就无法提升资源利用率。KuberGPU可以在波峰波谷的周期内穿插的各种任务,也可以根据业务的实际算力需求分配容器,甚至可以实时控制容器中算力的大小。


业务运行时的响应时间(QPS)大约为21毫秒,如果不开启离在线混部,其GPU利用率相对较低,但利用KuberGPU做离在线混部可以显著提升利用率,甚至达到近80%,极大降低了推理的成本。

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
机器学习/深度学习 人工智能 资源调度
基于AI的运维资源调度:效率与智能的双重提升
基于AI的运维资源调度:效率与智能的双重提升
30 16
基于AI的运维资源调度:效率与智能的双重提升
|
2月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
101 1
|
5月前
|
机器学习/深度学习 并行计算 调度
构建高效GPU算力平台:挑战、策略与未来展望
【8月更文第5天】随着深度学习、高性能计算和大数据分析等领域的快速发展,GPU(图形处理器)因其强大的并行计算能力和浮点运算速度而成为首选的计算平台。然而,随着模型规模的增长和技术的进步,构建高效稳定的GPU算力平台面临着新的挑战。本文旨在探讨这些挑战、应对策略以及对未来发展的展望。
504 1
|
5月前
|
人工智能
就AI 基础设施的演进与挑战问题之大模型推理中显存瓶颈的问题如何解决
就AI 基础设施的演进与挑战问题之大模型推理中显存瓶颈的问题如何解决
|
5月前
|
存储 人工智能 算法
就AI 基础设施的演进与挑战问题之流水线并行工作的问题如何解决
就AI 基础设施的演进与挑战问题之流水线并行工作的问题如何解决
|
7月前
|
人工智能 自然语言处理 算法
AI 应用之成本节约实践
本文探讨了如何避免高成本的模型微调,通过任务拆解和提示词调优实现业务目标。文中提到,当大语言模型不能直接满足需求时,微调涉及大量工作,包括数据准备、模型训练及GPU资源。为降低成本,作者提出了两步方法:1) 任务拆解,将复杂任务分解为简单子任务,利用模型优势处理部分;2) 提示词调优,优化输入以引导模型更高效地响应。虽然这可能不适用于所有情况,但能有效减少对模型微调的依赖。
177 1
|
人工智能 Kubernetes Docker
打破算力瓶颈,快速部署AI大模型应用
打破算力瓶颈,快速部署AI大模型应用
|
数据采集 算法 编译器
倚天710规模化应用 - 性能优化 -自动反馈优化分析与实践
编译器优化分成静态优化与动态优化,静态优化指传统编译器gcc/llvm时,增加的优化等级,如O1,O2,O3,Ofast,此时,编译器会依据编译优化等级增加一些优化算法,如函数inline、循环展开以及分支静态预测等等。一般情况下,优化等级越高,编译器做的优化越多,性能会更会好。在阿里生产环境中,单纯依赖于静态优化,并不能达到程序运行流畅目的,通过分析CPU硬件取指令、执行指令,往往会出现一些分支预测失败导致iCacheMiss率高的场景,限制了程序的性能进一步提升。基于此,业务引入了动态反馈优化工具,依据生产环境的实际运行数据,反哺指导编译器对程序代码进一步调整编译优化策略,提高分支预准确率
|
存储 弹性计算 运维
CPU 利用率从 10% 提升至 60%:中型企业云原生成本优化实战指南
在互联网早期迅速发展时,相关领域企业更多注重于扩展业务,为了迅速占领市场,往往会投入较高的成本。然而,随着互联网人口红利逐渐消退,以及近几年的疫情影响,越来越多企业开始重视成本管理,从“粗放式经营”转变为“精细化运营”模式,成本优化成为企业重点关注事项。
645 0
CPU 利用率从 10% 提升至 60%:中型企业云原生成本优化实战指南
|
数据采集 机器学习/深度学习 弹性计算
【SIGMOD 2023】深度学习弹性数据流水线系统GoldMiner,大幅提升任务和集群效率
阿里云机器学习平台PAI和北京大学杨智老师团队合作的论文被SIGMOD 2023录用。