随着大模型的越演越烈,高性能计算这一领域被越来越多的人所熟知。未来的超算互联网时代,不懂高性能计算更是难以适应未来时代的发展与变化。很多同学都想学习高性能计算,今天作为国内首家专注高性能计算人才培养的专业机构就帮大家梳理一下,学习者需要做哪些准备?并在文末为大家准备了一份高性能计算核心知识点。
高性能计算作为一门复杂而重要的领域,需要学习者具备一定的前置知识和技能。
以下是学习高性能计算所需的一些重要前置知识:
计算机体系结构:了解计算机的基本组成和层次结构,包括处理器、内存、存储系统和网络等。理解计算机的工作原理对于高性能计算的学习至关重要。
数据结构和算法:熟悉常用的数据结构和算法,如数组、链表、栈、队列、树和图等。掌握高效的数据结构和算法设计能够提高高性能计算程序的效率和性能。
编程语言:熟练掌握至少一种编程语言,例如C/C++、Python等。C/C++是高性能计算中常用的编程语言,对其语法和特性的了解至关重要。Python则在高性能计算中被广泛用于快速原型开发和数据处理。
并行计算和分布式系统:理解并行计算的基本概念和原理,包括多线程编程、并行算法和任务调度等。了解分布式系统的工作原理和通信机制,如MPI(Message Passing Interface)和分布式文件系统等。
数值计算和优化方法:具备数值计算和优化方法的基础知识,包括线性代数、数值积分、最优化算法等。深入了解数值计算和优化方法能够帮助你设计和优化高性能计算程序。
操作系统和系统管理:对操作系统的基本原理和功能有一定的了解,包括进程管理、内存管理和文件系统等。了解系统管理的基本概念和技术,能够有效地管理和优化高性能计算系统。
网络通信和数据传输:熟悉网络通信的基本原理和协议,如TCP/IP协议栈和Socket编程等。了解数据传输的技术和优化方法,如批量传输和零拷贝技术等。
性能分析和调优工具:熟练使用性能分析和调优工具,如Intel VTune、CUDA Profiler等。掌握这些工具可以帮助你分析和优化高性能计算程序的性能瓶颈。
总之,学习高性能计算需要具备计算机体系结构、数据结构和算法、编程语言、并行计算和分布式系统、数值计算和优化方法、操作系统和系统管理、网络通信和数据传输以及性能分析和调优工具等前置知识。这些知识和技能的掌握将为学习者提供良好的基础,使其能够更好地理解和应用高性能计算的原理和方法。
除了上述的前置知识,还有一些额外的学习资源和经验可以帮助学习者更好地掌握高性能计算:
学术论文和期刊:阅读与高性能计算相关的学术论文和期刊,了解前沿的研究成果和最新的技术趋势。这可以帮助学习者深入了解高性能计算领域的发展和挑战。
开源项目和社区:参与开源项目和加入相关的学术或技术社区,与其他高性能计算工程师交流和分享经验。通过与他人合作和讨论,学习者可以提升自己的技能并获取实践经验。
实际项目经验:参与实际的高性能计算项目,例如科研项目或工业应用项目。在实践中应用所学知识,解决真实的问题,将能够加深对高性能计算的理解和应用能力。
在这里,猿代码科技(https://www.ydma.com)为您准备了一份高性能计算培训课程,涵盖CPU、GPU以及超算运维。其中尤其推荐的是猿代码-高性能计算从新手到大师系列课程(CPU和GPU并行优化)
这是由国内顶尖科研院所专家及知名企业工程师合作研发的高性能计算专项课程,涵盖高性能计算之并行计算等多个方面,包括CPU并行计算实战课程、GPU并行计算实战课程以及超算运维等。您将有机会通过工程化实战项目来学习所学知识,并与来自国内顶级专家及工程师近距离合作与学习。
这里,我们提供的实际工程项目经验如下:
受众:统招一本及以上、理工科,211/985优先、硕士及以上优先;
注:须有一定的C/C++语言基础;
一、基础能力训练:
实践项目:人工智能程序Darknet性能调优
Darknet介绍:一种轻量级的基于C和CUDA的开源深度学习框架。特点:容易安装,没有任何的依赖项,移植性好,支持CPU和GPU两种计算方式。
项目要求:使用CPU并行计算的优化方式,使人工智能程序Darknet性能运行效率大幅度提高,较初始安装后的性能参数提高200%以上;
项目要点:Darknet原理、天河超算平台使用、MakeFile、安装及运行、卷积神经网络算法YOLO、im2col)、GEMM矩阵乘、gprof工具做性能分析、统计优化结果并编写文档;
掌握技能:
高性能计算与超级计算机
Linux 常用操作命令
编辑器VIM
编译器GCC
工程构建工具Make
作业管理系统slurm
调试器GDB
传统性能优化
高性能算法
程序性能分析
二、MPI(基于进程)能力训练
实践项目:基于MPI实现行列分块的GEMM矩阵乘
项目介绍:通用矩阵的矩阵乘法,多种学科(比如深度学习)的计算核心。
项目要求:矩阵A使用行分块,矩阵B使用列分块,基于MPI实现并行版本的GEMM算法,要求16进程以内并行效率达到50%以上。
项目要点:矩阵乘基本算法、行列分块矩阵乘算法、MPI并行算法设计、数据传输逻辑梳理、阻塞消息通信版本实现、捆绑消息通信版本实现、非阻塞消息通信实现、重复非阻塞消息通信实现、统计多进程运行结果、计算并行效率并编写文档。
掌握技能:
进程与线程的区别
MPI基本概念
MPI编程、程序编译及运行
点对点通信
死锁
计算与通信重叠
通讯优化
集合通信
负载均衡
MPI通信模式
虚拟拓扑
三、OpenMP(基于线程)能力训练
实践项目:StellarSim程序的多核并行优化(基于OpenMP)
项目介绍:StellarSim是基于离散单元数值计算的物理演化程序,最早从天体动力学星云演化计算中产生,被广泛用于恒星诞生仿真模拟领域,及游戏引擎中的物理演化、碰撞事件、特效生成等模块。
项目要求:将串行程序StellarSim进行并行优化,使其能运行在多核CPU平台,并且在使用16线程(16核)时的并行效率不小于50%
项目要点:OpenMP多核并行、StellarSim程序数据结构、gprof性能分析、MakeFile软件编译、slurm作业管理。
掌握技能:
高性能计算基础能力
OpenMP原理
OpenMP并行程序设计
OpenMP的循环体for结构
OpenMP的分段section结构
OpenMP的任务池task结构
四、SIMD(单指令多数据)能力训练
实践项目:StellarSim程序的向量化优化(基于SIMD)
项目介绍:StellarSim是基于离散单元数值计算的物理演化程序,最早从天体动力学星云演化计算中产生,被广泛用于恒星诞生仿真模拟领域,及游戏物理引擎中的物理演化、碰撞事件、特效生成等模块,该程序也被广泛应用于unity、Unreal等著名游戏开发引擎。
项目要求:将串行程序StellarSim进行单核向量化优化,使其能在ARM架构单核CPU上的运行“加速比”不小于2
项目要点:基于neon的SIMD并行、StellarSim程序数据结构、gprof性能分析、makefile软件编译。
掌握技能:
高性能计算基础能力
SIMD原理及编程
自动向量化
NEON-intrinsic指令集(命名规则及存取操作)
NEON-intrinsic指令集(算术、比较、逻辑及其他操作)
五、实践项目:IPP库的重写(从X86到ARM)
将基于X86架构的IPP函数库进行重写,使其运行在ARM架构上。
IPP库是Intel提供的具有图形图像处理功能的强大函数库,实际应用非常广泛。该库共计5000个函数,其中2500多个用于图像处理、1300个用于信号处理、500个用于计算机视觉、300个用于密码。
导师会带领学员把IPP库中基础的100多个函数进行重写,在ARM架构上实现与原函数库相同功能。能够很好的锻炼学员软件工程、数学、算法、OpenMP、SIMD并行技术及混合并行编程等方面能力;
六、认证考试:
平台:
国家超级计算天津中心新一代超级计算天河平台;
ARM aarch64架构,单节点64个CPU核;
要求:
全程6小时的编程马拉松方式(含休息时间);
考生须真人出镜、全程录屏、可上网搜索资料(考官线上实时监考);
严禁复制代码及文档,严禁各类形式的讨论;
目标:考过即可独立工作
检验考生在程序性能分析、软件编译、MPI、OpenMP、SIMD、作业管理系统使用等方面的综合能力。
持续学习和更新:高性能计算领域的技术和工具不断更新和演进,学习者需要保持持续学习的态度,并跟踪最新的发展。参加培训课程、研讨会和技术会议,探索新的技术和方法。
学习高性能计算需要时间和努力,但掌握这些前置知识将为你打开通向高性能计算领域的大门。无论是从事科学研究、工业应用还是创新技术,高性能计算都将成为一个关键的竞争优势。准备好迎接这个挑战,为未来的学习和发展奠定坚实的基础。
以下是高性能计算核心知识点
高性能计算(缩写 HPC) 指通常使用很多处理器(作为单个机器的一部分)或者某一集群中组织的几台计算机(作为单个计 算资源操作)的计算系统和环境。有许多类型的 HPC 系统,其范围从标准计算机的大型集群,到高度专用的硬件。
大多数基于集群的 HPC 系统使用高性能网络互连,比如那些来自 InfiniBand 或 Myrinet 的网络互连。基本的网络拓扑和组织可以使用一个简单的总线拓扑,在性能很高的环境中,网状网络系统在主机之间提供较短的潜伏期,所以可改善总体网络性能和传输速率。
高性能计算硬件结构和总体结构
高性能计算拓扑结构,从硬件结构上,高性能计算系统包含计算节点、IO节点、登录节点、管理节点、高速网络、存储系统等组成。
高性能计算集群性能指标
FLOPS 是指每秒浮点运算次数,Flops 用作计算机计算能力的评价系数。根据硬件配置和参数可以计算出高性能计算集群的理论性能。
1) CPU 理论性能计算方法(以 Intel CPU 为例)
单精度:主频*(向量位宽/32)*2
双精度:主频*(向量位宽/64)*2
2 代表乘积指令
2) GPU 理论性能计算方法(以 NVIDIA GPU 为例)
单精度:指令吞吐率*运算单元数量*频率
3) MIC 理论性能计算方法(以 Intel MIC 为例)
单精度:主频*(向量位宽/32)*2
双精度:主频*(向量位宽/64)*2
2 代表乘积指令
通过利用测试程序对系统进行整体计算能力进行评价。
Linapck 测试:采用主元高斯消去法求解双精度稠密线性代数方程组,结果按每秒浮点运算次数(flops)表示。
HPL:针对大规模并行计算系统的测试,其名称为 HighPerformanceLinpack(HPL),是第一个标准的公开版本并行 Linpack 测试软件包。用于 TOP500 与国内 TOP100 排名依据。
同构计算节点
同构计算节点是指集群中每个计算节点完全有 CPU 计算资源组成,目前,在一个计算节点上可以支持单路、双路、四路、八路等 CPU 计算节点。
异构计算节点
异构计算技术从 80 年代中期产生,由于它能经济有效地获取高性能计算能力、可扩展性好、计算资源利用率高、发展潜力巨大,目前已成为并行/分布计算领域中的研究热点之一。异构计算的目的一般是加速和节能。目前,主流的异构计算有:CPU+GPU,CPU+MIC,CPU+FPGA
常见的并行文件系统
PVFS:Clemson 大学的并行虚拟文件系统(PVFS) 项目用来为运行 Linux 操作系统的 PC 群集创建一个开放源码的并行文件系统。PVFS 已被广泛地用作临时存储的高性能的大型文件系统和并行I/O 研究的基础架构。作为一个并行文件系统,PVFS 将数据存储到多个群集节点的已有的文件系统中,多个客户端可以同时访问这些数据。
Lustre,一种平行分布式文件系统,通常用于大型计算机集群和超级电脑。Lustre 是源自 Linux和 Cluster 的混成词。于 2003 年发布 Lustre 1.0。采用 GNU GPLv2 开源码授权。
集群管理系统的主要功能
目前,几大主流服务器厂商都提供了自己的集群管理系统,如浪潮的 Cluster Engine,曙光的Gridview,HP 的 Serviceguard,IBM Platform Cluster Manager 等等。集群管理系统主要提供一项的功能:
1) 监控模块:监控集群中的节点、网络、文件、电源等资源的运行状态。动态信息、实况信息、历史信息、节点监控。可以监控整个集群的运行状态及各个参数。
2) 用户管理模块:管理系统的用户组以及用户,可以对用户组以及用户进行查看,添加,删除和编辑等操作。
3) 网络管理模块:系统中的网络的管理。
4) 文件管理:管理节点的文件,可以对文件进行上传、新建、打开、复制、粘贴、重命名、打包、删除和下载等操作。
5) 电源管理模块:系统的自动和关闭等。
6) 作业提交和管理模块:提交新作业,查看系统中的作业状态,并可以对作业进行执行和删除等操作。还可以查看作业的执行日志。
7) 友好的图形交互界面:现在的集群管理系统都提供了图形交互界面,可以更方便的使用和管理集群。
集群作业调度系统
集群管理系统中最主要的模块为作业调度系统,目前,主流的作业调度系统都是基于PBS 的实现。PBS(Portable Batch System)最初由 NASA 的 Ames 研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理,特别是满足高性能计算的需要,如集群系统、超级计算机和大规模并行系统。
PBS 的主要特点有:代码开放,免费获取;支持批处理、交互式作业和串行、多种并行作业,如 MPI、PVM、HPF、MPL;PBS 是功能最为齐全, 历史最悠久, 支持最广泛的本地集群调度器之一。
PBS 的目前包括 openPBS, PBS Pro 和 Torque三个主要分支. 其中 OpenPBS 是最早的 PBS 系统,目前已经没有太多后续开发, PBS pro 是PBS 的商业版本, 功能最为丰富. Torque 是 Clustering 公司接过了 OpenPBS, 并给与后续支持的一个开源版本。PBS 主要有如下特征:
1) 易用性:为所有的资源提供统一的接口,易于配置以满足不同系统的需求, 灵活的作业调度器允许不同系统采用自己的调度策略。
2) 移植性:符合 POSIX 1003.2 标准,可以用于 shell 和批处理等各种环境。
3) 适配性:可以适配与各种管理策略,并提供可扩展的认证和安全模型。支 持广域网上的负载的动态分发和建立在多个物理位置不同的实体上的虚 拟组织。
4) 灵活性:支持交互和批处理作业。torque PBS 提供对批处理作业和分散的计算节点(Compute nodes)的控制。
并行编程模型
消息传递接口(Message Passing Interface, MPI),MPI 是一种基于消息传递的并行编程技术。MPI 程序是基于消息传递的并行程序。消息传递指的是并行执行的各个进程具有自己独立的堆栈和代码段,作为互不相关的多个程序独立执行,进程之间的信息交互完全通过显示地调用通信函数来完成。
1) MPI 是一个库,而不是一门语言。
2) MPI 是一种标准或规范的代表,而不特指某一个对它的具体实现,迄今为止,所有的并行计算机制造商都提供对 MPI 的支持,可以在网上免费得到 MPI 在不同并行计算机上的实现,一个正确的 MPI 程序可以不加修改地在所有的并行机上运行。
3) MPI 是一种消息传递编程模型,并成为这种编程模型的代表。事实上,标准 MPI虽然很庞大,但是它的最终目的是服务于进程间通信这一目标。常见 MPI 类型有以下几类:
1) OpenMPI
OpenMPI 是一种高性能消息传递库,它是 MPI-2 标准的一个开源实现,由一些科研机构和企业一起开发和维护。因此,OpenMPI 能够从高性能社区中获得专业技术、工业技术和资源支持,来创建最好的 MPI 库。OpenMPI 提供给系统和软件供应商、程序开发者和研究人员很多便利。易于使用,并运行本身在各种各样的操作系统,网络互连,以及一批/调度系统。
2) Intel MPI
Intel MPI 是 Intel 编译器中支持的 MPI 版本。
3) MPICH
MPICH 是 MPI 标准的一种最重要的实现,可以免费从网上下载。MPICH 的开发与 MPI规范的制订是同步进行的,因此 MPICH 最能反映 MPI 的变化和发展。MPICH 的开发主要是由 Argonne National Laboratory 和 Mississippi State University 共同完成的,在这一过程中 IBM 也做出了自己的贡献,但是 MPI 规范的标准化工作是由 MPI 论坛完成的。MPICH 是 MPI 最流行的非专利实现,由Argonne 国家实验室和密西西比州立大学联合开发,具有更好的可移植性。相关下载地址:http://www.mpich.org/
4) Mvapich
MVAPICH 是 VAPI 层上 InfiniBand 的 MPI 的缩写,它充当着连接消息传递接口(MPI 和被称作VAPI 的 InfiniBand 软件接口间的桥梁,也是 MPI 标准的一种实现。InfiniBand 是“无限带宽”的缩写,这是一种新的支持高性能计算系统的网络架构。OSU(Ohio State University)超级计算机中心的科学家彼特于 2002 年开发出 MVAPICH 前,InfiniBand 和 MPI 是不兼容的。