昇腾社区首页
中文
注册

制作Rec SDK TensorFlow训练镜像

本章节旨在指导用户根据已有基础镜像制作Rec SDK TensorFlow的训练镜像。

前提条件

  1. 已经参考安装依赖,在物理机上安装对应CANN版本的驱动和固件。
  2. 物理机上已经安装Docker,并且Docker网络可用。
  3. 准备基础镜像。可以从昇腾镜像仓库获取基础镜像,或者使用用户已有的基础镜像。
    • (推荐)从昇腾镜像仓库获取Rec SDK TensorFlow训练镜像。昇腾镜像仓库上的Rec SDK TensorFlow训练镜像中已经安装gcc、cmake等基础依赖,无需再次安装;只需更新其中的CANN和Rec SDK软件包即可使用。
    • 从昇腾镜像仓库获取CentOS 7.6.1810镜像。如果不从昇腾镜像仓库获取基础镜像,用户自己准备一个镜像作为基础镜像,建议以CentOS 7.6.1810镜像为基础。
  4. 执行如下命令,将基础镜像加载到docker中。
    docker load --input xxx.tar
  5. 创建一个制作镜像使用的文件夹(以build_images为例)。
    1. 仅将制作镜像过程中要使用到的文件放至该文件夹中,如对应架构的Ascend-cann-toolkit_*.run、Ascend-cann-tfplugin_*.run、Rec SDK软件包。
    2. 若需安装Ascend-cann-tfplugin_*.run包,还需将/usr/local/Ascend/driver/version.info和/etc/ascend_install.info两个文件拷贝到build_images目录下。

      (请勿在build_images目录下放入无关文件,制作镜像时会将该目录下文件拷贝到镜像内。)

  6. 制作镜像过程中需使用docker指令及从物理机拷贝文件,请确保用户有执行指令和访问文件权限。

使用Rec SDK TensorFlow基础镜像制作训练镜像

  1. 参考获取Rec SDK TensorFlow软件包,获取Rec SDK软件包,以及配套的CANN软件包和TensorFlow适配昇腾插件。
  2. 在build_images目录下创建Dockerfile配置文件(以Dockerfile名称为例),使用vi Dockerfile命令编辑文件,插入如下内容。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    # 请根据实际情况修改基础镜像名称及镜像tag
    FROM rec_sdk-tf1:7.0.RC1
    
    # CANN相关参数
    ARG TOOLKIT_PKG=Ascend-cann-toolkit*.run
    ARG TFPLUGIN_PKG=Ascend-cann-tfplugin*.run
    # Rec SDK TensorFlow包
    ARG REC_SDK_PKG=Ascend-mindxsdk-mxrec*.tar.gz
    
    # 设置安装路径环境变量
    ARG ASCEND_BASE=/usr/local/Ascend
    
    # 删除旧的CANN
    RUN rm -rf $ASCEND_BASE/ascend-toolkit
    
    # 请根据实际情况选择安装需要拷贝和安装的依赖,若无需执行可将指令行删除
    WORKDIR /tmp
    COPY $TOOLKIT_PKG .
    COPY $TFPLUGIN_PKG .
    COPY $REC_SDK_PKG .
    COPY version.info .
    COPY ascend_install.info .
    
    # 安装ascend-toolkit和tfplugin
    RUN mkdir -p $ASCEND_BASE/driver && cp version.info $ASCEND_BASE/driver/ && cp ascend_install.info /etc/
    RUN umask 0022 && \
        echo Y | bash $TOOLKIT_PKG --quiet --install --install-path=$ASCEND_BASE && \
        source $ASCEND_BASE/ascend-toolkit/set_env.sh && \
        echo Y | bash $TFPLUGIN_PKG --quiet --install --install-for-all && \
        source $ASCEND_BASE/tfplugin/set_env.sh && \
        rm -f ./$TFPLUGIN_PKG && \
        rm -rf /root/.cache/pip && \
        rm -f $TOOLKIT_PKG
    
    # 安装Rec SDK TensorFlow,以安装tf1版本为例。(如需安装tf2版本Rec SDK包,将tf1修改为tf2即可)
    ARG SDK_TF_VERSION=tf1
    RUN tar -zxvf Ascend-mindxsdk-mxrec*.tar.gz && \
        pip3 install mindxsdk-mxrec/${SDK_TF_VERSION}_whl/mx_rec-*.whl --force-reinstall
    
  3. 进入build_images路径,执行如下指令构建Rec SDK TensorFlow镜像。
    docker build -t {镜像名称}:{镜像tag} -f Dockerfile .

使用CentOS 7.6.1810或用户镜像制作训练镜像

  1. 确认镜像中是否已经安装以下依赖,将未安装的依赖软件包下载到build_images目录下。

    依赖名称

    下载链接

    gcc-7.3.0

    链接

    cmake-3.20.6

    链接

    ucx

    链接

    openmpi-4.1.5

    链接

    python-3.7.5

    链接

    hdf5-1.10.5

    链接

    CANN软件包、TensorFlow适配昇腾插件以及Rec SDK软件包

    参见安装依赖

    TensorFlow(1.15.0/2.6.5)

    链接

  2. 在build_images目录下创建Dockerfile配置文件(以Dockerfile名称为例),使用vi Dockerfile命令编辑文件,插入如下内容。
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    # 请根据实际情况修改基础镜像名称及镜像tag
    FROM swr.cn-south-1.myhuaweicloud.com/ascendhub/centos:7.6.1810
    
    WORKDIR /tmp
    
    
    # 根据实际情况选择安装需要的依赖,如果一些依赖不需要可以将对应代码去掉或注释;同时,确保下载的依赖的包名与如下代码中的包名一致,
    # 否则在安装对应的依赖时可能出现找不到文件的错误。
    COPY gcc-7.3.0.tar.gz ./
    COPY cmake-3.20.6.tar.gz ./
    COPY master.zip ./
    COPY openmpi-4.1.5.tar.gz ./
    COPY Python-3.7.5.tar.xz ./
    COPY hdf5-1.10.5.tar.gz ./
    COPY Ascend-cann-toolkit*.run ./
    COPY Ascend-cann-tfplugin*.run ./
    COPY version.info ./
    COPY ascend_install.info ./
    COPY Ascend-mindxsdk-mxrec*.tar.gz ./
    
    # 1.安装编译环境
    RUN yum makecache && \
        yum -y install centos-release-scl && \
        yum -y install devtoolset-7 && \
        yum -y install devtoolset-7-gcc-c++ && \
        yum -y install epel-release && \
        yum -y install wget zlib-devel bzip2 bzip2-devel openssl-devel ncurses-devel openssh-clients openssh-server sqlite-devel openmpi-devel \
        readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel hdf5-devel patch pciutils lcov vim dos2unix gcc-c++ \
        autoconf automake libtool git && \
        yum clean all && \
        rm -rf /var/cache/yum && \
        echo "source /opt/rh/devtoolset-7/enable" >> /etc/profile
    # 注:openssh-server为双机训练样例需要,仅单机训练时可去掉
    
    # 2.安装gcc-7.3.0
    RUN source /etc/profile && \
        tar -zxvf gcc-7.3.0.tar.gz && \
        cd gcc-7.3.0 && \
        wget https://mirrors.huaweicloud.com/gnu/gmp/gmp-6.1.0.tar.bz2 && \
        wget https://mirrors.huaweicloud.com/gnu/mpfr/mpfr-3.1.4.tar.bz2 && \
        wget https://mirrors.huaweicloud.com/gnu/mpc/mpc-1.0.3.tar.gz && \
        wget https://mindx.obs.cn-south-1.myhuaweicloud.com/opensource/isl-0.16.1.tar.bz2 && \
        sed -i "246s/tar -xf "${ar}"/tar --no-same-owner -xf "${ar}"/" contrib/download_prerequisites && \
        ./contrib/download_prerequisites && \
        ./configure --enable-languages=c,c++ --disable-multilib --with-system-zlib --prefix=/usr/local/gcc7.3.0 && \
        make -j && make -j install && cd .. && \
        find gcc-7.3.0/ -name libstdc++.so.6.0.24 -exec cp {} /lib64/ \; && \
        rm -rf gcc-7.3.0*
    
    ENV LD_LIBRARY_PATH=/usr/local/gcc7.3.0/lib64:$LD_LIBRARY_PATH \
        PATH=/usr/local/gcc7.3.0/bin:$PATH
    
    # 3.安装cmake
    RUN source /etc/profile && gcc -v && tar -zxf cmake-3.20.6.tar.gz && \
        cd cmake-3.20.6 && \
        ./bootstrap && make && make install && cd .. && \
        rm -rf cmake-3.20.6*
    
    
    # 4.安装ucx
    RUN source /etc/profile && gcc -v && unzip master.zip && \
        cd ucx-master && \
        ./autogen.sh && \
        ./contrib/configure-release --prefix=/usr/local/ucx && \
        make && make install && cd .. && \
        rm -rf ucx-master* master.zip
    
    
    # 5.安装openmpi,需要配置ucx
    RUN source /etc/profile && gcc -v && tar -zxvf openmpi-4.1.5.tar.gz && \
        cd openmpi-4.1.5 && \
        ./configure --enable-orterun-prefix-by-default --prefix=/usr/local/openmpi --with-ucx=/usr/local/ucx && \
        make -j 16 && make install && cd .. && \
        rm -rf openmpi-4.1.5*
    
    
    ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH \
        PATH=/usr/local/openmpi/bin:$PATH
    # 6.安装python3.7.5
    RUN source /etc/profile && gcc -v && tar -xvf Python-3.7.5.tar.xz && \
        cd Python-3.7.5 && \
        mkdir -p build && cd build && \
        ../configure --enable-shared --prefix=/usr/local/python3.7.5 && \
        make -j && make install && \
        cd ../../ && rm -rf Python-3.7.5* && \
        ldconfig
    
    ENV PATH=$PATH:/usr/local/python3.7.5/bin \
        LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/python3.7.5/lib
    
    # 配置python源
    RUN mkdir ~/.pip && touch ~/.pip/pip.conf && \
        echo "[global]" > ~/.pip/pip.conf && \
        echo "trusted-host=pypi.douban.com" >> ~/.pip/pip.conf && \
        echo "index-url=http://pypi.douban.com/simple/" >> ~/.pip/pip.conf && \
        echo "timeout=200" >> ~/.pip/pip.conf
    
    # 7.安装hdf5
    RUN source /etc/profile && gcc -v && tar -zxvf hdf5-1.10.5.tar.gz && \
        cd hdf5-1.10.5 && \
        ./configure --prefix=/usr/local/hdf5 && \
        make && make install && cd .. && rm -rf hdf5-1.10.5*
    
    ENV CPATH=/usr/local/hdf5/include/:/usr/local/hdf5/lib/
    
    RUN ln -s /usr/local/hdf5/lib/libhdf5.so /usr/lib/libhdf5.so && \
        ln -s /usr/local/hdf5/lib/libhdf5_hl.so /usr/lib/libhdf5_hl.so
    
    ENV CC=/usr/lib64/openmpi/bin/mpicc
    
    # 8.安装python包
    RUN pip3.7 install -U pip && \
        pip3.7 install numpy && \
        pip3.7 install decorator && \
        pip3.7 install sympy==1.4 && \
        pip3.7 install cffi==1.12.3 && \
        pip3.7 install pyyaml && \
        pip3.7 install pathlib2 && \
        pip3.7 install grpcio && \
        pip3.7 install grpcio-tools && \
        pip3.7 install protobuf==3.20.0 && \
        pip3.7 install scipy && \
        pip3.7 install requests && \
        pip3.7 install mpi4py && \
        pip3.7 install scikit-learn && \
        pip3.7 install easydict && \
        pip3.7 install attrs && \
        pip3.7 install pytest==7.1.1 && \
        pip3.7 install pytest-cov==4.1.0 && \
        pip3.7 install pytest-html && \
        pip3.7 install Cython && \
        pip3.7 install h5py==3.1.0 && \
        pip3.7 install pandas && \
        rm -rf /root/.cache/pip
    
    # 安装mpi4py时使用该环境变量,安装完成后取消
    RUN unset CC
    
    # 9.设置驱动路径环境变量
    ARG ASCEND_BASE=/usr/local/Ascend
    ENV LD_LIBRARY_PATH=$ASCEND_BASE/driver/lib64:$ASCEND_BASE/driver/lib64/common:$ASCEND_BASE/driver/lib64/driver:$LD_LIBRARY_PATH
    
    # 10.CANN相关参数
    ARG TOOLKIT_PKG=Ascend-cann-toolkit*.run
    ARG TOOLKIT_PATH=$ASCEND_BASE/ascend-toolkit/latest
    
    # 11.TF相关
    ARG TFPLUGIN_PKG=Ascend-cann-tfplugin*.run
    # MODIFIED TF=1.15.0 or TF=2.6.5,在arm环境下换成对应的whl包
    ARG TF_PKG=tensorflow-cpu==
    
    # 12.安装ascend-toolkit和tfplugin,及其他python依赖包
    RUN umask 0022 && \
        mkdir -p $ASCEND_BASE/driver && \
        cp version.info $ASCEND_BASE/driver/ && \
        cp ascend_install.info /etc/ && \
        chmod +x $TOOLKIT_PKG && \
        echo Y | bash $TOOLKIT_PKG --quiet --install --install-path=$ASCEND_BASE && \
        source $ASCEND_BASE/ascend-toolkit/set_env.sh && \
        chmod +x ./$TFPLUGIN_PKG && \
        echo Y | bash $TFPLUGIN_PKG --quiet --install --install-for-all && \
        source $ASCEND_BASE/tfplugin/set_env.sh && \
        rm -f ./$TFPLUGIN_PKG && \
        pip3.7 install $TF_PKG && \
        HOROVOD_WITH_MPI=1 HOROVOD_WITH_TENSORFLOW=1 pip3.7 install horovod --no-cache-dir && \
        pip3.7 install tf_slim && \
        pip3.7 install funcsigs && \
        rm -rf /root/.cache/pip && \
        rm -f $TOOLKIT_PKG && \
        rm -rf $ASCEND_BASE/driver && \
        rm -rf /etc/ascend_install.info
    
    # 13.安装Rec SDK TensorFlow,确认安装tf1或tf2
    RUN tar -zxvf Ascend-mindxsdk-mxrec*.tar.gz && \
        pip3 install mindxsdk-mxrec/{tf1|tf2}_whl/mx_rec-*.whl --force-reinstall
    
    # 14.清理临时目录
    RUN rm -rf ./*
    
  3. 进入build_images路径,执行如下指令构建Rec SDK TensorFlow镜像。
    docker build -t {镜像名称}:{镜像tag} -f Dockerfile .