注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このチュートリアルを進める前に、モデリングプロジェクトのセットアップとモデルの訓練、オプションでモデルの評価のチュートリアルを完了している必要があります。これらが完了すれば、モデリング目標には少なくとも1つのモデルが存在するはずです。
このチュートリアルのステップでは、ユーザーの機械学習モデルを取り、そのモデルの本番環境での利用を設定します。
モデルができたので、それを本番環境にデプロイできます。このモデルの意図する使い方によって、以下のいくつかの方法で本番環境化したいかもしれません:
バッチとライブのデプロイメントはモデルリリースによって支えられています。モデリング目標で新しいモデルをリリースすると、そのモデリング目標のデプロイメントは新しくリリースされたモデルを使用するように自動的にアップグレードされます。
これにより、モデルの具体的な実装について心配することなくモデルを使用することができます。データサイエンティストはモデルを改善することに集中し、アプリケーション開発者は有用なアプリケーションの構築に集中できます。
リリースとデプロイメントはステージングと本番に分けられます。モデル開発者は本番リリース前にモデルをステージング環境にリリースできます。これにより、ステージングのデプロイメントがアップグレードされ、本番のデプロイメントは変更されません。データサイエンティストやアプリケーションビルダーは、モデルが本番環境化される前に新しいモデルをステージング環境でテストすることができます。
すべてのリリースと、モデルをリリースした個々のユーザーは記録され、どのモデルがいつ使用されたかをチームが追跡できるようにします。これは、GDPRやEU AI法などの規制に必要な質問に答えるのに役立ちます。
アクション:モデリング目標のホームページに移動し、リリースセクションにスクロールします。ステージングにリリースを選択し、続いて矢印アイコンを選択してモデルを本番環境にリリースします。リリースにはリリース番号を付ける必要があります。例えば "1.0"とします。
バッチデプロイメントを作成すると、入力データセットから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 を選び、生成された予測を確認することができます。
ライブデプロイメントは、本番モデルをRESTエンドポイントの背後にホストする問い合わせ可能なエンドポイントです。ライブデプロイメントはモデルと対話的にやり取りしたい場合や、以下から問い合わせることができます:
この例では、ユーザーが人口調査地区についての詳細を入力し、これが中央値の家価にどのように影響するかを見ることができる対話型ダッシュボードを作成したいかもしれません。
アクション:目標のホームページから、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