Skip to content

Latest commit

 

History

History

PyTorch

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

NGC PyTorch ResNet50V1.5 性能测试

此处给出了基于 NGC PyTorch 实现的 ResNet50V1.5 任务的详细复现流程,包括环境介绍、环境搭建、复现脚本、测试结果和测试日志等。

目录

一、环境介绍

1.物理机环境

我们使用了与Paddle测试完全相同的物理机环境:

  • 单机V100(单卡、8卡)

    • 系统:CentOS release 7.5 (Final)
    • GPU:Tesla V100-SXM2-32GB * 8
    • CPU:Intel(R) Xeon(R) Gold 6271C CPU @ 2.60GHz * 80
    • Driver Version: 525.60.11
    • 内存:630 GB
  • 单机A100(单卡、8卡)

    • 系统:CentOS release 7.5 (Final)
    • GPU:NVIDIA A100-SXM4-40GB * 8
    • CPU:Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz * 160
    • Driver Version: 525.60.13
    • 内存:1510 GB
  • 多机(32卡)

    • 系统:CentOS release 6.3 (Final)
    • GPU:Tesla V100-SXM2-32GB * 8
    • CPU:Intel(R) Xeon(R) Gold 6271C CPU @ 2.60GHz * 48
    • Driver Version: 450.80.02
    • 内存:502 GB

2.Docker 镜像

我们使用 NGC PyTorch 的代码仓库提供的Dockerfile制作镜像:

二、环境搭建

1.单机(单卡、8卡)环境搭建

单机环境的搭建,我们遵循了 NGC PyTorch 官网提供的 Quick Start Guide 教程成功搭建了测试环境,主要过程如下:

  • 下载NGC PyTorch repo,并进入目录

    git clone https://github.com/NVIDIA/DeepLearningExamples
    cd DeepLearningExamples/PyTorch/Classification/ConvNets
    # 本次测试是在如下版本下完成的:
    git checkout fc9c09b08d6d39fb13c79c8a7e08f85b03dbf3d1
  • 制作Docker镜像

    docker build . -t nvidia_rn50_pytorch
  • 启动Docker

    # 假设imagenet数据放在<path to data>目录下
    nvidia-docker run --rm -it -v <path to data>:/imagenet --ipc=host nvidia_rn50_pytorch

2.多机(32卡)环境搭建

  • IB配置(可选) 请参考这里

  • MPI配置 请参考这里

三、测试步骤

1.单机(单卡、8卡)测试

对于1卡、8卡性能测试,本报告严格按NGC公开的测试报告进行复现,对其提供的代码未做改动,并严格按照NGC测试使用的参数配置测试。其公开的测试报告请见:《ResNet50 v1.5 For PyTorch》

  • 下载我们编写的测试脚本,并执行该脚本

    cd scripts/
    bash pytorch_test_all.sh
  • 执行后将得到如下日志文件:

    /log/pytorch_gpu1_amp_bs256.txt
    /log/pytorch_gpu1_fp32_bs256.txt
    /log/pytorch_gpu8_amp_bs256.txt
    /log/pytorch_gpu8_fp32_bs256.txt
    

在NGC报告的Training performance benchmark小节,提供了其测试的参数配置。因此,我们提供的pytorch_test_all.sh是参考了其文档中的配置。

2.多机(32卡)测试

基础配置和上文所述的单机配置相同,多机这部分主要侧重于多机和单机的差异部分。

为了方便测试,我们封装了一下NGC的启动脚本

#!/bin/bash
set -xe

batch_size=$1  # batch size per gpu
num_gpus=$2    # number of gpu
precision=$3   # --amp or ""
train_steps=${4:-100}    # max train steps

export NODE_RANK=`python get_mpi_rank.py`

export env_path=/workspace/DeepLearningExamples/PyTorch/Classification/ConvNets
cd ${env_path}

python ./multiproc.py \
   --master_addr ${MASTER_NODE} \
   --master_port ${MASTER_PORT} \
   --nnodes ${NUM_NODES}  \
   --nproc_per_node ${num_gpus} \
   --node_rank ${NODE_RANK} \
./main.py --arch resnet50 \
	${precision} -b ${batch_size} \
	--training-only \
	-p 1 \
	--raport-file benchmark.json \
	--epochs 1 \
	--prof ${train_steps} ./data/imagenet

然后使用一个脚本测试多组实验

# fp32
echo "begin run 256 fp32 on 32 gpus"
$mpirun bash ./run_benchmark.sh  256 32 ""

# fp16
echo "begin run 256 fp16 on 32 gpus"
$mpirun bash ./run_benchmark.sh  256 8 "--amp"

其中mpi的使用参考这里

四、测试结果

  • V100上训练吞吐率(images/sec)如下:
卡数 FP32(BS=256) AMP(BS=256)
1 370.194 790.033
8 2791.98 5889.05
32 10523.32 21259.81
  • A100上训练吞吐率(images/sec)如下:
卡数 FP32(BS=256) AMP(BS=256)
1 924.989 1449.65
8 7020.9 10744.6

关于torch数据,按照官方文档反复重测了多次未达到官方的标准。若了解相关原因,欢迎issue我们。

五、日志数据

V100

A100