计算集群使用流程
计算集群中由多台GPU和CPU以及存储器组成数个计算节点,使用时需要通过SLURM调度系统向服务器申请占用哪一块GPU资源,当申请到空闲资源时才能开始运行代码。
这一过程涉及到的操作有:
- 网络连接:本地主机连接到远程服务器,可通过xshell模拟远程linux终端环境
- 数据传输:将程序文件上传到远程服务器用户空间下,可通过xftp实现windows和远程linux系统之间的文件传输
- 环境配置:使用Anaconda/Miniconda实现不同程序包的管理,便于为不同算法切换所依赖的程序包
- 申请资源、提交任务:通过编写shell脚本,设置申请的GPU具体参数等作业信息
- 查看作业:实时查看当前作业占用资源、进度等
xshell、xftp的安装:
Linux系统开发学习常用软件安装及遇到的问题汇总(ubuntu/xshell/xftp)-CSDN博客
以下就具体操作详细说明:
1.网络连接:
通过xshell软件ssh协议连接远程服务器
连接成功后可以看到此时作为服务器的登陆节点,不允许直接运行代码,需要先通过slurm调度器命令申请GPU资源后才可以。
连接成功后就可以使用linux命令进行操作了,常用linux命令见下文
2.数据传输:
使用xftp,非常方便
3.环境配置:
以yolov5为例,使用miniconda作为环境管理软件(和anaconda差不多)
为什么要使用conda:
不同的算法如yolo、transformer、不同版本下每个程序所依赖的python版本、cuda、pytorch版本可能都不同,那就给每个算法单独创建一个依赖的程序包,里面下载好其对应的python、pytorch库,这样运行不同算法时,只需要切换相应的环境就能运行。Anaconda就是这样的管理软件,通过conda命令进行环境的创建、激活、下载程序包等等操作。
miniconda的安装:
轻快小miniconda3在linux下的安装配置-centos9stream-Miniconda3 Linux 64-bit-CSDN博客
公共环境下已安装miniconda3,可以直接使用,不过保险起见还是在个人目录下再安装一个自用
使用公共目录已安装 conda 软件,加载下面的环境变量:
source /share/apps/miniconda3/etc/profile.d/conda.sh
个人版本的安装:
sh文件下载:在xshell中下载sh文件到当前目录
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
运行sh文件安装到指定目录
sh Miniconda3-latest-Linux-x86_64.sh -p ./apps/miniconda3
conda的使用:
切换conda路径(当有多个conda时,要注意配置环境变量到我们的路径下)
source /share/home/tj04086/apps/miniconda3/etc/profile.d/conda.sh
这时候已经到了个人的conda环境中
环境配置流程:
新建一个环境yolov5 : conda create -n yolov5 python == 3.9
激活环境: conda activate yolov5
查看环境 : conda list
配置conda下载源(提升下载速度):
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
进入yolov5-master目录
从requirements.txt配置环境 : pip install -r requirements.txt
除此之外还需安装pytorch、cuda、torchvision等,注意要与GPU的CUDA版本对应,这里是CUDA12.1
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
cuda、pytorch版本对应关系
Previous PyTorch Versions | PyTorch
环境配置参考:
yolov5环境搭建与pytorch中torch、torchvision、torchaudio安装_yolov5环境配置pycharm-CSDN博客
Ubuntu20.04|22.04下,从零开始配置yolov5环境,适合小白,每一步带图 - 知乎 (zhihu.com)
4.申请资源/提交任务:
使用的是slurm作业调度系统,相关操作参考:
小白使用超算slurm作业调度系统提交作业(看完这篇就够了)_超算脚本提交参数-CSDN博客
Slurm 作业调度系统使用指南_slurm查看节点状态-CSDN博客
作业shell脚本编写:
Linux系统中sh脚本编写_linux sh脚本-CSDN博客
Linux脚本shell的编写_sh文件怎么编写-CSDN博客
进入yolov5目录 : cd ./data/yolov5-master
使用conda:source /share/home/tj04086/apps/miniconda3/etc/profile.d/conda.sh
激活环境 : conda activate yolov5
以上三行可以放在sh脚本中,每次提交任务都自动执行,我是手动操作
创建sh文件:touch submit.sh
编辑sh文件:vim submit.sh
申请资源:(编写sh脚本)
#!/bin/bash
#SBATCH --job-name=test
#SBATCH --partition=A800
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=6
#SBATCH --gres=gpu:a800:1
#SBATCH --mail-type=end
#SBATCH --mail-user= n17852326702@163.com
#SBATCH --output=%j.out
#SBATCH --error=%j.err
echo $CUDA_VISIBLE_DEVICES
srun python train.py
然后保存此sh文件
提交任务:sbatch submit.sh
此外需要修改一下submit.sh的文件权限:chmod 777 submit.sh
提交任务之后就会先申请资源,申请到GPU就开始执行train.py开始训练
5.作业查看:
申请到GPU后,若要查看作业情况,需从当前登陆节点ssh到当前计算节点,如ssh gpu8001,具体申请到哪一个gpu可以通过squeue查看当前作业分配的节点和job-id
登录到gpu节点后,可通过top、sinfo、nvidia-smi等命令查看gpu使用情况