MLOps の概要: データとモデルのバージョニング

MLOps の概要: データとモデルのバージョニング

ソフトウェア エンジニアリングでは、変更を追跡し、追跡可能性を確保し、コラボレーションを可能にするためにバージョン管理を使用するのが一般的です。しかし、バージョン管理はソフトウェア開発に役立つだけでなく、機械学習 (ML) にも不可欠です。ソース コードのバージョン管理だけでなく、ML の重要な成果物であるデータとモデルのバージョン管理も必要です。
この記事では、バージョン管理全般について簡単に復習し、ML でのバージョン管理の使用方法について説明します。次に、データとモデルのバージョン管理が重要な理由について説明します。
ここで取り上げる内容は次のとおりです:

 目次

 
この記事は、MLOps に関連する短い記事シリーズの 3 番目です。機械学習における実験追跡ハイパーパラメータ最適化に関する以前の記事を必ず読んでください。

バージョン管理の基礎

ML でのデータとモデルのバージョン管理について詳しく説明する前に、バージョン管理の一般的な主要概念について復習しましょう。バージョン管理の定義、いくつかの主要な用語、バージョン管理が役立つ理由、および 3 種類のバージョン管理について説明します。

バージョン管理とは何ですか?

バージョン管理とは、時間の経過に伴ってファイルまたはプロジェクト フォルダーに加えられた変更を追跡および管理することを指します。 
バージョン管理の重要な概念は次のとおりです。
  • バージョン: 特定の時点におけるファイルまたはプロジェクトのスナップショット。
  • リポジトリ: ファイルまたはプロジェクトのすべてのバージョンが保存される場所。
  • コミット: ファイルまたはプロジェクトの新しいバージョンをリポジトリに保存するプロセス。
  • 履歴: ファイルまたはプロジェクトに加えられた変更の履歴。​​誰がいつ何を変更したか (オプションで変更された理由と影響) に関する情報が含まれます。

バージョン管理が必要な理由

バージョン管理を使用すると、ファイルやプロジェクトのさまざまなバージョンを保存するだけでなく、追跡可能性、再現性、ロールバック、デバッグ、コラボレーションなどのメリットが得られます。
  • 追跡可能性: 履歴ログを使用すると、誰が何をいつ変更したかをすぐに把握でき、理想的には変更の影響を確認できます。
  • 再現性: 特定の時点でどのバージョンのファイルまたはプロジェクトが使用されたかを把握しておくと、過去の結果を再現するのに役立ちます。
  • ロールバック: 異なるバージョン間をすばやく切り替えることができます。何か問題が発生した場合に以前の安定したバージョンに戻すことができるため、ロールバックに役立ちます。
  • 比較とデバッグ: 異なるバージョンを比較し、任意の 2 つのバージョン (たとえば、2 つのリリース) 間で何が変更されたかを確認できます。これはデバッグに役立ちます。
  • コラボレーション: バージョン管理の種類に応じて (バージョン管理の種類を参照)、チーム内でのコラボレーションが可能になります。貢献者はプロジェクトのスナップショットのコピー (ブランチ) を作成し、テストが成功した後にプロジェクト全体で変更を共有 (マージ)できます

バージョン管理の種類

バージョン管理にはさまざまな形態があり、それぞれに長所と短所があります。ファイルを手動でバージョン管理することもできますが、バージョン管理システムを使用するのが標準的な方法です。バージョン管理システムには、ローカル、集中型、分散型の 3 種類があります。
下の図は、あなたにとって見覚えがありますか? 初めてファイルの異なるバージョンを区別する必要がある場合、私たちは直感的に、同じファイルを異なる名前で保存して、異なるバージョンを互いに区別します。
手動バージョン管理には、利点が 1 つ (かなり簡単) しかなく、欠点が多数 (非常に多い) あります。このタイプのバージョン管理ではセットアップ作業は必要ありませんが、変更履歴を把握するのが難しく、他のユーザーとの共同作業の可能性がほとんどありません。ディスクが破損すると、すべての変更が失われます。
 
そのため、ファイルやプロジェクトを手動でバージョン管理するのではなく、バージョン管理システムを使用するのが標準的な方法です。
 
私たちは、以下に視覚的に表される 3 種類のバージョン管理システムを区別しています。
  • ローカル バージョン コントロール システム: 1 台のローカル コンピューターに 1 つのリポジトリがあります。利点は、ネットワーク接続を必要とせず、セットアップと使用が簡単であることです。ただし、中央リポジトリがないため、共同作業ができず、バックアップ機能も制限されます (単一障害点)。
  • 集中型バージョン管理システム:中央サーバーに 1 つのリポジトリがあります。バージョンはこの中央リポジトリに直接保存されます。中央リポジトリにより共同作業が可能になります。ただし、中央リポジトリへのネットワーク接続が必要であり、バックアップ機能に関しては単一障害点でもあります。集中型バージョン管理システムの例として、Subversion があります。
  • 分散バージョン管理システム:中央サーバーに 1 つのリポジトリがあります。クライアントは中央リポジトリのローカル コピーを作成します。バージョンは最初にローカル リポジトリに保存され、後で中央リポジトリと同期されます。中央リポジトリは共同作業を可能にし、ローカル コピーはオフライン作業を可能にし、バックアップ機能が向上します。ただし、完全なリポジトリのローカル コピーには、より多くのディスク領域も必要です。分散バージョン管理システムの例としては、Git や Mercurial があります。

機械学習におけるバージョン管理

バージョン管理は、ソフトウェア開発だけでなく、ML モデルの開発プロセスでも役立ちます。ML では、ソース コードのバージョン管理は、データセットやモデルなどの成果物のバージョン管理と同じくらい重要です。
ML モデルの開発プロセスでは、ソース コード以外の成果物を作成します。成果物とは、プロセスの入力または出力となるファイルのことです。ソフトウェア開発における成果物の入力の例としては、プロセスの入力となるソース コードやライブラリなどがあります。一方、オブジェクト ファイルや実行可能ファイルは、プロセスの出力となる成果物の例です。この例では、プロセスはビルド プロセスです。
ML において、最も重要な成果物はデータセットとモデルです。たとえば、データセットはトレーニング プロセスの入力となる成果物であり、モデルはその出力となる成果物です。
次のセクションでは、データセットと ML モデルのバージョン管理について説明します。ここでの中心的な概念は、一般的なバージョン管理とデータおよびモデルのバージョン管理で似ています。ソース コードの代わりにデータとモデルのトレーサビリティ、再現性、ロールバック、デバッグ、コラボレーションの概念を繰り返すのではなく、データとモデルが変更されてバージョン管理が必要になるタイミングに焦点を当てます。

データバージョン管理

バージョン管理は通常、ソース コードに関連付けられますが、モデル バージョン管理またはモデルのバージョン管理は、特に ML のデータのバージョン管理を示します。これは、データセット内の変更を保存、追跡、および管理する方法について説明します。
モデル開発プロセス中の次のイベントについて、データセットの新しいバージョンを保存できます。
  • データのクリーニング、外れ値の処理、欠損値の補完などのデータ前処理(データ内容の変更)。
  • 集約機能、ラベルエンコーディング、スケーリングなどの機能エンジニアリング(データが「幅広くなる」)
  • データセットの分割(データのパーティション分割) は通常、データをトレーニング データ、検証データ、テスト データに分割することを意味します。
  • 新しいデータ ポイントが利用可能になると、データセットが更新されます(データが「長くなります」)。

モデルのバージョン管理

データのバージョン管理が ML のデータのバージョン管理を示すのと同様に、モデルのバージョン管理またはモデルのバージョン管理は、特に ML モデルのバージョン管理を示します。これは、ML モデルの変更を保存、追跡、および管理する方法について説明します。
モデルバージョン管理では、「モデルバージョン」という用語と区別するためにさらに2つの用語を定義する必要があります[2]。
  • モデルバージョン:トレーニング済みモデルの単一スナップショット (例: クロス検証後のモデルの重み)
  • モデル成果物:ログに記録されたモデル バージョンのシーケンス (例: トレーニング実行の各フォールド後のモデル重みのコレクション)
  • 登録モデル:リンクされたモデル バージョンの選択 (例: 運用中のタスクの候補モデル)
 
登録されたモデルは、モデル レジストリに保存されます。モデル レジストリは、登録されたモデルのリポジトリと考えることができます。JFrog の Artifactory などのアーティファクト リポジトリを使用して ML モデルを保存することもできますが、モデル レジストリは、バージョン管理、系統、ライフサイクル管理を含む ML モデルの保存と管理に特化しています。 
データ バージョン管理は主にモデル開発に関連しますが、モデル バージョン管理を含むモデル管理は、トレーニングからステージング、本番環境までのモデル ライフサイクル全体に適用されます。
  • モデル開発:モデル開発中は、モデルの選択からさまざまなハイパーパラメータを使用したモデルのトレーニングまで、モデルのさまざまなバージョンを追跡する必要がある場合があります。
  • モデルのデプロイメント:ステージング プロセス中に、さまざまなモデル バージョンのパフォーマンスを評価し、デプロイメントに使用するモデルを伝達する必要がある場合があります。さまざまなバージョンをログに記録する以外に、特定のバージョンにエイリアス (例: bestまたはrelease ) のタグを付けることもできます。
  • モデルの監視:モデルが本番環境にある場合、そのパフォーマンスを監視する必要がある場合があります。
 
ML モデルのデータとモデルのバージョン管理を実装することに興味がある場合は、DVC、Neptune、Weights & Biases など、データとモデルのバージョン管理を組み込んださまざまな MLOps プラットフォームとツールがあります。 
Python でデータとモデルのバージョン管理に W&B Artifacts を使用する方法に関する実践的なガイドについては、付属のインタラクティブな Colab ノートブックを使用して以下のビデオ ウォークスルーを視聴できます。

機械学習におけるバージョン管理のベストプラクティス

ソース コードのバージョン管理に関するベスト プラクティスはすべて、データとモデルのバージョン管理にも適用されます。このセクションでは、ML でバージョン管理を適切に文書化するためにさらに考慮する必要がある事項についても説明します。
一般的なバージョン管理に関する基本的なベストプラクティスをいくつか紹介します。
  • コミットは論理的な単位である必要があります。 作業の完全なパッケージまたは後で元に戻す可能性がある変更がある場合 (例: コードの新しい機能、更新されたデータ前処理手順、新しくトレーニングされたモデルの重み)、新しいバージョンを保存します。
  • 意味のあるコミット メッセージを使用する: 新しいバージョンを保存するときは、何かが変更されたということではなく、何が変更されたかを簡単に説明するようにしてください (たとえば、「変更」、「更新」、「ファイルの追加」などのコミット メッセージは避けてください)。
  • ログ メタデータ: 多ければ多いほど良いです。後で役立つ可能性のあるものはすべてログに記録する必要があります。ただし、メタデータが説明的であることを確認してください。
  • 重要なバージョンにタグを付ける: 特別なバージョンには、他の人が簡単に見つけられるようにエイリアス (例:  best 、  releaseなど) でタグを付ける必要があります。
 
上記の点は、ソース コード、データセット、ML モデルのバージョン管理にも同様に適用されます。データセットと ML モデルをバージョン管理する場合は、実稼働コードとログ記録コードを分離することも検討する必要があります。データの前処理やモデリング、トレーニングなどの実稼働コードは、データセットまたはモデルのバージョンを読み込んで保存するために使用されるコードから分離する必要があります。

結論

この記事では、ML におけるバージョン管理の重要性について説明しました。これは、ソース コードのバージョン管理に役立つだけでなく、ML モデル ライフサイクルのさまざまな段階でデータセットやモデルなどの重要な ML 成果物のバージョン管理にも役立ちます。
バージョン管理は、ソース コード、データセット、ML モデルのいずれであっても、追跡可能性、再現性、ロールバック、デバッグ、コラボレーションに役立つため、あらゆる成果物にとって重要です。バージョン管理は、ローカル、集中型、分散型のバージョン管理システムなど、さまざまなレベルのコラボレーションとバックアップ機能で実行できます。
ソフトウェア開発では、ソースコード以外の重要な成果物としてライブラリ、オブジェクトファイル、実行可能ファイルなどがありますが、ML では、バージョン管理が必要な重要な成果物はデータセットとモデルです。したがって、ML ではデータセットと ML モデルのバージョン管理を考慮する必要があります。データのバージョン管理はモデル開発にとって最も重要ですが、モデルのバージョン管理はモデルのライフサイクル全体にとって重要です。
したがって、ML モデルは、モデル レジストリと呼ばれる特別なリポジトリでバージョン管理され、モデルのライフサイクル全体を通じてさまざまなモデル バージョンを保存および管理します。

参考文献

[1] git (2023). バージョン管理について。(2023年1月アクセス)
[2] Weights & Biases Inc. (2022). 資料(2022年12月アクセス)