概念 - AI と機械学習ワークフローのための機械学習の運用 (MLOps)
この記事では、機械学習の運用 (MLOps) について、関連するプラクティスとツールの種類や、それによって Azure Kubernetes Service (AKS) 上の AI と機械学習のワークフローを簡略化して高速化する方法を含めて説明します。
MLOps とは
機械学習の運用 (MLOps) には、データ サイエンティスト、IT 運用、ビジネス利害関係者間のコラボレーションを容易にするプラクティスが含まれており、機械学習モデルが効率的に開発、デプロイ、保守されるようします。 MLOps では、機械学習プロジェクトに DevOps の原則を適用し、エンドツーエンドの機械学習ライフサイクルを自動化および効率化することを目的としています。 このライフサイクルには、モデルのトレーニング、パッケージ化、検証、デプロイ、監視、再トレーニングが含まれます。
MLOps では、複数のロールとツールが効果的に連携する必要があります。 データ サイエンティストは、"内部ループ" と呼ばれる、モデルのトレーニングに関連するタスクに重点を置きます。 機械学習エンジニアと IT 運用チームは "外部ループ" を扱い、DevOps プラクティスを適用してモデルのパッケージ化、検証、デプロイ、監視を行います。 モデルのファインチューニングまたは再トレーニングが必要な場合、このプロセスは内部ループに戻ります。
MLOps パイプライン
MLOps パイプラインでは、順次または並列にデプロイされるさまざまなツールとマイクロサービスを活用できます。 以下は、オーバーヘッドを削減し、反復を高速化するために次のベスト プラクティスを実装することでメリットを得られる、パイプライン内の主要なコンポーネントの例です。
- アプリケーションに流入する新しいデータ用の非構造化データ ストア
- 構造化された事前処理済みデータを格納してクエリを実行するベクトル データベース
- データ インジェストとインデックス作成のフレームワーク
- ベクトル インジェストやモデルの再トレーニングのワークフロー
- メトリックの収集とアラート ツール (モデルのパフォーマンスの追跡、取り込まれたデータ量など)
- ライフサイクル管理ツール
DevOps と MLOps
DevOps は、堅牢で再現可能なアプリケーションを作成できるようにするツールとプラクティスの組み合わせです。 DevOps を使用する目標は、エンド ユーザーに価値を迅速に提供することです。 堅牢で再現可能なモデルを作成、デプロイ、監視して、エンド ユーザーに価値を提供することが MLOps の主な目標です。
MLOps には、次の "3 つ" のプロセスが不可欠です。
- 機械学習ワークロード: 探索的データ分析 (EDA)、特徴エンジニアリング、モデルのトレーニングとチューニングなど、データ サイエンティストが担当します。
- ソフトウェア開発プラクティス: デプロイに向けたモデルの計画、開発、テスト、パッケージ化など。
- 運用環境内でのモデルのデプロイと保守の運用面: リリース、リソースの構成、モデルの監視など。
MLOps に適用される DevOps の原則
MLOps では、"自動化"、"継続的インテグレーションとデリバリー (CI/CD)"、"ソース管理"、"アジャイル計画"、"コードとしてのインフラストラクチャ (IaC)" など、DevOps のいくつかの原則を活用して機械学習のライフサイクルを強化します。
自動化
タスクを自動化することで、手動のエラーを減らし、効率を高め、ML ライフサイクル全体の一貫性を確保できます。 自動化は、データ収集、モデルのトレーニング、デプロイ、監視など、さまざまなステージに適用できます。 自動化を通じて、AI パイプライン内にプロアクティブな対策を適用し、組織のポリシーに対してデータ コンプライアンスを確保することもできます。
たとえば、パイプラインでは次のような自動化ができます。
- 一定の時間間隔で、またはアプリケーション内で一定量の新しいデータが収集された場合に、モデルのチューニング/再トレーニングを行います。
- パフォーマンスの低下を検出し、異なるデータのサブセットに対してファインチューニングまたは再トレーニングを開始します。
- 安全なセキュリティ プラクティスを確保するために、外部コンテナー レジストリからプルされたベース コンテナー イメージに対して、共通脆弱性識別子 (CVE) のスキャンをします。
継続的インテグレーション (CI)
継続的インテグレーションでは、モデル開発プロセスの "作成" と "検証" の側面について対応します。 CI の目標は、コードを作成して、そのコードとモデルの品質をデプロイ前に検証することです。 これには、そのモデルが想定どおりに動作し、品質基準を満たしていることを保証するための、さまざまなサンプル データ セットに対するテストが含まれます。
MLOps では、CI に次が含まれる場合があります。
- Jupyter ノートブックの探索的コードの、Python または R スクリプトへのリファクタリング。
- 新しい入力データの、欠損またはエラーの値に対する検証。
- エンドツーエンド パイプラインでの単体テストと統合テスト。
リンティングと単体テストを実行するには、Azure DevOps 内の Azure Pipelines、または GitHub Actions などの自動化ツールを使用できます。
継続的デリバリー (CD)
継続的デリバリーには、運用環境内にモデルを安全にデプロイするために必要な手順が含まれます。 最初の手順は、開発やテスト環境などの "運用前環境" 内でモデルをパッケージ化してデプロイすることです。 パラメーター、ハイパーパラメーター、その他のモデル成果物の移植性は、これらの環境を通じてコードを昇格させる際に保守する重要な側面です。 この移植性は、大規模言語モデル (LLM) と Stable Diffusion モデルに関しては特に重要です。 モデルが単体テストと品質保証 (QA) テストに合格すると、"運用環境" 内でのデプロイを承認できます。
ソース管理
ソース管理 (または "バージョン管理") は、コードとモデルへの変更を管理するために不可欠です。 ML システム内で、これはデータのバージョン管理、コードのバージョン管理、モデルのバージョン管理を指します。これにより、クロスファンクショナル チームが効果的に共同作業し、時間の経過に伴う変更を追跡できます。 Azure DevOps での Azure Repos または GitHub リポジトリなど、Git ベースのソース管理システムを使用すると、プログラムで変更履歴を保守する、以前のバージョンに戻す、さまざまな実験のブランチを管理することができるようになります。
アジャイル計画
アジャイル計画では、特定のタスクを完了するための短い時間枠である "スプリント" に作業を分ける必要があります。 このアプローチにより、チームは変更に迅速に適応し、モデルに段階的な改善を提供できます。 モデルのトレーニングは継続的なプロセスになる場合があり、アジャイル計画はプロジェクトのスコープを設定し、チームの連携を改善するのに役立ちます。
Azure DevOps での Azure Boards または GitHub issues などのツールを使用して、アジャイル計画を管理できます。
Infrastructure as Code (IaC)
コードとしてのインフラストラクチャを使用して、モデルのトレーニング、デプロイ、提供に必要なインフラストラクチャを繰り返して自動化します。 ML システム内では、IaC はコード内の特定のジョブの種類に必要な、適切な Azure リソースを簡略化して定義するのに役立ち、そのコードはリポジトリ内で保守されます。 これにより、インフラストラクチャをバージョン管理し、必要に応じてリソースの最適化や費用対効果などの変更を加えることができます。
次のステップ
AKS 上のインテリジェント アプリケーション内での MLOps のベスト プラクティスについて確認するには、次の記事を参照してください。
Azure Kubernetes Service