使用TensorFlow软件进行高性能计算

本文以TensorFlow软件为例介绍如何在E-HPC上进行高性能计算。

背景信息

E-HPC支持机器学习类作业的计算,本文档介绍在E-HPC上部署和执行TensorFlow作业的基本流程。

本案例使用的Perseus是阿里云提供的一种统一支持TensorFlow、Caffe、MXNET、Pytorch的分布式训练的深度优化框架,目的是为了机器学习提速,提升训练效率。部署Perseus的同时会自动部署TensoFlow框架。

本案例测试程序为tensorflow benchmarks,E-HPC集群创建完成后,存放在/root/perseus-tf-vm-demo目录中。

操作步骤

  1. 登录弹性高性能计算控制台

  2. 创建一个名为TF的集群。具体操作,请参见创建集群

    在配置参数时,您需要注意以下几点:

    • 软件配置:安装tensorflow-gpu 1.7.0-cp27-pypi软件。

    • 计算节点:选择GPU为NVIDIA P100的机型。

    • 镜像:选择市场镜像中的阿里AI云加速镜像Perseus v0.9.3r3。

  3. 创建一个名为tftest的sudo用户。具体操作,请参见创建用户
  4. 创建作业脚本并提交作业。

    1. 在左侧导航栏,单击作业

    2. 在集群下拉列选择目标集群,单击创建作业

    3. 创建作业页面,选择新建文件 > 使用文件模板 > pbs demo

    4. 按下图完成作业配置,单击确认提交作业。

      作业文件配置如下:

      #!/bin/sh
      #PBS -j oe
      #PBS -l select=2:ncpus=<N>:mpiprocs=1   #N为节点CPU核数,实际测试中根据节点配置进行设置
      export MODULEPATH=/opt/ehpcmodulefiles/
      module load intel-mpi/2018
      module load intel-mpi-benchmarks/2019
      echo "run at the beginning"
      /opt/intel/impi/2018.3.222/bin64/mpirun -genv I_MPI_DEBUG 5 -np 2 -ppn 1 -host compute0,compute1 /opt/intel-mpi-benchmarks/2019/IMB-MPI1 pingpong > IMB-pingpong
  5. 集群页面,找到HPL.test集群,单击更多 > 执行命令

  6. 拷贝测试程序:perseus-tf-vm-demo示例程序存放在镜像的/root目录下。运行时,可以将perseus-tf-vm-demo从/root目录中拷贝到自己普通用户的家目录下(可以用root用户登录执行),并改为普通用户的属主、属组。

    $ cd /root
    $ cp  -r ./perseus-tf-vm-demo  /home/username/
    $ cd /home/username
    $ chown -R username:users  ./perseus-tf-vm-demo
  7. 编写PBS作业脚本:普通用户模式登录管控节点,在perseus-tf-vm-demo文件下有两个文件:benchmarks和launch-example.sh。可以创建以下test.pbs作业脚本启动测试程序。

    $ cat test.pbs
    #! /bin/bash
    #PBS -N Perseus    
    #PBS -l nodes=x:ppn=y 
    #PBS -o perseus_pbs.log
    #PBS -j oe
    cd $PBS_O_WORKDIR
    nodefile=`cat $PBS_NODEFILE|uniq -d |awk -F "." '{print $1}'`
    sh launch-example.sh  x  z  $nodefile

    其中,x为申请计算节点数量,y为每计算节点cpu核数,z为每节点gpu卡数量

  8. 提交作业:通过qsub提交PBS作业,此时作业由调度系统调度执行。

    $ qsub  test.pbs

结果分析

  1. 当计算节点数量为1时,每节点gpu卡为1,运行后的结果可以作为基准。图表示在tensorflow环境但节点下每秒钟处理292.57张图片。13_52_41__03_04_2019

  2. 当计算节点数量为1,每节点gpu卡为2,即单机多卡计算时:

    16_20_49__03_04_2019
  3. 当计算节点数量为2,每节点gpu卡为1,即多机分布式计算时:

    16_20_49__03_04_2019
  4. 当Perseus框架下的benchmarks程序运行在同一节上不同gpu配置的情况下,以单节点1gpu卡配置运行的结果为基准,通过计算其并行效率,可以分析出相对于基准,单计算节点2gpu卡配置的计算性能损耗。

    多卡并行效率 =  (total imgages/sec)  /基准 / gpu总数量 / 节点数量
               = ((568.45+568.44)/2)/ (292.57) /2 /1 
               = 0.9714
  5. 当Perseus框架下的benchmarks程序运行在不同节点数量上每节点相同gpu配置的情况下,以单节点1gpu卡配置运行的结果为基准,通过计算其并行效率,可以分析出相对于基准,多计算节点1gpu卡配置的计算性能损耗。

    多机并行效率 =(多节点 total images /sec)/ 基准 / 节点数量
               =((544.36+544.36)/2 )/ (292.57)/ 2 
               = 0.9303