Azure Machine Learning を使用した Python モデル用の機械学習操作可能化 (MLOps)Machine learning operationalization (MLOps) for Python models using Azure Machine Learning

このリファレンス アーキテクチャでは、Azure DevOps と Azure Machine Learning を使用して、継続的インテグレーション (CI)、継続的デリバリー (CD)、および AI アプリケーション用の再トレーニング パイプラインを実装する方法を示します。This reference architecture shows how to implement a continuous integration (CI), continuous delivery (CD), and retraining pipeline for an AI application using Azure DevOps and Azure Machine Learning. このソリューションは scikit-learn 糖尿病データセットに基づいて構築されていますが、あらゆる AI シナリオや、Jenkins や Travis といった広く普及している他のビルド システムに容易に適合させることができます。The solution is built on the scikit-learn diabetes dataset but can be easily adapted for any AI scenario and other popular build systems such as Jenkins and Travis.

GitHub ロゴ このアーキテクチャのリファレンス実装は、GitHub で入手できます。GitHub logo A reference implementation for this architecture is available on GitHub.

MLOps アーキテクチャの図

ArchitectureArchitecture

このアーキテクチャは、次のコンポーネントで構成されます。This architecture consists of the following components:

Azure PipelinesAzure Pipelines. このビルドおよびテスト システムは Azure DevOps に基づいており、ビルドおよびリリース パイプラインに使用されます。This build and test system is based on Azure DevOps and used for the build and release pipelines. Azure Pipelines ではこれらのパイプラインをタスクと呼ばれる論理的ステップに分割します。Azure Pipelines breaks these pipelines into logical steps called tasks. たとえば、Azure CLI タスクによって Azure リソースが操作しやすくなります。For example, the Azure CLI task makes it easier to work with Azure resources.

Azure Machine LearningAzure Machine Learning. Azure Machine Learning は、大規模な機械学習モデルをトレーニング、スコアリング、デプロイ、および管理するためのクラウド サービスです。Azure Machine Learning is a cloud service for training, scoring, deploying, and managing machine learning models at scale. このアーキテクチャでは、Azure Machine Learning の Python 3 用 SDK を使用して、ワークスペース、コンピューティング リソース、機械学習パイプライン、およびスコアリング イメージを作成します。This architecture uses the Azure Machine Learning SDK for Python 3 to create a workspace, compute resources, the machine learning pipeline, and the scoring image. Azure Machine Learning ワークスペースでは、機械学習モデルを実験、トレーニング、デプロイするための空間が提供されます。An Azure Machine Learning workspace provides the space in which to experiment and train and deploy machine learning models.

Azure Machine Learning コンピューティング はオンデマンド仮想マシンのクラスターであり、自動スケーリングと GPU および CPU ノード オプションを備えています。Azure Machine Learning Compute is cluster of virtual machines on demand with an automatic scaling and GPU and CPU node options. トレーニング ジョブはこのクラスターで実行されます。The training job is executed on this cluster.

Azure Machine Learning パイプライン は、シナリオをまたいで再利用できる再利用可能な機械学習ワークフローを提供します。Azure Machine Learning pipelines provide reusable machine learning workflows that can be reused across scenarios. このユース ケースでは、これらのパイプライン内の別々のステップでトレーニング、モデル評価、モデル登録、およびイメージ作成を行います。Training, model evaluation, model registration, and image creation occur in distinct steps within these pipelines for this use case. パイプラインはビルド フェーズの最後に発行または更新され、新しいデータの到着時にトリガーされます。The pipeline is published or updated at the end of the build phase and gets triggered on new data arrival.

Azure Blob StorageAzure Blob Storage. Blob コンテナーを使用して、スコアリング サービスからのログを格納します。Blob containers are used to store the logs from the scoring service. この場合、入力データとモデル予測の両方が収集されます。In this case, both the input data and the model prediction are collected. 何らかの変換後、これらのログはモデルの再トレーニングに使用できます。After some transformation, these logs can be used for model retraining.

Azure Container RegistryAzure Container Registry. スコアリング Python スクリプトは Docker イメージとしてパッケージ化され、レジストリでバージョン管理されます。The scoring Python script is packaged as a Docker image and versioned in the registry.

Azure Container InstancesAzure Container Instances. リリース パイプラインの一部として、スコアリング Web サービス イメージを Container Instances にデプロイすることによって QA およびステージング環境がシミュレートされ、サーバーレスで簡単にコンテナーを実行する方法を提供します。As part of release pipeline, the QA and staging environment is mimicked by deploying the scoring webservice image to Container Instances, which provides an easy, serverless way to run a container.

Azure Kubernetes ServiceAzure Kubernetes Service. スコアリング Web サービス イメージは、QA 環境で徹底的にテストされた後、マネージド Kubernetes クラスター上の運用環境にデプロイされます。Once the scoring webservice image is thoroughly tested in the QA environment, it is deployed to the production environment on a managed Kubernetes cluster.

Azure Application InsightsAzure Application Insights. この監視サービスは、パフォーマンスの異常を検出するために使用されます。This monitoring service is used to detect performance anomalies.

MLOps パイプラインMLOps Pipeline

このソリューションは、ソフトウェア エンジニアが既に慣れているツールを使用して、AI プロジェクトのさまざまな段階をエンドツーエンドで自動化する方法を示しています。This solution demonstrates an end-to-end automation of various stages of an AI project using tools that are already familiar to software engineers. 機械学習の問題では、DevOps パイプラインに集中し続けることは簡単です。The machine learning problem is simple to keep the focus on the DevOps pipeline. このソリューションでは、scikit-learn 糖尿病データセットを使用して、糖尿病の可能性を予測するためのリッジ線形回帰モデルを構築します。The solution uses the scikit-learn diabetes dataset and builds a ridge linear regression model to predict the likelihood of diabetes. 詳細については、Python scikit-learn モデルのトレーニングに関する記事を参照してください。See Training of Python scikit-learn models for details.

このソリューションは、次の 3 つのパイプラインに基づいています。This solution is based on the following three pipelines:

  • ビルド パイプラインBuild pipeline. コードをビルドしてテスト スイートを実行します。Buildings the code and runs a suite of tests.
  • 再トレーニング パイプラインRetraining pipeline. スケジュールに従って、または新しいデータが利用可能になったらモデルを再トレーニングしますRetrains the model on a schedule or when new data becomes available
  • リリース パイプラインRelease pipeline. スコアリング イメージを操作可能にし、さまざまな環境間でそれを安全に昇格させます。Operationalizes the scoring image and promotes it safely across different environments.

以下のセクションでは、これらの各パイプラインについて説明します。The next sections describe each of these pipelines.

ビルド パイプラインBuild pipeline

コードがチェックインされるたびに CI パイプラインがトリガーされます。The CI pipeline gets triggered every time code is checked in. コードをビルドしてテスト スイートを実行した後、更新された Azure Machine Learning パイプラインを発行します。It publishes an updated Azure Machine Learning pipeline after building the code and running a suite of tests. ビルド パイプラインは以下のタスクで構成されます。The build pipeline consists of the following tasks:

  • コード品質。Code quality. これらのテストでは、コードがチームの標準に準拠していることを確認します。These tests ensure that the code conforms to the standards of the team.

  • 単体テスト。Unit test. これらのテストでは、コードが正常に動作し、安定していること、またコード カバレッジが十分であることを確認します。These tests make sure the code works, has adequate code coverage, and is stable.

  • データ テスト。Data test. これらのテストでは、期待されるスキーマと分布にデータ サンプルが準拠していることを検証します。These tests verify that the data samples conform to the expected schema and distribution. 他のユース ケースに合わせてこのテストをカスタマイズし、新しいデータの到着時にトリガーされる独立したデータ サニティ パイプラインとして実行します。Customize this test for other use cases and run it as a separate data sanity pipeline that gets triggered as new data arrives. たとえば、データ テスト タスクをデータ インジェスト パイプラインに移動して、より早くテストできるようにします。For example, move the data test task to a data ingestion pipeline so you can test it earlier.

[注] 機械学習モデルのトレーニングに使用されるデータに対して DevOps プラクティスを有効にすることを検討する必要がありますが、これについては、この記事では説明しません。[NOTE] You should consider enabling DevOps practices for the data used to train the machine learning models, but this is not covered in this article. データ インジェスト パイプラインの CI/CD に対するアーキテクチャとベスト プラクティスの詳細については、「データ インジェスト パイプラインの DevOps」を参照してください。For more information about the architecture and best practices for CI/CD of a data ingestion pipeline, see DevOps for a data ingestion pipeline.

Azure Machine Learning および Python SDK 用のインフラストラクチャをセットアップするときに、以下の 1 回限りのタスクが発生します。The following one-time tasks occur when setting up the infrastructure for Azure Machine Learning and the Python SDK:

  • Azure Machine Learning 関連のすべてのリソースをホストするワークスペースを作成します。Create the workspace that hosts all Azure Machine Learning-related resources.

  • トレーニング ジョブを実行するコンピューティング リソースを作成します。Create the compute resources that run the training job.

  • 更新されたトレーニング スクリプトを使用して機械学習パイプラインを作成します。Create the machine learning pipeline with the updated training script.

  • トレーニング ワークフローを調整するために、機械学習パイプラインを REST エンドポイントとして発行します。Publish the machine learning pipeline as a REST endpoint to orchestrate the training workflow. 次のセクションではこの手順について説明します。The next section describes this step.

再トレーニング パイプラインRetraining pipeline

機械学習パイプラインでは、モデルを非同期的に再トレーニングするプロセスが調整されます。The machine learning pipeline orchestrates the process of retraining the model in an asynchronous manner. 再トレーニングはスケジュールに従って、または新しいデータが利用可能になったときに、前の手順で発行したパイプライン REST エンドポイントを呼び出すことによってトリガーできます。Retraining can be triggered on a schedule or when new data becomes available by calling the published pipeline REST endpoint from previous step.

このパイプラインには以下の手順が含まれています。This pipeline covers the following steps:

  • モデルのトレーニング。Train model. 実行履歴に保存されている新しいモデルを取得するために、トレーニング Python スクリプトが Azure Machine Learning コンピューティング リソースで実行されます。The training Python script is executed on the Azure Machine Learning Compute resource to get a new model file which is stored in the run history. トレーニングは AI プロジェクトで最もコンピューティング リソースを消費するタスクであるため、このソリューションでは Azure Machine Learning コンピューティングを使用します。Since training is the most compute-intensive task in an AI project, the solution uses Azure Machine Learning Compute.

  • モデルの評価。Evaluate model. 単純な評価テストで新しいモデルと既存のモデルを比較します。A simple evaluation test compares the new model with the existing model. 新しいモデルの方が優れている場合にのみ、それを昇格させます。Only when the new model is better does it get promoted. それ以外の場合、モデルは登録されず、パイプラインはキャンセルされます。Otherwise, the model is not registered and the pipeline is canceled.

  • モデルの登録。Register model. 再トレーニングしたモデルは、Azure ML Model レジストリに登録されます。The retrained model is registered with the Azure ML Model registry. このサービスは、モデルを簡単に再現できるよう、モデルのバージョン管理をメタデータ タグと併せて提供します。This service provides version control for the models along with metadata tags so they can be easily reproduced.

リリース パイプラインRelease pipeline

このパイプラインは、スコアリング イメージを操作可能にし、さまざまな環境にまたがってそれを安全に昇格させる方法を示します。This pipeline shows how to operationalize the scoring image and promote it safely across different environments. このパイプラインは QA と運用の 2 つの環境に区分されています。This pipeline is subdivided into two environments, QA and production:

QA 環境QA environment

  • モデル成果物トリガー。Model Artifact trigger. 新しい成果物が利用可能になるたびに、リリース パイプラインがトリガーされます。Release pipelines get triggered every time a new artifact is available. Azure Machine Learning モデル管理に新しく登録されるモデルは、リリース成果物として扱われます。A new model registered to Azure Machine Learning Model Management is treated as a release artifact. この場合、登録された新しいモデルごとにパイプラインがトリガーされます。In this case, a pipeline is triggered for each new model is registered.

  • スコアリング イメージの作成。Create scoring image. 登録されたモデルは、スコアリング スクリプトおよび Python の依存関係 (Conda YAML ファイル) と共に、操作可能な Docker イメージにパッケージ化されます。The registered model is packaged together with scoring script and Python dependencies (Conda YAML file) into an operationalization Docker image. イメージは Azure Container Registry を通じて自動的にバージョン管理されます。The image automatically gets versioned through Azure Container Registry.

  • Container Instances へのデプロイ。Deploy on Container Instances. このサービスは、非運用環境を作成するために使用されます。This service is used to create a non-production environment. スコアリング イメージもここにデプロイされ、これは主にテストに使用されます。The scoring image is also deployed here, and this is mostly used for testing. Container Instances は Docker イメージをテストするための簡単で迅速な方法を提供します。Container Instances provides an easy and quick way to test the Docker image.

  • Web サービスのテスト。Test web service. 簡単な API テストで、イメージが正しくデプロイされていることを確認します。A simple API test makes sure the image is successfully deployed.

運用環境Production environment

  • Azure Kubernetes Service にデプロイ。Deploy on Azure Kubernetes Service. このサービスは、スコアリング イメージを Web サービスとして運用環境に大規模デプロイするために使用されます。This service is used for deploying scoring image as a web service at scale in a production environment.

  • Web サービスのテスト。Test web service. 簡単な API テストで、イメージが正しくデプロイされていることを確認します。A simple API test makes sure the image is successfully deployed.

スケーラビリティに関する考慮事項Scalability considerations

Azure DevOps のビルド パイプラインは、あらゆる規模のアプリケーションに合わせてスケーリングできます。A build pipeline on Azure DevOps can be scaled for applications of any size. ビルド パイプラインには最大タイムアウトがあり、これはパイプラインが実行されているエージェントによって異なります。Build pipelines have a maximum timeout that varies depending on the agent they are run on. 自己ホスト型エージェント (プライベート エージェント) 上ではビルドを無制限に実行できます。Builds can run forever on self-hosted agents (private agents). Microsoft がホストするパブリック プロジェクト用のエージェントでは、ビルドを 6 時間実行できます。For Microsoft-hosted agents for a public project, builds can run for six hours. プライベート プロジェクトの場合、制限は 30 分です。For private projects, the limit is 30 minutes.

最大タイムアウトを使用するには、Azure Pipelines YAML ファイルで次のプロパティを設定します。To use the maximum timeout, set the following property in your Azure Pipelines YAML file:

jobs:
- job: <job_name>
  timeoutInMinutes: 0

ビルド パイプラインを速やかに終了させ、単体テストと他のテストのサブセットのみを実行するのが理想的です。Ideally, have your build pipeline finish quickly and execute only unit tests and a subset of other tests. これにより、変更をすばやく検証し、問題が発生した場合は修正することができます。This allows you to validate the changes quickly and fix them if issues arise. 実行時間の長いテストは業務時間外に実行します。Run long-running tests during off hours.

リリース パイプラインは、リアルタイム スコアリング Web サービスを発行します。The release pipeline publishes a real-time scoring web service. QA 環境へのリリースは便宜上 Container Instances を使用して行われますが、QA/ステージング環境で実行されている別の Kubernetes クラスターを使用できます。A release to the QA environment is done using Container Instances for convenience, but you can use another Kubernetes cluster running in the QA/staging environment.

Azure Kubernetes Service クラスターのサイズに応じて、運用環境をスケーリングします。Scale the production environment according to the size of your Azure Kubernetes Service cluster. クラスターのサイズは、デプロイするスコアリング Web サービスで予想される負荷によって異なります。The size of the cluster depends on the load you expect for the deployed scoring web service. リアルタイム スコアリング アーキテクチャの場合、スループットは重要な最適化メトリックです。For real-time scoring architectures, throughput is a key optimization metric. ディープ ラーニング以外のシナリオでは、CPU で十分に負荷を処理できます。しかし、ディープ ラーニングのワークロードで速度がボトルネックになっているときは、一般的に CPU よりも GPU の方が優れたパフォーマンスを発揮します。For non-deep learning scenarios, CPU should be sufficient to handle the load; however, for deep learning workloads, when speed is a bottleneck, GPUs generally provide better performance compared to CPUs. CPU を使用して GPU に相当するパフォーマンスを実現するには、通常、多数の CPU を備えたクラスターが必要です。For moreTo match GPU performance using CPUs, a cluster with a large number of CPUs is usually needed. Kubernetes Service は CPU と GPU 両方のノード タイプをサポートしているため、このソリューションではイメージのデプロイに Kubernetes Service を使用します。Kubernetes Service supports both CPU and GPU node types-the reason this solution uses Kubernetes Service for image deployment. 詳細については、ディープ ラーニング モデルのデプロイに関する GPU と CPU の比較 (ブログ投稿) を参照してください。For more information, see GPUs vs CPUs for deployment of deep learning models (blog post).

Azure Machine Learning コンピューティング リソースのノード数に応じて再トレーニング パイプラインをスケールアップおよびスケールダウンし、自動スケール オプションを使用してクラスターを管理します。Scale the retraining pipeline up and down depending on the number of nodes in your Azure Machine Learning Compute resource, and use the autoscaling option to manage the cluster. このアーキテクチャでは、CPU を使用します。This architecture uses CPUs. ディープ ラーニング ワークロードには GPU の方が適した選択肢であり、Azure Machine Learning コンピューティングによってサポートされています。For deep learning workloads, GPUs are a better choice and are supported by Azure Machine Learning Compute.

管理の考慮事項Management considerations

  • 再トレーニング ジョブの監視。Monitor retraining job. 機械学習パイプラインでは、マシン クラスター全体の再トレーニングが調整され、それらのマシンを監視する簡単な方法が提供されます。Machine learning pipelines orchestrate retraining across a cluster of machines and provides an easy way to monitor them. Azure portal を使用して機械学習ワークスペースに移動し、パイプラインのセクションでログを確認します。Use the Azure portal, and go to the machine learning workspace, and look under pipelines section for the logs. また、これらのログは BLOB にも書き込まれ、Azure Storage Explorer などのツールを使用してそこから読み取ることができます。Alternatively, these logs are also written to blob and can be read from there as well using tools such as Azure Storage Explorer.

  • ログ記録。Logging. Azure Machine Learning では、機械学習ライフサイクルの各ステップでログを記録するための簡単な方法が提供されています。Azure Machine Learning provides an easy way to log at each step of the machine learning life cycle. ログは BLOB コンテナーに保存されます。The logs are stored in a blob container. 詳細については、Azure Machine Learning でログ記録を有効にするを参照してください。For more information, see Enable logging in Azure Machine Learning. より高度な監視を行うには、ログを使用するように Application Insights を構成します。For richer monitoring, configure Application Insights to use the logs.

  • セキュリティ。Security. すべてのシークレットと資格情報は Azure Key Vault に保存され、Azure Pipelines では変数グループを使用してアクセスします。All secrets and credentials are stored in Azure Key Vault and accessed in Azure Pipelines using variable groups.

コストに関する考慮事項Cost considerations

Azure DevOps は、オープンソース プロジェクトおよびユーザーが 5 人までの小規模プロジェクトでは無料です。Azure DevOps is free for open-source projects and small projects with up to five users. より大規模なチームの場合は、ユーザー数に基づいてプランを購入してください。For larger teams, purchase a plan based on the number of users.

コンピューティングはこのアーキテクチャのコストを最も左右し、ユース ケースによって異なります。Compute is the biggest cost driver in this architecture and varies depending on the use case. 実験とトレーニングについては、Azure Machine Learning は無料であり、使用したコンピューティングの料金のみを支払います。For experimentation and training, Azure Machine Learning is free, you pay only for the compute used. Kubernetes Service クラスターにモデルをデプロイしている間、Azure Machine Learning では Kubernetes Service のコンピューティング料金に加えて少額の追加料金が加算されます。While deploying models to Kubernetes Service cluster, Azure Machine Learning adds a small surcharge on top of the Kubernetes Service compute cost. 予想される Web サービス負荷と定義されている自動スケール オプションに応じて、このコストを制御できます。Depending on the expected web service load and the defined autoscaling option, you can control this cost. Azure CLI または Azure Machine Learning Python SDK を使用して、自動スケール構成をプログラムで設定できます。You can use either Azure CLI or Azure Machine Learning Python SDK to programmatically set an autoscaling configuration.

再トレーニング パイプラインには、コンピューティングのフォームも必要です。The retraining pipeline also requires a form of compute. このアーキテクチャでは Azure Machine Learning コンピューティングを使用しますが、他のオプションも利用できます。This architecture uses Azure Machine Learning Compute, but other options are available. 前述したように、トレーニング モデルには Machine Learning service の追加料金はかかりません。コンピューティング料金のみを支払います。As mentioned earlier, training models do not incur the machine learning service surcharge; you only pay the compute cost. コンピューティング料金は、クラスター サイズ、ノード タイプ、およびノード数によって異なります。The compute cost depends on the cluster size, node type, and number of nodes. Azure 料金計算ツールを使用して、Machine Learning やその他のサービスのコストを見積もることができます。You can estimate the cost for Machine Learning and other services using the Azure pricing calculator.

ソリューションのデプロイ方法Deploy the solution

この参照アーキテクチャをデプロイするには、GitHub リポジトリ概要ガイドで説明されている手順に従ってください。To deploy this reference architecture, follow the steps described in the Getting Started guide in the GitHub repo.