PyTorch¶
简介¶
PyTorch 是一个 Python 优先的深度学习框架,也是使用 GPU 和 CPU 优化的深度学习张量库,能够在强大的 GPU 加速基础上实现张量和动态神经网络。同时,PyTorch 主要为开发者提供两种高层面的功能:
1.使用强大的 GPU 加速的 Tensor 计算(类似 numpy);
2.构建 autograd 系统的深度神经网络。
通常,人们使用 PyTorch 的原因通常有二:
- 作为 numpy 的替代,以便使用强大的 GPU;
- 将其作为一个能提供最大的灵活性和速度的深度学习研究平台
超算上的 PyTorch
超算上可用 miniconda 自行安装 PyTorch,也可用已预置的 NVIDIA 提供的 NGC 镜像 pytorch-1.6.0(性能更好)。
版本 | 平台 | 构建方式 | 名称 |
---|---|---|---|
1.6.0 | GPU | 容器 | /lustre/share/singularity/modules/pytorch/1.6.0.sif |
1.6.0 | GPU | 容器 | /dssg/share/imgs/pytorch/1.6.0.sif |
使用 miniconda 安装 PyTorch
创建名为 pytorch-env 的虚拟环境,激活虚拟环境,然后安装 pytorch
$ module load miniconda3
$ conda create -n pytorch-env
$ source activate pytorch-env
$ conda install pytorch torchvision -c pytorch
提交 PyTorch 作业
示例:在 DGX-2 及 A100 上均可使用 pytorch。作业使用单节点,分配 2 块 GPU,GPU:CPU 配比 1:6。脚本名称可设为 slurm.test。
在DGX-2队列上提交pytorch作业:
#!/bin/bash
#SBATCH -J test
#SBATCH -p dgx2
#SBATCH -o %j.out
#SBATCH -e %j.err
#SBATCH -N 1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=12
#SBATCH --gres=gpu:2
module load miniconda3
source activate pytorch-env
python -c 'import torch; print(torch.__version__); print(torch.zeros(10,10).cuda().shape)'
在 A100 队列上提交 pytorch作业:
#!/bin/bash
#SBATCH -J test
#SBATCH -p a100
#SBATCH -o %j.out
#SBATCH -e %j.err
#SBATCH -N 1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=12
#SBATCH --gres=gpu:2
module load miniconda3
source activate pytorch-env
python -c 'import torch; print(torch.__version__); print(torch.zeros(10,10).cuda().shape)'
使用以下指令提交作业
$ sbatch slurm.test
以下 slurm 脚本,在 dgx2 队列上使用 2 块 gpu,并配比 12 cpu 核心。脚本名称可设为 slurm.test
#!/bin/bash
#SBATCH -J test
#SBATCH -p dgx2
#SBATCH -o %j.out
#SBATCH -e %j.err
#SBATCH -N 1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=12
#SBATCH --gres=gpu:2
module load pytorch/1.6.0
python -c 'import torch; print(torch.__version__); print(torch.zeros(10,10).cuda().shape)'
使用如下指令提交:
$ sbatch slurm.test
查看已编译的软件模块:
module use /dssg/share/imgs/
module av pytorch
调用该模块:
module load pytorch/1.6.0
以下 slurm 脚本,在 A100 队列上使用 2 块 gpu,并配比 12 cpu 核心。脚本名称可设为 slurm.test
#!/bin/bash
#SBATCH -J test
#SBATCH -p a100
#SBATCH -o %j.out
#SBATCH -e %j.err
#SBATCH -N 1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=12
#SBATCH --gres=gpu:2
module use /dssg/share/imgs/
module load pytorch/1.6.0
python -c 'import torch; print(torch.__version__); print(torch.zeros(10,10).cuda().shape)'
使用如下指令提交:
$ sbatch slurm.test
Pytorch单卡性能测试
算例下载:
$ git clone https://github.com/SJTU-HPC/HPCTesting.git
$ cd HPCTesting/pytorch-gpu-benchmark
DGX-2运行脚本:
#!/bin/bash
#SBATCH -p dgx2
#SBATCH -n 1
#SBATCH --ntasks-per-node 1
#SBATCH --cpus-per-task 6
#SBATCH --gres gpu:1
#SBATCH -N 1
singularity run --nv /lustre/share/singularity/modules/pytorch/1.6.0.sif python benchmark_models.py --folder v100 -w 10 -n 5 -b 32 -g 1 && &>/dev/null
A100运行脚本:
#!/bin/bash
#SBATCH -p a100
#SBATCH -n 1
#SBATCH --ntasks-per-node 1
#SBATCH --cpus-per-task 6
#SBATCH --gres gpu:1
#SBATCH -N 1
singularity run --nv /dssg/share/imgs/pytorch/1.6.0.sif python benchmark_models.py --folder a100 -w 10 -n 5 -b 32 -g 1 && &>/dev/null
DGX-2测试结果将被放在 v100 文件夹内,A100测试结果将被放在 a100 文件夹内,均为CSV格式。
单卡测试结果:
resnet18, resnet34, resnet50, resnet101, resnet152, resnext50_32x4d, resnext101_32x8d, wide_resnet50_2, wide_resnet101_2模型的平均batch耗时如下:
pytorch
partition | mode | precision | ms/batch |
---|---|---|---|
v100 | train | double | 471 |
v100 | train | float | 180 |
v100 | train | half | 91 |
v100 | inference | double | 148 |
v100 | inference | float | 63 |
v100 | inference | half | 26 |
a100 | train | double | 350 |
a100 | train | float | 78 |
a100 | train | half | 60 |
a100 | inference | double | 107 |
a100 | inference | float | 25 |
a100 | inference | half | 16 |
Pytorch双卡性能测试
$ git clone https://github.com/SJTU-HPC/HPCTesting.git
$ cd HPCTesting/pytorch-gpu-benchmark
DGX-2运行脚本:
#!/bin/bash
#SBATCH -p dgx2
#SBATCH -n 2
#SBATCH --ntasks-per-node 2
#SBATCH --cpus-per-task 6
#SBATCH --gres gpu:2
#SBATCH -N 1
singularity run --nv /lustre/share/singularity/modules/pytorch/1.6.0.sif python benchmark_models.py --folder v100 -w 10 -n 5 -b 16 -g 1 && &>/dev/null
A100运行脚本:
#!/bin/bash
#SBATCH -p a100
#SBATCH -n 2
#SBATCH --ntasks-per-node 2
#SBATCH --cpus-per-task 6
#SBATCH --gres gpu:2
#SBATCH -N 1
singularity run --nv /dssg/share/imgs/pytorch/1.6.0.sif python benchmark_models.py --folder a100 -w 10 -n 5 -b 16 -g 1 && &>/dev/null
DGX-2测试结果将被放在 v100 文件夹内,A100测试结果将被放在 a100 文件夹内,均为CSV格式。
双卡测试结果:
resnet18, resnet34, resnet50, resnet101, resnet152, resnext50_32x4d, resnext101_32x8d, wide_resnet50_2, wide_resnet101_2模型的平均batch耗时如下:
pytorch
partition | mode | precision | ms/batch |
---|---|---|---|
v100 | train | double | 289 |
v100 | train | float | 134 |
v100 | train | half | 79 |
v100 | inference | double | 102 |
v100 | inference | float | 56 |
v100 | inference | half | 38 |
a100 | train | double | 213 |
a100 | train | float | 68 |
a100 | train | half | 57 |
a100 | inference | double | 69 |
a100 | inference | float | 30 |
a100 | inference | half | 25 |
建议
A100 显卡的内存为40GB,而V100显卡内存为32GB。从测试结果也可以看出,A100无论是训练还是推理,在单精度、双精度、半精度的计算速度均大幅领先于 V100,推荐大家使用 A100队列提交pytorch作业。