华为云AI开发平台ModelArtsStep3 制作自定义镜像_云淘科技
此处介绍如何通过编写 Dockerfile 文件制作自定义镜像的操作步骤 。
目标:构建安装好如下软件的容器镜像,并使用 ModelArts 训练服务运行。
ubuntu-18.04
cann-6.3.RC2 (商用版本)
python-3.7.13
mindspore-2.1.1
Mindspore 版本与 CANN 版本,CANN 版本和Ascend驱动/固件版本均有严格的匹配关系,版本不匹配会导致训练失败。
本示例仅用于示意Ascend容器镜像制作流程,且在匹配正确的Ascend驱动/固件版本的专属资源池上运行通过。
准备一台 Linux aarch64 架构的主机,操作系统使用ubuntu-18.04。您可以准备相同规格的 弹性云服务器ECS 或者应用本地已有的主机进行自定义镜像的制作。
购买ECS服务器的具体操作请参考购买并登录弹性云服务器。镜像选择公共镜像,推荐使用ubuntu18.04的镜像。
图1 创建ECS服务器-选择鲲鹏计算架构的公共镜像
安装 Docker。
以 Linux aarch64 架构的操作系统为例,获取 Docker 安装包。您可以使用以下指令安装 Docker。关于安装 Docker 的更多指导内容参见 Docker 官方文档。
curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh
如果 docker images 命令可以执行成功,表示 Docker 已安装,此步骤可跳过。
启动docker。
systemctl start docker
确认 Docker Engine 版本。执行如下命令。
docker version | grep -A 1 Engine
命令回显如下。
Engine: Version: 18.09.0
推荐使用大于等于该版本的 Docker Engine 来制作自定义镜像。
准备名为 context 的文件夹。
mkdir -p context
准备可用的 pip 源文件 pip.conf 。本示例使用华为开源镜像站提供的 pip 源,其 pip.conf 文件内容如下。
[global] index-url = https://repo.huaweicloud.com/repository/pypi/simple trusted-host = repo.huaweicloud.com timeout = 120
在华为开源镜像站 https://mirrors.huaweicloud.com/home 中,搜索 pypi ,可以查看 pip.conf 文件内容。
准备可用的 apt 源文件 Ubuntu-Ports-bionic.list。本示例使用华为开源镜像站提供的 apt 源,执行如下命令获取 apt 源文件。
wget -O /etc/apt/sources.list https://repo.huaweicloud.com/repository/conf/Ubuntu-Ports-bionic.list
在华为开源镜像站 https://mirrors.huaweicloud.com/home 中,搜索 Ubuntu-Ports ,可以查看获取 apt 源文件的命令。
下载 CANN 6.3.RC2-linux aarch64 与 mindspore-2.1.1-cp37-cp37m-linux_aarch64.whl 安装文件。
下载run文件“Ascend-cann-nnae_6.3.RC2_linux-aarch64.run”(下载链接)。
下载whl 文件“mindspore-2.1.1-cp37-cp37m-linux_aarch64.whl”(下载链接)。
ModelArts当前仅支持CANN商用版本,不支持社区版。
下载 Miniconda3 安装文件。
使用地址 https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-aarch64.sh,下载 Miniconda3-py37-4.10.3 安装文件(对应 python 3.7.10)。
将上述 pip 源文件、*.run 文件、 *.whl 文件、Miniconda3 安装文件放置在 context 文件夹内,context 文件夹内容如下。
context ├── Ascend-cann-nnae_6.3.RC2_linux-aarch64.run ├── mindspore-2.1.1-cp37-cp37m-linux_aarch64.whl ├── Miniconda3-py37_4.10.3-Linux-aarch64.sh ├── pip.conf └── Ubuntu-Ports-bionic.list
编写容器镜像 Dockerfile 文件。
在 context 文件夹内新建名为 Dockerfile 的空文件,并将下述内容写入其中。
# 容器镜像构建主机需要连通公网 FROM arm64v8/ubuntu:18.04 AS builder # 基础容器镜像的默认用户已经是 root # USER root # 安装 OS 依赖(使用华为开源镜像站) COPY Ubuntu-Ports-bionic.list /tmp RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ mv /tmp/Ubuntu-Ports-bionic.list /etc/apt/sources.list && \ echo > /etc/apt/apt.conf.d/00skip-verify-peer.conf "Acquire { https::Verify-Peer false }" && \ apt-get update && \ apt-get install -y \ # utils ca-certificates vim curl \ # CANN 6.3.RC2 gcc-7 g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 && \ apt-get clean && \ mv /etc/apt/sources.list.bak /etc/apt/sources.list && \ # 修改 CANN 6.3.RC2 安装目录的父目录权限,使得 ma-user 可以写入 chmod o+w /usr/local RUN useradd -m -d /home/ma-user -s /bin/bash -g 100 -u 1000 ma-user # 设置容器镜像默认用户与工作目录 USER ma-user WORKDIR /home/ma-user # 使用华为开源镜像站提供的 pypi 配置 RUN mkdir -p /home/ma-user/.pip/ COPY --chown=ma-user:100 pip.conf /home/ma-user/.pip/pip.conf # 拷贝待安装文件到基础容器镜像中的 /tmp 目录 COPY --chown=ma-user:100 Miniconda3-py37_4.10.3-Linux-aarch64.sh /tmp # https://conda.io/projects/conda/en/latest/user-guide/install/linux.html#installing-on-linux # 安装 Miniconda3 到基础容器镜像的 /home/ma-user/miniconda3 目录中 RUN bash /tmp/Miniconda3-py37_4.10.3-Linux-aarch64.sh -b -p /home/ma-user/miniconda3 ENV PATH=$PATH:/home/ma-user/miniconda3/bin # 安装 CANN 6.3.RC2 Python Package 依赖 RUN pip install numpy~=1.14.3 decorator~=4.4.0 sympy~=1.4 cffi~=1.12.3 protobuf~=3.11.3 \ attrs pyyaml pathlib2 scipy requests psutil absl-py # 安装 CANN 6.3.RC2 至 /usr/local/Ascend 目录 COPY --chown=ma-user:100 Ascend-cann-nnae_6.3.RC2_linux-aarch64.run /tmp RUN chmod +x /tmp/Ascend-cann-nnae_6.3.RC2_linux-aarch64.run && \ /tmp/Ascend-cann-nnae_6.3.RC2_linux-aarch64.run --install --install-path=/usr/local/Ascend # 安装 MindSpore 2.1.1 COPY --chown=ma-user:100 mindspore-2.1.1-cp37-cp37m-linux_aarch64.whl /tmp RUN chmod +x /tmp/mindspore-2.1.1-cp37-cp37m-linux_aarch64.whl && \ pip install /tmp/mindspore-2.1.1-cp37-cp37m-linux_aarch64.whl # 构建最终容器镜像 FROM arm64v8/ubuntu:18.04 # 安装 OS 依赖(使用华为开源镜像站) COPY Ubuntu-Ports-bionic.list /tmp RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ mv /tmp/Ubuntu-Ports-bionic.list /etc/apt/sources.list && \ echo > /etc/apt/apt.conf.d/00skip-verify-peer.conf "Acquire { https::Verify-Peer false }" && \ apt-get update && \ apt-get install -y \ # utils ca-certificates vim curl \ # CANN 6.3.RC2 gcc-7 g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 && \ apt-get clean && \ mv /etc/apt/sources.list.bak /etc/apt/sources.list RUN useradd -m -d /home/ma-user -s /bin/bash -g 100 -u 1000 ma-user # 从上述 builder stage 中拷贝目录到当前容器镜像的同名目录 COPY --chown=ma-user:100 --from=builder /home/ma-user/miniconda3 /home/ma-user/miniconda3 COPY --chown=ma-user:100 --from=builder /home/ma-user/Ascend /home/ma-user/Ascend COPY --chown=ma-user:100 --from=builder /home/ma-user/var /home/ma-user/var COPY --chown=ma-user:100 --from=builder /usr/local/Ascend /usr/local/Ascend # 设置容器镜像预置环境变量 # 请务必设置 CANN 相关环境变量 # 请务必设置 Ascend Driver 相关环境变量 # 请务必设置 PYTHONUNBUFFERED=1, 以免日志丢失 ENV PATH=$PATH:/usr/local/Ascend/nnae/latest/bin:/usr/local/Ascend/nnae/latest/compiler/ccec_compiler/bin:/home/ma-user/miniconda3/bin \ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/nnae/latest/lib64:/usr/local/Ascend/nnae/latest/lib64/plugin/opskernel:/usr/local/Ascend/nnae/latest/lib64/plugin/nnengine \ PYTHONPATH=$PYTHONPATH:/usr/local/Ascend/nnae/latest/python/site-packages:/usr/local/Ascend/nnae/latest/opp/built-in/op_impl/ai_core/tbe \ ASCEND_AICPU_PATH=/usr/local/Ascend/nnae/latest \ ASCEND_OPP_PATH=/usr/local/Ascend/nnae/latest/opp \ ASCEND_HOME_PATH=/usr/local/Ascend/nnae/latest \ PYTHONUNBUFFERED=1 # 设置容器镜像默认用户与工作目录 USER ma-user WORKDIR /home/ma-user
关于 Dockerfile 文件编写的更多指导内容参见 Docker 官方文档。
确认已创建完成 Dockerfile 文件。此时 context 文件夹内容如下。
context ├── Ascend-cann-nnae_6.3.RC2_linux-aarch64.run ├── Dockerfile ├── mindspore-2.1.1-cp37-cp37m-linux_aarch64.whl ├── Miniconda3-py37_4.10.3-Linux-aarch64.sh ├── pip.conf └── Ubuntu-Ports-bionic.list
构建容器镜像。在 Dockerfile 文件所在的目录执行如下命令构建容器镜像 。
1 |
docker build . -t mindspore:2.1.1-cann6.3.RC2 |
构建过程结束时出现如下构建日志说明镜像构建成功。
Successfully tagged mindspore:2.1.1-cann6.3.RC2
将制作完成的镜像上传至SWR服务,具体参见Step4 上传镜像至SWR。
父主题: 示例:从 0 到 1 制作自定义镜像并用于训练(MindSpore+Ascend)
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家