技术解读倚天 ECS 实例——Arm 芯片的 Python-AI 算力优化 | 龙蜥技术

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 应该如何优化 CPU 上的 AI 推理算力?

深度学习技术在图像识别、搜索推荐等领域得到了广泛应用。近年来各大 CPU 厂商也逐渐把 AI 算力纳入了重点发展方向,通过《Arm 芯片 Python-AI 算力优化》我们将看到龙蜥社区 Arm 架构 SIG(Special Interest Group) 利用最新的 Arm  指令集优化 Python-AI 推理 workload 的性能。


倚天ECS实例的AI推理软件优化

阿里云推出的倚天Arm ECS实例,拥有针对AI场景的推理加速能力,我们将了解加速的原理以及以及相关的软件生态适配。

卷积神经网络(CNN)在图像和语音领域使用广泛,神经网络算法相比传统的算法消耗了更多算力。为了探索对计算的优化,我们进一步看到AlexNet模型(一种CNN)的推理过程的各个层的计算资源消耗占比。


可以看到名为conv[1-5]的5个卷积层消耗了90%的计算资源,因此优化CNN推理的关键就是优化卷积层的计算。

我们进一步来看如何对图像应用卷积核:

  1. 使用im2col根据卷积核尺寸,将图像转化为若干块(patch)
  2. 将多个卷积核展开成若干向量
  3. 对由图像块组成的矩阵和由多个卷积核展开组成的矩阵应用矩阵乘法

上面一页的计算应用了矩阵乘法操作,为什么我们不采用更加直接的迭代计算方式,而是采用需要额外内存的矩阵乘法呢?这里有两个关键因素:

  • 深度学习的卷积计算量很大,典型计算需要涉及5000万次乘法和加法操作,因此对计算的优化十分重要
  • 计算机科学家们已经深入探索了矩阵乘法操作,矩阵乘法操作可以被优化得非常快。


fortran世界中,GEMM(general matrix multiplication)已经成为一个通用操作:

该操作通过对数据重新排列,精心设计计算过程,利用多线程和向量指令,可以比自己实现的朴素版本快十倍以上。因此使用矩阵运算带来的收益相比额外的开销是值得的。

因为AI推理大量使用了矩阵乘法,如今也有许多硬件对矩阵运算进行了加速:

  • NVIDIA Volta架构引入了tensor core,可以高效地以混合精度处理矩阵乘
  • Intel AMX(Advanced Matrix Extensions) 通过脉动阵列在硬件层面支持矩阵乘
  • ARM SME(Scalable Matrix Extension) 支持向量外积运算,加速矩阵乘

虽然在AI算力上GPU要远高于CPU,但是CPU因为其部署方便,且无需在主机-设备间拷贝内存,在AI推理场景占有一席之地。目前市面上尚没有可以大规模使用的支持AMX或者SME的硬件,在这个阶段我们应该如何优化CPU上的AI推理算力呢?我们首先要了解BF16数据类型。


BF16(Brain Float 16)是由Google Brain 开发设计的16位浮点数格式。相比传统的IEEE16位浮点数,BF16拥有和IEEE单精度浮点数(FP32)一样的取值范围,但是精度较差。研究人员发现,在AI训练和推理中,使用BF16可以节约一半的内存,获得和单精度浮点数接近的准确率。

根据右图,BF16指数的位数和FP32是一致的,因此BF16和FP32的相互转换只要截断尾数即可,左下角图上便是tensorflow源码中的转换实现。

引入BF16的一大价值是如今的很多硬件计算的瓶颈在寄存器宽度或者访问内存的速度上,更紧凑的内存表示往往可以获得更高的计算吞吐,在理想情况下,BF16相比FP32可以提高一倍的吞吐(FLOPS)。

如今我们虽然无法大规模使用到支持AMX/SME的硬件,但是Armv8.6-A提供了bf16扩展,该扩展利用了有限的128bit向量寄存器,通过BFMMLA指令执行矩阵乘法运算:

  • 输入A: 大小为2*4的BF16矩阵,按行存储
  • 输入B: 大小为4*2的BF16矩阵,按列存储
  • 输出C: 大小为2*2的FP32矩阵


该指令单次执行进行了16次浮点数乘法和16次浮点数加法运算,计算吞吐非常高。


阿里巴巴向OpenBLAS项目贡献了sbgemm(s表示返回单精度,b表示输入bf16)的硬件加速实现,从GEMM吞吐上看,BF16相比FP32 GEMM吞吐提升超过100%。

倚天ECS实例是市面上少数可以支持bf16指令扩展的ARM服务器。目前已经支持了Tensorflow和Pytorch两种框架的AI推理

  • Tensorflow下可以通过OneDNN + ACL(Arm Compute Library)来使用BFMMLA加速
  • Pytorch已经支持了OneDNN + ACL,但是目前还在试验状态,无法很好地发挥性能。但是Pytorch同时支持OpenBLAS作为其计算后端,因此可以通过OpenBLAS来享受ARM bf16扩展带来的性能收益

可以看到相比默认的eigen实现,开启OneDNN + ACL后,perf获得的计算热点已经从fmla(向量乘加)转换到了bfmmla,算力显著提升。

从workload角度评测,上图对比了两种机型:

  • g7:Intel IceLake实例
  • g8m:倚天ARM服务器


左边柱状图中蓝色柱子表示算力对比,橙色柱子表示考虑性价比后使用倚天处理器获得的收益。可以看到在Resnet50BERT-Large模型的推理场景下,软件优化后的倚天处理器皆可获得一倍左右的性价比收益。

在上文中,我们看到使用倚天处理器若想获得较高收益,软件版本的选择十分重要。随意选择tensorflow或者pytorch包可能遭遇:

  • 未适配arm架构,安装失败
  • 软件未适配bf16扩展或者环境参数有误,无法发挥硬件的全部算力,性能打折
  • 需要精心选择计算后端,例如目前pytorch下OpenBLAS较快


因此我们提供了Docker镜像,帮助云上的用户充分使用倚天ECS实例的AI推理性能:

  • accc-registry.cn-hangzhou.cr.aliyuncs.com/tensorflow/tensorflow
  • accc-registry.cn-hangzhou.cr.aliyuncs.com/pytorch/pytorch

通过Serverless能力充分释放算力

除了使能更多的硬件指令,另一种充分释放硬件算力的方式就是通过Serverless架构提高CPU利用率。Python作为动态语言,其模块是动态导入的,因此启动速度不是Python的强项,这也制约了Python workload在Serverless场景的普及。

Python应用启动的主要耗时在模块导入,Python模块导入步骤为:

  1. 寻找到模块所在的文件
  2. 获得代码对象code_object
  3. 执行代码对象

其中的第二步在首次加载模块时,要对.py文件进行编译,获得code_object, 为了降低将来加载的开销,Python解释器会序列化并缓存code_object.pyc文件。


即便模块导入过程已经通过缓存机制优化过了,但是读取.pyc文件并反序列化依旧比较耗时。

在这里我们借助了OpenJDK的AppCDS的思路:将heap上的code_object复制到内存映射文件中(mmap)。在下次加载模块时,直接使用mmap中的code_object


这种框架下有两个难点:

  1. Python的code_object是散落在heap的各处且不连续的,因此mmap复制整个heap是行不通的。我们采用的方式是以code_object为根,遍历对象图,对感兴趣的内容复制并紧凑排布
  2. Python的code_object会引用.data段的变量,在Linux的随机地址安全机制下,.data段的数据的地址在每次运行时都会随机变化,这样mmap中的指针就失效了。我们的解决方式是遍历所有对象,针对.data段的指针进行偏移量修复


因为该项目共享了python的code_object,因此名字是code-data-share-for-python,简称pycds

我们测试了bota3numpyflask等常用的python苦,平均可以节省20%的模块导入耗时


对于现有的python应用可以轻易地使用pycds,且无需修改任何代码:

# 安装pycds
pip install code-data-share # 安装pycds
 # 生成模块列表
PYCDSMODE=TRACE PYCDSLIST=mod.lst python -c 'import numpy’
# 生成 archive
python -c 'import cds.dump; cds.dump.run_dump("mod.lst", "mod.img")’
# 使用archive
time PYCDSMODE=SHARE PYCDSARCHIVE=mod.img python -c 'import numpy'
real 0m0.090s
user 0m0.180s
sys 0m0.339s
# 对比基线
time python -c 'import numpy'
real 0m0.105s
user 0m0.216s
sys 0m0.476s

我们仅仅通过安装PyPI,修改环境变量运行和使用cdsAPI做dump即可对现有的应用启动进行加速了。


code-data-share-for-python是一个新项目,需要大家的参与和反馈,欢迎通过以下链接了解和使用:


ARM 架构 SIG链接地址:

https://openanolis.cn/sig/ARM_ARCH_SIG


—— 完 ——

加入龙蜥社群

加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥社区(OpenAnolis)交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!

640.png

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
移动开发 JavaScript 前端开发
精通服务器推送事件(SSE)与 Python 和 Go 实现实时数据流 🚀
服务器推送事件(SSE)是HTML5规范的一部分,允许服务器通过HTTP向客户端实时推送更新。相比WebSocket,SSE更轻量、简单,适合单向通信场景,如实时股票更新或聊天消息。它基于HTTP协议,使用`EventSource` API实现客户端监听,支持自动重连和事件追踪。虽然存在单向通信与连接数限制,但其高效性使其成为许多轻量级实时应用的理想选择。文中提供了Python和Go语言的服务器实现示例,以及HTML/JavaScript的客户端代码,帮助开发者快速集成SSE功能,提升用户体验。
|
10天前
|
机器学习/深度学习 人工智能 并行计算
弹性算力革命:企业级GPU云服务如何重构AI与图形处理的效能边界
企业级GPU云服务基于云计算技术,为企业提供强大的GPU资源,无需自购硬件。它广泛应用于人工智能、大数据、3D建模、动画制作、GIS及医疗影像等领域,加速深度学习训练、图形处理和科学计算,提升效率并降低成本。企业可按需获取计算资源,灵活应对业务高峰,优化成本结构,推动业务发展。
22 1
|
23天前
|
弹性计算 人工智能 API
基于ECS部署DeepSeek个人专属AI网站
本方案介绍了如何基于云服务器ECS集成百炼API和Open WebUI服务,一键部署体验DeepSeek个人专属AI网站。用户不仅可以以极低的成本,拥有个人专属的AI网站,进行稳定的AI对话,还能够切换DeepSeek-V3、DeepSeek-R1、Qwen-max等模型进行体验。同时Open WebUI还具备开源能力,支持定制工具的开发。您还可以创建其他子账号,将您的专属AI网站分享给他人使用。
|
9天前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
|
21天前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化服务器管理:解锁运维的未来
基于AI的自动化服务器管理:解锁运维的未来
69 0
|
2月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云AI服务器价格表_GPU服务器租赁费用_AI人工智能高性能计算推理
阿里云AI服务器提供多种配置,包括CPU+GPU、FPGA等,适用于人工智能、机器学习和深度学习等计算密集型任务。本文整理了阿里云GPU服务器的优惠价格,涵盖NVIDIA A10、V100、T4等型号,提供1个月、1年和1小时的收费明细。具体规格如A10卡GN7i、V100-16G卡GN6v等,适用于不同业务场景,详情见官方页面。
217 11
|
2月前
|
存储 人工智能 算法
加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统 | 2024龙蜥大会主论坛
本次方案的主题是加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统,从产业洞察、创新实践、发展建议三个方面,指出 AI 原生应用对操作系统提出更高要求,需要以应用为导向、以系统为核心进行架构创新设计,要打造最 AI 的服务器操作系统。 1. 产业洞察 2. 创新实践 3. 发展建议
|
2月前
|
存储 人工智能 网络协议
浅聊阿里云倚天云服务器:c8y、g8y、r8y实例性能详解与活动价格参考
选择一款高性能、高性价比的云服务器对于企业而言至关重要,阿里云推出的倚天云服务器——c8y、g8y、r8y三款实例,它们基于ARM架构,采用阿里自研的倚天710处理器,并基于新一代CIPU架构,通过芯片快速路径加速手段,实现了计算、存储、网络性能的大幅提升。2025年,计算型c8y云服务器活动价格860.65元一年起,通用型g8y云服务器活动价格1187.40元一年起,内存型r8y云服务器活动价格1454.32元一年起。本文将为大家详细解析这三款实例的性能特点、应用场景以及最新的活动价格情况,帮助大家更好地了解阿里云倚天云服务器。
|
2月前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
2月前
|
人工智能 弹性计算 运维
ECS控制台,AI助手与极简管控体验
本文介绍了ECS控制台的演进及最新AI工具功能。控制台作为运维平台,需兼顾用户体验、可靠性和安全性。针对不同用户(个人开发者、企业级用户、资源管理员和架构师),控制台提供了定制化AI助手,涵盖售前选型、售中购买、售后运维等全链路支持。AI助手可智能分析用户需求,推荐合适规格,并提供实例诊断、命令解释等功能,简化操作流程。此外,还推出了简洁版控制台,优化了小资源量用户的使用体验,减少复杂度,提升效率。未来,控制台将朝着更智能、个性化的chat ops方向发展。

相关产品

  • 云服务器 ECS