揭秘企业数据智能创新奥秘 | 2023云栖大会倚天专场[阿里云]

2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,【倚天专场】邀请了弹性计算、操作系统、平头哥、ARM中国等专家为大家解读阿里云倚天ECS实例最新进展,包括云原生处理器最新技术、龙蜥+倚天软硬件结合、倚天ECS实例最佳实践等话题,为客户上云提供一个更具“性价比”的选择,加速企业数据智能创新。​倚天再进化,为企业数据智能创新加速​阿里云弹性计算产品线架构师张先国首先为大家带来了《倚天再进化-加速企业数据智能创新》,给大家介绍了阿里云为什么设计一款云原生计算架构,通过大容量 Cache、物理核、OS 和编译器优化、eRDMA 加速、指令集加速等软硬件结合技术实现内存墙的突破,也降低数据中心税的开销,大大提升了倚天在应用场景的性能表现。​“倚天ECS实例不但实现了从芯片到云产品的蜕变,更实现了全方位的软件端到端优化,并且在阿里巴巴集团内部和外部商业化市场实现了规模化应用,这对一款芯片的第一代产品来讲是非常了不起的成绩。”张先国说道。​图:阿里云弹性计算高级架构师张先国​经过一年的时间,倚天ECS 产品业务性能实现了再次进化,比去年云栖大会发布的基础上,性能再提升 20%,通过 IaaS 和 PaaS 平台,已经服务数千家企业客户。​​如图表所示,相对主流 x86 性能收益也非常明显,大数据场景性能提升30%;视频转码性能提升40%;HPC场景性能提升30%;Java App,性能提升20%;数据库应用性能提升20%。​天猫、淘宝在多次双 11 电商促销活动,采用倚天 ECS 承载了核心交易业务,包括订单系统、购物车、订单流程、支付流程等主要业务,底层还有 400 个 Java App 已经在倚天平台运行。本次双 11,已经超过百万核倚天支撑了十几万笔交易。可实现降本增效、平滑迁移、稳定可靠的效果。​​龙蜥“入局”,解锁倚天底层算力,加速企业智能化创新​第二个议题,由阿里云智能程序语言与编译器技术总监,李三红为大家发表了题为 《龙蜥解锁倚天底层算力,加速企业智能化创新》的演讲。​图:阿里云程序语言与编译器技术总监李三红​在倚天ECS实例的成就背后,是阿里云强大的基础软件支持能力。从操作系统内核、编译器到运行时,阿里云基础软件团队都针对倚天芯片特性做了针对性的优化。在应用端,基础软件团队也在系统软件层为倚天ARM架构软件适配保驾护航,保障倚天在云上稳定、可靠、高效地运行。​后摩尔定律时代,传统算力提升缓慢。从扩展视角看计算机体系结构,全栈的协同设计与优化是龙蜥解锁倚天底层算力的关键技术之一。从倚天硬件、内核、编译器、运行时,到应用的垂直整合(Vertical Integration),全栈优化大幅提升软件性能。​​李三红还详细介绍了龙蜥操作系统(Alibaba Cloud Linux/Anolis OS),C/C++编译器套件 Alibaba Cloud Compiler(ACC) 编译器,以及Java运行时Dragonwell JDK在倚天方面做的优化工作。​Alibaba Cloud Linux全面兼容CentOS/RHEL生态,与阿里云基础设施做了深度优化,为实例提供专项的性能和稳定性优化,并提供完善的生态支持,同时用户还可以免费享受阿里云提供的全生命周期服务保障。​​Alibaba Cloud Compiler(ACC)编译器,相比GCC,或其他Clang/LLVM版本在编译、构建速度上有很大的提升;利用ACC ThinLTO、AutoFDO和Bolt等技术可以在不同程度上优化程序性能。ACC在支持不同CPU架构(X86、AArch64)基础上,进一步针对倚天710芯片进行优化,取得额外性能提升。​​Alibaba Dragonwell是OpenJDK的下游发行版本,支持X64/AArch64平台,被广泛应用于在线电商、金融、物流等领域,有百万量级部署规模。 Alibaba Dragonwell依托于丰富的阿里巴巴Java应用场景的锤炼, 全面拥抱云原生。在倚天Arm 架构上, Alibaba Dragownell主要采用面向工作负载的优化方式,使用云上大量真实的Java应用情况来进行性能评估和优化,优化的方向包括内存模型、锁/并发等方面。​​在倚天技术生态方面,为了解决架构迁移的兼容性问题,发布了 X86 向ARM平台迁移的EasyYitian工具平台。支持从代码/环境兼容性扫描(迁移前),跨架构编译(迁移中),到生产上线性能监控与调优(迁移后)全软件周期的支持和覆盖。​​ECS Booster 是在线的倚天智能优化方案。在创建倚天ECS实例时,用户可以直接选择对应场景的性能优化方案,包括Nginx,MySQL,Redis 等场景,ECS Booster 会自动加载性能优化策略和配置。​​除了开箱即用的ECS Booster自动化调优方案,阿里云也提供了优化版的云原生镜像,可加速 BigData,Web, Database, Java方面应用的提升,性能收益达到5-10%。​​最后,还发布了倚天常用的工具和技术社区:​

  • CADT::https://bp.aliyun.com/detail/346 (一键测试Spark集群性能) 
  • 倚天ECS开发指南:  https://github.com/aliyun/yitian-ecs-getting-started
  • 倚天社区: https://developer.aliyun.com/yitian

​​应用生态创新详解:倚天软硬件协同的最佳案例​云计算应用发展至今,已经诞生了各类复杂的应用生态,比如数据库、大数据、多媒体、AI等等,那么如何让这些应用更好地在倚天上发挥能力,尽可能减少用户的工作量,提升用户云上倚天的部署效率?平头哥解决方案的同学们自有妙招,平头哥数据中心解决方案负责人陈继承为大家带来《倚天软硬件协同加速应用生态创新》的主题演讲,为广大开发者提供了快速迁移到倚天ECS实例的道路。​图:平头哥数据中心解决方案负责人陈继承​高性能芯片不能必然带来应用高性能。在充分释放、发掘倚天算力潜力的过程中我们遇到了三个方面的挑战,首先是生态迁移,需要让客户在少投入甚至不投入的情况更顺滑的将长在x86上生态迁移到arm并保障其性能;其次,X86和ARM在内存模型也就是访存序存在差异,一个是强一致性序,一个是弱一致性序,需要提供自动化序检查能力让客户应用正确、高效的迁移到倚天上;最后,倚天芯片在ARM架构兼容的基础上考虑到功耗、频率以及内存子系统、缓存一致性、IO子系统等各种约束,在具体实现上做了很多的折中,需要我们把这些定制化底层软硬件能力以加速库、算子库、应用解决方案等形式更好的透出,能够让应用更方便、高效的调用。​​因此,平头哥的工作聚焦在让倚天底层软硬件能力充分透出的核心加速引擎层以及与芯片行为相关的生态迁移工具上,和阿里云弹性计算、基础软件、基础设施、业务应用等团队一起从基础设施层面、操作系统与编译层面、PaaS应用层面共同构建软硬协同、全栈优化、业务融合的倚天应用生态及其竞争力,并实现由内而外赋能。同时,倚天生态也是开放型的,依托ARM开源社区建设倚天生态,积极发展倚天社区,为外部客户和开发者提供全面支持。​​比如对于应用生态迁移,Java和Python等解释型语言在互联网业务应用中广泛使用,由于解释型语言运行时加载的特性,需要提前检查相关应用依赖(例如依赖库、三方包等),因此设计了能够满足Java/Python应用跨架构平滑、高效迁移的YODA倚天迁移工具。​YODA倚天迁移工具实现了包括源码、依赖包、二进制、依赖文件等的准确扫描,提供依赖检查、非依赖包自动过滤、版本检查等功能;可以对扫描结果进行分类,包括兼容、不兼容、版本升级、编译升级、待验证5大场景,并且提供覆盖应用全场景的SOP兼容升级方法和建议;对于不兼容文件的兼容性改造,工具提供了兼容版本推荐功能,目前该功能已覆盖20+主流开源仓,能够实现超过30K兼容版本的推荐,能够有效满足大数据等主流场景的兼容性要求。​目前,YODA倚天迁移工具已帮助内外部客户超10+应用完成迁移适配。同时工具已集成到阿里云EasyYitian工具平台,助力更多外部客户应用迁移上倚天。​​对于倚天应用解决方案,大数据场景技术栈复杂,涉及业务软件、JDK、OS等较多领域,基于经验调优和人力调优耗时耗力,并且调出的性能也是基于经验获得,不一定最优。针对x86迁移到ARM平台,为减轻开发者的工作量,开发了倚天大数据自动化调优工具,可以基于AI算法,在众多的参数多维空间中寻找最优参数,提高调优效率并给出最优性能。目前已经支持了Spark、Hive, 未来会持续支持更多场景。​同时,对于大数据业务,算力已逐渐成为显著的瓶颈,需要通过Spark关键算子native化提高Spark执行效率,通过集成我们基于倚天优化的x-simd、 ptg-optimize、zstd等加速库,显著提升了E2E性能,E2E相比原生Spark提升1倍以上。​​倚天在AI场景也发挥重要作用,通过创新的量化裁剪算法、ARM SVE int8技术以及微架构与算法深度结合的优化方法。倚天在语音推理、大语言模型推理、视觉、机器翻译等方面获得了较好的性价比和落地。比如对于大语言模型推理,在首包prefill阶段,算力是瓶颈,在后续的单包阶段,带宽是瓶颈,通过int8量化技术以及微架构与算法深度结合的优化方法,在首包阶段实现了8倍算力提升,在单包阶段实现了4倍带宽优化。倚天灵活的算力/带宽配比方式大幅提升了倚天的能力上限。​​倚天芯片的SPEC INT 性能强劲,其物理核,不降频、独享的更大的L1/L2 cache及更大的LLC、高效的图像信号处理拓展指令集,与视频应用视频像素INT8/INT16格式、计算密集型依赖平稳算力、分块处理需要大缓存以及向量化模块占比高等特征完全契合,因此带来了极高的视频编解码性能和性价比。倚天视频编解码应用也已成为倚天实例的一个重要优势场景。​倚天视频解决方案提供了x264/x265优化解决方案、4K高清加10bit/12bit 色深算子加速方案以及用于360全景视频和苹果HEIF Grid图片格式的x265 tile解决方案等,用户可在阿里云ECS Booster中勾选获得。​Arm Ecosystem, Performance, Optimization​倚天的成功自然也离不开ARM强大的软件生态, 来自安谋科技高级软件经理–别再平,带来了《 Arm Ecosystem, Performance, Optimization》主题演讲,为大家详解ARM生态性能和优化的诸多细节,让听众不仅领略了当下ARM生态的勃勃生机,同时也展望了未来发展的无限可能。​Neoverse是Arm在2018年发布的平台,包含三大系列产品,专门针对基础设施领域设计CPU核心和互联总线, 聚焦基础设施市场,主要有三大系列CPU核心。 在半导体领域,PPA(Performance, Power, and Area)是一种综合考虑性能、功耗和面积的概念。它是衡量半导体芯片设计质量的重要指标。​​我们来看一下arm在软件生态方面的投入策略:​如左侧所示, 主要是首日支持、开发者工具和开源软件投入三方面。​1、首先,Day one bringup,Arm确保在silicon硬件系统面世之前,相应的架构特性和微架构特性已经就绪。同时Arm还会针对自己的CPU、总线等IP,研发相应的fast model和FVP系统,以及对应的参考设计,芯片伙伴可以在这个基础上进行硅前的软件开发。2、其次,开发者工具,Arm为开发者提供一系列完善的开发工具,主要是包括编译器工具链和性能分析工具。更新的编译器版本,会带来更新的CPU微架构原生支持,这样开发者使用编译器在当前系统构建代码的时候,就可以用比较简单的编译选项,获得最优化的结果输出。性能分析工具方面,Arm对Linux perf、telemetry solution等进行开发, 支持top down等方法论。3、最后,开源软件的投入。Arm投入了大量的研发资源来支持开源社区,从整个软件栈来看,从Java Rust Golang Python PHP等主流的程序语言,到各种常见的压缩、加解密、视频编解码等计算加速库,以及数据库 MySQL Redis、网页服务器 Nginx、大数据 Spark Flink、存储 Ceph等最上层的各种工作负载,Arm都有持续的投入和支持。​​使用N2的倚天ECS实例, 相对于x86 Icelake的计算实例, 在多个上层应用负载中,都有着显著的性能优势。​Arm在基于Neoverse N2的倚天实g8y实例和同等规格x86实例的性能对比测试,我们可以看到,不管是流行的缓存数据库Redis、memcached,大数据Spark应用、以及网页服务器 Nginx Apache Httpd等, 倚天ECS实例都有至少20%的性能优势。尤其是值得指出在机器学习推理方面, 使用MLPerf测试,倚天的性能是x86的两倍。​同时值得指出的是,阿里云上的倚天ECS实例售价相当于x86架构,具有至少20%的价格优势。再加上刚才提到的相应的性能优势,这将为最终用户在云上部署中带来极高的TCO优势。​​在编译器参数选择上,Arm架构和x86稍有不同,为了获得最好的性能, 我们有以下建议:​

  • 在可能的情况下,使用最新版的编译器, 正如前面说过的,在编译器这块,Arm会不断地开发和适配更新的特性,包括性能优化,所以建议升级编译器。例如GCC11和LLVM11版本中加入了对N2核的原生支持。
  • 如果是在Arm系统上进行原生编译的时候,建议总是使用mcpu=native选项,这样配合较新的编译器,可以自动识别到当前硬件的型号,针对性地生成优化的机器代码。其次如果不是原生编译,不能使用mcpu=native的情况下, 建议指定具体的mcpu参数,例如mcpu=Neoverse-n2来指定目标代码的cpu 核心。
  • 其次,如果是用的编译器还不支持使用mcpu传入目标系统的cpu核心,可以使用march指定需要的架构特性,例如armv8.5+sve的形式。
  • 最后,在arm架构上要彻底避免使用mtune参数,这是从x86到arm迁移中要注意的一个点,当我们迁移的时候,建议删除mtune,使用mcpu参数来替换march参数。在arm community blog上有一篇文章, 详细介绍了march mtune mcpu等不同的编译选项在不同架构下的区别以及相应的影响。
  • ​接下来, 给大家介绍几个Arm开发相关的资源。​1、 首先,learning path项目(https://learn.arm.com/learning-paths/servers-and-cloud-computing/)。该项目旨在设计一系列课程,帮助开发者快速熟悉在Arm系统上的软件应用、安装部署和性能优化工作。这个项目是开源的,任何使用者都可以为其作出贡献,分享自己的实践经验。 2、 Arm开发者社区(https://developer.arm.com/documentation/),可以获取到Arm各种CPU核心、总线的技术文档和架构规范。3、 Arm community blog,汇集了很多Arm软件生态和性能优化的文章。4、 Worksonarm计划(https://www.arm.com/markets/computing-infrastructure/works-on-arm),Arm通过 Works on Arm 计划,为开发者提供免费的 Arm 架构开发平台,赋能开发者创新。感兴趣的开发者可以通过workonarm计划,提交申请来免费构建自己基于arm架构的系统。5、 最后,极术社区 arm服务器专栏(https://aijishu.com/blog/armsoft), 我们会不定期在上面分享一些我们的经验总结, 欢迎大家订阅交流。​​​