注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このチュートリアルのステップを開始する前に、モデリングプロジェクトのセットアップを完了しておいてください。このチュートリアルでは、Jupyter® ノートブックまたは Code Repositories のどちらかを選んでモデルを学習できます。迅速かつ反復的なモデル開発には Jupyter® ノートブックを、本番環境向けのデータおよびモデルのパイプラインにはコードリポジトリを推奨します。
このチュートリアルのステップでは、Code Workspaces を使い、Jupyter® ノートブックでモデルを学習します。このステップでは、次の内容を扱います。
Foundry の Code Workspaces アプリケーションは、データ分析やモデル開発に使用するサードパーティー製 IDE を提供する Web ベースの開発環境です。Foundry 内の Jupyter® ノートブックからモデルを直接公開し、下流のアプリケーションで使用できます。
Code Workspaces は、ワークスペースの使用中に継続的に利用可能なコンピューティングリソースを確保することで、対話型の開発環境を提供します。Code Workspaces を使うと、コンピューティングリソースを待ったり、Python 環境をパッケージ化したりすることなく、Python 環境の設定、データの加工、グラフの描画、モデルの学習を行えます。
アクション: このチュートリアルの前のステップで作成した code フォルダーで、+ 新規 > Jupyter Code Workspace を選択します。コードワークスペースには、学習するモデルに関連する名前を付けてください。今回は、リポジトリに median_house_price_model_notebook という名前を付けます。続行を選択してデフォルトのコンピューティングリソースとリポジトリ設定を使用し、次に作成するを選択してワークスペースを作成、起動します。

ワークスペースを作成したら、モデルを学習するためにノートブックを作成し、いくつかの依存関係をインストールする必要があります。Jupyterlab® のランチャー画面で、使用するノートブックカーネルを選択します。
アクション: Python [user-default] を選択して新しいノートブックを作成し、ファイル名を model_training.ipynb に変更します。

教師あり機械学習プロジェクトの最初のステップは、ラベル付きの特徴量データを学習用とテスト用の別々のデータセットに分割することです。最終的には、性能メトリクス(新しいデータに対するモデルの性能の推定値)を作成します。これにより、このモデルが本番環境で使用できる十分な性能を備えているかを判断し、モデルの結果をどの程度信頼できるかをほかの関係者に伝えられます。性能メトリクスが実環境で見られる性能を代表するものとなるよう、この検証には別のデータを使用する必要があります。
まず、Code Workspaces の Jupyter® ノートブックでデータセットを使用できるようにします。Code Workspaces では、入力データに「エイリアス」を作成でき、コードを読みやすくするのに役立ちます。今回は、エイリアス training_data を使用します。
アクション: データタブを開き、データセットを追加 > 既存のデータセットを読み取るを選択します。先ほど作成した housing_features_and_labels データセットを追加し、エイリアスとして training_data を入力します。表示されたインポート用のロジックを Jupyter® ノートブックのセルにコピーします。Shift + Enter を押すと、コードセルを実行できます。
Copied!1 2 3from foundry.transforms import Dataset training_data = Dataset.get("training_data").read_table(format="pandas")

データセットをインポートしたら、データをテスト用と学習用のデータフレームに分割します。
アクション: ノートブックの上部にある + オプションを使って新しいノートブックセルを作成し、以下のスニペットをコピーしてセルを実行します。
Copied!1 2 3train_df = training_data.sample(frac=0.8,random_state=200) test_df = training_data.drop(train_df.index) train_df

次に、テスト用と学習用に分割したデータを Foundry に保存できます。これにより、学習とテストに使用したデータセットを記録として残し、後から参照できます。
アクション: 追加 > 新しいデータセットにデータを書き込むを選択して、新しいデータセット出力を作成します。出力に housing_test_data という名前を付け、先ほどの data フォルダーに保存できます。データセットを追加を選択し、データセットの種類には表形式のデータセット、Python 変数には test_df を選択します。その後、コードを新しいセルにコピーして実行すると、データセットを Foundry に保存できます。
Copied!1 2 3 4from foundry.transforms import Dataset housing_test_data = Dataset.get("housing_test_data") housing_test_data.write_table(test_df)

Foundry のモデルは、2つのコンポーネントで構成されています。
モデルのトレーニングでは、ほとんどの場合、モデルのトレーニング、シリアライズ、推論、または評価のロジックを含む Python の依存関係を追加する必要があります。Foundry は、conda および PyPI (pip) を通じた依存関係の指定に対応しています。これらの依存関係の指定によって、モデルのトレーニングに使用できる Python 環境が作成されます。
Foundry では、解決されたこれらの依存関係と、Jupyter® ノートブック内のすべての Python .py ファイルがモデルとともに自動的にパッケージ化されます。これにより、本番環境で推論(予測の生成)を実行するために必要なすべてのロジックがモデルに自動的に含まれます。Jupyter® Code Workspaces の環境は、maestro コマンドを通じて管理されます。この例では、モデルの作成に pandas と scikit-learn、モデルの保存に dill を使用します。また、モデルアダプターを定義してモデルを Foundry に公開するために必要な、Palantir が提供するライブラリ palantir_models も使用します。
アクション: 青い + ボタンを選択して Launcher を開き、ターミナルを起動します。以下のコマンドを実行して、これらの依存関係を追加します。サイドバーのパッケージタブを使用して、インストールしたいパッケージの取得元リポジトリをインストールすることもできます。この操作により、ターミナルが開き、maestro コマンドが実行されます。
maestro env conda install scikit-learn pandas dill "palantir_models>=0.1795.0"


アクション: 以下のコードを新しいセルにコピーして実行し、Jupyter® ノートブックのメモリー内で新しいモデルをトレーニングします。ModuleNotFoundError または ImportError が発生した場合は、カーネルを再起動(カーネル > カーネルを再起動...)して、指定した依存関係の変更が環境に反映されていることを確認してください。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23from sklearn.impute import SimpleImputer from sklearn.linear_model import LinearRegression from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler numeric_features = ['median_income', 'housing_median_age', 'total_rooms'] numeric_transformer = Pipeline( steps=[ ("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler()) ] ) model = Pipeline( steps=[ ("preprocessor", numeric_transformer), ("classifier", LinearRegression()) ] ) X_train = train_df[numeric_features] y_train = train_df['median_house_value'] model.fit(X_train, y_train) model

モデル実験は、モデルのトレーニング実行中に生成されるメトリクスとハイパーパラメーターを記録するための軽量なフレームワークです。記録した情報は、モデルとともに公開し、モデルページに保存できます。
モデルを作成できたので、Foundry に公開して本番環境のアプリと連携できます。モデルを公開するには、まずモデルの保存先となるモデルリソースを Foundry に作成し、次にモデルをモデルアダプターでラップして、Foundry がモデルとやり取りする方法を認識できるようにする必要があります。
アクション: モデルタブで、モデルを追加 > 新しいモデルを作成するを選択し、名前を linear_regression_model にします。先ほど作成した models フォルダーにモデルを保存し、作成するを選択してリソースを作成できます。

モデルリソースを作成すると、モデルアダプターを実装するための Python ファイルのひな形が Foundry によって自動的に作成されます。モデルアダプターは、Foundry のすべてのモデルに標準インターフェースを提供します。この標準インターフェースにより、すべてのモデルを本番環境のアプリケーションですぐに使用できます。モデルとその Python の依存関係の読み込み、API の公開、モデルとのやり取りに必要なインフラストラクチャを Foundry が処理するためです。
Code Workspaces のモデルアダプターは、ノートブックとは別の Python (.py) ファイルで定義し、ノートブックにインポートする必要があります。Foundry がこのファイルを生成し、そのファイル名とクラス名は、選択したモデルエイリアスから決まります。linear_regression_model という名前のモデルの場合、Foundry は LinearRegressionModelAdapter という名前のクラスを含む linear_regression_model_adapter.py ファイルを生成します。モデルに別の名前を付けた場合は、以下のスニペット全体でその名前に置き換えてください。
追加のアダプターファイルを作成するのではなく、Foundry が生成したファイル内にアダプターを実装してください。モデルバージョンを公開スニペットは、生成されたファイル名とクラス名を使用してアダプターをインポートするため、別の名前の追加ファイルは使用されません。その結果、生成されたひな形は引き続き NotImplementedError: Model adapter api not defined を発生させます。
モデルアダプターを作成するには、4個の関数を実装する必要があります。
api: モデルの API を定義し、モデルが必要とする入力データのデータ型を Foundry に伝えます。predict: モデルにデータを渡すために Foundry によって呼び出されます。ここで、モデルに入力データを渡して推論(予測)を生成できます。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 27import palantir_models as pm from palantir_models.serializers import DillSerializer class LinearRegressionModelAdapter(pm.ModelAdapter): @pm.auto_serialize( model=DillSerializer() ) def __init__(self, model): self.model = model @classmethod def api(cls): columns = [ ('median_income', float), ('housing_median_age', float), ('total_rooms', float), ] return {"df_in": pm.Pandas(columns)}, \ {"df_out": pm.Pandas(columns + [('prediction', float)])} def predict(self, df_in): df_in['prediction'] = self.model.predict( df_in[['median_income', 'housing_median_age', 'total_rooms']] ) return df_in
アクション: 生成された linear_regression_model_adapter.py ファイルを開き、その内容を上記のコードに置き換えます。生成されたファイルには、実装するまで NotImplementedError を発生させる api メソッドと predict メソッドが含まれています。モデル名を変更した場合は、ファイル名、クラス名、公開用スニペットのインポートが互いに一致するようにしてください。左側のモデルサイドバーからモデルバージョンを公開スニペットを選択し、Foundry に公開するセクションを展開して、対応するコードスニペットをメインのノートブックにコピーします。コードスニペットを Python の新しい model 変数に合わせて調整してください。実際に .publish 関数を呼び出す前に、モデルアダプターをテストすることもできます。テストするには、アダプターモデルのインスタンスから .transform を実行します。
アダプターでラップしたモデルのインスタンスを作成し、テストします。
Copied!1 2 3 4 5 6 7 8 9# autoreload 拡張機能を読み込み、すべてのモジュールを自動的に再読み込みします %load_ext autoreload %autoreload 2 from palantir_models.code_workspaces import ModelOutput from linear_regression_model_adapter import LinearRegressionModelAdapter # クラス名またはファイル名が変更された場合は更新します # 学習済みモデルを Foundry 用のモデルアダプターでラップします linear_regression_model_adapter = LinearRegressionModelAdapter(model) linear_regression_model_adapter.transform(test_df).df_out
モデルを Foundry に公開します。
Copied!1 2 3# モデルリソースへの書き込み可能な参照を取得します。 model_output = ModelOutput("linear_regression_model") model_output.publish(linear_regression_model_adapter) # モデルを Foundry に公開します

Jupyter® ノートブックから直接、推論ジョブや再トレーニングジョブを作成し、スケジュールに従って実行するように設定できます。これにより、Palantir のビルドインフラストラクチャを利用して .ipynb ファイルがトランスフォームとして実行され、データリネージと権限が追跡されます。この機能を使用すると、Jupyter® ノートブックでの試行を続けながら、長時間実行されるトレーニングジョブを並列で設定することもできます。ノートブックから直接、モデルを出力するトランスフォームを作成する方法を参照してください。また、コードリポジトリからモデルを使用したり、Pipeline Builder でバッチ推論やストリーミング推論にモデルを使用したりすることもできます。
このモデルは、直接デプロイを通じて REST API として使用することもできます。直接デプロイを設定する方法を参照してください。
モデルを作成したので、そのモデルをモデリング目標に提出して、問題に対するモデルのライフサイクル全体を管理できます。モデリング目標では、新しいリリースを検証するチェックを設定し、継続的な評価を実行できます。
アクション: プレビューウィンドウでモデルバージョンを表示を選択して、作成したモデルアセットに移動します。次に、モデリング目標に提出を選択し、このチュートリアルのステップ1で作成したモデリング目標にそのモデルを提出します。提出名と提出の所有者を指定するよう求められます。これらは、モデリング目標内でモデルを一意に追跡するために使用されるメタデータです。モデルに linear_regression_model という名前を付け、ご自身を提出の所有者として指定します。

このセクションでは、Jupyter® ノートブックからモデルを公開するときによく発生する問題について説明します。
api が定義されていない公開またはトランスフォームのスニペットを実行すると、次のようなエラーが表示されます。
NotImplementedError: Model adapter api not defined. Edit linear_regression_model_adapter.py to define api.
解決方法: エラーメッセージに記載されたアダプターファイルを開き、api メソッドと predict メソッドを実装してから、セルを再実行します。これは、モデルの作成時に Foundry が生成したスケルトンファイルです。実装するまでは、このエラーが発生します。
詳細:****モデルを追加 > 新しいモデルを作成するでモデルを作成すると、Foundry は api メソッドと predict メソッドが NotImplementedError を発生させるスケルトンアダプターファイルを生成します。ファイルとクラスには、モデルのエイリアスに基づいた名前が付けられます。たとえば、エイリアスが linear_regression_model の場合、LinearRegressionModelAdapter という名前のクラスを含む linear_regression_model_adapter.py が生成されます。このエラーの一般的な原因は、次の2つです。
autoreload の行である %load_ext autoreload と %autoreload 2 が存在し、実行済みであることを確認するか、Kernel > Restart Kernel... でカーネルを再起動して、インポートのセルを再実行します。解決方法: 生成されたファイルには、NotImplementedError を発生させるスケルトンの predict メソッドも含まれています。入力シグネチャが api で定義された入力と一致し、戻り値が宣言された出力と一致するように、predict を実装します。
解決方法:from ... import ... 文のファイル名がアダプターファイルと完全に一致しており、そのファイルがノートブックと同じディレクトリに保存されていることを確認します。最近依存関係をインストールした場合は、変更が環境に反映されるように、Kernel > Restart Kernel... でカーネルを再起動します。
Foundry でモデルをトレーニングしたので、モデルの管理、テスト、評価に進むことができます。Modeling Objectives で実行できる追加のステップの例を以下に示します。
必要に応じて、本番環境向けのモデルのトレーニングパイプラインを作成するために設計された Code Repositories アプリケーションでモデルをトレーニングすることもできます。
Jupyter®、JupyterLab®、および Jupyter® のロゴは、NumFOCUS の商標または登録商標です。
記載されているすべての第三者の商標(ロゴおよびアイコンを含む)は、それぞれの所有者に帰属します。提携または推奨を示唆するものではありません。