モデル統合モデルアセットFoundry で学習したモデルCode Repositories でモデルを学習させる

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

Code Repositories でモデルを学習させる

モデルは、Model Training Templateを使ってCode Repositoriesアプリケーションで学習させることができます。

モデルを学習させるには、以下の手順を完了してください:

  1. モデルアダプターを作成する
  2. モデルを学習させるためのPythonトランスフォームを作成する
  3. Pythonトランスフォームのプレビューでロジックをテストする
  4. 学習したモデルを公開するためのPythonトランスフォームをビルドする
  5. モデルを利用する

1. モデルアダプターを作成する

モデルはモデルアダプターを使用して、Foundry がモデルを正しく初期化、シリアライズ、デシリアライズし、推論を実行できるようにします。Code Repositories で、Model Adapter Libraryテンプレートまたは[Model Trainingテンプレートのいずれかを使ってモデルアダプターを作成できます。

モデルアダプターは、Pythonトランスフォームのリポジトリに直接作成することはできません。既存のリポジトリからモデルを生成するには、Model Adapter Libraryを使用してライブラリをトランスフォームリポジトリにインポートするか、Model Trainingテンプレートに移行してください。

それぞれのタイプのモデルアダプターリポジトリをいつ使用するか、およびそれらを作成する方法については、モデルアダプター作成ドキュメントを参照してください。以下の手順では、Model Trainingテンプレートの使用を前提としています。

モデルアダプターの実装

Code Repositories の Model Training Template のデフォルト構造

モデルアダプターとモデル学習コードは、別々のPythonモジュールにすることで、学習したモデルが下流のトランスフォームで使用できるようにします。このテンプレートでは、この目的のために model_adaptersmodel_training モジュールを別々にしています。adapter.py ファイルにモデルアダプターを作成してください。

モデルアダプターの定義は、学習されるモデルに依存します。詳細については、ModelAdapter API リファレンスを参照するか、例の sklearn モデルアダプターを確認してください。また、教師あり機械学習チュートリアルを読んで詳細を学んでください。

2. モデルを学習させるためのPythonトランスフォームを作成する

次に、コードリポジトリで、学習ロジックを格納する新しいPythonファイルを作成します。

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 from transforms.api import transform, Input from palantir_models.transforms import ModelOutput from model_adapter.example_adapter import ExampleModelAdapter # これはあなたのカスタムModelAdapterです @transform( training_data=Input("/path/to/training_data"), # トレーニングデータへのパス model_output=ModelOutput("/path/to/model") # モデルへのパス ) def compute(training_data, model_output): ''' この関数は、Foundryへの読み書きのロジックを含んでいます。 ''' trained_model = train_model(training_data) # 1. Pythonのトランスフォームでモデルを訓練します wrapped_model = ExampleModelAdapter(trained_model) # 2. 訓練済みモデルをカスタムModelAdapterでラップします model_output.publish( # 3. ラップされたモデルをFoundryに保存します model_adapter=wrapped_model # FoundryはModelAdapter.saveを呼び出してモデルを生成します ) def train_model(training_data): ''' この関数は、あなたのカスタムトレーニングロジックを含んでいます。 ''' pass

このロジックは、ModelOutputにパブリッシュしています。変更をコミットした後、Foundryは指定されたパスに自動的にモデルリソースを作成します。また、@configure アノテーションを使用して、モデルトレーニングに必要なリソース(CPU、メモリ、GPU要件など)を設定することもできます。

3. Pythonトランスフォームのプレビューでロジックをテストする

コードリポジトリアプリケーションで、プレビュー を選択して、フルビルドを実行せずにトランスフォームロジックをテストできます。ただし、プレビューは、@configure アノテーションで設定した場合とは異なる、より小さなリソースプロファイルで実行されることに注意してください。

ModelOutputプレビュー

ModelOutputプレビューを使用すると、モデルトレーニングロジック、モデルのシリアル化・デシリアル化、API実装を検証できます。

コードリポジトリアプリケーションでのモデル出力プレビュー。

ModelInputプレビュー

ModelInputプレビューを使用すると、既存のモデルに対して推論ロジックを検証できます。コードリポジトリでのプレビューでは、すべての ModelInputに対して5GBのサイズ制限があることに注意してください。

コードリポジトリアプリケーションでのモデル入力プレビュー。

4. トレーニング済みモデルを公開するためにPythonトランスフォームをビルドする

コードリポジトリで、ビルドを選択してトランスフォームを実行します。Foundryは、Pythonの依存関係とモデルの依存関係を解決してから、トレーニングロジックを実行します。

コードリポジトリでモデルをビルドする。

ModelOutput.publish()を呼び出すと、モデルのバージョンがFoundryに公開されます。Foundryは、ModelAdapter.save()関数を呼び出し、ModelAdapterに実行に必要なすべてのフィールドをシリアル化する能力を与えます。

5. モデルを利用する

Modeling Objectiveに送信する

モデルは、以下の目的でモデリングオブジェクティブに公開されることがあります。

Python Transformsで推論を実行する

以下の詳細に従って、パイプラインでPalantirモデルを使用することもできます。

別のPythonトランスフォームリポジトリでモデルを使用している場合は、モデルアダプタのPythonライブラリを Python環境に作成する必要があります。これは通常、Palantirのモデルリソースページで見つけることができます。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from transforms.api import transform, Input, Output from palantir_models.transforms import ModelInput # 推論の入出力とモデルを指定して変換関数を定義 @transform( inference_output=Output("/path/to/inference_output"), # 推論結果の出力先 inference_input=Input("/path/to/inference_input"), # 推論入力データのパス model=ModelInput("/path/to/model"), # モデルのパス ) def compute(inference_output, inference_input, model): # modelはExampleModelAdapterのインスタンス # model.transformを使って推論を実行し、結果を取得 inference_results = model.transform(inference_input) # inference_resultsはpredict()またはrun_inference()メソッドの戻り値 # "output_data"をモデルバージョンのAPIで指定された出力に置き換える。モデルバージョンのWebページで確認できる。 # 例えば、Hugging Faceアダプターに適切な出力はinference_results.output_dataです。 inference = inference_results.output_data # 推論結果を書き出す inference_output.write_pandas(inference)

ModelInput と ModelOutput API

上記の変換で呼び出される ModelInputModelOutput オブジェクトは、コードリポジトリのモデルと直接やり取りするためのオブジェクトです。オブジェクトの概要は以下のとおりです。

ModelInput

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 # ModelInputはpalantir_models.transformsからインポートできます class ModelInput: def __init__(self, model_rid_or_path: str, model_version: Optional[str] = None): ''' `ModelInput`は、既存のモデルを変換用途で取得するためのものです。最大で2つの引数を取ります: 1. モデルへのパス(またはモデルのRID)。 2. (オプション)取得するモデルのバージョンRID。 これが提供されていない場合、最近公開されたモデルが使用されます。 例:ModelInput("/path/to/model/asset") ''' pass

変換関数では、ModelInput で指定されたモデルが、取得されたモデルバージョンに関連付けられたモデルアダプターのインスタンスとしてインスタンス化されます。Foundry は、変換ビルドを開始する前にモデルを設定するために ModelAdapter.load を呼び出すか、定義された @auto_serialize インスタンスを使用します。したがって、ModelInput インスタンスは、関連付けられたロード済みモデルの状態とモデルアダプターで定義されたすべてのメソッドにアクセスできます。

ModelOutput

Copied!
1 2 3 4 5 6 7 8 9 10 # ModelOutputはpalantir_models.transformsからインポートすることができます class ModelOutput: def __init__(self, model_rid_or_path: str): ''' `ModelOutput`は新しいバージョンをモデルに公開するために使用されます。 `ModelOutput`は一つの引数を取ります、それはモデルへのパス(またはモデルRID)です。 アセットがまだ存在しない場合、ModelOutputはユーザーがコミットまたはビルドを選択し、トランスフォームチェック(CI)が実行されたときにアセットを作成します。 ''' pass

上記は日本語訳を追加したコードです。具体的には、ModelOutputクラスの説明を日本語に翻訳しました。 トランスフォーム関数では、ModelOutputに割り当てられたオブジェクトは、publish()メソッドを使用して新しいモデルバージョンを公開することが可能なWritableModelです。このメソッドは、モデルアダプタをパラメーターとして取り、それに関連付けられた新しいモデルバージョンを作成します。publish()の間、プラットフォームは定義された@auto_serializeインスタンスを使用するか、実装されたsave()メソッドを実行します。これにより、モデルアダプタはモデルファイルやチェックポイントをstate_writerオブジェクトにシリアライズすることが可能になります。