阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

华为 DevRun 开发者沙龙—湖南省鲲鹏生态创新中心专场技术干货分享

  • 2020-07-14
  • 本文字数:4413 字

    阅读完需:约 14 分钟

华为DevRun开发者沙龙—湖南省鲲鹏生态创新中心专场技术干货分享

新基建风口下,计算产业的重要程度不言而喻,算力上的投入不仅直接带来 ICT 行业的增长,还对制造、交通、能源、零售等诸多行业带来创新改变,为了追求经济稳固增长,满足市场多元化算力需求,企业对算力要求越来越高,传统 x86 架构渐渐难以满足企业算力需求。


功耗大、通用寄存器数量少、计算机硬件利用率低、寻址范围小等问题凸显,使得 x86 架构劣势渐显难以跟上算力发展的速度,与此同时,ARM 架构在移动互联网盛行的当下开始焕发出别样的生命力,在 ARM 优势极速凸显后,x86 应用向 ARM 的迁移已成为一种趋势,但计算世界终究是牵一发而动全身,应用迁移过程中出现的众多痛点,使得 ARM 应用迁移陷入被动之地。


基于 ARM 架构来设计的鲲鹏,很早前便看到了未来计算机算力架构的迭代之路,建设了鲲鹏社区和华为云学院,指导和帮助开发者进行应用迁移的工作。


7 月 11 日,华为「18 城鲲鹏创新中心开发者创享日·湖南省鲲鹏生态创新中心专场」圆满落地,本场沙龙是由湖南省鲲鹏生态创新中心与华为技术有限公司联合面向湖南 ICT 行业从业人员开展,旨在培养开发者基于鲲鹏底座开发适配应用软件的高阶能力,激发开发者的创新潜能,为湖南省企业的数字化转型积蓄了力量。



本场沙龙以现有的鲲鹏平台软件迁移成功案例为基础,向与会者介绍 x86->ARM 平台软件迁移思路、难点和应对策略,以及迁移后的性能调优方法讲解,帮助开发者更好更快地上手鲲鹏应用迁移。

SO 库迁移

迁移工作中免不了对自己不熟悉的应用进行迁移,当开发者拿到一个不太熟悉的应用时,如何准备迁移工作?需要遵循哪些流程?碰到这种情况不用慌,本次课程向开发者们传授关键的迁移思路及分析过程。


第一个案例是加速库的迁移:ShengBTE 迁移。当拿到一款不太熟悉的软件,首先查看这个软件大概的功能、作用在哪些方面,通过搜索得知 ShengBTE 是一个专业性较强的应用,它被用于计算晶体的热传导率,整个应用使用 C 语言进行编写,配合一些数学函数库来使用。



有了基本了解后,开发者可按照以下 3 个迁移关键步骤来完成 ShengBTE 迁移分析:


1、 获取依赖信息。通过官方文档获取应用的依赖栈信息,源码获取方式、编译安装方法,也可结合第三方网站 Archlinux 来搜寻信息。


通过此方法了解到 ShengBTE 包含三个依赖栈,MPI 一个基于 GCC 的编译器,MKL 经过 intel 优化的一个数学函数库,spglib 一个常用的开源数学计算库。


2、 分析依赖兼容情况,找出不兼容的依赖分析移植方法。得知了依赖栈,开发者需要根据依赖栈的开源与否和软件平台的兼容情况,对依赖栈进行选择性替换。


MPI 作为 intel 平台使用的编译器,并不兼容鲲鹏,这里使用 Openmpi 作为编译器替换。spglib 作为开源数学计算库,可在鲲鹏直接安装使用。最后一个 MKL 的依赖栈用 lapack 来作为替换,但实际替换完后,编译过程中发现缺少部分函数无法直接使用,这时需要更换替换案例。


3、 移植依赖库,将不兼容的依赖替换成 ARM 下兼容的依赖库。经过对 MKL 替换案例的查询,发现可使用 OpenBLAS 做到完美替换,最终安装 OpenBLAS 然后在编译脚本中做相关修改,替换掉链接库完成整个迁移。


以上三点是应用迁移的 3 个关键步骤,从依赖信息的获取,依赖情况分析替换,再到一些没办法使用的依赖栈是怎样去替换的,这些需要开发者心中有清晰的迁移分析流程,才不至于因不熟悉的软件迁移而手忙脚乱。



在迁移分析完成之后,要对编译脚本进行修改,上图中左面插入的图片是官方提供的 Makefile 脚本,右图是修改后的脚本,整个脚本修改涉及到编译参数、编译器、依赖库三项修改。


在编译参数上,Openmpi 的编译命令同样是 MPIF90 无需进行修改,但是 intel MPI 有自己特殊的编译参数 static_intel,在 Openmpi 上并不兼容,需要对其进行相关屏蔽。修改脚本的最后一步,使用之前找到的 OpenBLAS 来完美替换 MKL 依赖库,整体的编译脚本修改就完成了。



最后回顾下整体迁移思路:


分析软件依赖,通过查阅官方文档或者是查阅第三方的网站。


找到依赖后可通过鲲鹏自带的工具去扫描依赖软件是否兼容。


不兼容则需要考虑软件是否开源,如果能得到源代码进行编译是可以适配鲲鹏平台的。


如果软件不开源则需要进行依赖替换,在功能满足的情况下,实在找不到可替换的依赖,就需要开发者进行相关屏蔽,然后再进行编译安装,这就是应用迁移的整体思路。

Maven 工程迁移

NiFi 软件移植,大数据开发者比较了解 NiFi 是一个开源大数据工作平台,将各个数据处理环节模块化,主要目标是简化大数据开发工作量。



在 NiFi 软件迁移过程中,通过命令进行编译打包时发现红字报错,显示没有找到 Jar 包。首先需要排查网络原因,因为在第一次编译时是从国外网站拉取 Jar 包,存在网络不通的情况,经过排查发现网络正常,此时就把目光聚集在 Jar 包本身。


根据相关配置 Pom.xml 去找到 Jar 包相关配置是否正常,详细配置看右边截图展示,groupID 可以理解成 Jar 包在仓库中的具体路径,kudu-binary 代表 Jar 包的名称,version 表示版本,classifier 是个具体的限制条件,在这里主要是用于区分环境,要求找到 aarch64 这样一个版本。


执行 mvn install 之后,系统会解析 Pom.xml 配置信息,先根据 Scope 去判断需不需要拉取,执行相关的测试用例,经过一系列尝试发现 kudu-binary 这个 Jar 包是无法打包出来的,获取不到相关的源码,但这个过程其实不是一无所获的,从官方文档得到的信息是说 kudu-binary 这个 Jar 包是用于测试用例的执行,影响的范围只是 NiFi 下 kudu 的一个小模块里面的一个功能的调用,这部分功能是可以手动做相关测试和执行的,所以尝试将其屏蔽,然后再将两个相关测试用例屏蔽掉,屏蔽以后再进行编译安装,最后完成整体迁移。



在这里回顾下 Maven 迁移整体思路:


如果 Maven 打包失败,首先应该排除网络原因,然后检查 pom.xml 相关配置,确认能从仓库中能找到相关 Jar 包,找不到需要修正相关配置,找得到就要看看是不是其他问题,如果 Jar 包调用报错了,可以根据鲲鹏开发套件 Dependency Advisor 等去做相关扫描,扫描出哪些依赖是否有问题。


如果是 Jar 包一般来说是含 x86 下的 SO 库,如果是含 C 的依赖,就需要对相关 Jar 包进行处理。处理的方法与依赖栈替换一样,要去获取相关的源码,编译得到相关的依赖 Jar 包,编译完之后,替换到本地仓库之中来完成整体打包。

Python 迁移

Python 的通用的迁移思路,主要围绕 Python 特有的配置文件 setup.py 文件,去查看相关的依赖,关注的它的依赖所存放的一些源或者仓库,如果这些源是国外的,没有办法拉取使用则可更换源再次尝试,源没有问题可直接使用 pip 一键安装。


除此之外,开发者可能会遇到一些 SO 包加载不了的问题,可能是域名访问不通,或者是本地解析有问题,这些基本上都是网络的问题,通过把网络问题排查清楚以后,就可以进行安装编译 Python 移植相对简单。



此次软件移植案例主要分享了三类场景,主要是针对 Maven、pom.xml 文件和 setup.py 三类文件进行修改,这些可以解决大部分的迁移问题,主要思路就是定位不兼容的依赖,不兼容依赖可以通过一些手段安装或者替换。


比方说通过源代码进行安装,拉取它的源代码在鲲鹏平台上进行编译安装。如果没有开源就去寻找替代的方案,通过去查阅相关的资料,找到替换的方案以后寻找相关的文件,将它适配到鲲鹏平台上,通过三种主流的应用迁移案例分享,希望能够帮助开发者在软件迁移过程中能有清晰的迁移分析思路。

硬件性能调优

从冯·诺伊曼架构看性能调优方向,基于硬件方面进行性能调优的有四个方向:CPU/内存、磁盘、网卡、应用,以编译器为例,如何优化才能打破 CPU/ 内存瓶颈?这里展开讲解一下编译器的性能优化:


指令布局优化:拆分函数代码,按照冷热指令重新排布,提升指令 Cache 命中率。


内存布局优化:按照内存数据访问频度,组合热数据区域,提升数据 Cache 命中率。


循环优化:分析循环迭代间数据访存依赖关系, 对无依赖的循环并行到多核执行,无依赖的数据自动矢量化计算,加速程序运行。


针对 SMP 系统下核数的扩展受到内存总线限制的问题:鲲鹏处理器支持 NUMA 架构,能够很好的解决 SMP 技术对 CPU 核数的制约,NUMA 架构将多个核结成一个节点 (Node),每一个节点相当于是一个对称多处理机,一块 CPU 的节点之间通过 On-chip Network 通讯,不同的 CPU 之间采用 Hydra Interface 实现高带宽低时延的片间通讯,在 NUMA 架构下,整个内存空间在物理上是分布式的,所有这些内存的集合就是整个系统的全局内存。每个核访问内存的时间取决于内存相对于处理器的位置,访问本地内存(本节点内)会更快一些。



从上图可以看到,不同 NUMA 内的 CPU core 访问同一个位置的内存,性能是不同的。内存访问时延从高到低为:跨 CPU > 跨 NUMA 不跨 CPU > NUMA 内,因此在应用程序运行时要尽可能的避免跨 NUMA 访问内存,此时可以通过 NUMA-Aware 亲和性资源规划,让内存访问最短路径。



在此介绍三种 NUMA 绑核配置的方法:


使用系统工具 numactl 设置。numactl -C 0-15 process name-C:Core scope


在代码中调用亲和性设置参数。pid_t pid, size_t cpusetsize, cpu_set_t *mask


多数开源软件中提供了配置接口。nginx.conf 文件中 worker_cpu_affinity 参数


以上均为 CPU/内存的优化方法,受篇幅所限只能遴选出一二知识点进行概述,性能调优是一个长期的过程,需要开发者们选择一个合理的性能优化平衡点,例如在调整网卡中断聚合上,低中断高吞吐与高中断低时延的选择,需要根据实际情况进行取舍,只有最合适的才能达到最好的性能。

写在最后

此次湖南省鲲鹏生态创新中心面向湖南 ICT 行业从业人员开展的鲲鹏技术沙龙,不仅让线下的参会者对鲲鹏生态有了更加深入的了解,也让鲲鹏计算产业收获了一批忠实的粉丝,鲲鹏计算产业生态的同行者和共建者越来越多,意味着鲲鹏计算体系生态圈的进一步扩大。



在沙龙现场,华为鲲鹏技术专家们针对鲲鹏计算生态及软件迁移与调优过程中可能遇到的问题为开发者们答疑解惑,并通过分享相关技术原理、实践经验和对应方法论,让开发者了解到如何在鲲鹏芯的基础上打造更具优势的解决方案。


同时,在鲲鹏计算生态的高校推广中,湖南省鲲鹏生态创新中心联合湖南本土优质高校,如国防科技大学、中南大学、湖南大学进行鲲鹏技术、鲲鹏人才进校园活动,各高校开设了选修课、理论课、实训课从高等教育中培养开发者基于鲲鹏底座开发适配应用软件的高阶能力,激发了开发者的创新潜能。

百舸争流 鲲鹏扬帆-鲲鹏应用创新大赛 2020(湖南赛区)

目前鲲鹏应用创新大赛 2020(湖南赛区)已经如火如荼展开,现面向全产业开发者开放报名通道,共同打造鲲鹏全栈解决方案,实现技术与商业创新应用。参赛队伍需基于鲲鹏计算技术构建产品与解决方案,包含华为云鲲鹏云服务、鲲鹏主板、鲲鹏服务器等产品,打造各个不同场景的软硬件解决方案。

奖金设置

赛题设置

比赛时间安排

总决赛和半决赛:8 月 7 日-8 月 12 日



最后,希望开发者们能够踊跃参赛,祝大家势如破竹,金榜题名!


点击链接进入湖南赛区官网。


2020-07-14 16:361349

评论

发布
暂无评论
发现更多内容

Java函数式编程 :为什么要关心Java8

java易二三

Java 编程 程序员 计算机 科技

采购云服务器安全与成本不可兼得?云耀云服务器L或许可以了解一下

轶天下事

Java仿抽奖系统

java易二三

Java 编程 程序员 计算机

DaVinci Resolve Studio 18 for Mac 18.5.1中文激活版

mac大玩家j

达芬奇18破解版 达芬奇18 视频调色软件

创建web应用程序,React和Vue怎么选?

没有用户名丶

生成式AI技术的应用与发展

百度开发者中心

自然语言处理 #人工智能 ChatGPT 文心一言

如何给application.yml文件的敏感信息加密?

java易二三

Java 编程 程序员 计算机 科技

月活近千万,连续365天无故障:货拉拉怎么做稳定性指标度量?

TakinTalks稳定性社区

安卓设备文件传输 MacDroid pro for mac激活中文

胖墩儿不胖y

文件传输 Mac 软件 传输文件

写得了代码,焊得了板!嵌入式开发工程师必修之代码管理方案(中)

极狐GitLab

git gitlab conan Git-Repo 多仓管理

快速构建商业模式,企业在云服务器选购上有什么需要注意的?

轶天下事

代码随想录Day50 - 动态规划(十一)

jjn0703

ARTS 打卡第 2 周: 对比法在编程上的具体应用

前行

AI+SaaS,会是微盟们的新法器吗?

自象限

鹏云网络入选中国信通院《高质量数字化转型产品及服务全景图(2023)》

鹏云网络

数字化转型 云服务 分布式存储 信通院 分布式块存储

流程图&时序图绘制小tips

得物技术

流程图 UML 画图 企业号 8 月 PK 榜

适用于各阶段Java程序员的面试备战/避坑指南

程序员小毕

Java 程序员 架构师 java面试 八股文

直播app源码,会话描述协议SDP:高质量平台服务

山东布谷科技

软件开发 数据传输 直播APP源码 sdp 会话描述协议

R语言之数据导出

timerring

R 语言

HarmonyOS元服务开发实践:桌面卡片字典

HarmonyOS开发者

HarmonyOS

生成式AI将重塑中国云产业

百度开发者中心

智能云 ChatGPT 生成式AI 文心一言

K8S集群中使用JDOS KMS服务对敏感数据安全加密 | 京东云技术团队

京东科技开发者

数据安全 数据加密 k8s集群 企业号 8 月 PK 榜 KMS

龙蜥社区标准化SIG举行线下社区标准研讨会,助力开源社区规范发展

OpenAnolis小助手

操作系统 龙蜥社区 硬件兼容性 质量测试 标准化 SIG

生成式AI:引领未来文案创作新潮流

百度开发者中心

#人工智能 生成式AI 文心一言

极狐GitLab 价值流管理之「总时间图」使用指南

极狐GitLab

DevOps gitlab 软件研发 价值流 时间图表

电商秒杀系统架构设计

艾瑾行

架构训练营

超越边界:FaaS 的应用实践和未来展望

SOFAStack

Serverless 架构 开发 Faas 函数

蚂蚁 SOFAServerless 微服务新架构的探索与实践

SOFAStack

Serverless 微服务 开发 应用架构

我是如何使用Spring Retry减少1000 行代码

小小怪下士

Java spring 程序员

生成式AI:改变未来的创新力量

百度开发者中心

#人工智能 ChatGPT 生成式AI 文心一言

生成式AI革新传媒互联网行业

百度开发者中心

媒体 传媒 #人工智能 ChatGPT 文心一言

华为DevRun开发者沙龙—湖南省鲲鹏生态创新中心专场技术干货分享_架构_马红伟_InfoQ精选文章