Управление жизненным циклом моделей машинного обучения (часть 3)

В предыдущей статье из этой серии MLOps мы обсуждали важную часть конвейера проектов машинного обучения, а именно CI/CD.

Чтобы получить общую картину, мы обсудим пример конвейера CI/CD или рабочего процесса. в GitHub, так что сосредоточьтесь на освоении этой темы.

Настройка CI/CD через GitHub

Чтобы настроить CI/CD в GitHub, вы можете использовать GitHub Actions. GitHub Actions – это платформа, позволяющая автоматизировать рабочие процессы разработки программного обеспечения с помощью кода. С помощью GitHub Actions вы можете создавать настраиваемые рабочие процессы, которые автоматически создают, тестируют и развертывают ваш код всякий раз, когда в базу кода вносятся изменения.

Вот основные шаги по настройке CI/CD в GitHub с помощью GitHub Actions:

  1. Создайте репозиторий GitHub для своего проекта.
  2. Создайте каталог .github/workflows в корне репозитория.
  3. Создайте файл YAML в каталоге .github/workflows, который определяет ваш рабочий процесс. В этом файле YAML должно быть указано событие, запускающее рабочий процесс, задания, которые будет выполнять рабочий процесс, и шаги, которые будет выполнять каждое задание.
  4. Зафиксируйте файл YAML в своем репозитории.
  5. Всякий раз, когда происходит триггерное событие (например, отправка в определенную ветку или создание запроса на вытягивание), GitHub автоматически выполняет рабочий процесс, определенный в вашем файле YAML.
  6. Рабочий процесс будет выполнять указанные задания и шаги, такие как сборка и тестирование кода, а также его развертывание в производственной среде.
  7. Вы можете отслеживать ход своего рабочего процесса на панели инструментов GitHub Actions, которая показывает состояние каждого задания и шага, а также любые возникающие ошибки или предупреждения.

Пример файла Workflow

Этот скрипт YAML создает базовый конвейер CI/CD, который включает создание образа Docker и его развертывание, >создание нового выпуска в GitHub и обновление примечаний к выпуску со сводкой изменений, внесенных в последний >совершить.

name: Build and Deploy

on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Build Docker image
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: username/repository:${{ github.sha }}
      - name: Create release
        if: github.event_name == 'push' && github.ref == 'refs/heads/main'
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: v${{ github.ref }}
          release_name: Release ${{ github.ref }}
          draft: false
          prerelease: false
          body: |
            Changes:
            - Added new features
            - Bug fixes

Давайте разберем этот файл .yaml и объясним каждый его блок.

  1. name: это имя действия GitHub, которое будет отображаться на вкладке «Действия» вашего репозитория GitHub.
  2. on: указывает события, которые запускают рабочий процесс. В этом случае рабочий процесс будет запускаться при создании запроса на вытягивание в ветке main и при отправке кода в ветку main.
  3. jobs: В этом разделе определяются задания, которые будут выполняться как часть рабочего процесса.
  4. build-and-deploy: Это имя задания, которое будет выполнено.
  5. runs-on: указывает среду, в которой будет выполняться задание. В этом случае задание будет выполняться в среде операционной системы Ubuntu.
  6. steps: В этом разделе определяются шаги, которые будет выполнять задание.
  7. name: это имя первого шага, который будет извлекать код из репозитория.
  8. uses: указывает действие, которое будет использоваться для проверки кода. В этом случае будет использовано действие actions/checkout@v2.
  9. name: это название второго шага, который создаст образ Docker.
  10. uses: указывает действие, которое будет использоваться для создания образа Docker. В этом случае будет использовано действие docker/build-push-action@v2.
  11. with: В этом разделе представлены дополнительные параметры конфигурации для действия сборки Docker. В этом случае он указывает контекст сборки (текущий каталог), следует ли помещать образ в реестр (true), а также имя и тег образа (username/repository:${{ github.sha }}).
  12. name: Это название третьего шага, который создаст новый релиз в GitHub.
  13. if: указывает условие, при котором будет выполняться шаг. В этом случае шаг будет выполнен только тогда, когда код будет помещен в ветку main.
  14. uses: указывает действие, которое будет использоваться для создания выпуска. В этом случае будет использовано действие actions/create-release@v1.
  15. env: В этом разделе представлены переменные среды, которые будут использоваться действием создания-выпуска. В этом случае он указывает токен GitHub, который хранится как секрет в репозитории.
  16. with: В этом разделе представлены дополнительные параметры конфигурации для действия «создать-выпустить». В этом случае он указывает имя тега (на основе ветки и SHA фиксации), имя выпуска, создание чернового или предварительного выпуска, а также примечания к выпуску.

Примечание

Обычно, если вы работаете в компании, вы не можете отправить свой образ ML в Docker Hub, поскольку это общедоступный репозиторий, поэтому вместо этого вы отправляете свой образ поставщику облачных служб, которому вы доверяете. повторное использование (если вы используете AWS, вы нажимаете на ECR)

Если вам понравилась эта статья, спасибо!

Пожалуйста, аплодируйте и подпишитесь, чтобы читать больше интересного контента с искусственным интеллектом!