ドキュメントの検索
karat

+

K

APIリファレンス ↗

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

4. チュートリアル - モデルの本番環境化

このチュートリアルを進める前に、モデリングプロジェクトのセットアップモデルの訓練、オプションでモデルの評価のチュートリアルを完了している必要があります。これらが完了すれば、モデリング目標には少なくとも1つのモデルが存在するはずです。

このチュートリアルのステップでは、ユーザーの機械学習モデルを取り、そのモデルの本番環境での利用を設定します。

  1. モデリング目標でモデルをリリースする.
  2. バッチ処理のためのバッチデプロイメントを作成する.
  3. モデルのための対話的なライブエンドポイントを作成する.

4.1 モデリング目標でモデルをリリースする

モデルができたので、それを本番環境にデプロイできます。このモデルの意図する使い方によって、以下のいくつかの方法で本番環境化したいかもしれません:

  • バッチデプロイメントで: データセットの予測を生成します。一度にレコード群の予測を計算することを推奨します。
  • ライブデプロイメントで: モデルをRESTエンドポイントの背後にホストします。外部システムからモデルを使う場合や、モデルとリアルタイムで対話する必要がある場合に推奨します。
  • Pythonトランスフォームで: トランスフォームでの素早いイテレーションに便利です。

モデリング目標のリリースとは何か?

バッチとライブのデプロイメントはモデルリリースによって支えられています。モデリング目標で新しいモデルをリリースすると、そのモデリング目標のデプロイメントは新しくリリースされたモデルを使用するように自動的にアップグレードされます。

これにより、モデルの具体的な実装について心配することなくモデルを使用することができます。データサイエンティストはモデルを改善することに集中し、アプリケーション開発者は有用なアプリケーションの構築に集中できます。

リリース管理

リリースとデプロイメントはステージングと本番に分けられます。モデル開発者は本番リリース前にモデルをステージング環境にリリースできます。これにより、ステージングのデプロイメントがアップグレードされ、本番のデプロイメントは変更されません。データサイエンティストやアプリケーションビルダーは、モデルが本番環境化される前に新しいモデルをステージング環境でテストすることができます。

すべてのリリースと、モデルをリリースした個々のユーザーは記録され、どのモデルがいつ使用されたかをチームが追跡できるようにします。これは、GDPRやEU AI法などの規制に必要な質問に答えるのに役立ちます。

アクション:モデリング目標のホームページに移動し、リリースセクションにスクロールします。ステージングにリリースを選択し、続いて矢印アイコンを選択してモデルを本番環境にリリースします。リリースにはリリース番号を付ける必要があります。例えば "1.0"とします。

モデリング目標でモデルをステージングにリリースする

4.2 バッチ処理のためのバッチデプロイメントの作成方法

バッチデプロイメントを作成すると、入力データセットからFoundryトランスフォームが作成されます。バッチデプロイメントの出力は、モデルを用いて入力データセット上で推論(予測生成)を行うことによって得られるデータセットです。

アクションデプロイメント作成をクリックし、本番バッチデプロイメントを設定します。デプロイメントに名前 Batch deployment と説明 Production batch deployment を付けます。先ほど作成した housing_inference_data データセットを入力データセットとして選択し、data フォルダーに house_price_predictions という新しい出力データセットを作成します。デプロイメント作成を選択して設定を保存します。

モデリング目標設定でデプロイメントを作成する

モデリング目標設定でバッチデプロイメントを設定する

次に、新しいモデルがリリースされるたびに出力データセットが自動的に更新されるように、バッチデプロイメントをスケジュールすることができます。つまり、常に最高の予測を使用しています。出力データセットにスケジュールを追加して、新しいロジックが入力されたときに出力データセットが再構築されるようにしましょう。

アクション:デプロイメントテーブルでバッチデプロイメントを選択します。出力データセットの house_price_predictions を選択します。All actions の下で、Manage schedules を選択します。house_price_predictions データセットでは、Create new schedule -> When multiple time or event conditions are metを選択し、house_price_predictions データセットがNew logicを受け取ったときに選択します。最後に、Saveを選択してスケジュールを保存します。

モデリング目標でバッチデプロイメントを開く

モデリング目標でバッチデプロイメントの出力データセットを開く

空のデータセットのスケジュールを管理する

モデリング目標から出力されたデータセットで新しいロジックスケジュールを作成する

最後に、house_price_predictions データセットを更新していないので、これを実行して予測を生成します。ビルドが完了したら、prediction 行に新たに導出された予測を確認するために house_price_predictions データセットを開くことができます。

アクション:スケジュールビューで Run now を選択し、house_price_predictions データセットをビルドします。ビルドが完了したら、house_price_predictions データセットを右クリックして Open を選び、生成された予測を確認することができます。

モデリング目標から出力されたデータセットで新しいロジックスケジュールを実行する

バッチデプロイメントの出力データセットを見る

4.3 モデルのための対話的なライブエンドポイントの作成方法

ライブデプロイメントは、本番モデルをRESTエンドポイントの背後にホストする問い合わせ可能なエンドポイントです。ライブデプロイメントはモデルと対話的にやり取りしたい場合や、以下から問い合わせることができます:

  • モデル上の関数: モデル上の関数は、FoundryのSlateWorkshopアプリケーションから直接モデルを問い合わせることを可能にします。
  • リアルタイムの外部システム: ユーザーの行動からライブ予測を生成する必要があるウェブサイトなど。
  • CURL: モデルのローカルテストのため。

この例では、ユーザーが人口調査地区についての詳細を入力し、これが中央値の家価にどのように影響するかを見ることができる対話型ダッシュボードを作成したいかもしれません。

アクション:目標のホームページから、Create Deployment をクリックし、本番ライブデプロイメントを設定します。デプロイメントに名前 Live deployment と説明 Production live deployment を付けます。Create deployment をクリックして設定を保存します。

モデリング目標設定でデプロイメントを作成する

モデリング目標設定でライブデプロイメントを設定する

ライブデプロイメントの起動には数分かかる場合があります。初期化が完了したら、モデルに接続するリアルタイムの運用アプリケーションを設定できます。

アクション:ライブデプロイメントを選択します。デプロイメントがアップグレードされたら、Query タブを開きます。以下の例を貼り付けて Run を選択し、モデルをテストします。

Copied!
1 2 3 4 5 6 7 8 9 10 [ { "housing_median_age": 33.4, // 住宅の中央値年齢 "total_rooms": 1107.0, // 総部屋数 "total_bedrooms": 206, // 総ベッドルーム数 "population": 515.3, // 人口 "households": 200.9, // 世帯数 "median_income": 4.75 // 中央値所得 } ]

モデリング目標でライブデプロイメントを開く

モデリング目標でのライブデプロイメントのクエリタブを開く

モデリング目標でのライブデプロイメントでテストクエリを実行する

オプション: クエリテキストボックスの例クエリを使用して、ローカルでモデルをテストするための例CURLリクエストをコピーするために、コピーアイコンを選択します。ユーザーのFoundry環境とライブデプロイメントに合わせて、<BEARER_TOKEN>、、および<DEPLOYMENT_RID>を更新する必要があります。 ユーザートークン生成のドキュメンテーションに従って、<BEARER_TOKEN>を生成することができます。

Copied!
1 2 3 4 5 6 7 8 9 10 # このコマンドは、curlを使用してHTTPリクエストを送信します # --http2 オプションは、HTTP/2プロトコルを使用してリクエストを送信します # -H オプションは、HTTPヘッダーを設定します。ここでは、Content-TypeとAuthorizationが設定されています # "Content-Type: application/json" は、リクエストボディのコンテンツがJSON形式であることを指定します # "Authorization: <BEARER_TOKEN>" は、認証トークンを指定します # -d オプションは、HTTPリクエストのボディを設定します。ここでは、JSON形式のデータが設定されています # --request POST オプションは、HTTPメソッドをPOSTに設定します # <STACK>/foundry-ml-live/api/inference/transform/<DEPLOYMENT_RID> は、リクエストを送信するURLを指定します # このURLは、データサイエンスモデルの予測を要求するエンドポイントを指している可能性があります curl --http2 -H "Content-Type: application/json" -H "Authorization: <BEARER_TOKEN>" -d '{"requestData":[ { "housing_median_age": 33.4, "total_rooms": 1107.0, "total_bedrooms": 206, "population": 515.3, "households": 200.9, "median_income": 4.75 } ], "requestParams":{}}' --request POST <STACK>/foundry-ml-live/api/inference/transform/<DEPLOYMENT_RID>
警告

ライブデプロイメントは、常に稼働しているサーバーによって支えられています。いったん始まったら、Foundryはステージングや本番環境のデプロイメントを自動的に終了しません。ライブデプロイメントは費用がかかる可能性がありますので、チュートリアルが終了したら、このライブデプロイメントを無効にするか削除してください。

ライブデプロイメントのビューにあるアクションのドロップダウンメニューから、ライブデプロイメントを無効にするか削除することができます。

次のステップ

ここまでで、機械学習のプロジェクトを正常に設定し、新しいモデルを構築し、その性能を評価し、それをデプロイして運用できる状態にした。

tutorial conclusionを読む前に、モデルの新しいバージョンをトレーニングし、評価し、新しい本番リリースを作成してデプロイメントを更新してみてください。以下のロジックを使用して、scikit-learnと新しい派生プロパティhousing_age_per_incomeでランダムフォレスト回帰器をトレーニングできます。以下のコードでは、モデルアダプタのロジックを更新する必要はありません。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 from transforms.api import transform, Input from palantir_models.transforms import ModelOutput from main.model_adapters.adapter import SklearnRegressionAdapter @transform( training_data_input=Input("<YOUR_PROJECT_PATH>/data/housing_training_data"), model_output=ModelOutput("<YOUR_PROJECT_PATH>/models/random_forest_regressor_model"), ) def compute(training_data_input, model_output): training_df = training_data_input.pandas() model = train_model(training_df) # 学習済みモデルをModelAdapterでラップ foundry_model = SklearnRegressionAdapter(model) # 学習済みモデルをFoundryに公開・書き込み model_output.publish( model_adapter=foundry_model ) def derive_housing_age_per_income(X): X['housing_age_per_income'] = X['housing_median_age'] / X['median_income'] return X def train_model(training_df): from sklearn.ensemble import RandomForestRegressor from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler, FunctionTransformer numeric_features = ['median_income', 'housing_median_age', 'total_rooms'] numeric_transformer = Pipeline( steps=[ # 住宅年齢と収入の比率を算出する変換器 ("rooms_per_person_transformer", FunctionTransformer(derive_housing_age_per_income, validate=False)), ("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler()) ] ) model = Pipeline( steps=[ ("preprocessor", numeric_transformer), ("regressor", RandomForestRegressor()) ] ) X_train = training_df[numeric_features] y_train = training_df['median_house_value'] model.fit(X_train, y_train) return model