DataRobot MLOpsを使用したML.NETモデルのデプロイおよび監視¶
このページでは、ML.NETで構築されたモデルをDataRobot MLOpsでデプロイおよび監視する方法について説明します。 ML.NETは、Microsoftが.NET開発者プラットフォーム用に作成したオープンソースの機械学習フレームワークです。 詳細については、ML.NETとはを参照してください。
このページの例では、公開されているLendingClubのデータセットを使用しています。
ローン申込者が債務不履行になる可能性を予測したいと考えています。機械学習では、これを「二値分類問題」と呼びます。DataRobot AutoMLで解決できますが、この場合はML.NETでモデルを作成し、それを本番環境にデプロイして、DataRobot MLOpsで監視します。 DataRobot MLOpsを使用すると、ソースやプログラミング言語に関係なく、一元化されたダッシュボードですべてのモデルを監視できます。
モデルをDataRobot MLOpsにデプロイする前に、新しいML.NETモデルを作成してから、DataRobot MLOps用のML.NET環境を作成する必要があります。
備考
このDataRobot MLOps ML.NET環境は1回だけ作成する必要があります。二値分類モデルと連続値モデルのサポートのみが必要な場合は、この手順をスキップして、DataRobotコミュニティGitHubの既存の「DataRobot ML.NETドロップイン」環境を使用することができます。
前提条件¶
.NETアプリの構築を開始するには、.NETソフトウェア開発キット(SDK)をダウンロードしてインストールします。 SDKをインストールするには、.NETの概要に記載されている手順に従ってください。
-
.NET SDKをインストールしたら、新しいターミナルを開き、次のコマンドを実行します。
dotnet
-
前のコマンドがエラーなく実行された場合は、次の手順に進み、次のコマンドを使用してML.NETフレームワークをインストールできます。
dotnet tool install -g mlnet
ML.NETモデルの作成¶
ML.NETフレームワークのインストールが成功したら、ML.NETモデルを作成します。
mkdir DefaultMLApp
cd DefaultMLApp
dotnet new console -o consumeModelApp
dotnet classification --dataset "10K_Lending_Club_Loans.csv" --label-col "is_bad" --train-time 1000
モデルの評価¶
ML.NET CLIが最適なモデルを選択すると、実験結果(探索プロセスの概要)が表示されます。これには、特定のトレーニング時間内に探索されたモデルの数が含まれます。
ML.NET CLIは、パフォーマンスが最も高いモデルのコードを生成しますが、特定の探索時間中に見つかった精度が最も高いモデルを最大5つ表示します。 AUC、AUPRC、F1スコアなど、上位モデルのいくつかの評価指標が表示されます。
モデルのテスト¶
ML.NETコマンドラインインターフェイス(CLI)は、機械学習モデルを生成し、モデルのトレーニングと使用に必要な.NETアプリとライブラリを追加します。 作成されるファイルには次のものがあります。
-
A .NET console app (
SampleBinaryClassification.ConsoleApp
), which containsModelBuilder.cs
(builds and trains the model) andProgram.cs
(runs the model). -
A .NET Standard class library (
SampleBinaryClassification.Model
), which containsModelInput.cs
andModelOutput.cs
(the input and output classes for model training and consumption) andMLModel.zip
(a generated serialized ML model).
モデルをテストするには、コンソールアプリ(SampleBinaryClassification.ConsoleApp
)を実行し、単一の申請者の不履行の可能性を予測します。
cd SampleClassification/SampleClassification.ConsoleApp
dotnet run
DataRobot MLOps環境パッケージの作成¶
DataRobotは事前定義済みの多くの環境テンプレート(R、Python、Java、PyTorchなど)を提供しますが、このセクションでは、ML.NETを使用して独自のランタイム環境を一貫して作成する方法を説明します。
次のガイドラインに従うと、使いやすく再利用可能な環境を作成できます。
-
環境パッケージには、依存関係をインストールするためのDockerfileと、モデルサーバーを起動するための実行可能
start_server.sh
スクリプトが含まれている必要があります。 -
カスタムモデルには、予測を行うための単純なウェブサーバーが必要です。 モデルサーバースクリプトは、モデルパッケージ内に配置することも、環境パッケージに分離することもできます。ただし、同じプログラミング言語を利用する複数のモデルで使用できるように、別の環境パッケージにする必要があります。
-
すべてのコードと
start_server.sh
スクリプトを/opt/code/
にコピーするDockerfile。 MLOps環境パッケージ用のコードは、DataRobotコミュニティGitHubからダウンロードできます。 -
ウェブサーバーはポート
8080
でリッスンし、次のルートを実装する必要があります。-
GET /{URL_PREFIX}/
: Checks if the model's server is running. -
POST /{URL_PREFIX}/predict/
: Makes predictions. The{URL_PREFIX}
is passed as an environment variable to the container and must be handled by your webserver accordingly. The data itself is expected in a multiform request.Request format:
二値分類 連続値 Response format:
二値分類 連続値 {"predictions":[{"True": 0.0, "False": 1.0}]}
{"predictions": [12.3]}
-
DataRobot MLOpsは、信頼性を確保するために広範なテストを実行してから、カスタムモデルをデプロイします。したがって、ウェブサーバーで欠損値を処理し、上記で概説したように予期される応答形式で結果を返すことが重要です。
前述のように、DataRobotがウェブサーバーを正しく識別できるように、ポート8080
を使用する必要があります。 したがって、以下に示すように、appsettings.json
でKestrel
ウェブサーバーのポート8080
を指定します。
{
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:8080"
}
}
}
}
Startup.cs
クラス内のモデルコード(mlContext
、mlModel
、predEngine
)を初期化します。 これにより、モデルパッケージを新規作成するたびに、.NETがファイルの変更を認識できるようになります。
// Initialize MLContext
MLContext ctx = new MLContext();
// Load the model
DataViewSchema modelInputSchema;
ITransformer mlModel = ctx.Model.Load(modelPath, out modelInputSchema);
// Create a prediction engine & pass it to our controller
predictionEngine = ctx.Model.CreatePredictionEngine<ModelInput,ModelOutput>(mlModel);
start_server.sh
シェルスクリプトは、コンテナ内のモデルサーバーを起動します。 モデルとサーバーを一緒にパッケージ化した場合は、コンパイルされたバージョンのみが必要で、シェルスクリプトはdotnet consumeModelApp.dll
を実行します。 モデルコードとサーバー環境コードは再利用のために分離されているため、以下のコマンドのように、コンテナ起動時にソースから再コンパイルします。
#!/bin/sh
export DOTNET_CLI_HOME="/tmp/DOTNET_CLI_HOME"
export DOTNET_CLI_TELEMETRY_OPTOUT="1"
export TMPDIR=/tmp/NuGetScratch/
mkdir -p ${TMPDIR}
rm -rf obj/ bin/
dotnet clean
dotnet build
dotnet run
# to ensure Docker container keeps running
tail -f /dev/null
カスタム環境をDataRobot MLOpsにアップロードする前に、以下に示すように、カスタム環境コードをtarballに圧縮します。
tar -czvf mlnetenvironment.tar.gz -C DRMLOps_MLNET_environment/.
DataRobot MLOps環境パッケージのアップロード¶
新しいMLOps ML.NET環境をアップロードするには、新しいカスタムモデル環境の作成に関する手順を参照してください(下のスクリーンショットを参照)。
DataRobot MLOpsを使用したML.NETモデルのアップロードおよびテスト¶
環境が作成されたら、新しいカスタムモデルエンティティを作成し、実際のモデル(MLModel.zip
とModelInput.cs
)をアップロードします。
新しいML.NETモデルをアップロードするには、新しいカスタム推論モデルの作成に関する手順を参照してください。
DataRobot MLOps内に環境とモデルを作成したら、テストデータをアップロードして、予測どおりに動作することを確認します(以下のスクリーンショットを参照)。
このフェーズでは、DataRobotはテストを実行して、モデルが欠損値を処理する方法と、内部ウェブサーバーが応答形式に準拠しているかどうかを判断します。
新しいML.NETモデルでの予測の作成¶
テストが完了したら、以下の設定を使用してカスタムモデルをデプロイします。
この手順が完了すると、他のDataRobotモデルと同様に、新しいカスタムモデルで予測を行うことができます(Postmanコレクションも参照)。
ML.NETを使用してDataRobotの外部でモデルを構築した場合でも、他のDataRobotモデルと同様に使用して、以下に示す一元化されたダッシュボードでサービスの正常性とデータドリフトを追跡できます。