🐥

GitHub Actionsを使ったMLOpsのCI/CD設定ガイド

に公開

MLOpsでは、機械学習モデルのトレーニングやデプロイを自動化することが重要です。本記事では、GitHub Actionsを活用して、モデルの継続的インテグレーション(CI)と継続的デプロイ(CD)を行う方法を細かく解説します。


1. GitHub Actionsとは?

GitHub Actionsは、リポジトリの変更に応じて自動的にジョブを実行できるCI/CDツールです。機械学習のワークフローでは、以下のようなタスクを自動化できます。

MLOpsにおけるGitHub Actionsの活用例

  • モデルのトレーニングを自動実行
  • モデルの精度評価を自動化
  • Dockerイメージのビルドとプッシュ
  • Kubernetes(K8s)クラスタやAWS/GCPへ自動デプロイ
  • モニタリングの自動化(Prometheus, Grafanaなど)

2. MLOpsでのGitHub Actionsワークフロー構成

MLOpsでのGitHub Actionsの一般的な流れ

1. 開発者がコードをプッシュ(mainブランチ or featureブランチ)
2. GitHub Actionsがトリガーされ、以下のジョブが実行
   ├── データの前処理
   ├── モデルのトレーニング
   ├── モデルの精度評価
   ├── Dockerコンテナのビルド・プッシュ
   ├── 推論APIサーバーにデプロイ(AWS/GCP/K8s)
   ├── モニタリング設定(Prometheus/Grafana)

必要な環境変数(.env ファイル例)

AWS_ACCESS_KEY_ID=xxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxx
DOCKER_USERNAME=your_dockerhub_username
DOCKER_PASSWORD=your_dockerhub_password

3. GitHub Actionsのワークフロー設定(例)

ワークフローの定義ファイル(.github/workflows/mlops_pipeline.yml

name: MLOps Pipeline

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

jobs:
  train_model:
    runs-on: ubuntu-latest
    steps:
      - name: リポジトリのチェックアウト
        uses: actions/checkout@v3
      
      - name: Python環境のセットアップ
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      
      - name: 依存ライブラリのインストール
        run: pip install -r requirements.txt
      
      - name: モデルのトレーニング
        run: python train.py
      
      - name: モデルの精度評価
        run: python evaluate.py

  build_and_push_docker:
    runs-on: ubuntu-latest
    needs: train_model
    steps:
      - name: リポジトリのチェックアウト
        uses: actions/checkout@v3
      
      - name: Docker Hubへログイン
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
      
      - name: Dockerイメージのビルド
        run: docker build -t your_dockerhub_username/mlops-model:latest .
      
      - name: Docker Hubへプッシュ
        run: docker push your_dockerhub_username/mlops-model:latest

  deploy_model:
    runs-on: ubuntu-latest
    needs: build_and_push_docker
    steps:
      - name: Kubernetesへデプロイ
        run: |
          kubectl apply -f k8s/deployment.yaml
          kubectl rollout status deployment/mlops-model

4. 主要なポイント解説

モデルトレーニングジョブ(train_model)

  • train.py を実行し、学習したモデルを作成。
  • evaluate.py でモデルの評価。
  • 結果をGitHub ActionsのアーティファクトやS3へ保存することも可能。

Dockerイメージのビルドとプッシュ(build_and_push_docker)

  • モデルを含むAPIをDockerイメージ化。
  • docker push でDocker Hubへプッシュし、デプロイ準備。

Kubernetesへデプロイ(deploy_model)

  • kubectl apply -f k8s/deployment.yaml でモデルをデプロイ。
  • kubectl rollout status deployment/mlops-model で正常デプロイを確認。

5. GitHub ActionsのSecrets設定

セキュリティのため、AWSやDockerの認証情報はGitHubのSecretsに保存し、ワークフローで利用します。

Secretsの設定方法

  1. GitHubリポジトリへアクセス
  2. SettingsSecrets and variablesActions
  3. New repository secret をクリックし、以下の値を追加
    • DOCKER_USERNAME: Docker Hubのユーザー名
    • DOCKER_PASSWORD: Docker Hubのパスワード
    • AWS_ACCESS_KEY_ID: AWSアクセスキー
    • AWS_SECRET_ACCESS_KEY: AWSシークレットキー

6. まとめ(MLOpsでGitHub Actionsを使うメリット)

  • 自動化の効率化:モデルのトレーニングからデプロイまで一連の流れを自動化。
  • 再現性の向上:同じ環境で実行されるため、環境差異が少なくなる。
  • CI/CDパイプラインの強化:GitHub上で簡単にMLパイプラインを構築。

GitHub Actionsを活用することで、MLOpsの運用がスムーズになり、モデルの継続的デプロイが容易になります。ぜひ活用してみてください!

Discussion