Настройка Jupyter Hub для командной работы с AI/ML

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Настройка Jupyter Hub для командной работы с AI/ML
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    854
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Настройка JupyterHub для командной работы с AI/ML

JupyterHub — многопользовательский сервер Jupyter, где каждый участник команды получает изолированную среду с общим доступом к данным и GPU. Это решает типичную проблему ML-команд: "у меня всё работает локально, но на сервере не воспроизводится".

Установка на Kubernetes (Zero to JupyterHub)

# Добавление Helm репозитория
helm repo add jupyterhub https://hub.jupyter.org/helm-chart/
helm repo update

# config.yaml
cat > config.yaml << 'EOF'
hub:
  config:
    Authenticator:
      admin_users:
        - admin
    GitHubOAuthenticator:
      client_id: "your-github-client-id"
      client_secret: "your-github-client-secret"
      oauth_callback_url: "https://jupyter.company.com/hub/oauth_callback"
      allowed_organizations:
        - your-github-org

singleuser:
  image:
    name: jupyter/datascience-notebook
    tag: "python-3.11"
  profileList:
    - display_name: "CPU Standard (4 CPU, 16GB RAM)"
      description: "For EDA and light training"
      default: true
    - display_name: "GPU Instance (1x A100 40GB)"
      description: "For model training"
      kubespawner_override:
        extra_resource_limits:
          nvidia.com/gpu: "1"
    - display_name: "GPU Large (2x A100 80GB)"
      kubespawner_override:
        extra_resource_limits:
          nvidia.com/gpu: "2"
  storage:
    capacity: 50Gi
    homeMountPath: /home/jovyan

# Общее хранилище для датасетов (read-only для пользователей)
singleuser:
  extraVolumes:
    - name: shared-datasets
      persistentVolumeClaim:
        claimName: shared-datasets-pvc
        readOnly: true
  extraVolumeMounts:
    - name: shared-datasets
      mountPath: /data/shared
      readOnly: true
EOF

helm install jupyterhub jupyterhub/jupyterhub \
  --namespace jhub --create-namespace \
  --values config.yaml

Кастомные Docker-образы для ML

FROM jupyter/datascience-notebook:python-3.11

USER root
RUN apt-get update && apt-get install -y \
    libgomp1 \
    && rm -rf /var/lib/apt/lists/*

USER ${NB_UID}

# ML dependencies
RUN pip install --no-cache-dir \
    torch==2.2.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 \
    transformers==4.38.0 \
    datasets \
    accelerate \
    peft \
    mlflow==2.11.0 \
    dvc[s3] \
    great_expectations \
    lightgbm xgboost catboost \
    optuna \
    shap \
    wandb

# MLflow tracking server URL
ENV MLFLOW_TRACKING_URI=http://mlflow.internal:5000

# DVC remote config
COPY dvc_config /home/jovyan/.dvc/config

Управление ресурсами

ResourceQuota для Kubernetes namespace ограничивает суммарное потребление:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: jhub-quota
spec:
  hard:
    requests.nvidia.com/gpu: "8"    # Максимум 8 GPU одновременно
    limits.memory: "512Gi"
    requests.cpu: "64"

PriorityClass для GPU: исследовательские задачи имеют низкий приоритет, production-инференс — высокий.

Интеграция с ML-инфраструктурой

MLflow автоматически доступен из всех notebooks через переменную окружения. DVC настроен с корпоративным remote storage. Shared dataset папка с последними версиями датасетов монтируется read-only. Git pre-commit hooks установлены глобально для стандартизации кода.

Типичный результат: ML-команда из 10+ человек работает в унифицированной среде без "works on my machine" проблем, с общим доступом к GPU-ресурсам и централизованным трекингом экспериментов.