如何 运行 Slurm 上的 Pytorch 脚本?
How to run Pytorch script on Slurm?
我正在努力使用基本的 python 脚本,该脚本使用 Pytorch 在 Slurm 上打印 CUDA 设备。
这是 sinfo
的输出。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ sinfo -o "%.10P %.5a %.10l %.6D %.6t %.20N %.10G"
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST GRES
compute* up 3-00:00:00 1 drain* scs0123 (null)
compute* up 3-00:00:00 1 down* scs0050 (null)
compute* up 3-00:00:00 120 alloc scs[0001-0009,0011-0 (null)
compute* up 3-00:00:00 1 down scs0010 (null)
developmen up 30:00 1 drain* scs0123 (null)
developmen up 30:00 1 down* scs0050 (null)
developmen up 30:00 120 alloc scs[0001-0009,0011-0 (null)
developmen up 30:00 1 down scs0010 (null)
gpu up 2-00:00:00 2 mix scs[2001-2002] gpu:v100:2
gpu up 2-00:00:00 2 idle scs[2003-2004] gpu:v100:2
accel_ai up 2-00:00:00 1 mix scs2041 gpu:a100:8
accel_ai up 2-00:00:00 4 idle scs[2042-2045] gpu:a100:8
accel_ai_d up 2:00:00 1 mix scs2041 gpu:a100:8
accel_ai_d up 2:00:00 4 idle scs[2042-2045] gpu:a100:8
accel_ai_m up 12:00:00 1 idle scs2046 gpu:1g.5gb
s_highmem_ up 3-00:00:00 1 mix scs0151 (null)
s_highmem_ up 3-00:00:00 1 idle scs0152 (null)
s_compute_ up 3-00:00:00 2 idle scs[3001,3003] (null)
s_compute_ up 1:00:00 2 idle scs[3001,3003] (null)
s_gpu_eng up 2-00:00:00 1 idle scs2021 gpu:v100:4
我可以访问 accel_ai 分区。
这是我正在尝试 Python 的文件 运行。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ cat gpu.py
import torch
print(torch.__version__)
print(f"Is available: {torch.cuda.is_available()}")
try:
print(f"Current Devices: {torch.cuda.current_device()}")
except :
print('Current Devices: Torch is not compiled for GPU or No GPU')
print(f"No. of GPUs: {torch.cuda.device_count()}")
这是我提交作业的 bash 文件。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ cat check_gpu.sh
#!bin/bash
#SBATCH --nodes=1
#SBATCH --time=00:00:40
#SBATCH --ntasks=1
#SBATCH --job-name=gpu
#SBATCH --output=gpu.%j.out
#SBATCH --error=gpu.%j.err
#SBATCH --mem-per-cpu=10
#SBATCH --gres=gpu:1
#SBATCH --account=scs2045
#SBATCH --partition=accel_ai
module load CUDA/11.3
module load anaconda/3
source activate
conda activate ml
python gpu.py
这就是我 运行 使用 bash 脚本提交作业时发生的情况。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ bash check_gpu.sh
1.11.0
Is available: False
Current Devices: Torch is not compiled for GPU or No GPU
No. of GPUs: 0
有一件事我想澄清一下,这个 Pytorch 版本是从 Pytorch 的网站上附带的 CUDA 11.3。
谁能告诉我,我做错了什么?
另外,这里即使我排除了这些行,输出也是一样的。
module load CUDA/11.3
module load anaconda/3
source activate
conda activate ml
根据您的 sinfo
,您有单独的分区可以访问 gpu。您需要 运行 您的程序在其中之一上。作业提交脚本可以修改如下。您还需要使用 --gres
.
指定 gpu 类型
...
...
#SBATCH --partition=gpu
#SBATCH --gres=<Enter gpu type>
...
...
我的方法有几个错误。在作业文件中,第一行应该是 #!/bin/bash
而不是 #!bin/bash
.
此外,Slurm 有一个特殊的命令 SBATCH
来提交您的作业文件。所以为了 运行 你的工作文件,例如 check_gpu.sh
,我们应该使用 sbatch check_gpu.sh
而不是 bash check_gpu.sh
.
我得到以下输出的原因是 bash 认为 #
是评论。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ bash check_gpu.sh
1.11.0
Is available: False
Current Devices: Torch is not compiled for GPU or No GPU
No. of GPUs: 0
因此,只有以下几行从作业脚本中执行。
module load CUDA/11.3
module load anaconda/3
source activate
conda activate ml
python gpu.py
更正后,我 运行 作业脚本,它按预期工作。
[s.1915438@sl1 pytorch_gpu_check]$ sbatch check_gpu.sh
Submitted batch job 7133028
[s.1915438@sl1 pytorch_gpu_check]$ cat gpu.7133029.out
1.11.0
Is available: True
Current Devices: 0
No. of GPUs: 1
GPU Name:NVIDIA A100-PCIE-40GB
[s.1915438@sl1 pytorch_gpu_check]$ cat gpu.7133029.err
我正在努力使用基本的 python 脚本,该脚本使用 Pytorch 在 Slurm 上打印 CUDA 设备。
这是 sinfo
的输出。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ sinfo -o "%.10P %.5a %.10l %.6D %.6t %.20N %.10G"
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST GRES
compute* up 3-00:00:00 1 drain* scs0123 (null)
compute* up 3-00:00:00 1 down* scs0050 (null)
compute* up 3-00:00:00 120 alloc scs[0001-0009,0011-0 (null)
compute* up 3-00:00:00 1 down scs0010 (null)
developmen up 30:00 1 drain* scs0123 (null)
developmen up 30:00 1 down* scs0050 (null)
developmen up 30:00 120 alloc scs[0001-0009,0011-0 (null)
developmen up 30:00 1 down scs0010 (null)
gpu up 2-00:00:00 2 mix scs[2001-2002] gpu:v100:2
gpu up 2-00:00:00 2 idle scs[2003-2004] gpu:v100:2
accel_ai up 2-00:00:00 1 mix scs2041 gpu:a100:8
accel_ai up 2-00:00:00 4 idle scs[2042-2045] gpu:a100:8
accel_ai_d up 2:00:00 1 mix scs2041 gpu:a100:8
accel_ai_d up 2:00:00 4 idle scs[2042-2045] gpu:a100:8
accel_ai_m up 12:00:00 1 idle scs2046 gpu:1g.5gb
s_highmem_ up 3-00:00:00 1 mix scs0151 (null)
s_highmem_ up 3-00:00:00 1 idle scs0152 (null)
s_compute_ up 3-00:00:00 2 idle scs[3001,3003] (null)
s_compute_ up 1:00:00 2 idle scs[3001,3003] (null)
s_gpu_eng up 2-00:00:00 1 idle scs2021 gpu:v100:4
我可以访问 accel_ai 分区。
这是我正在尝试 Python 的文件 运行。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ cat gpu.py
import torch
print(torch.__version__)
print(f"Is available: {torch.cuda.is_available()}")
try:
print(f"Current Devices: {torch.cuda.current_device()}")
except :
print('Current Devices: Torch is not compiled for GPU or No GPU')
print(f"No. of GPUs: {torch.cuda.device_count()}")
这是我提交作业的 bash 文件。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ cat check_gpu.sh
#!bin/bash
#SBATCH --nodes=1
#SBATCH --time=00:00:40
#SBATCH --ntasks=1
#SBATCH --job-name=gpu
#SBATCH --output=gpu.%j.out
#SBATCH --error=gpu.%j.err
#SBATCH --mem-per-cpu=10
#SBATCH --gres=gpu:1
#SBATCH --account=scs2045
#SBATCH --partition=accel_ai
module load CUDA/11.3
module load anaconda/3
source activate
conda activate ml
python gpu.py
这就是我 运行 使用 bash 脚本提交作业时发生的情况。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ bash check_gpu.sh
1.11.0
Is available: False
Current Devices: Torch is not compiled for GPU or No GPU
No. of GPUs: 0
有一件事我想澄清一下,这个 Pytorch 版本是从 Pytorch 的网站上附带的 CUDA 11.3。
谁能告诉我,我做错了什么? 另外,这里即使我排除了这些行,输出也是一样的。
module load CUDA/11.3
module load anaconda/3
source activate
conda activate ml
根据您的 sinfo
,您有单独的分区可以访问 gpu。您需要 运行 您的程序在其中之一上。作业提交脚本可以修改如下。您还需要使用 --gres
.
...
...
#SBATCH --partition=gpu
#SBATCH --gres=<Enter gpu type>
...
...
我的方法有几个错误。在作业文件中,第一行应该是 #!/bin/bash
而不是 #!bin/bash
.
此外,Slurm 有一个特殊的命令 SBATCH
来提交您的作业文件。所以为了 运行 你的工作文件,例如 check_gpu.sh
,我们应该使用 sbatch check_gpu.sh
而不是 bash check_gpu.sh
.
我得到以下输出的原因是 bash 认为 #
是评论。
(ml) [s.1915438@sl2 pytorch_gpu_check]$ bash check_gpu.sh
1.11.0
Is available: False
Current Devices: Torch is not compiled for GPU or No GPU
No. of GPUs: 0
因此,只有以下几行从作业脚本中执行。
module load CUDA/11.3
module load anaconda/3
source activate
conda activate ml
python gpu.py
更正后,我 运行 作业脚本,它按预期工作。
[s.1915438@sl1 pytorch_gpu_check]$ sbatch check_gpu.sh
Submitted batch job 7133028
[s.1915438@sl1 pytorch_gpu_check]$ cat gpu.7133029.out
1.11.0
Is available: True
Current Devices: 0
No. of GPUs: 1
GPU Name:NVIDIA A100-PCIE-40GB
[s.1915438@sl1 pytorch_gpu_check]$ cat gpu.7133029.err