0 前言
曙光超算平台是一款高性能、高可靠性和高可扩展性的超级计算机平台。它采用了自主研发的曙光超算架构,并采用国产GPU(即DCU),硬件基于ROCm平台。其核心技术包括:
- 曙光超算架构:采用高性能处理器和互连网络,实现超高速的数据传输和处理能力。
- 计算加速技术:支持GPU加速和FPGA加速,进一步提升计算性能和效率。
- 高可靠性设计:采用冗余设计和错误检测纠正技术,实现硬件故障自动切换和修复,保证计算任务的连续性。
- 可扩展性:支持多机房间级联,实现大规模计算任务的并行处理。
- 多编程模型和开发工具:提供多种编程模型和开发工具,方便用户进行软件开发和优化。
本文对中科曙光超算平台的使用进行介绍
- 环境搭建
1.1 pytorch 安装包安装记录
由于曙光云使用的是国产GPU(即DCU),硬件是基于ROCm的,因此不能适配PyTorch官网下载的包(无法调用DCU),因此只能使用曙光云平台提供的编译好的PyTorch包进行安装。切忌不能使用pip install torch==1.7.0 torchvision的命令直接安装,而应该选择曙光云本地提供的包进行安装。
本次安装基于python 3.9版本进行安装,pytorch版本为1.13.1
1.1.1 环境创建、依赖包安装
首先,和conda创建环境相同,创建py39环境,并激活环境
conda create -n env_py39 python=3.9
conda activate env_py39
1.1.2 本地安装pytorch1.13.1(由曙光编译好的版本)
查看本地whl包所在目录
其他所需用到GPU的whl包可以在相关目录下找到,例如这里的dtk-22.04.1,不同名称下对应不同依赖包版本
安装pytorch1.13.1
# 安装torch
pip install /public/software/apps/DeepLearning/whl/torch-1.13.1a0+git4c8a1fe.abi0.dtk2304-cp39-cp39-linux_x86_64.whl
除了与GPU相关的包(比如torch和torchvision),其他包可直接通过pip install从网上进行安装,无需曙光云本地提供。例如以下安装numpy(注意先激活环境)
# 安装numpy
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完毕后,可通过pip list所安装的包,到此步只是完成安装工作。
pip list
1.1.3 节点申请、环境变量配置(测试能否调用到dcu)
查看所在队列
whichpartition
申请并登录计算节点,进行测试
salloc -p kshdtest -N 1 -n 8 --gres=dcu:1
登录计算节点
# ssh 节点
ssh b02r1n02
切换rocm编译器版本(加载dtk23.04),跟后续使用GPU的关系很大
module switch compiler/rocm/dtk-23.04
在本地创建一个pytorch_env.sh的文件,添加环境变量
vi ~/pytorch_env.sh
export LD_LIBRARY_PATH=/public/software/apps/DeepLearning/PyTorch/lib:/public/software/apps/DeepLearning/PyTorch/lmdb-0.9.24-build/lib:/public/software/apps/DeepLearning/PyTorch/opencv-2.4.13.6-build/lib:/public/software/apps/DeepLearning/PyTorch/openblas-0.3.7-build/lib:$LD_LIBRARY_PATH
source ~/pytorch_env.sh
以后每次登录新的节点时,一定要执行一次source ~/pytorch_env.sh命令,这关系到服务器能不能找到PyTorch
1.1.4 测试pytorch是否可用
依次输入
python
import torch
torch.cuda.is_available()
torch.__version__
此时,pytorch正常安装,且显卡可用
其他未使用到gpu的依赖包通过pip install xxx安装即可
- 算子运行
2.1 算子包、模型、数据上传
可通过E-File将算子、模型、数据等上传。通常文件大小大于2G可通过快传操作(需下载快传客户端)上传文件夹,经测试,快传速度大概为10Mbps(大概为1.25mb/s)。注意的是,曙光服务器无法访问内网,其他包可以下载了上传进行安装。
文件快传
2.1.2 算子运行
2.1.2.1 方式一 提交交互式作业
终端进入对应目录,激活相关坏境,节点申请完毕后 类似后台执行,示例如下:
- 首先查看是否有空闲节点
sinfo
此时,看到有idle表示节点处于空闲状态,可申请资源使用
- 申请资源,方法可参考环境搭建中一系列流程
申请节点--source ~/pytorch_env.sh--激活环境
- 查看DCU状态
hy-smi
- 进入项目进行python xxx.py操作
该方式运行的前提是节点有所空闲,且终端不能关闭,一旦关闭则运行退出。
2.1.2.2 方式二 提交批处理作业(推荐)
用户使用sbatch命令提交作业脚本,其基本格式为sbatch jobfile。jobfile为作业脚本文件。在批处理作业脚本中,脚本第一行以"#!"字符开头,并指定脚本文件的解释程序,如sh,bash。接下来写作业使用到的调度系统参数,以#开头,最后写作业运行的程序命令。
示例脚本如下:
#!/bin/bash
#SBATCH -o bloom.out # 指定作业标准输出文件的名称
#SBATCH --partition=kshdtest # 表示将作业提交到kshdtest队列#SBATCH -J bloom_job # 作业名称,可在作业管理中看到
#SBATCH -n 16 # 作业申请的总cpu核心数
#SBATCH -N 1 # 作业申请的节点数
#SBATCH --gres=dcu:4 # 表示本作业使用的加速卡数量
#SBATCH --exclusive # 指定作业独占计算节点
module switch compiler/rocm/dtk-23.04 # 切换rocm编译器版本
source ~/pytorch_env.sh # 激活~/pytorch_env.sh
source activate env_py39 # 激活对应环境
cd ~/test/infer # cd到指定目录
python httptest.py # 执行脚本
更多常用选项可以参考如下链接:
定义好运行命令后,可执行
sbatch ~/bloom.sh
等待作业运行即可,若此时无空闲节点,则该作业处理排队中
排队处理
运行完成
可在网页作业管理中找到该作业运行的日志,详细信息等
- 性能测试报告
3.1 快捷指令
- Slurm命令
Slurm命令 | 功能 |
sinfo | 查看集群分区状态 |
squeue | 查看作业队列 |
srun, salloc | 交互式运行作业 |
sbatch | 提交作业 |
scancel | 取消作业 |
scontrol | 查看和修改作业参数 |
sacct | 查看已完成作业 |
- sinfo
sinfo #查看所有分区状态
sinfo -a #查看所有分区状态
sinfo -N #查看节点状态
sinfo -n node-name #查看指定节点状态
sinfo --help #查看sinfo的说明
- 节点状态
alloc | idle | mix | down | drain |
节点在用 | 节点可用 | 部分占用 | 节点下线 | 节点故障 |
- Squeue
squeue #查看运行中的作业列表
squeue -l #查看列表细节信息
squeue -j job-id #查看运行中作业信息
squeue -u username #查看user所有运行中的作业
- 作业状态
R | PD | CG | CD |
正在运行 | 正在排队 | 即将完成 | 已完成 |
- 查看显存使用情况
rocm-smi
3.2 推理性能测试报告
测试脚本选用了belle-bloom-560m模型、100条测试数据进行推理,显存占用和推理时间如下
中科曙光配置
服务器 | 模型 | 显存占用 | 服务器 | 内存占用 | 平均推理时间 | 总耗时 |
DCU | belle-bloom-560m | 16G42%-88% | DCU | 2.5G | 11.77s | 1177.19s |
结果