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)。

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的使用方式

基于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算子形式,大大减少人力投入,降低了转换错误率。

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