Skip to content
Latchkey

CIにおけるモデルトレーニングとは? パイプラインでのトレーニングジョブの実行を解説

CIにおけるモデルトレーニングとは、機械学習のトレーニングステップを、ラップトップ上で手作業で行うのではなく、自動化された再現可能なパイプラインjobとして実行することを意味します。

自分のマシンでスクリプトを実行してモデルをトレーニングする方法は、ある時点まではうまくいきます。しかし結果を再現するのは難しく、どのデータがどのモデルを生み出したのか誰も分からず、同僚があなたの結果を再構築することもできません。トレーニングをCIに移すことで、他のどのビルドステージとも同じように、バージョン管理された自動化されたステップへと変わります。

その意味するところ

CIにおけるモデルトレーニングとは、トレーニングの実行 - データ、コード、ハイパーパラメータ、環境 - を定義し、パイプラインがオンデマンドまたはスケジュールに従って実行できるようにする実践です。その出力は、トレーニング済みのモデルartifactと、それを正確に何が生み出したかの記録です。

なぜトレーニングをパイプラインに移すのか

パイプラインは、再現性(同じ入力が同じモデルを生み出す)、来歴(どのcommitとデータセットが各モデルを構築したかが分かる)、そして自動化(トレーニングをmergeごとまたは毎晩実行できる)をもたらします。また、CIがテストの合格でmergeにゲートをかけるのと同じように、評価メトリクスで昇格にゲートをかけることもできます。

リソース要件

ユニットテストのjobとは異なり、トレーニングは計算負荷が高いものです。ディープラーニングにはGPUが必要で、古典的なモデルには大量のCPUとメモリが必要になることがあります。トレーニングはまた、大きなデータセットやベースモデルをダウンロードします。こうした要件により、トレーニングjobを手頃な価格で高速に保つうえで、runnerの選択とキャッシュが中心的な役割を果たします。

メトリクスゲート付きのトレーニングステージ

よくあるパターンは、トレーニングし、評価し、モデルが十分に良くない場合はjobを失敗させることです。こうすることで、質の悪いモデルが登録されたりdeployされたりすることは決してありません。

Training with a quality gate
jobs:
  train:
    runs-on: gpu-large
    steps:
      - uses: actions/checkout@v4
      - run: dvc pull data/
      - run: python train.py --out model.pkl
      - run: python evaluate.py --min-accuracy 0.92

Latchkeyに関する注記

Latchkeyのマネージドrunnerを使えば、パイプラインの残りの部分は小型のrunnerで実行しつつ、トレーニングjobだけにGPUや大型のrunnerを割り当てられます。実行間でデータセットや学習済みの重みをキャッシュすることで、毎回ギガバイト単位のデータを再ダウンロードせずに済みます。そしてauto-retryが、そうでなければ高価なGPU実行を無駄にしてしまう不安定なデータ取得の失敗に対処します。

重要なポイント

  • CIにおけるモデルトレーニングは、トレーニングを手作業ではなく、自動化された再現可能なパイプラインjobとして実行します。
  • モデル構築に、再現性、来歴、そしてメトリクスに基づく昇格ゲートをもたらします。
  • トレーニングは計算負荷が高いため、GPUや大型のrunnerに加えて、データセットとモデルのキャッシュが不可欠です。

関連ガイド