本文将以「深度学习模型推理应用」为出发点,对「倚天 710」这款 ARM Server 芯片进行性能实测。
OpenPPL 自开源以来,便密切关注着业界的进展,致力于优化模型推理的全链条。完善对国产化芯片的支持,是 OpenPPL 团队的一个重点方向。
2021 年,阿里平头哥团队推出了全球首个 5nm 制程的 ARM Server 芯片 ——「倚天 710」。该芯片是基于 ARM 最新的 Neoverse N2 核心,自研的面向云数据中心服务器的高性能 CPU 芯片。
相比于市面上现有的 ARM Server 芯片,「倚天 710」在指令集、工艺、核心数、频率等多个指标上有着较为明显的优势:
前段时间,阿里云推出了基于该芯片的全新 ECS g8m 系列实例。OpenPPL 团队第一时间申请到了试用实例,对大家期待已久的「倚天 710」进行了性能实测。
本次评测将以「Amazon Graviton2」作为对比芯片,评测内容包括:
1. 基础信息测试:
- 指令集支持情况
- 核心算力测试
- 访存系统测试
2. 软件性能实测:
- 通用矩阵乘实测性能
- 深度学习模型实测性能
一、基础信息测试
1. 指令集支持情况
自 ARMv8 以来,ARM 推出了多种高性能计算指令扩展,其中对机器学习领域最有帮助的有:
- fp16: IEEE 754 标准 16-bit 浮点数指令集扩展
- bf16: bfloat16 浮点数指令集扩展
- i8mm: int8/uint8 矩阵指令集扩展
- sve/sve2: 可变长向量指令集扩展
- sme: 可变长矩阵指令集扩展
下表是「倚天 710」与「鲲鹏 920」「Amazon Graviton2」对这些指令集扩展支持情况的对比。可以看到,相比于竞品,「倚天 710」额外支持了多个高性能指令扩展:
值得强调的是,bf16/i8mm 中的矩阵乘指令(bfmmla、smmla、ummla、usmmla)在「倚天 710」上得到了支持。
这些指令能够单条指令直接算出矩阵乘的结果,峰值算力较传统的向量指令有明显的提升:
高性能微架构能够将这些矩阵指令的 IPC,保持在跟向量指令一样的水平上。因此,将向量指令更换成矩阵指令将大大提升计算的速度。这也是「倚天 710」选用最新 ARM Neoverse N2 内核所取得的后发优势。
2. CPU 核心算力峰值
这里我们对「倚天 710」和「Amazon Graviton2」的算力峰值进行了对比测试。
测试时,「Amazon Graviton2」的频率是 2.5GHz。「倚天 710」虽然最高频率可达 3.2GHz,但阿里云提供的试用实例频率被限制到了 2.75GHz。
本文的所有数据都是在 2.75GHz 这个频率上测出的,没有真正挖掘出这款芯片的全部潜力。也非常期待阿里云后续正式发布的 ECS 能够提供解除频率限制的选项。
下表是我们实测的单核峰值性能:
由于「倚天 710」频率相比「Amazon Graviton2」提升了 10%,其 fp16/fp32 fmla 指令的算力比后者高 10%,这个结果符合预期。
但凭借着对新矩阵乘指令的支持,「倚天 710」的单核浮点算力最高可达 175.51 GOPS (BF16),单核定点算力最高可达 351.02 GOPS (INT8/UINT8)。
这相对于「Amazon Graviton2」是一个巨大的提升。
另外值得强调的是,上述数据仅为单核心的算力。考虑到「倚天 710」的单颗芯片核心数是「Amazon Graviton2」的两倍(128 vs 64),因此芯片整体算力方面,倚天 710 要远高于 Graviton2:
上述数据为单核 x 核心数估算出来,非实测数据
当然,考虑到阿里云尚未对该系列 ECS 定价,我们没法对两者单位成本算力进行一个准确的比较。期待阿里云尽快推出正式版的「倚天 710」实例。
我们在测峰值的同时,也对这些指令的延迟做了一下测试:
上述延迟均为 Dst to Dst 延迟
可以看到,fp16/fp32 fmla 指令延迟两者一致。bfmmla 指令在算力大幅提升的情况下,延迟仅仅上升了 1 个 cycle。而整型 mmla 指令的延迟仅有 1 cycle,非常利于优化。
3. 访存系统
「倚天 710」同「Amazon Graviton2」一样,有 64KB 的 L1 ICache、64KB 的 L1 DCache、1MB 的 L2 Cache,这些 Cache 都是每个核心独享的。
下表是我们实测的读延迟与带宽:
可以看到,「倚天 710」的 L1 DCache 读带宽、L2 Cache 读延迟与带宽均明显优于「Amazon Graviton2」,这对于各类程序的性能会很有帮助。
另外,「倚天 710」的 unified L3 Cache 高达 128 MB,远高于「Amazon Graviton2」的 32 MB。这将大大提升倚天 710 在多核心协作下的性能。
但鉴于阿里云提供的试用 ECS 只有 4 个核心,因此本文并没有对 L3 Cache 及以下的访存系统进行测试。
二、软件性能实测
1. 通用矩阵乘性能实测
我们首先用通用矩阵乘 (GEMM) 来看下「倚天 710」在实际程序上的性能表现。
测试时,在「倚天 710」和「Amazon Graviton2」上使用相同的二进制文件,所用 ECS 操作系统也都保持相同 (Ubuntu 20.04)。
测试矩阵尺寸为 M x N x K = 1024 x 1152 x 1024,测试计算精度为 fp32、fp16、bf16 (输入输出格式为 fp16)。测试单核性能。
测试结果如下:
可以看到对于 GEMM 任务来说,「倚天 710」在相同计算精度上所能达到的实际计算速度要明显高于「Amazon Graviton2」。
而当使用了 bf16 矩阵乘指令后,「倚天 710」的 GEMM 实际计算速度超过了「Amazon Graviton2」fp16 的两倍。
如果进一步使用 i8mm 指令,算力差距将更加明显。当然随之而来的量化精度问题,需要在实际应用中进行调整与斟酌。
另外,「倚天 710」相对于「Amazon Graviton2」的性能提升不仅是因为主频高。同样的程序,在「倚天 710」上算力利用率会高 2~3 个百分点。简单优化的 GEMM 程序算力利用率就能达到 94 ~ 95% 左右,这使得「倚天 710」能够更好的发挥其硬件的性能。
2. 深度学习模型性能实测
最后,我们用一些经典的开源网络,来测试一下「倚天 710」在深度学习模型推理任务上的实际表现(测试时,推理框架使用 OpenPPL)。
OpenPPL 已于今年 1 月份支持了 ARM Server 架构,能够支持大部分 OpenMMLab、PyTorch Model Zoo 网络,并针对 ARM Server 架构的特点进行了针对性的优化。
测试时,我们保持「倚天 710」和「Amazon Graviton2」两者所使用的软件代码与模型文件相同,分别在两款芯片上进行了单核的性能测试,结果如下:
可以看到,无论是 FP16 还是 FP32 精度的推理,「倚天 710」在大部分模型上都能比「Amazon Graviton2」快 10% ~ 30%。
相同计算精度下,这个提升幅度要高于上文的 GEMM。倚天 710 在更复杂的计算任务上,能够跟「Amazon Graviton2」拉开更明显的差距。
这些提升一部分来自于芯片本身主频的提升 (10%),另外一部分来自于访存系统容量、延迟与带宽的改善,以及微架构方面的改进 (分支预测、指令发射等)。
这些改进实打实的加快了神经网络推理的速度。相信对于其他计算任务,「倚天 710」同样能取得不俗的成绩。
总结
通过测试我们可以看到,「倚天 710」相对于目前市面上的 ARM Server 芯片而言,在多个方面有着较为明显的优势:
- 更高的主频、更高的核心数
- 更新更全的指令集支持
- 更高的峰值浮点、定点算力
- 更好的访存系统性能
这些优势将使得「倚天 710」在实际计算任务上取得不俗的性能表现。
经我们实测,在通用矩阵乘和深度学习模型推理这两个计算任务上,「倚天 710」相比于「Amazon Graviton2」均能取得明显的性能提升。
这对于国产芯片而言是一个非常难能可贵的成绩。
后记
在与参与国产芯片研发的朋友们交流中,我们深深感受到国产芯片自研的不易:除开或自研、或采购的计算核心外,芯片时序功耗面积的收敛、硬件单元测试与功能测试、片上互联网络配置与调试、加工与封装,以及软件工具链的开发与优化,这些工作都需要投入大量的人力与时间,解决无数个问题才能不断完善。
因此「倚天 710」芯片是十分值得称赞的。
当然,我们仅仅对一小部分指标进行了测试,后续我们会对更多细节进行更深入的探索,也期待阿里云能够尽快开放正式版 ECS 实例,吸引更多用户使用,从不同应用、不同角度对这款芯片进行评价,足够的反馈可以帮助芯片厂商明确改进目标,给国产化芯片提供更多的支持。
我们也注意到,「倚天 710」支持了最新的 PCIe 5.0,在带宽、功耗等多个方面均优于 PCIe 4.0,能够更好地适配 GPU、NPU、FPGA 等各类异构加速外设。
我们期望看到,国产自研 CPU,搭配上国产自研的加速外设,跑上 OpenPPL 这样的全自研高性能推理引擎,国产商用高性能计算体系将日趋完善,为各类人工智能的应用提供更大价值。
OpenPPL 团队一直跟进着国产芯片的最新进展。
- 在 x86 后端上,已经完成对 SSE 指令的支持,并在近期内重点支持 VNNI 指令集,使最新的 x86 处理器增加定点量化能力;
- ARM Server 也是 OpenPPL 支持的一个特色后端,除了支持更多的网络模型和算子,今年也将重点支持 Int 8 数据精度推理和 ARM v9 特性;
- 我们目前已支持 RISC-V 后端,后续将兼容 RVV 0.7.1 和 RVV 1.0 标准版本,并添加可变长 VLEN 的支持。
OpenPPL 的目标是在各类 CPU、GPU、NPU 架构上都能提供高效便捷的深度学习模型推理部署的支持。
我们期待有更多的同学能够试用和反馈意见,让 OpenPPL 在性能、平台支持和易用性等多个方面不断进步。
⭐️ 欢迎 star
🔗 https://github.com/openppl-public
加入交流群(QQ 群:627853444),参与技术大咖讨论!
相关文章阅读
课程总结 | OpenPPL ARM Server 技术解析
作者: 田子宸
原文:OpenPPL公众号更多Arm服务器应用移植,部署等技术干货请关注Arm服务器专栏。如想加入Arm服务器技术交流群,请添加极术小姐姐微信(id:aijishu20)进群。