从处理器到软件生态体系,华为鲲鹏深入全产业链计算 |2020-07-22 09:
从处理器到软件生态体系,华为鲲鹏深入全产业链计算
|2020-07-22 09:39:19|企业资讯
本网7月22日讯 今年备受关注的新基建,首次被写入政府工作报告,相比于传统的旧基建,新基建的科技门槛更高,布局更为超前,围绕新基建开展的5G、工业互联网、大数据等方面的建设给社会经济增长也带来新的动能。
其中,算力基础设施作为新基建的关键词,也被看作是一个战略物资来支撑国家战略的发展前进,然而算力基础设施并不能建设在沙滩上,而是要立足于基础创新的坚实算力的底座上,这需要聚合相应的技术软件、行业应用技术,IT 技术产业才能建设出完善的新型算力基础设施。
这件事情,华为一直在做。
除了鲲鹏处理器研发,还扩展到操作系统、大数据平台、存储、数据库、中间件、云服务、管理服务等软件生态体系上来。
硬件开放,软件开源,使能伙伴成为华为构建鲲鹏生态的信条。
7 月 11 日,华为「18 城鲲鹏创新中心开发者创享日浙江省鲲鹏生态创新中心专场」以技术沙龙为课堂、以浙江省鲲鹏创新中心为出口,向开发者源源不断地输出着软件迁移与 openEuler 操作系统的实践经验,帮助开发者在鲲鹏芯片的基础上打造更具优势的解决方案。
SO 库迁移
迁移工作中免不了对自己不熟悉的应用进行迁移,当开发者拿到一个不太熟悉的应用时,如何准备迁移工作?需要遵循哪些流程?碰到这种情况不用慌,本次课程向开发者们传授关键的迁移思路及分析过程。
第一个案例是加速库的迁移:ShengBTE 迁移。
当拿到一款不太熟悉的软件,首先查看这个软件大概的功能、用在哪些场景下,通过查阅资料可知 ShengBTE 是一个专业性较强的应用,它被用于计算晶体的热传导率,主要使用 C 语言进行编写,配合一些数学函数库来使用。
有了基本了解后,开发者可按照以下 3 个迁移关键步骤来完成 ShengBTE 迁移分析:
1、 获取依赖信息。
通过官方文档获取应用的依赖栈信息,源码获取方式、编译安装方法,也可结合第三方网站 Archlinux 来搜寻信息。
通过此方法了解到 ShengBTE 包含了三个主要的依赖软件,MPI是一个编译器,MKL 经过 intel 优化的一个数学函数库,spglib 一个常用的开源数学计算库。
2、 分析依赖兼容情况,找出不兼容的依赖分析移植方法。
得知了依赖栈,开发者需要根据依赖栈的开源与否和软件平台的兼容情况,对依赖栈进行选择性替换。
MPI 作为 intel 平台使用的编译器,并不兼容鲲鹏,这里使用 Openmpi 作为编译器替换。
spglib 作为开源数学计算库,可在鲲鹏直接安装使用。
最后一个 MKL 的依赖栈用 lapack 来作为替换,但实际替换完后,编译过程中发现缺少部分函数,无法直接用lapack替换,这时需要换一种替换方案。
经过对 MKL 替换案例的查阅,发现一些用OpenBLAS 成功替换MKL的案例,因此我们尝试使用OpenBLAS去替换MKL。
最终安装 OpenBLAS 然后在编译脚本中做相关修改,替换掉链接库完成整个迁移。
以上两点是应用迁移的 2个关键步骤,从依赖信息的获取,依赖情况分析替换,再到一些无法兼容的依赖软件是怎样去替换的,这些需要开发者心中有清晰的迁移分析流程,才不至于因不熟悉的软件迁移而手忙脚乱。
在迁移分析完成之后,要对编译脚本进行修改,上图中左面插入的图片是官方提供的 Makefile 脚本,右图是修改后的脚本,整个脚本修改涉及到编译参数、编译器、依赖库三项修改。
在编译参数上,Openmpi 的编译命令同样是 MPIF90 无需进行修改,但是 intel MPI 有自己特殊的编译参数 static_intel,Openmpi并不兼容,需要将其删除。
再替换掉图片上红色字体部分,替换成OpenBLAS的编译选项。
整体的编译脚本修改就完成了。
最后回顾下整体迁移思路:
分析软件依赖,通过查阅官方文档或者是查阅第三方的网站。
找到依赖后可通过鲲鹏自带的工具去扫描依赖软件是否兼容。
不兼容则需要考虑软件是否开源,如果能得到源代码进行编译是可以适配鲲鹏平台的。
如果软件不开源则需要进行依赖替换,在功能满足的情况下,实在找不到可替换的依赖,就需要开发者进行相关屏蔽,然后再进行编译安装,这就是应用迁移的整体思路。
Maven 工程迁移
NiFi 软件移植,大数据开发者比较了解 NiFi 是一个开源大数据工作平台,将各个数据处理环节模块化,主要目标是简化大数据开发工作量。
在 NiFi 软件迁移过程中,通过命令进行编译打包时出现红色字体显示的报错,显示没有找到 Jar 包。
首先需要排查网络原因,因为在第一次编译时是从国外网站拉取 Jar 包,存在网络不通的情况,经过排查发现网络正常,此时就把目光聚集在 Jar 包本身。
根据相关配置 Pom.xml 去找到 Jar 包相关配置是否正常,详细配置看右边截图展示,通过groupID,artifactID,version标签 可以找到 Jar 包在仓库中的具体路径,kudu-binary 代表 Jar 包的名称,version 表示版本,classifier 是个具体的限制条件,在这里主要是用于区分环境,要求找到 aarch64 这样一个版本。
执行 mvn install 之后,系统会解析 Pom.xml 配置信息,先根据 Scope 去判断需不需要拉取,执行相关的测试用例,经过一系列尝试发现 kudu-binary 这个 Jar 包是无法打包出来的,获取不到相关的源码,但这个过程其实不是一无所获的,从官方文档得到的信息是说 kudu-binary 这个 Jar 包是用于测试用例的执行,影响的范围只是 NiFi 下的一个小模块里面的一个功能的调用,这部分功能是可以手动做相关测试和执行的,所以在手动测试完相关模块功能后尝试将其屏蔽,然后再将此jar包屏蔽掉,屏蔽以后再进行编译安装,最后完成整体迁移。
在这里回顾下 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 三类文件进行修改,这些可以解决大部分的迁移问题,主要思路就是定位不兼容的依赖,不兼容依赖可以通过一些手段源码编译或者替换。
比方说通过源代码进行安装,拉取它的源代码在鲲鹏平台上进行编译安装。
如果没有开源就去寻找替代的方案,通过去查阅相关的资料,找到替换的方案以后寻找相关的文件,将它适配到鲲鹏平台上,通过三种主流的应用迁移案例分享,希望能够帮助开发者在软件迁移过程中能有清晰的迁移分析思路。
openEuler 建设
相信关注华为鲲鹏的开发们对 openEuler 已经有所耳闻,今天的这部分课程会带领开发者深入了解 openEuler的优势、A-Tune 自优化方案,轻量化容器引擎 iSulad ,从这三个方面来了解 openEuler 的建设对于鲲鹏生态的重要性。
openEuler 是一个开源免费的 Linux 社区发行版,为了使能鲲鹏生态,华为将自己在服务器操作系统领域的长期积累开放出来,希望通过 openEuler 与国内主流操作系统厂商共建共享 Linux 操作系统生态。
基于 openEuler 社区发行版,4家OS厂商在HDC 2020.Cloud联合发布了商业发行版,目前已经有6家。
openEuler的出现使得国内主流OS厂商得以专心构建自己特色的操作系统,减少重复开发的资源浪费。
同时,openEuler 也是一个创新平台,它的所有源代码都存放在码云的代码仓库上,社区参与者可下载操作系统安装镜像或源代码,快速了解并掌握 openEuler 操作系统,深度参与到社区的创新和贡献中。
代码仓库:
https://gitee.com/src-openEuler:存放制作发布件所需的软件包,以一个标准的 linux 操作系统来说,会包含两三千个软件,华为将原始的开源软件全部放在这个仓库中间。
例如软件迁移部分提到的软件依赖包,迁移的时候找不到可以到 src-openEuler 上面来看看。
https://gitee.com/openEuler:存放源码类项目,如 iSula 容器引擎、A-Tune 自调优工具,也是 src-openEuler 的 1 个上游社区。
目前 openEuler版本 分为 LTS 版本和创新版本。
创新版本快速迭代,半年发布一个维护半年;LTS 版本两年发布一个维护四年。
选择这样的生命周期策略,主要是考虑软件更新与版本兼容性质量稳定性的平衡。
由于OS的软件包互相依赖、关联,当快速升级时会会对质量的稳定性,包括兼容性带来很大的挑战;然而软件包升级的过慢,就会存在另外一个问题,比如说一些安全漏洞修复成本高,或者一些社区新的功能无法体验到。
LTS 版本 保证稳定和兼容性,OSV 厂商可以基于 LTS 版本构建商用发行版;下一个 LTS 版本 22.03。
轻量化容器引擎 iSulad
iSulad 是一款轻量化容器引擎,相比 Golang 编写的 Docker,底噪开销更小,可应用领域更为广泛。
iSula容器的底噪相比 Docker 容器低很多,经过实测减少50%左右,得益于低底噪,同样一个虚拟机节点, 如果Docker 只能部署 50 个容器实例,那么使用 iSula 可能达到 100 个,这对企业降低成本十分有帮助。
相比于传统 Docker容器,iSula容器 启动时间能节省 50%,同时支持多种部署模型,包括普通的应用容器、安全容器,还有类似虚拟机的系统容器。
除此之外,标准化、轻量化、高性能是 iSulad 的三个优势特性:
一步到位兼容最新标准(OCI 和 CRI 标准),相比 传统的Docker ,常驻内存进程从 3 个减少到 1 个。
调用层级从 3 级压缩到 1 级,提升启动速度。
扬弃 go,改用 C 语言,删除标准外冗余代码,开销减小,实现代码精简 30 万到 7 万的蜕变。
A-Tune 典型场景智能自优化
A-Tune 是基于 openEuler 的自调优系统,目标是智能识别出系统的负载类型,并进行业务模型到资源模型的动态调度,以充分释放鲲鹏服务器算力,使运行在鲲鹏服务器上的应用得到最佳性能表现。
在上一个课题提到的软件迁移完成后,开发者也可以尝试使用 A-Tune 来进行软件自调优,A-tune已在社区开源更多的场景模型库和调优算法以及离线调优技术,会持续上线。
A-Tune 智能自调优具备两大关键能力,第一是在运行时自调优,这一能力使用系统画像技术,基于离线训练好的业务模型,对数据进行采集,再通过聚类、分类相结合的方法,精准识别上层业务,匹配最佳资源模型;第二是面向专业工程师的离线自调优,这需要工程师给出一个参数集,并且给出业务评价指标,A-Tune通过反馈式的不断迭代,再传递到贝叶斯优化算法,最终反馈给工程师最优的参数组合。
在运行时自调优过程中,用户下发命令后A-Tune 的服务端将采集数据进行负载识别,对上层业务或应用的类型进行识别感知,并为其匹配合适的资源模型,然后将配置进行下发。
这一过程非常迅速,在一分钟之内就可以完成,大大减轻了人工调优的负担。
写在最后
此次「18 城鲲鹏创新中心开发者创享日浙江省鲲鹏生态创新中心专场」克服雷雨天气影响,兼顾到线上与线下双轨运营,保证了此次技术沙龙的顺利举行。
会前,开发者踊跃积极报名,会中,精心策划的软件迁移主题深受开发者关注,openEuler 操作系统详解更是引发现场开发者的踊跃提问。
通过此次浙江省鲲鹏生态创新专场,为鲲鹏生态又沉淀了百余名开发者,他们通过熟悉鲲鹏,加入鲲鹏生态,让鲲鹏计算产业收获了一批忠实的粉丝,目前在鲲鹏产业发展上浙江省的速度也是非常快,目前为止已经有70 多家合作伙伴拿到鲲鹏认证,一百多家软件应用已经移植到鲲鹏平台,随着鲲鹏计算产业生态的同行者和共建者越来越多,鲲鹏计算体系生态圈的还将持续扩大。
另一方面,在浙江鲲鹏计算生态的人才培养计划中,华为联合了 20 多所高校师生同步直播鲲鹏课程开班,有效推动了校企双方在鲲鹏生态、大数据和人工智能领域进行深度合作,从高等教育中培养开发者基于鲲鹏底座开发适配应用软件的高阶能力,激发了开发者的创新潜能。
鲲鹏展翅浙里有为 鲲鹏应用创新大赛 2020(浙江赛区)
目前鲲鹏应用创新大赛 2020(浙江赛区)已经如火如荼展开,现面向全产业开发者开放报名通道,共同打造鲲鹏全栈解决方案,实现技术与商业创新应用。
参赛队伍需基于鲲鹏计算技术构建产品与解决方案,包含华为云鲲鹏云服务、鲲鹏主板、鲲鹏服务器等产品,打造各个不同场景的软硬件解决方案。
奖金设置
赛题设置
参赛者可在华为官网进行报名。
最后,希望开发者们能够踊跃参赛,祝大家势如破竹,金榜题名!