Kubeflow Pipelines позволяет создавать, развертывать и управлять сквозными рабочими процессами машинного обучения. Чтобы использовать пользовательский код в конвейере, вам необходимо поместить его в контейнер с помощью Docker. Это гарантирует, что ваш код будет легко развертываться, масштабироваться и управляться Kubernetes, базовой инфраструктурой для Kubeflow. В этом руководстве мы проведем вас через контейнеризацию вашего кода Python с помощью Docker и его интеграцию в конвейер Kubeflow.
Предпосылки
- Докер установлен на вашей локальной машине (Скачать с https://www.docker.com/get-started)
- Знакомство с программированием на Python
- Установлены и настроены конвейеры Kubeflow (следуйте нашему предыдущему руководству «Настройка конвейеров Kubeflow: пошаговое руководство»)
Шаг 1. Напишите свой скрипт Python
Создайте новый скрипт Python (например, data_processing.py
), содержащий следующий код:
import sys def process_data(input_data): return input_data.upper() if __name__ == "__main__": input_data = sys.argv[1] processed_data = process_data(input_data) print(f"Processed data: {processed_data}")
Этот сценарий принимает входную строку в качестве аргумента командной строки, преобразует ее в верхний регистр и печатает результат.
Шаг 2. Создайте Dockerfile
Создайте новый файл с именем Dockerfile
в том же каталоге, что и ваш скрипт Python, и добавьте следующее содержимое:
FROM python:3.7 WORKDIR /app COPY data_processing.py /app ENTRYPOINT ["python", "data_processing.py"]
Этот Dockerfile указывает, что базовым образом является python:3.7
, задает для рабочего каталога значение /app
, копирует сценарий Python в контейнер и устанавливает точку входа для выполнения сценария при запуске контейнера.
Шаг 3. Создайте образ Docker
Откройте терминал или командную строку, перейдите в каталог, содержащий Dockerfile и скрипт Python, и выполните следующую команду, чтобы создать образ Docker:
docker build -t your_username/data_processing:latest .
Замените your_username
своим именем пользователя Docker Hub или другим идентификатором. Эта команда создает образ Docker с указанным тегом и текущим каталогом в качестве контекста сборки.
Шаг 4. Протестируйте образ Docker
Протестируйте образ Docker, выполнив следующую команду:
docker run --rm your_username/data_processing:latest "hello world"
Это должно вывести:
Processed data: HELLO WORLD
Шаг 5. Отправка образа Docker в реестр контейнеров
Чтобы использовать образ Docker в конвейере Kubeflow, необходимо отправить его в реестр контейнеров, например Docker Hub, Google Container Registry или Amazon Elastic Container Registry. В этом уроке мы будем использовать Docker Hub.
Сначала войдите в Docker Hub с помощью командной строки:
docker login
При появлении запроса введите имя пользователя и пароль Docker Hub.
Затем отправьте образ Docker в Docker Hub:
docker push your_username/data_processing:latest
Шаг 6. Создайте конвейер Kubeflow с помощью образа Docker
Теперь, когда образ Docker доступен в реестре контейнеров, вы можете использовать его в конвейере Kubeflow. Создайте новый скрипт Python (например, custom_pipeline.py
) и добавьте следующий код:
import kfp from kfp import dsl def data_processing_op(input_data: str): return dsl.ContainerOp( name="Data Processing", image="your_username/data_processing:latest", arguments=[input_data], ) @dsl.pipeline( name="Custom Pipeline", description="A pipeline that uses a custom Docker image for data processing." ) def custom_pipeline(input_data: str = "hello world"): data_processing = data_processing_op(input_data) if __name__ == "__main__": kfp.compiler.Compiler().compile(custom_pipeline, "custom_pipeline.yaml")
Этот скрипт Python определяет конвейер с одним шагом, который использует пользовательский образ Docker, который мы создали ранее. Функция data_processing_op
принимает входную строку и возвращает объект ContainerOp
с указанным образом Docker и входными данными.
Шаг 7. Загрузите и запустите конвейер
- Получите доступ к панели мониторинга Kubeflow Pipelines, перейдя по URL-адресу, указанному в процессе установки.
- Нажмите на вкладку «Конвейеры» на левой боковой панели.
- Нажмите кнопку «Загрузить конвейер» в правом верхнем углу.
- В диалоговом окне «Конвейер загрузки» нажмите «Обзор» и выберите файл
custom_pipeline.yaml
, созданный на предыдущем шаге. - Нажмите «Загрузить», чтобы загрузить конвейер на платформу Kubeflow.
- После загрузки конвейера щелкните его имя, чтобы открыть страницу сведений о конвейере.
- Нажмите кнопку «Создать запуск», чтобы запустить новый запуск конвейера.
- На странице «Создать запуск» вы можете указать имя запуска и выбрать версию конвейера. Нажмите «Пуск», чтобы запустить конвейер.
Шаг 8. Отслеживание выполнения конвейера
После запуска конвейера вы будете перенаправлены на страницу «Сведения о запуске». Здесь вы можете отслеживать ход вашего конвейера, просматривать журналы для каждого шага и проверять выходные артефакты.
- На графике конвейера отображается состояние каждого шага конвейера с разными цветами, указывающими на успех, неудачу или состояние выполнения.
- Чтобы просмотреть журналы для определенного шага, щелкните шаг на графике конвейера, а затем щелкните вкладку «Журналы» на правой панели.
- Чтобы просмотреть артефакты вывода, щелкните шаг на графике конвейера, а затем щелкните вкладку «Артефакты» на правой панели.
Поздравляем! Вы успешно контейнеризировали свой код Python с помощью Docker и интегрировали его в конвейер Kubeflow. Теперь вы можете использовать возможности контейнеризации для создания более сложных конвейеров с пользовательским кодом, гарантируя, что ваши рабочие процессы машинного обучения будут масштабируемыми, переносимыми и простыми в обслуживании.
В этом руководстве мы провели вас через процесс контейнеризации вашего кода Python с помощью Docker и его интеграции в конвейер Kubeflow. Используя контейнеры, вы можете быть уверены, что ваш пользовательский код легко развертывается, обслуживается и масштабируется в различных средах. Продолжая работать с Kubeflow Pipelines, вы сможете изучать более продвинутые функции, создавать более сложные конвейеры и оптимизировать рабочие процессы машинного обучения.