Paso 2 Crear una imagen personalizada
Esta sección describe cómo editar un Dockerfile, usarlo para crear una imagen y usar la imagen creada para crear una instancia de notebook. Para obtener detalles sobre cómo editar un Dockerfile, véase la Referencia de Dockerfile.
Requisitos previos
Ha preparado un servidor de Docker según Paso 1 Preparar un servidor de Docker y configurar un entorno.
Consulta de imágenes base (omita este paso para imágenes de terceros)
Para obtener más información sobre las imágenes de base de ModelArts, véase la Lista de imágenes de base de notebook. Verifique la URL de la imagen en la sección correspondiente según el tipo de motor de la imagen preestablecida.
Creación de una imagen
- Acceda a SWR.
- Inicie sesión en la consola de SWR.
- En el panel de navegación de la izquierda, elija Dashboard y haga clic en Generate Login Command en el extremo superior derecho. En la página mostrada, copie el comando de inicio de sesión.
Figura 1 Obtención del comando de inicio de sesión
- El período de validez del comando de inicio de sesión generado es de 24 horas. Para obtener un comando de inicio de sesión válido a largo plazo, vea Obtención de un comando de inicio de sesión con validez a largo plazo. Después de obtener un comando de inicio de sesión válido a largo plazo, los comandos de inicio de sesión temporales seguirán siendo válidos mientras estén en sus períodos de validez.
- El nombre de dominio al final del comando de inicio de sesión es la dirección del repositorio de imágenes. Registre la dirección para uso posterior.
- Ejecute el comando de inicio de sesión en la máquina donde está instalado el motor de contenedor.
El mensaje "Login Succeeded" aparecerá en pantalla cuando el inicio de sesión sea exitoso.
- Extraiga una imagen base o una imagen de terceros. A continuación se utiliza una imagen de terceros como ejemplo.
docker pull swr.ap-southeast-1.myhuaweicloud.com/notebook-xxx/ubuntu:18.04 #Your organization name and image
- Compile un Dockerfile.
Ejecute el comando vim para crear un Dockerfile. Si se utiliza una imagen base de ModelArts, véase Dockerfile en una imagen base de ModelArts para obtener detalles sobre el Dockerfile.
Si se utiliza una imagen de terceros, agregue el usuario ma-user cuyo UID es 1000 y el grupo de usuarios ma-group cuyo GID es 100. Para más detalles, véase Dockerfile en una imagen base que no es ModelArts.
En este caso, se instalarán PyTorch 1.8, FFmpeg 3 y GCC 8 en una imagen de Ubuntu para crear una imagen de IA.
- Construya una imagen.
Ejecute el comando docker build para crear una nueva imagen a partir del Dockerfile. La descripción de los parámetros del comando es la siguiente:
- -t especifica la nueva ruta de acceso de la imagen, incluida la información de la región, el nombre de la organización, el nombre de la imagen y la versión. Configure este parámetro según el escenario de la vida real. Utilice una dirección de SWR completa para la depuración y el registro.
- -f especifica el nombre de Dockerfile. Configure este parámetro según el escenario de la vida real.
- . al final especifica que el contexto es el directorio actual. Configure este parámetro según el escenario de la vida real.
docker build -t swr.ap-southeast-1.myhuaweicloud.com/notebook-xxx/pytorch_1_8:v1 -f Dockerfile .
Figura 2 Imagen creada
Dockerfile en una imagen base de ModelArts
Ejecute el comando vim para crear un Dockerfile. Si ModelArts proporciona la imagen base, el contenido del Dockerfile es el siguiente:
FROM swr.ap-southeast-1.myhuaweicloud.com/atelier/notebook2.0-pytorch-1.4-kernel-cp37:3.3.3-release-v1-20220114 USER root # section1: config apt source RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \ echo -e "deb http://repo.huaweicloud.com/ubuntu/ bionic main restricted\ndeb http://repo.huaweicloud.com/ubuntu/ bionic-updates main restricted\ndeb http://repo.huaweicloud.com/ubuntu/ bionic universe\ndeb http://repo.huaweicloud.com/ubuntu/ bionic-updates universe\ndeb http://repo.huaweicloud.com/ubuntu/ bionic multiverse\ndeb http://repo.huaweicloud.com/ubuntu/ bionic-updates multiverse\ndeb http://repo.huaweicloud.com/ubuntu/ bionic-backports main restricted universe multiverse\ndeb http://repo.huaweicloud.com/ubuntu bionic-security main restricted\ndeb http://repo.huaweicloud.com/ubuntu bionic-security universe\ndeb http://repo.huaweicloud.com/ubuntu bionic-security multiverse" > /etc/apt/sources.list && \ apt-get update # section2: install ffmpeg and gcc RUN apt-get -y install ffmpeg && \ apt -y install gcc-8 g++-8 && \ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 && \ rm $HOME/.pip/pip.conf USER ma-user # section3: configure conda source and pip source RUN echo -e "channels:\n - defaults\nshow_channel_urls: true\ndefault_channels:\n - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main\n - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r\n - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2\ncustom_channels:\n conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud" > $HOME/.condarc && \ echo -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\n[install]\ntrusted-host = https://pypi.tuna.tsinghua.edu.cn" > $HOME/.pip/pip.conf # section4: create a conda environment(only support python=3.7) and install pytorch1.8 RUN source /home/ma-user/anaconda3/bin/activate && \ conda create -y --name pytorch_1_8 python=3.7 && \ conda activate pytorch_1_8 && \ pip install torch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 && \ conda deactivate
Dockerfile en una imagen base que no es ModelArts
Si se utiliza una imagen de terceros, agregue el usuario ma-user cuyo UID es 1000 y el grupo de usuarios ma-group cuyo GID es 100 al Dockerfile. Si el UID 1000 o el GID 100 de la imagen base ha sido utilizado por otro usuario o grupo de usuarios, elimine el usuario o grupo de usuarios. El usuario y el grupo de usuarios se han agregado al Dockerfile en este caso. Se pueden usar directamente.
Solo necesita establecer el usuario ma-user cuyo UID es 1000 y el grupo de usuarios ma-group cuyo GID es 100 y conceda la lectura, escritura, y ejecute permisos en el directorio de destino para el usuario ma-user.
Ejecute el comando vim para crear un Dockerfile y agregar una imagen de terceros (no ModelArts) como imagen base, por ejemplo, ubuntu 18.04. El contenido del Dockerfile es el siguiente:
# Replace it with the actual image version. FROM ubuntu:18.04 # Set the user ma-user whose UID is 1000 and the user group ma-group whose GID is 10 USER root RUN default_user=$(getent passwd 1000 | awk -F ':' '{print $1}') || echo "uid: 1000 does not exist" && \ default_group=$(getent group 100 | awk -F ':' '{print $1}') || echo "gid: 100 does not exist" && \ if [ ! -z ${default_user} ] && [ ${default_user} != "ma-user" ]; then \ userdel -r ${default_user}; \ fi && \ if [ ! -z ${default_group} ] && [ ${default_group} != "ma-group" ]; then \ groupdel -f ${default_group}; \ fi && \ groupadd -g 100 ma-group && useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user && \ # Grant the read, write, and execute permissions on the target directory to the user ma-user. chmod -R 750 /home/ma-user #Configure the APT source and install the ZIP and Wget tools (required for installing conda). RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \ echo "deb http://repo.huaweicloud.com/ubuntu/ bionic main restricted\ndeb http://repo.huaweicloud.com/ubuntu/ bionic-updates main restricted\ndeb http://repo.huaweicloud.com/ubuntu/ bionic universe\ndeb http://repo.huaweicloud.com/ubuntu/ bionic-updates universe\ndeb http://repo.huaweicloud.com/ubuntu/ bionic multiverse\ndeb http://repo.huaweicloud.com/ubuntu/ bionic-updates multiverse\ndeb http://repo.huaweicloud.com/ubuntu/ bionic-backports main restricted universe multiverse\ndeb http://repo.huaweicloud.com/ubuntu bionic-security main restricted\ndeb http://repo.huaweicloud.com/ubuntu bionic-security universe\ndeb http://repo.huaweicloud.com/ubuntu bionic-security multivers e" > /etc/apt/sources.list && \ apt-get update && \ apt-get install -y zip wget #Modifying the system Configuration of the image (required for creating the Conda environment) RUN rm /bin/sh && ln -s /bin/bash /bin/sh #Switch to user ma-user , download miniconda from the Tsinghua repository, and install miniconda in /home/ma-user. USER ma-user RUN cd /home/ma-user/ && \ wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh && \ bash Miniconda3-4.6.14-Linux-x86_64.sh -b -p /home/ma-user/anaconda3 && \ rm -rf Miniconda3-4.6.14-Linux-x86_64.sh #Configure the conda and pip sources RUN mkdir -p /home/ma-user/.pip && \ echo -e "channels:\n - defaults\nshow_channel_urls: true\ndefault_channels:\n - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main\n - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r\n - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2" > /home/ma-user/.condarc && \ echo -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\n[install]\ntrusted-host = https://pypi.tuna.tsinghua.edu.cn" > /home/ma-user/.pip/pip.conf #Create the conda environment and install the Python third-party package. The ipykernel package is mandatory for starting a kernel. RUN source /home/ma-user/anaconda3/bin/activate && \ conda create -y --name pytorch_1_8 python=3.7 && \ conda activate pytorch_1_8 && \ pip install torch==1.8.1 torchvision==0.9.1 && \ pip install ipykernel==6.7.0 && \ conda init bash && \ conda deactivate #Install FFmpeg and GCC USER root RUN apt-get -y install ffmpeg && \ apt -y install gcc-8 g++-8