目录
目录README.md

超算招新题目文档

参赛者:姜澜 提交时间:2025年10月14日 邮箱:jianglan23@nudt.gfkd.cn Gitlink 仓库地址:Huster/超算招新题目 | GitLink


第一题:Linux环境搭建

任务背景

高性能计算依赖于稳定可控的运行环境。本任务旨在搭建一个可用于后续HPC实验的Rocky Linux平台。

任务完成情况

  • 使用 VMware 创建虚拟机;

  • 安装 **Rocky Linux 8.10 Minimal ISO (x86-64)**;

  • 环境配置.png

  • 成功安装git,vim,make,gcc等必要组件。

  • 对于网络连接不上,需要手动打开端口

    sudo nmcli device connect ens33

环境验证

image-20251009215843609


第二题:基准测试

任务背景

通过运行HPCG基准测试,评估平台性能,理解HPC软件栈运行机制。

安装与运行HPCG

  1. 下载HPCG源码以及mpich并行环境,安装并编译;

    首先git下载源码

    git clone https://github.com/hpcg-benchmark/hpcg.git

    接着进行编译

    make arch=Linux_MPI

    注意使用vim修改Linux_MPI中的HPCG的文件夹地址以及MPICH并行环境的编译器地址。

  2. 配置测试参数(hpcg.dat);

    16 16 16
    15

    参数如上,其中16,16,16代表三维网格的XYZ尺寸,15代表运行时间。

  3. 执行测试,记录结果。

    image-20251010091856875

    mpiexec -np 2 ./xhpcg 

    其中如果测试规模或者线程开太多会导致OOM,应该是虚拟机性能上限的问题。

测试结果

image-20251010154456649

  • HPCG性能:2.18796 GFLOPS(考虑收敛和优化阶段开销后)

  • 理论峰值性能:166.4GFLOPS

    • 计算过程如下 ,其中N代表核心数,f代表核心时钟频率,n代表每个周期进行的浮点运算数量。我使用的机器CPU为13th Gen Intel(R) Core(TM) i7-13650HX,基础的CPU频率为2.60GHz。Ppeak=N×f×n=2×2.6G×512bit/64bit×2FMA×2M/A=166.4GFLOPSP_{peak}=N×f×n\\ =2×2.6G×512bit/64bit×2FMA×2M/A\\ =166.4 GFLOPS
  • 效率:1.32%(为上面两种性能相除)

分析与理解

  • 首先Linpack是国际上流行的用于测试高性能计算机系统浮点性能的benchmark,具体内容是用高斯消元法求解N元一次稠密线性代数方程组的测试,其中包含三种测试:inpack100、Linpack1000和HPL;接着HPCG,即高度共轭梯度基准测试,使用的是更复杂的微分方程计算方式,Linpack更考验超算的处理器理论性能,而HPCG更看重实际性能,对内存系统、网络延迟要求也更高,所以超算测出来的HPCG性能要比Linpack性能低得多。
  • 效率较低可能源于内存带宽,如上图所示Raw Read,Write,Total的数值较低,其次在笔记本能耗模式不同情况下,给CPU供电的电源计划不同,会导致效率出现变化。

第三题:DAOS配置

任务背景

DAOS是一种面向HPC和AI训练的高性能分布式对象存储系统。

配置过程

  1. 首先下载DAOS仓库配置

    sudo wget -O /etc/yum.repos.d/daos-packages.repo https://packages.daos.io/v2.0/EL8/packages/x86_64/daos_packages.repo

    然后安装客户端

    sudo dnf install -y daos-server
  2. 使用文件模拟NVMe设备;

    加载NVMe模拟模块:

    sudo modprobe nvme-loop

    image-20251010200411943

    创建虚拟 NVMe 设备:

    sudo dd if=/dev/zero of=/nvme1.img bs=1G count=5 #创建一个5GB的虚拟NVMe设备文件

    挂载并使用虚拟磁盘

    sudo mkdir -p /mnt/nvme1
    sudo mount /dev/loop0 /mnt/nvme1
  3. 配置POSIX兼容接口;

    我使用dmg指令来创建存储池,但显示安全证书不通过,我修改了安全证书但没有作用。

  4. 使用 fio 进行读写测试。

    image-20251010202646960

    参数名称如下

    • --name=sequate:测试作业的名称。
    • --filename=/mnt/nvme1/testfile:指定测试文件的路径,存储在 NVMe 设备挂载点下。
    • --rw=write:测试写操作
    • --bs=4k:IO 操作的 块大小 为 4KB。
    • --size=1g:测试文件的总大小为 1GB。
    • --numjobs=1:启动的并行作业数为 1。
    • --runtime=60:测试运行时间为 60 秒。

fio测试结果

  • 随机读:7880 IOPS(带宽平均约 30.8 MiB/s,延迟平均约 2026 微秒)

  • 随机写:9630 IOPS(带宽平均约37.6 MiB/s,延迟平均约1658 微秒)

  • 顺序读/写带宽:515 MB/s

    image-20251010231418247

DAOS性能优势分析

  • 异步I/O架构支持高并发;原生利用NVMe SSD,降低延迟;对象存储模型更适合大规模数据访问。

第四题:大语言模型推理引擎优化

任务背景

大语言模型推理对计算和内存要求极高,需通过优化提升效率。

初始性能分析

  • 使用给定CPU推理引擎运行模型;

    首先参考readme的流程,安装miniconda用于创建虚拟环境,接着通过requirements.txt安装依赖

    image-20251010221656352

  • 使用测试语句进行测试发现makefile中存在C++20与g++版本不匹配,所以修改更新g++版本

    conda install -c conda-forge gxx_linux-64=11.4.0

    重新make clean 清除缓存后可以运行

    ./build/main model.yalm -i "Q: What is the meaning of life?"

​ 结果非常缓慢

image-20251010225448470

image-20251010230100132

优化措施

  • 使用 OpenMP 进行多线程并行;

    需要在编译阶段通过编译器选项开启 OpenMP 支持,即修改makefile,但在检查makefile后发现已经开启了OpenMP

  • 采用最高指令集(实际发现可以使用avx512f)用来加速,不同指令集支持的单次浮点运算数量不同,直接决定峰值 FLOPS 的计算。

    CFLAGS += -march=native - # 自动识别并使用当前CPU支持的最高SIMD指令集

    image-20251010230839652

  • 通过阅读官方的模型卡片发现无需使用所给的model.cpp及相关推理引擎的代码,可以使用huggingface支持的模版推理引擎,并且同时开启cuda进行推理。

    image-20251011154533182

优化后性能

  • 推理速度提升:6000 %

理论性能计算

  • 公式如上述所示

    Ppeak=N×f×n=32×2.3G×32=2355.2GFLOPSP_{peak}=N×f×n\\ =32×2.3G×32\\ =2355.2 GFLOPS

    image-20251011155016305

  • 当前优化后性能达到理论值的 12.5%。


第五题:个人经历介绍

个人意向书

我是姜澜,计算机学院大三学员,目前是AIBD专业。我对高性能计算与系统软件有浓厚兴趣,曾在陈娟老师的项目组完成一项省级大创,获得一项编译选项组合优化的专利,有论文撰写的经历(虽然后来没有发表),曾获得美国数学建模国际一等奖。

期待能在超算团队中深入学习,为我国高性能计算事业贡献力量。

关于
515.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号