Skip to content

PyTorch on HPC Clusters

参考来自 Princeton Research Computing 的文章

安装

注意

这篇教程默认你已经登录到集群
请确定已在集群环境中已安装 Anaconda3 环境
public_cluster 通过 slurm 调度

在 conda 环境下,安装 PyTorch

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

Example GPU Job

下载数据

示例将展示如何在一个 Cluster 上跑一个简单的 PyTorch 脚本。我们将会用 MNIST 数据集训练一个简单的 CNN 网络。

git clone https://github.com/PrincetonUniversity/install_pytorch.git
cd install_pytorch

这会创建一个叫做 install_pytorch 的文件夹在你的用户目录,它包含我们跑这个示例需要的文件。计算集群不会联网,所以我们在控制节点必须准备好所有需要的资源。

python download_mnist.py

编写 slurm 脚本

示例脚本如下

#!/bin/bash
#SBATCH --job-name=torch-test    # 提交的作业的名字
#SBATCH --nodes=1                # 使用的节点数
#SBATCH --ntasks=1               # 给予所有节点的总任务数
#SBATCH --cpus-per-task=1        # 每个任务的 cpu 核心数 (>1 if multi-threaded tasks)
#SBATCH --gres=gpu:8             # 每个节点的 gpu 数
#SBATCH --time=00:05:00          # 时间限制 (HH:MM:SS)

. ~/.bashrc                      # 重要:配置环境,sbatch 不会自动配置 bash 环境
python ~/install_pytorch/mnist_classify.py --epochs=3

重要

time 必须设定足够,否则 time 截止时,任务会强制被结束

你可以使用以下命令监视你的任务的状态

squeue -u $USER

一旦任务开始,你将会得到一个 slurm-xxxxx.out 的文件在 install_pytorch 下。

这份文件包含了 PyTorch 和 slurm 的输出。

注意

slurm-xxxxx.out 文件名中 xxxxx 为你当前提交的作业的 id

取消作业

可以通过 scancel 的命令停止作业

scancel jobid

查看所有节点状态

sinfo -Nl

输入上述指令可以通过 slurm 查看所有节点状态,得到以下结果。

NODELIST   NODES PARTITION       STATE CPUS    S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON              
gpu1           1      gpu*        idle   40   40:1:1      1        0      1   (null) none                
gpu2           1      gpu*        idle   40   40:1:1      1        0      1   (null) none     

查看运行节点的状态

一旦提交了一个作业,作业正在运行,你便可以通过查看所有节点状态知道你的作业运行在的一个或多个节点。这些节点可以被登录。

例如你的作业运行在 gpu1 节点,即可使用命令登录节点。

ssh gpu1

查看该节点的运行情况

例如输入

nvidia-smi

可以查看 NVIDIA GPU 的利用率