Требования для запуска ноутбуков Google Cloud AI Platform с настраиваемым образом докера
В ноутбуках на платформе AI пользовательский интерфейс позволяет выбрать настраиваемое изображение для запуска. Если вы сделаете это, вы увидите информационное окно, в котором говорится, что контейнер "должен соответствовать определенным техническим требованиям":
Я предполагаю, что это означает, что у них есть необходимая точка входа, незащищенный порт, команда запуска jupyterlab или что-то еще, но я не могу найти документацию о том, каковы требования на самом деле.
Я пытался реконструировать его без особой удачи. я nmap
Редактировал стандартный экземпляр и увидел, что у него открыт порт 8080, но установил мой образ CMD
запустить Jupyter Lab 0.0.0.0:8080
не сделал трюк. Когда я нажимаю "Открыть JupyterLab" в пользовательском интерфейсе, я получаю 504.
У кого-нибудь есть ссылка на соответствующие документы или опыт работы с этим в прошлом?
2 ответа
Есть два способа создания пользовательских контейнеров:
Создание производного контейнера
Если вам нужно только установить дополнительные пакеты, создайте Dockerfile, полученный из одного из стандартных образов (например, FROM gcr.io/deeplearning-platform-release/tf-gpu.1-13:latest), затем добавьте RUN Команды для установки пакетов с использованием conda/pip/jupyter.
Базовая среда conda уже добавлена в путь, поэтому нет необходимости активировать conda init/conda, если вам не нужно настраивать другую среду. Дополнительные сценарии / переменные динамической среды, которые необходимо запустить до запуска среды, можно добавить в /env.sh, который поставляется как часть точки входа.
Например, предположим, что у вас есть пользовательское колесо TensorFlow, которое вы хотите использовать вместо встроенного двоичного файла TensorFlow. Если вам не нужны дополнительные зависимости, ваш Dockerfile будет похож на:
Dockerfile.example
FROM gcr.io/deeplearning-platform-release/tf-gpu:latest
RUN pip uninstall -y tensorflow-gpu && \
pip install -y /path/to/local/tensorflow.whl
Затем вам нужно будет создать и отправить его куда-нибудь, доступный вашей учетной записи службы GCE.
PROJECT="my-gcp-project"
docker build . -f Dockerfile.example -t "gcr.io/${PROJECT}/tf-custom:latest"
gcloud auth configure-docker
docker push "gcr.io/${PROJECT}/tf-custom:latest"
Строительный контейнер с нуля
Основное требование заключается в том, что контейнер должен предоставлять службу через порт 8080.
Прокси-агент sidecar, который выполняется на виртуальной машине, будет пересылать запросы только на этот порт.
При использовании Jupyter вы также должны убедиться, что ваш jupyter_notebook_config.py настроен так:
c.NotebookApp.token = ''
c.NotebookApp.password = ''
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8080
c.NotebookApp.allow_origin_pat = (
'(^https://8080-dot-[0-9]+-dot-devshell\.appspot\.com$)|'
'(^https://colab\.research\.google\.com$)|'
'((https?://)?[0-9a-z]+-dot-datalab-vm[\-0-9a-z]*.googleusercontent.com)')
c.NotebookApp.allow_remote_access = True
c.NotebookApp.disable_check_xsrf = False
c.NotebookApp.notebook_dir = '/home'
Это отключает аутентификацию на основе токенов записной книжки (вместо этого аутентификация обрабатывается через oauth-логин на прокси-сервере) и разрешает перекрестные запросы из трех источников: веб-просмотр Cloud Shell, colab (см. Этот пост в блоге) и прокси-сервер сервиса Cloud Notebooks. Только третья требуется для обслуживания ноутбука; первые два поддерживают альтернативные шаблоны доступа.
Чтобы завершить ответ Zain, ниже вы можете найти минимальный пример с использованием официального изображения Jupyter, вдохновленного этим репо https://github.com/doitintl/AI-Platform-Notebook-Using-Custom-Container:
Dockerfile
FROM jupyter/base-notebook:python-3.9.5
EXPOSE 8080
ENTRYPOINT ["jupyter", "lab", "--ip", "0.0.0.0", "--allow-root", "--config", "/etc/jupyter/jupyter_notebook_config.py"]
COPY jupyter_notebook_config.py /etc/jupyter/
jupyter_notebook_config.py
(почти то же самое, что и Zain, но с дополнительным шаблоном, обеспечивающим связь с ядром; без него связь не работала)
c.NotebookApp.ip = '*'
c.NotebookApp.token = ''
c.NotebookApp.password = ''
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8080
c.NotebookApp.allow_origin_pat = '(^https://8080-dot-[0-9]+-dot-devshell\.appspot\.com$)|(^https://colab\.research\.google\.com$)|((https?://)?[0-9a-z]+-dot-datalab-vm[\-0-9a-z]*.googleusercontent.com)|((https?://)?[0-9a-z]+-dot-[\-0-9a-z]*.notebooks.googleusercontent.com)|((https?://)?[0-9a-z\-]+\.[0-9a-z\-]+\.cloudshell\.dev)|((https?://)ssh\.cloud\.google\.com/devshell)'
c.NotebookApp.allow_remote_access = True
c.NotebookApp.disable_check_xsrf = False
c.NotebookApp.notebook_dir = '/home'
c.Session.debug = True
И, наконец, подумайте об этой странице при устранении неполадок: https://cloud.google.com/notebooks/docs/troubleshooting