文档
注册

训练镜像制作

训练镜像制作前需对物理机环境进行部署配置,准备好构建镜像所需的文件,具体请参见部署容器内的开发环境

构建镜像

  1. 在用于构建镜像的目录下创建Dockerfile,包括基础镜像(base)和训练镜像(train)。
  2. 基础镜像主要包括编译环境和相关依赖软件的安装和配置,例如gcc、cmake、openmpi、python和部分Python依赖包。
    构建镜像的Dockerfile参考如下。其中基础镜像及具体命令请根据实际操作系统修改。
    FROM centos:7.6.1810 as mxrec-base
    
    WORKDIR /tmp
    COPY . ./
    
    RUN chmod 777 /tmp
    
    # 安装编译环境
    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 \
        sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel \
        xz-devel libffi-devel hdf5-devel patch pciutils && \
        yum clean all && \
        rm -rf /var/cache/yum && \
        echo "source /opt/rh/devtoolset-7/enable" >> /etc/profile 
    
    # 安装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 --no-check-certificate && \
        wget --no-check-certificate https://mirrors.huaweicloud.com/gnu/mpfr/mpfr-3.1.4.tar.bz2 && \
        wget --no-check-certificate https://mirrors.huaweicloud.com/gnu/mpc/mpc-1.0.3.tar.gz && \
        wget --no-check-certificate 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
    
    # 安装cmake
    RUN source /etc/profile && gcc -v && tar -zxf cmake-3.20.6.tar.gz && \
        cd cmake-3.20.6 && \
        ./bootstrap && make && make install && \
        rm -rf ../cmake-3.20.6*
    
    # 安装openmpi
    RUN source /etc/profile && gcc -v && tar zxf openmpi-4.1.1.tar.gz && \
        cd openmpi-4.1.1 && \
        ./configure  --enable-orterun-prefix-by-default --prefix=/usr/local/openmpi && \
        make -j && make -j install && cd .. && rm -rf openmpi-4.1.1*
    
    
    ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH \
        PATH=/usr/local/openmpi/bin:$PATH
    
    # 安装easy_profiler
    RUN source /etc/profile && gcc -v && tar xf easy_profiler-2.1.0.tar.gz && \
        cd easy_profiler-2.1.0 && cmake . && make -j && make install && \
        cd .. && rm -rf easy_profiler-2.1.0*
    
    ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:/usr/lib/x86_64-linux-gnu/hdf5/serial:$LD_LIBRARY_PATH \
        PATH=/usr/local/openmpi/bin:$PATH
    
    # scl enable devtoolset-7 bash
    SHELL ["/usr/bin/scl", "enable", "devtoolset-7"]
    
    # 安装Python
    RUN wget --no-check-certificate https://repo.huaweicloud.com/python/3.7.5/Python-3.7.5.tar.xz && \
        tar -xf Python-3.7.5.tar.xz && \
        cd Python-3.7.5 && \
        mkdir build && cd build && \
        ../configure --enable-shared --prefix=/usr/local/python3.7.5 && \
        make -j && make install && \
        cd .. && rm -rf build && 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
    
    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
    
    # 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 && \
        rm -rf /root/.cache/pip
    
    # 训练镜像涉及CANN、TFPlugin、mxRec等软件的安装,追加构建的Dockerfile参考如下
    FROM mxrec-base
    
    ARG ASCEND_BASE=/usr/local/Ascend
    ARG CHIP=all
    WORKDIR /tmp
    RUN useradd -d /home/HwHiAiUser -u 1000 -m -s /bin/bash HwHiAiUser
    # 安装cann和tfplugin
    # 1.1 驱动路径环境变量设置
    ENV LD_LIBRARY_PATH=\
    $ASCEND_BASE/driver/lib64:\
    $ASCEND_BASE/driver/lib64/common:\
    $ASCEND_BASE/driver/lib64/driver:\
    $LD_LIBRARY_PATH
    
    # 2.1 cann相关
    ARG TOOLKIT_PKG=Ascend-cann-toolkit*.run  
    
    # 2.2 TF安装相关
    ARG TFPLUGIN_PKG=Ascend-cann-tfplugin*.run  
    # MODIFIED TF=1.15.0 or TF=2.6.5
    ARG TF_PKG=tensorflow-cpu==                 
    
    # 3. 安装cann-toolkit和tfplugin,及其他python依赖包
    RUN umask 0022 && \
        mkdir -p $ASCEND_BASE/driver && \
        cp version.info $ASCEND_BASE/driver/ && \
        cp ascend_install.info /etc/ && \
        if [ "$CHIP" != "all" ]; \
        then \
            CHIPOPTION="--chip=$CHIP"; \
        else \
            CHIPOPTION=""; \
        fi && \
        chmod +x $TOOLKIT_PKG && \
        bash $TOOLKIT_PKG --quiet --install --install-path=$ASCEND_BASE \
        --install-for-all $CHIPOPTION && \
        source $ASCEND_BASE/ascend-toolkit/set_env.sh && \
        chmod +x ./$TFPLUGIN_PKG && \
        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 -f  /etc/ascend_install.info
    
    # 安装mx-rec, MODIFIED tf1 or tf2
    RUN tar -xf Ascend-mindxsdk-mxrec-*.tar.gz && \
        pip3 install mindxsdk-mxrec/{tf1|tf2}-whl/mx_rec-*.whl 
    
    # 清理临时目录
    RUN rm -rf ./* 
  3. 构建镜像,命令参考如下。
    docker build -t mxrec-{tf1|tf2}:cann-{version}  .

启动容器

  1. 启动容器参考命令:
    docker run -it --name ${container_name} --net=host --shm-size="300g" -e ASCEND_VISIBLE_DEVICES=0-7 -v /etc/localtime:/etc/localtime -v /data:/data -v /root/.ssh:/root/.ssh mxrec-{tf1|tf2}:cann-{version} /bin/bash

    docker参数说明:

    • 需要使用Host网络:--net=host。
    • 需要配置足够的共享内存(shared memory):--shm-size。
    • 保证容器内的时区和系统的时区一致:-v /etc/localtime:/etc/localtime。
    • 若用户已经完成准备安装环境,Ascend Docker Runtime会为用户默认挂载驱动以及设备相关的文件,具体可参见MindX DL Ascend Docker Runtime用户指南,用户可通过“-e ASCEND_VISIBLE_DEVICES”使用设备序号指定挂载至容器中的NPU设备。如果不使用该参数,可使用“--device”手动挂载设备启动容器。

      若没有安装Ascend Docker Runtime,则需要在启动容器命令中增加“-v /usr/local/Ascend/driver/:/usr/local/Ascend/driver”指定挂载驱动目录。

    • 如需使用numactl绑定memory操作,需要在特权模式下运行,即启动容器命令中增加--privileged参数。
  2. CANN软件提供进程级环境变量设置脚本,供用户在进程中引用,以自动完成环境变量设置。用户进程结束后自动失效。

    示例如下(以root用户默认安装路径“/usr/local/Ascend”为例),可在程序启动的shell脚本中使用如下命令设置CANN的相关环境变量,也可在bash命令行窗口中执行如下命令:

    source /usr/local/Ascend/ascend-toolkit/set_env.sh
    source /usr/local/Ascend/tfplugin/set_env.sh

(可选)动态扩容算子包安装

如需使用动态扩容功能,请参考本步骤编译安装动态扩容算子包。

  1. 启动容器,设置CANN相关环境变量,具体请参见启动容器
  2. 进入已解压的mxRec软件包“mindxsdk-mxrec/cust_op/cust_op_by_addr”目录中,参考以下命令编译动态扩容算子包。
    bash run.sh
  3. 编译完成后,将在当前目录(“mindxsdk-mxrec/cust_op/cust_op_by_addr”)下生成“custom_op”算子包文件夹。
  4. 进入算子包文件夹(“mindxsdk-mxrec/cust_op/cust_op_by_addr/custom_op/build_out”),参考以下命令执行“custom_opp_centos_{arch}.run”
    bash custom_opp_centos_{arch}.run
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词