文档
注册

使用Dockerfile构建容器镜像(PyTorch)

前提条件

请按照表1所示,获取对应操作系统的软件包与打包镜像所需Dockerfile文件与脚本文件。

深度学习引擎软件包名称中{version}表示版本号,{arch}表示架构。

表1 所需软件

软件包

说明

获取方法

Ascend-cann-nnae_{version}_linux-{arch}.run

深度学习引擎软件包。

获取链接

apex-0.1+ascend-cp37-cp37m-linux_{arch}.whl

混合精度模块。

请参见PyTorch 1.5.0 安装指南进行编译。

torch-1.5.0+ascend.post2-cp37-cp37m-linux_{arch}.whl

PyTorch Adapter插件。

Dockerfile

制作镜像需要。

用户根据业务自行准备。

dllogger-master

PyTorch日志工具。

获取链接

ascend_install.info

驱动安装信息文件。

从host拷贝“/etc/ascend_install.info”文件。

version.info

驱动版本信息文件。

从host拷贝“/usr/local/Ascend/driver/version.info”文件。

prebuild.sh

执行训练运行环境安装准备工作,例如配置代理等。

用户根据业务自行准备。

install_ascend_pkgs.sh

昇腾软件包安装脚本。

postbuild.sh

清除不需要保留在容器中的安装包、脚本、代理配置等。

为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的数字签名文件用于完整性验证。

在软件包下载之后,请参考《OpenPGP签名验证指南》,对从Support网站下载的软件包进行PGP数字签名校验。如果校验失败,请不要使用该软件包,先联系华为技术支持工程师解决。

使用软件包安装/升级之前,也需要按上述过程先验证软件包的数字签名,确保软件包未被篡改。

运营商客户请访问:https://support.huawei.com/carrier/digitalSignatureAction

企业客户请访问:https://support.huawei.com/enterprise/zh/tool/pgp-verify-TL1000000054

本章节以Ubuntu操作系统为例。

操作步骤

  1. 将准备的软件包、深度学习框架相关包、host侧驱动安装信息文件及驱动版本信息文件上传到服务器同一目录(如“/home/test”)。
    • Ascend-cann-nnae_{version}_linux-{arch}.run
    • apex-0.1+ascend-cp37-cp37m-linux_{arch}.whl
    • torch-1.5.0+ascend.post2-cp37-cp37m-linux_{arch}.whl
    • dllogger-master
    • ascend_install.info
    • version.info
  2. root用户登录服务器。
  3. 执行以下步骤准备prebuild.sh文件。
    1. 进入软件包所在目录,执行以下命令创建prebuild.sh文件。

      vim prebuild.sh

    2. 写入内容参见prebuild.sh编写示例,写入后执行:wq命令保存内容,内容以Ubuntu操作系统为例。
  4. 执行以下步骤准备install_ascend_pkgs.sh文件。
    1. 进入软件包所在目录,执行以下命令创建install_ascend_pkgs.sh文件。

      vim install_ascend_pkgs.sh

    2. 写入内容参见install_ascend_pkgs.sh编写示例,写入后执行:wq命令保存内容,内容以Ubuntu操作系统为例。
  5. 执行以下步骤准备postbuild.sh文件。
    1. 进入软件包所在目录,执行以下命令创建postbuild.sh文件。

      vim postbuild.sh

    2. 写入内容参见postbuild.sh编写示例,写入后执行:wq命令保存内容,内容以Ubuntu操作系统为例。
  6. 执行以下步骤准备Dockerfile文件。
    1. 进入软件包所在目录,执行以下命令创建dockerfile文件(文件名示例“Dockerfile”)。

      vim Dockerfile

    2. 写入内容参见Dockerfile编写示例,然后执行:wq命令保存内容,内容以Ubuntu操作系统为例。

      为获取镜像“ubuntu:18.04”,用户也可以通过执行docker pull ubuntu:18.04命令从Docker Hub拉取。

  7. 进入软件包所在目录,执行以下命令,构建容器镜像,注意不要遗漏命令结尾的“.”

    docker build -t 镜像名_系统架构:镜像tag .

    例如:

    docker build -t test_train_arm64:v1.0 .

    命令解释如所表2示。

    表2 命令参数说明

    参数

    说明

    -t

    指定镜像名称

    镜像名_系统架构:镜像tag

    镜像名称与标签,请用户根据实际情况写入

    当出现“Successfully built xxx”表示镜像构建成功。

  8. 构建完成后,执行以下命令查看镜像信息。

    docker images

    显示示例。

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    test_train_arm64    v1.0                d82746acd7f0        27 minutes ago      749MB

编写示例

使用过程中请根据实际情况修改软件包版本及架构。

  1. prebuild.sh编写示例
    Ubuntu ARM系统prebuild.sh编写示例。
    #!/bin/bash
    #--------------------------------------------------------------------------------
    # 请在此处使用bash语法编写脚本代码,执行安装准备工作,例如配置代理等
    # 本脚本将会在正式构建过程启动前被执行
    #
    # 注:本脚本运行结束后不会被自动清除,若无需保留在镜像中请在postbuild.sh脚本中清除
    #--------------------------------------------------------------------------------
    # dns设置
    tee /etc/resolv.conf <<- EOF
    nameserver xxx.xxx.xxx.xxx  #DNS服务器IP,可填写多个,根据实际配置
    nameserver xxx.xxx.xxx.xxx
    nameserver xxx.xxx.xxx.xxx
    EOF
    # apt代理设置
    tee /etc/apt/apt.conf.d/80proxy <<- EOF
    Acquire::http::Proxy "http://xxx.xxx.xxx.xxx:xxx";  #http代理服务器IP地址及端口
    Acquire::https::Proxy "http://xxx.xxx.xxx.xxx:xxx";  #https代理服务器IP地址及端口
    EOF
    chmod 777 -R /tmp
    rm /var/lib/apt/lists/*
    #apt源设置(以ubuntu 18.04 arm源为示例,请根据实际配置)
    tee /etc/apt/sources.list <<- EOF
    deb http://mirrors.aliyun.com/ubuntu-ports/ bionic main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ bionic main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ bionic-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ bionic-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ bionic-backports main restricted universe multiverse
    EOF

    Ubuntu X86系统prebuild.sh编写示例。

    #!/bin/bash
    #--------------------------------------------------------------------------------
    
    # 请在此处使用bash语法编写脚本代码,执行安装准备工作,例如配置代理等
    # 本脚本将会在正式构建过程启动前被执行
    #
    # 注:本脚本运行结束后不会被自动清除,若无需保留在镜像中请在postbuild.sh脚本中清除
    #--------------------------------------------------------------------------------
    # apt代理设置
    tee /etc/apt/apt.conf.d/80proxy <<- EOF
    Acquire::http::Proxy "http://xxx.xxx.xxx.xxx:xxx";    #http代理服务器IP地址及端口
    Acquire::https::Proxy "http://xxx.xxx.xxx.xxx:xxx";   #https代理服务器IP地址及端口
    EOF
    
    #apt源设置(以ubuntu 18.04 X86源为示例,请根据实际配置)
    tee /etc/apt/sources.list <<- EOF
    deb http://mirrors.ustc.edu.cn/ubuntu/ bionic main multiverse restricted universe
    deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main multiverse restricted universe
    deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main multiverse restricted universe
    deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security main multiverse restricted universe
    deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main multiverse restricted universe
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic main multiverse restricted universe
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main multiverse restricted universe
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main multiverse restricted universe
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic-security main multiverse restricted universe
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main multiverse restricted universe
    EOF
  2. install_ascend_pkgs.sh编写示例。
    #--------------------------------------------------------------------------------
    # 请在此处使用bash语法编写脚本代码,安装昇腾软件包
    #
    # 注:本脚本运行结束后不会被自动清除,若无需保留在镜像中请在postbuild.sh脚本中清除
    #--------------------------------------------------------------------------------
    umask 0022
    cp ascend_install.info /etc/
    # 构建之前把host的/usr/local/Ascend/driver/version.info拷贝一份到当前目录
    mkdir -p /usr/local/Ascend/driver/
    cp version.info /usr/local/Ascend/driver/
    # Ascend-cann-nnae_{version}_linux-{arch}.run
    chmod +x Ascend-cann-nnae_{version}_linux-{arch}.run
    ./Ascend-cann-nnae_{version}_linux-{arch}.run --install-path=/usr/local/Ascend/ --install --quiet
    # 只为了安装nnae包,所以需要清理,容器启动时通过ascend docker挂载进来
    rm -f version.info
    rm -rf /usr/local/Ascend/driver/
  3. postbuild.sh编写示例。
    #--------------------------------------------------------------------------------
    # 请在此处使用bash语法编写脚本代码,清除不需要保留在容器中的安装包、脚本、代理配置等
    # 本脚本将会在正式构建过程结束后被执行
    #
    # 注:本脚本运行结束后会被自动清除,不会残留在镜像中;脚本所在位置和Working Dir位置为/tmp
    #--------------------------------------------------------------------------------
    rm -f ascend_install.info
    rm -f prebuild.sh
    rm -f install_ascend_pkgs.sh
    rm -f Dockerfile
    rm -f Ascend-cann-nnae_{version}_linux-{arch}.run
    rm -f apex-0.1+ascend-cp37-cp37m-linux_{arch}.whl
    rm -f torch-1.5.0+ascend.post2-cp37-cp37m-linux_{arch}.whl
    rm -f /etc/apt/apt.conf.d/80proxy
    
  4. Dockerfile编写示例。
    Ubuntu ARM系统Dockerfile示例。
    FROM ubuntu:18.04
    
    ARG PYTORCH_PKG=torch-1.5.0+ascend.post2-cp37-cp37m-linux_aarch64.whl
    ARG APEX_PKG=apex-0.1+ascend-cp37-cp37m-linux_aarch64.whl
    ARG HOST_ASCEND_BASE=/usr/local/Ascend
    ARG NNAE_PATH=/usr/local/Ascend/nnae/latest
    # ARG TF_PLUGIN_PATH=/usr/local/Ascend/tfplugin/latest
    ARG INSTALL_ASCEND_PKGS_SH=install_ascend_pkgs.sh
    ARG PREBUILD_SH=prebuild.sh
    ARG POSTBUILD_SH=postbuild.sh
    
    WORKDIR /tmp
    COPY . ./
    
    # 触发prebuild.sh
    RUN bash -c "test -f $PREBUILD_SH && bash $PREBUILD_SH || true"
    
    ENV http_proxy http://xxx.xxx.xxx.xxx:xxx
    ENV https_proxy http://xxx.xxx.xxx.xxx:xxx
    
    # 系统包
    RUN apt update && \
        apt install --no-install-recommends \
            python3.7 python3.7-dev \
            curl g++ pkg-config unzip \
            libblas3 liblapack3 liblapack-dev \
            libblas-dev gfortran libhdf5-dev \
            libffi-dev libicu60 libxml2 -y
    
    # 建立python软链接
    RUN ln -s /usr/bin/python3.7 /usr/bin/python
    
    # 配置python pip源
    RUN mkdir -p ~/.pip \
    && echo '[global] \n\
    index-url=https://pypi.doubanio.com/simple/\n\
    trusted-host=pypi.doubanio.com' >> ~/.pip/pip.conf
    
    # pip3.7
    RUN curl -k https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
        cd /tmp && \
        apt-get download python3-distutils && \
        dpkg-deb -x python3-distutils_*.deb / && \
        rm python3-distutils_*.deb && \
        cd - && \
        python3.7 get-pip.py && \
        rm get-pip.py
    
    # 创建HwHiAiUser用户和属主,uid和gid请与物理机保持一致避免出现无属主文件。示例中会自动创建user和对应的group,uid和gid都为1000
    RUN useradd -d /home/HwHiAiUser -u 1000 -m -s /bin/bash HwHiAiUser
    
    # python包
    RUN pip3.7 install numpy && \
        pip3.7 install decorator && \
        pip3.7 install sympy==1.4 && \
        pip3.7 install cffi && \
        pip3.7 install pyyaml && \
        pip3.7 install pathlib2 && \
        pip3.7 install grpcio && \
        pip3.7 install grpcio-tools && \
        pip3.7 install protobuf && \
        pip3.7 install scipy && \
        pip3.7 install requests && \
        pip3.7 install attrs && \
        pip3.7 install Pillow==6.2.2 && \
        pip3.7 install torchvision==0.2.2.post3
    
    # Ascend包
    RUN umask 0022  && bash $INSTALL_ASCEND_PKGS_SH
    
    RUN umask 0022 && pip3.7 install $APEX_PKG
    
    RUN umask 0022 && pip3.7 install $PYTORCH_PKG
    
    RUN cd /tmp/dllogger-master/ && \
        python3.7 setup.py build && \
        python3.7 setup.py install
    
    # 环境变量
    ENV HCCL_WHITELIST_DISABLE=1
    ENV PYTHONPATH=/tmp/dllogger-master
    
    # 创建/lib64/ld-linux-aarch64.so.1
    RUN umask 0022 && \
        if [ ! -d "/lib64" ]; \
        then \
            mkdir /lib64 && ln -sf /lib/ld-linux-aarch64.so.1 /lib64/ld-linux-aarch64.so.1; \
        fi
    
    ENV http_proxy ""
    ENV https_proxy ""
    
    # 触发postbuild.sh
    RUN bash -c "test -f $POSTBUILD_SH && bash $POSTBUILD_SH || true" && \
        rm $POSTBUILD_SH

    Ubuntu X86系统Dockerfile示例。

    FROM ubuntu:18.04
    
    ARG PYTORCH_PKG=torch-1.5.0+ascend.post2-cp37-cp37m-linux_x86_64.whl
    ARG APEX_PKG=apex-0.1+ascend-cp37-cp37m-linux_x86_64.whl
    ARG HOST_ASCEND_BASE=/usr/local/Ascend
    ARG NNAE_PATH=/usr/local/Ascend/nnae/latest
    ARG INSTALL_ASCEND_PKGS_SH=install_ascend_pkgs.sh
    ARG PREBUILD_SH=prebuild.sh
    ARG POSTBUILD_SH=postbuild.sh
    WORKDIR /tmp
    COPY . ./
    
    # 触发prebuild.sh
    RUN bash -c "test -f $PREBUILD_SH && bash $PREBUILD_SH || true"
    
    # 系统包
    RUN apt update && \
        apt install --no-install-recommends \
            python3.7 python3.7-dev \
            curl g++ pkg-config unzip \
            libblas3 liblapack3 liblapack-dev \
            libblas-dev gfortran libhdf5-dev \
            libffi-dev libicu60 libxml2 -y
    
    ENV http_proxy http://xxx.xxx.xxx.xxx:xxx
    ENV https_proxy http://xxx.xxx.xxx.xxx:xxx
    
    # 建立python软链接
    RUN ln -s /usr/bin/python3.7 /usr/bin/python
    
    # 配置python pip源
    RUN mkdir -p ~/.pip \
    && echo '[global] \n\
    index-url=https://pypi.doubanio.com/simple/\n\
    trusted-host=pypi.doubanio.com' >> ~/.pip/pip.conf
    
    # pip3.7
    RUN curl -k https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
        cd /tmp && \
        apt-get download python3-distutils && \
        dpkg-deb -x python3-distutils_*.deb / && \
        rm python3-distutils_*.deb && \
        cd - && \
        python3.7 get-pip.py && \
        rm get-pip.py
    
    # 创建HwHiAiUser用户和属主,uid和gid请与物理机保持一致避免出现无属主文件。示例中会自动创建user和对应的group,uid和gid都为1000
    RUN useradd -d /home/HwHiAiUser -u 1000 -m -s /bin/bash HwHiAiUser
    
    # python包
    RUN 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 && \
        pip3.7 install scipy && \
        pip3.7 install requests && \
        pip3.7 install attrs && \
        pip3.7 install Pillow==8.3.2 && \
        pip3.7 install torchvision==0.6.0
    
    # Ascend包
    RUN bash $INSTALL_ASCEND_PKGS_SH
    
    RUN pip3.7 install $APEX_PKG
    
    RUN pip3.7 install $PYTORCH_PKG
    
    RUN cd /tmp/dllogger-master/ && \    # 根据下载的文件找到setup.py所在目录进行修改
        python3.7 setup.py build && \
        python3.7 setup.py install
    
    # 环境变量
    ENV HCCL_WHITELIST_DISABLE=1
    ENV PYTHONPATH=/tmp/dllogger-master
    
    ENV http_proxy ""
    ENV https_proxy ""
    
    # 触发postbuild.sh
    RUN bash -c "test -f $POSTBUILD_SH && bash $POSTBUILD_SH || true" && \
        rm $POSTBUILD_SH
搜索结果
找到“0”个结果

当前产品无相关内容

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