Skip to content

HPC技术

Kruft: Linux集群快速部署软件工具

大规模科学与工程应用计算需要强大的算力资源支撑,计算机集群是将一组松散的计算机硬件和软件连接起来,高度紧密地协作完成计算工作的一种计算机系统,实现了算力、存储等资源的整合,称为高性能计算(HPC)集群,也可抽象为一台超级计算机,主要用于大规模科学与工程应用计算。每年都会进行全球超级计算机Top 500性能排名,其中大部分部署Linux操作系统。Linux集群需协调多个节点的Linux系统,有多用户统一认证、分布式存储聚合、作业统一调度等需求,对计算效率和系统稳定性有很高的要求,部署过程繁琐,技术挑战性大。

我们研发了一套Linux集群快速部署软件工具Kruft,覆盖了Linux集群大部分需求,提供

  • 节点自动安装:节点依PEX自动接入,节点按登录、计算和存储分类,基于Rocky Linux
  • 网络互联配置:infiniband等高速网络与以太网共存、防火墙配置,SSH和HTTP服务配置
  • 整合文件存储:NFS共享分区、GlusterFS分布式分区,Module共享软件管理、Conda系统env、Ollama终端访问
  • 异构计算部署:CUDA本地Driver+共享SDK,Conda内置CUDA SDK
  • 用户统一认证:内部节点免密码登录(NIS/OpenLDAP),Slurm-PAM,命名规范
  • 作业调度系统:统一安装munge、UCX、OpenMPI和Slurm软件包,Docker与Singularity共存
  • 并发命令执行:pdsh、pdcp配合rsync、ansible等工具
  • 日志监视预警:rlog管理、Gangia性能采集+Nagios事件预警

Kruft名字来源于英文单词craft(技艺)的发音,表示对计算机集群的精心打造之意。Kruft的设计目标是:资源整合、软件共享、用户统一管理,可复现、可更新、简化使用。 相比于Rocks Cluster、Xcat、Open-HPC等开源集群管理软件,Kruft的优势在于开放简洁而可复现,易于调试而达到最大系统稳定性。

Kruft工具成功应用于国科大TCB集群建设 http://tcb.ucas.ac.cn/cluster

Optisight: 程序性能分析工具集成平台

程序性能分析是一个系统性复杂工作,涉及程序本身代码级和运行时的分析,系统运行环境决定了程序运行性能的上限。”工欲善其事,必先利其器“。 Optisight工具提供了大量系统性能的基准测试(benchmark)程序集,同时也提供大量针对程序性能的剖分工具(profile)。 Optisight集成了常用性能剖分工具和基准测试软件工具,实现一键更新和安装部署;同时提供程序编程接口,用于辅助程序调优。如HUPTracer模块可直接插入用户代码获取函数堆栈信息,对程序模块调用逻辑分析非常重要。它只含一个C++头文件hup_tracer.h,直接插入用户代码中即可用,也不用修改重新编译的依赖关系。

Optisight名字含义是为优化(optimize)程序提供洞察力和视野(sight)。

Hupy file list

Hup: 异构计算统一编程库

Hup(Heterogeneous Unified Programing)设计目的主要是实现一个轻量级异构计算统一编程框架,提供系统之上的抽象层实现,屏蔽底层的差异性。 涉及模块有

  • GPU CUDA/HIP,实现上层可调用的device_vector等类(类关系图如下)
  • 处理器配置信息,cpuid.h只支持x86和amd体系,node_info支持系统的配置信息获取,包括内存、处理器、网络等信息。
  • 通讯模块, 类MPI分布式通信,除了标准的MPI接口,还集成了串行的stub_mpi和多核的thread_mpi版本。三种可以使用基本相同的接口。
  • 计时器,抽象基类timer.h,实现mpi_timer,gpu_timer等具体子类
  • 文件序列化, hup/serialization是header only的设计,从hps库改造而来,使用的序列化算法一致,在C++设计和使用上不同,更倾向boost和cereal的使用方式

memory management on GPU device

基于LLVM编译框架的工具研发

LLVM (low level virtual machine)项目是一个开源强大的编译器设计框架。编译过程的前后端分离,中间提供大量的编译优化空间。 Clang(发音是/ˈklæŋ/)是基于LLVM的C/C++编译器前端。

  • OpWrapper: DDQ算子封装器

本课题在研究DDQ算子并行计算调度框架时,发现手动构建DDQ 算子比较繁琐,容易出错,有很多封装过程有冗余,适合程序自动封装。 于是基于LLVM软件框架,我们实现了一个DDQ算子封装器OpWrapper,它可以识别C/C++的头文件和实现文件,将C/C++风格的函数调用自动DDQ算子化。 OpWrapper 0.x代码实现基于libclang库,为了简便起见使用其python包装形式,它可以分析目标代码块的AST树,算子自动封装器识别出算子之后,自动建立算子头封装,函数参数封装并建立参数传递。 OpWrapper 1.x版本将直接基于LLVM 面向对象框架设计,实现更高质量的转码操作。借助OpWrapper可实现批量C/C++函数转换DDQ算子形式,大大减少人力投入,降低了转换错误率。

Opwrapper based on LLVM

本课题组还在研究基于LLVM的TVM AI编译优化器和结合机器学习的自动调优技术,欢迎感兴趣的朋友一起交流讨论。