Кастомные Docker-образы
Важно
Не гарантируется стабильная работа приостановки Jupyter server при использовании кастомных образов.
Кастомный образ собирается на основе любого базового образа, используемого на платформе. Подробнее см. Образы, используемые на платформе ML Space.
Docker registry также используется для хранения кастомных Docker-образов. Кастомный образ собирается на основе любого базового образа с использованием необходимых пользователю зависимостей. Такие кастомные образы с предустановленными зависимостями применяются в модуле Environments для создания пользовательских окружений (Jupyter Server на основе кастомного образа).
Для создания кастомного образа необходимо:
Подготовить Dockerfile на локальной машине
Подготовить репозиторий для размещения образа
Собрать образ и загрузить его в Docker registry
Dockerfile
Dockerfile — текстовый документ, который содержит все необходимые команды для сборки образа. В общем случае этот документ выглядит так:
FROM {PROD_REGISTRY}/base/jupyter-cuda10.1-tf2.2.0-gpu-mlspace:latest #базовый образ, на основе которого собирается кастомный
apt-get install mypackage #необходимые пакеты для установки
Важно
В базовые образы предустановлены основные библиотеки для машинного обучения (tensorflow, pytorch и т.д.). Мы не рекомендуем менять версии предустановленных базовых пакетов.
Образы, доступные для Jupyter Server, представлены на странице Библиотеки в образах Jupyter Server.
Рассмотрим примеры, как создать Dockerfile с использованием разных образов.
Пример Dockerfile для создания образа из базового
FROM cr.msk.sbercloud.ru/aicloud-jupyter/jupyter-cuda10.1-tf2.2.0-mlspace:latest
USER root
RUN apt-get install mypackage
USER jovyan
Пример Dockerfile для создания образа с требуемыми атрибутами
FROM cr.msk.sbercloud.ru/aicloud-jupyter/jupyter-cuda10.0-tf1.15.0-mlspace:latest
LABEL maintainer="user_email_address"
USER root
ENV PATH=$PATH:/usr/games/
RUN apt update -y && apt install -y \
lolcat fortune cowsay
USER jovyan
Пример создания кастомного образа из контейнеров Nvidia
Создайте пользователя jovyan (uid 1000, gid 1000) и домашний каталог
/home/jovyan
. В этот каталог будет смонтировано хранилище пользователя. Все действия будут осуществляться из-под этого непривилегированного пользователя.RUN useradd jovyan -u 1000 -m --shell /bin/bash USER jovyan
Проверьте, что Jupyter Server запускаются на порту 8888 с нужным префиксом (переменная окружения
NB_PREFIX=/a100-mt/notebook/ai0001011-00xxx/mynotebookname
).
Docker file
FROM nvidia/pytorch:20.03-py3
USER root
# Add "jovyan" user (if you have other user with uid 1000 - replace it)
# /home/user/.local will hold python packages
RUN groupadd -g 1000 jovyan
RUN useradd -g jovyan -u 1000 -m jovyan
RUN mkdir -p /tmp/.jupyter_data && chown -R jovyan /tmp/.jupyter_data && \
mkdir -p /tmp/.jupyter && chown -R jovyan /tmp/.jupyter
# REMOVE
#RUN mkdir -p /home/user && chown -R jovyan /home/user
#
#ENV PYTHONUSERBASE="/home/user/.local"
#ENV PATH=$PYTHONUSERBASE/bin:$PATH
USER jovyan
ENV SHELL=/bin/bash
ENV JUPYTER_CONFIG_DIR=/tmp/.jupyter
ENV JUPYTER_DATA_DIR=/tmp/.jupyter_data
ENV JUPYTER_PATH=/tmp/.jupyter
# check that you have jupyter and jupyterlab
# RUN pip install --upgrade --no-cache-dir notebook==6.1.4 jupyterlab==2.2.9
# RUN jupyter serverextension enable --py jupyterlab
# !!! В базовых образах поддерживаются все инструменты, что есть на платформе ML Space - ssh, tensorboard, mlflow, и т.п. !!!
# DOCS if you want to connect with ssh to jupyter server run - cp /home/jovyan/.ssh_aicloud/authorized_keys /home/jovyan/.ssh/authorized_keys
# env | egrep -v "^(HOME=|USER=|MAIL=|LC_ALL=|LS_COLORS=|LANG=|HOSTNAME=|PWD=|TERM=|SHLVL=|LANGUAGE=|_=)" >> /etc/environment.d/60-aicloudenvs.conf
# /etc/init.d/ssh start
WORKDIR /home/jovyan
EXPOSE 8888
ENTRYPOINT ["/bin/bash"]
CMD ["jupyter notebook \
--notebook-dir=/home/jovyan \
--ip=0.0.0.0 \
--no-browser \
--allow-root \
--port=8888 \
--NotebookApp.token='' \
--NotebookApp.password='' \
--NotebookApp.base_url=${NB_PREFIX} \
--NotebookApp.allow_origin='https://mlspace.aicloud.sbercloud.ru'"]
Важно
Cодержимое NFS и пользовательские данные будут смонтированы в каталоге
/home/jovyan
. Данный каталог будет установлен в качестве рабочего.Модули, расположенные внутри каталога соответствующей переменной
PYTHON_LIB_PATH
должны быть доступны для импорта интерпретатором python. По умолчанию это каталог:/home/user/conda/lib/python3.7
. В него при запуске контейнера на кластере будет скопирована клиентская библиотекаclient_lib.py
.Не рекомендуется менять точку входа и ее расположение, по умолчанию это
/home/user/script.sh
. Она отвечает за копирование client_lib, старт Jupyter Server на порту 8888 и т.д.
Подготовка репозитория
Кастомные образы Jupyter Server необходимо размещать в репозиториях, в наименовании которых есть префикс «jupyter-».
Сборка кастомного образа и загрузка в Docker registry
Пользователь выполняет сборку кастомного образа (docker build), помечает образ тегом (docker tag) и загружает образ в реестр (docker push). См. Управление образами.