• Русский
  • Использование Kubeflow Notebooks

    Kubeflow Notebooks предоставляют Kubernetes-нативную среду Jupyter для дата-сайентистов, позволяя разрабатывать, обучать и развёртывать модели машинного обучения. Каждый сервер блокнотов запускается как отдельный Pod в вашем namespace, обеспечивая изоляцию и выделенные ресурсы.

    ПРИМЕЧАНИЕ: Рекомендуется использовать Alauda AI Workbench для более интегрированного опыта с дополнительными возможностями, такими как типы ресурсов, конфигурации и лучшая интеграция с другими компонентами. Тем не менее, вы также можете использовать нативные Kubeflow Notebooks, если предпочитаете более лёгкую настройку или нуждаетесь в специфичных функциях исходного проекта.

    Концепции

    • Notebook Server: экземпляр JupyterLab, работающий в контейнере.
    • Custom Image: можно использовать стандартные предустановленные образы (например, с TensorFlow, PyTorch) или предоставить собственный Docker-образ с нужными библиотеками.
    • Persistent Storage: по умолчанию серверы блокнотов подключаются к Persistent Volume Claims (PVC) для хранения рабочего каталога (обычно /home/jovyan). Это гарантирует сохранность ваших блокнотов и данных даже при перезапуске или обновлении сервера.

    Создание Notebook Server

    1. Доступ к панели управления:
      Перейдите в раздел Notebooks на панели управления Kubeflow.

    2. Новый блокнот:
      Нажмите New Notebook. Убедитесь, что выбран правильный namespace в верхней части панели, где вы хотите создать сервер блокнотов.

    3. Настройка сервера:

      • Name: Введите уникальное имя для сервера блокнотов.
      • Image:
        • Select Type: Выберите тип образа, включая JupyterLab, Visual Studio Code или RStudio.
        • Select Image: Выберите из списка предустановленных образов или укажите собственный, предоставив URL Docker-образа.
      • CPU / RAM: Выделите ресурсы CPU и памяти в соответствии с нагрузкой. Начинайте с малого (например, 1 CPU, 2 ГБ RAM) и увеличивайте при необходимости.
      • GPUs: Запросите GPU (например, NVIDIA), если планируете запускать задачи глубокого обучения или инференса, требующие ускорения.
      • Workspace Volume: Этот том монтируется в ваш домашний каталог (/home/jovyan). Создайте новый том (по умолчанию) или подключите существующий для доступа к предыдущей работе.
      • Data Volumes: (Опционально) Подключите дополнительные существующие PVC для доступа к большим наборам данных без копирования в рабочее пространство.
      • Configurations: (Опционально) Выберите PodDefaults (если доступны) для внедрения общих конфигураций, таких как учётные данные S3, настройки Git или переменные окружения.
    4. Запуск:
      Нажмите Launch. Сервер будет создан. Дождитесь, пока статус не станет Running (зелёный).

    Подключение к блокноту

    Когда статус сервера станет Running:

    1. Нажмите Connect.
    2. Откроется интерфейс JupyterLab/VS Code/RStudio в новой вкладке браузера.
    3. Теперь вы можете создавать блокноты Python 3, открывать терминал или управлять файлами.

    Управление окружением

    Установка Python-пакетов

    Хотя вы можете устанавливать пакеты в домашний каталог для сохранения, лучшей практикой является использование кастомного образа для воспроизводимости.

    Создайте каталог "venv" в домашнем каталоге и установите пакеты туда:

    python -m venv ~/venv
    source ~/venv/bin/activate
    python -m pip install transformers datasets

    При запуске новой сессии терминала не забудьте активировать виртуальное окружение для доступа к установленным пакетам.

    Чтобы использовать виртуальное окружение в Jupyter-блокнотах, установите ipykernel и создайте новый kernel:

    source ~/venv/bin/activate
    python -m pip install ipykernel
    python -m ipykernel install --user --name=venv --display-name "Python (venv)"

    Затем в вашем Jupyter-блокноте можно выбрать kernel "Python (venv)" для использования пакетов из виртуального окружения.

    Виртуальные окружения сохраняются в домашнем каталоге, поэтому будут доступны даже после остановки и перезапуска сервера блокнотов. Однако, если нужно делиться окружением между несколькими серверами или обеспечить лучшую воспроизводимость, рассмотрите возможность создания кастомного Docker-образа с предустановленными пакетами.

    Использование кастомных образов

    Для production-сред или сложных зависимостей (например, системных библиотек) создайте Docker-образ со всеми необходимыми библиотеками и используйте его как Custom Image при создании блокнота. Это обеспечит точную воспроизводимость.

    Управление конфигурациями (PodDefaults)

    Kubeflow использует ресурсы PodDefault (часто обозначаемые как Configurations в UI) для внедрения общих конфигураций — таких как переменные окружения, тома и точки монтирования — в блокноты. Это стандартный способ безопасно предоставлять учётные данные для Object Storage (S3, MinIO) без жёсткого кодирования в блокнотах.

    Создание PodDefault

    Вы можете создать PodDefault, применив YAML-манифест.

    Определите PodDefault, который выбирает pod'ы с определённой меткой.

    apiVersion: kubeflow.org/v1alpha1
    kind: PodDefault
    metadata:
      name: add-gcp-secret
      namespace: MY_PROFILE_NAMESPACE
    spec:
     selector:
      matchLabels:
        add-gcp-secret: "true"
     desc: "add gcp credential"
     volumeMounts:
     - name: secret-volume
       mountPath: /secret/gcp
     volumes:
     - name: secret-volume
       secret:
        secretName: gcp-secret

    Применение конфигурации

    При создании нового Notebook Server:

    1. Прокрутите до раздела Configurations.
    2. Вы увидите список доступных PodDefaults (например, s3-access).
    3. Отметьте нужный для применения.

    Это автоматически внедрит указанные переменные окружения или тома в контейнер блокнота.

    Доступ к данным

    Использование смонтированных томов

    Если вы подключили том с данными (PVC) при создании, он будет доступен по указанной точке монтирования.

    import pandas as pd
    
    # Предположим, что вы смонтировали том с данными в /home/jovyan/data
    df = pd.read_csv('/home/jovyan/data/dataset.csv')
    print(df.head())

    Использование Object Storage (S3 / MinIO)

    Для доступа к данным в S3-совместимом хранилище используйте библиотеки, такие как boto3 или s3fs. Если администратор настроил PodDefaults для учётных данных, переменные окружения (например, AWS_ACCESS_KEY_ID) будут автоматически заполнены.

    import os
    import s3fs
    import pandas as pd
    
    # Проверка, внедрены ли учётные данные
    print(os.getenv("AWS_S3_ENDPOINT"))
    
    # Чтение напрямую из S3
    fs = s3fs.S3FileSystem(
        client_kwargs={'endpoint_url': os.getenv('AWS_S3_ENDPOINT')},
        key=os.getenv('AWS_ACCESS_KEY_ID'),
        secret=os.getenv('AWS_SECRET_ACCESS_KEY')
    )
    
    with fs.open('s3://my-bucket/data/train.csv') as f:
        df = pd.read_csv(f)

    Лучшие практики

    • Останавливайте неиспользуемые серверы: Серверы блокнотов потребляют ресурсы кластера (особенно GPU), даже когда простаивают. Останавливайте их, если не работаете активно.
    • Интеграция с Git: Используйте расширение Git в JupyterLab (или терминал) для контроля версий блокнотов. Избегайте хранения больших наборов данных в Git.
    • Мониторинг ресурсов: Следите за использованием ресурсов. Если ядро часто падает (OOM), возможно, нужно остановить сервер и перезапустить с увеличенными лимитами памяти.
    • Очистка: Периодически удаляйте старые серверы блокнотов и связанные с ними PVC, если данные больше не нужны.