简介
今天AI推理已经在数字应用中被广泛使用,对于大规模AI模型或者对性能很高的场景,多数是利用GPU或者专用芯片来实现。但是对众多诸如Web应用,或者像数据治理这类独立数据服务系统来说,采用GPU平台并非是成本效益最好的选择。随着其工作负载动态波动,GPU的工作量很少饱和,GPU的算力并不总是被充分利用,很难实现随着实际业务量的变化进行灵活的扩展。这时,采用CPU做AI推理可以依靠最为常见,配置丰富的标准型云服务器就能满足业务需求。除了更低的云服务器采购成本,用户将拥有更好的可控性,不依赖第三方硬件,涉及操作系统、驱动程序、运行时的软件复杂性较低,而且更易于扩展并与其他软件堆栈和微服务集成。
百度智能云新型BCC实例产品 GR1不同于其他云服务器,GR1所搭载的Ampere® Altra®云原生处理器基于Arm指令集架构,采用单线程内核设计,云实例的每一个vCPU都是独立的物理核,独享ALU(逻辑计算单元),缓存等关键物理资源,可以实现稳定可预测的性能。
GR1 实例所使用的Ampere® Altra®云原生处理器也为AI工作负载提供卓越的性能和能效,其原生支持 FP16 数据格式。与 FP32 模型相比,FP16 提供高达 2 倍的性能加速,将 FP32 训练的网络量化为 FP16 很简单,不会导致明显的精度损失。同时,GR1实例无需修改即可在 TensorFlow、PyTorch 或 ONNX 框架上开发和运行 AI 推理的工作负载。目前,Ampere® 优化的 TensorFlow、Pytorch 和 ONNX 的镜像已经在百度智能云的公共服务集成镜像中免费提供,您可在创建GR1实例时按需进行选择。
在本示例中,我们将演示如何在基于百度智能云的GR1实例上部署 Ampere® AI 优化的PyTorch框架软件栈,并使用PyTorch对ResNet50 v1.5分类模型进行测试和评估。
创建GR1实例
百度智能云提供在数个百度智能云地区和可用区创建和使用基于 GR1实例:北京(D区域, E区域), 广州(C区域)和苏州(D区域)。
在本文中,我们将在百度智能云创建一个16 vCPU及64GB内存bcc.gr1.c16m64规格的GR1实例。
首先,从控制台进入“云服务器BCC“服务页面,点击“创建实例”按钮:
在云服务器创建导览页面中,选择在广州可用区C创建GR1实例。
在实例配置选项中,选择bcc.gr1.c16m64实例规格:
同时为GR1实例选择服务集成镜像中的AIO PyTorch镜像:
在随后的配置项中完成剩余的存储及网络配置并确认提交云主机配置信息即可开通GR1云主机实例。
连接GR1实例
在云主机BCC控制台确认刚创建的GR1主机处于“运行中”状态,即可通过ssh连接至部署Ampere AI镜像的GR1主机:
登录后在终端看到AIO Logo,说明Ampere® AI镜像已成功在GR1实例上部署,并且我们可以通过Ampere® AI镜像集成的示例代码测试评估Ampere® AI框架如PyTorch在GR1上的性能。
测试AIO示例
在本示例中,我们将测试和评估AIO的图像分类性能。我们使用最常用的ResNet50 v1.5图像分类模型进行测试。 Ampere PyTorch 优化镜像提供Jupyter Notebook示例和Python CLI脚本两种运行方式。
使用Jupyter Notebook运行
在GR1实例上设置AIO_NUM_THREADS和OMP_NUM_TREAD环境变量为16, 并打开FP16自动隐式模式,该模式允许框架尽可能的尝试将FP32模型作为FP16运行,并可以在几乎不影响模型精度的前提下大幅提升性能:
export AIO_NUM_THREADS=16; export OMP_NUM_TREADS=16; export AIO_IMPLICIT_FP16_TRANSFORM_FILTER=".*"
cd /aio-examples/
运行start_notebook.sh bash脚本启动Jupyter Notebook:
bash start_notebook.sh
同时在您的本地电脑上运行如下命令开启SSH端口转发:
ssh -N -L 8080:localhost:8080 -I <ssh_key> your_user@xxx.xxx.xxx.xxx
随后在本地电脑浏览器中访问上图中Jupyter Notebook启动过程中最后给出的localhost URL, 即可打开Jupyter Notebook可视化页面:
进入classification
图像分类目录,点击examples.ipynb
:
即可打开classification 示例页面,点击cell
->Run All
执行示例:
从运行结果可以看到使用AIO后,图像分类的推理速度约提升了3倍多:
除了图像分类之外,aio-example也提供了的目标检测的示例。在Jupyter Notebook主页进入object_detection目录执行同样的操作即可进行测试评估。
使用Python脚本运行
同样针对测试实例配置设置环境变量,并进入GR1实例上的aio-example示例目录。这里我们将AIO_NUM_THREADS和OMP_NUM_TREADS设置为16, 并同样打开自动隐式FP16模式:
export AIO_NUM_THREADS=16; export OMP_NUM_TREADS=16; export AIO_IMPLICIT_FP16_TRANSFORM_FILTER=".*"
cd /aio-examples/
随后进入resnet_50_v15 分类模型目录进行测试:
cd classification/resnet_50_v1
numactl --physcpubind=0-15 python3 run.py -p fp32
并可在终端得到如下运行结果:
可以看到使用AIO后,c16m64 规格的GR1实例使用ResNet50 v1.5图像分类模型,在FP32双精度下的输出可达105 ips。
与x86实例的横向对比
我们分别在百度智能云上创建了同样为16 vCPU和64GB内存,基于Icelake的bcc.g5.c16m64和基于Milan的bcc.ga2.c16m64实例。在bcc.g5.c16m64上我们使用Intel优化的intel_extension_for_pytorch-1.13.0框架, 在bcc.ga2.c16m64上使用AMD优化的ZenDNN_v3.3框架并运行相同的aio-example ResNet50 v1.5图像分类模型。我们取十次运行的平均值,得到如下结果:
从对比结果我们可以看到,GR1实例的性能和基于Icelake的G5实例的ResNet50 v1.5图像分类模型性能接近(95%),而比基于Milan的GA2实例的图像分类推理性能高出约155%。 若考虑到实例的价格,在相同的单位价格下GR1可以提供比G5实例高约22%,比GA2实例高约146%的图像分类推理性能。
总结
正如本示例所展示的,对于主流的AI推理场景,如ResNet50 v1.5图像分类模型等。采用Ampere® Altra®处理器的GR1实例的可提供比主流x86实例多达146%的性价比优势,您可以通过部署百度云市场中的Ampere® AI服务集成镜像亲自体验。敬请访问Ampere® AI解决方案网站进一步了解Ampere® Altra®处理家族在AI场景下的强大之处。
References:
- https://solutions.amperecomputing.com/solutions/ampere-ai
- https://baijiahao.baidu.com/s?id=1751709038217955693
- https://mp.weixin.qq.com/s/1VTSYECcgj5jaUlmBdm2uw
文章来源:百度智能云
作者:BinH
推荐阅读
- 基于BCC GR1实例部署 Elastic Stack
- 鲲鹏系列一: DevKit代码迁移工具技术要点总结
- 鲲鹏开发重点––ARM CPU的推测执行
- 鲲鹏开发重点-–扭转x86乾坤的挑战,ARM64内存模型
更多Arm服务器相关技术及移植干货请关注Arm服务器专栏。如要加入Arm Server微信群,请添加极术小姐姐(微信id:aijishu20)备注Arm服务器邀请加入。