Работа с кастомными Docker-образами
Docker registry используется для хранения кастомных Docker-образов. Такие кастомные образы с предустановленными зависимостями применяются в модуле Environments для создания пользовательских окружений (Jupyter Server на основе кастомного образа).
Важно
Не гарантируется, что при использовании кастомных образов приостановка Jupyter Server сработает корректно.
Кастомный образ собирается на основе любого базового образа, используемого на платформе. Подробнее см. Библиотеки в образах для Jupyter Server.
Для создания кастомного образа:
Сборка кастомного образа для Jupyter Server
Dockerfile — текстовый документ, который содержит все необходимые команды для сборки образа.
Docker-образ из Docker registry должен иметь приставку «jupyter-».
FROM {PROD_REGISTRY}/base/jupyter-cuda10.1-tf2.2.0-gpu-mlspace:latest # the base image from which the custom image will be built
apt-get install mypackage # packages required for installation
Важно
Не рекомендуется менять версию базовых пакетов — Horovod, TensorFlow, Apex, MXNet, TensorBoard, KServe, PyTorch.
Образы, доступные для Jupyter Server, представлены на странице Библиотеки в образах для Jupyter Server.
Рассмотрим примеры, как создать 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
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
Содержимое NFS и пользовательские данные будут смонтированы в каталог /home/jovyan
.
Этот каталог будет установлен в качестве рабочего.
Модули, расположенные внутри каталога соответствующей переменной PYTHON_LIB_PATH
, должны быть доступны для импорта интерпретатором Python.
По умолчанию это каталог /home/user/conda/lib/python3.7
.
В него при запуске контейнера в регионе будет скопирована клиентская функция client_lib
.
Важно
Не рекомендуется менять точку входа и ее расположение, по умолчанию это /home/user/script.sh
.
Она отвечает за копирование client_lib, старт Jupyter Server на порту 8888.
Создайте пользователя jovyan (uid 1000, gid 1000) и домашний каталог
/home/jovyan
. В этот каталог будет смонтировано хранилище пользователя. Все действия будут осуществляться из-под этого непривилегированного пользователя.Пример Docker-файла для создания кастомного образа из контейнера NVIDIA# We start with a basic image that already has PyTorch preinstalled and GPU support from NVIDIA FROM nvcr.io/nvidia/pytorch:22.12-py3 # Set the Moscow time for the container ENV TZ=Europe/Moscow # And update the time zone information in the system RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # Specify that all of the following commands must be executed as the root user USER root # Create a new group 'user' and a new user 'user' who is a member of this group RUN groupadd -g 1000 user RUN useradd -g user -u 1000 -m user # Create the necessary directories and change the owner to 'user' RUN mkdir -p /tmp/.jupyter_data && chown -R user /tmp/.jupyter_data && \ mkdir -p /tmp/.jupyter && chown -R user /tmp/.jupyter RUN mkdir -p /home/jovyan && chown -R user /home/jovyan # Copy the 'Interimage' directory to the container and change the owner to 'user' COPY InternImage /InternImage RUN chown -R user /InternImage # Update the list of packages in the system and already installed packages RUN apt-get update --fix-missing && apt-get upgrade -y &&\ echo "8" apt-get install -y software-properties-common && apt-get update # Install the necessary programs and libraries RUN DEBIAN_FRONTEND=noninteractive apt-get install tzdata -qy &&\ apt install -qy \ python3-pip \ build-essential \ cmake \ git \ wget \ zip \ unzip \ unrar \ yasm \ python3-dev \ nano \ vim \ neovim \ pkg-config \ ffmpeg \ libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio &&\ apt upgrade -qy &&\ apt clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Set environment variables for Python ENV PYTHONUSERPATH="/home/user/.local" ENV PATH=$PYTHONHOME/bin:$PATH # Install Python libraries that will be required for work RUN pip3 install -U --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 RUN pip3 install -U --no-cache-dir \ openmim \ opencv-python-headless \ timm \ mmdet \ termcolor \ yacs \ pyyaml \ scipy \ pyyaml \ transformers \ huggingface_hub \ safetensors \ Pillow \ psutil \ PyYAML \ requests \ thop \ tqdm \ matplotlib # Change the user to 'user' again USER user # Launch Jupyter Notebook with certain settings when starting the container 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'
Создайте Docker-образ локально:
Запустить создание образаdocker build --tag 'jupyter-custom-image' .
Точка в конце команды означает, что в этом же каталоге должен находиться Docker-файл, созданный ранее.
Docker-файл должен называться так:
Dockerfile
.Проверьте созданный образ локально:
Запустить проверку созданного образаdocker run -p 8888:8888 -e NB_PREFIX="/notebook/aiхххххх-ххххх/jupyter-custom-image" -it jupyter-custom-image
Проверьте, что Jupyter Server запускаются на порту 8888 с нужным префиксом (переменная окружения
NB_PREFIX=/a100-mt/notebook/aiхххххх-ххxxx/mynotebookname
). Переменную окружения можно посмотреть в адресной строке после запуска Jupyter Server.
Перед началом работы аутентифицируйтесь в Docker registry из консоли с помощью команды:
docker login cr.msk.sbercloud.ru --username example@example.com --password examplepsswd
Где параметр example@example.com
— это email пользователя, а examplepsswd
— ключ, однократно передаваемый пользователю при нажатии на Сгенерировать ключ для Docker CLI.
Чтобы сгенерировать ключ для Docker CLI, существует два варианта.
В левом меню платформы перейдите
.Возле воркспейса, для которого нужно сгенерировать ключ, нажмите
и выберите Параметры разработчика.
Возле Docker CLI Key нажмите Сгенерировать ключ.
После генерации скопируйте ключ.
В левом меню перейдите
.Сгенерируйте ключ для Docker registry:
Если в Docker registry нет загруженных образов, вместо
виден значок
. Чтобы изменить ключ, необходимо сгенерировать новый, нажав Сгенерировать ключ для Docker CLI.
Если в Docker registry есть загруженные образы, нажмите
. В появившемся окне нажмите Сгенерировать ключ для Docker CLI.
После генерации скопируйте ключ.
Команду для использования тега можно просмотреть, нажав Push command в Docker registry.
docker push cr.msk.sbercloud.ru/хххххххх-хххх-хххх-хххх-хххххххххххх/jupyter-custom-image:test_tag
Эта команда позволяет загрузить образ jupyter-custom-image
с тегом test_tag
в Docker registry требуемого воркспейса.
Создание Jupyter Server из кастомного образа
Перейдите в
.На панели Jupyter Server нажмите Создать Jupyter Server. Откроется диалоговое окно с параметрами нового сервера.
В поле Название Jupyter Server введите имя нового сервера.
Установите требуемый тип Jupyter Server.
Задайте параметры нового сервера. В качестве Docker-образа выберите кастомный образ из Docker registry с приставкой «jupyter-».
Нажмите Создать и дождитесь инициализации сервера.