注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
モデルは、Model Training Template
を使ってCode Repositoriesアプリケーションで学習させることができます。
モデルを学習させるには、以下の手順を完了してください:
モデルはモデルアダプターを使用して、Foundry がモデルを正しく初期化、シリアライズ、デシリアライズし、推論を実行できるようにします。Code Repositories で、Model Adapter Library
テンプレートまたは[Model Training
テンプレートのいずれかを使ってモデルアダプターを作成できます。
モデルアダプターは、Pythonトランスフォームのリポジトリに直接作成することはできません。既存のリポジトリからモデルを生成するには、Model Adapter Library
を使用してライブラリをトランスフォームリポジトリにインポートするか、Model Training
テンプレートに移行してください。
それぞれのタイプのモデルアダプターリポジトリをいつ使用するか、およびそれらを作成する方法については、モデルアダプター作成ドキュメントを参照してください。以下の手順では、Model Trainingテンプレートの使用を前提としています。
モデルアダプターとモデル学習コードは、別々のPythonモジュールにすることで、学習したモデルが下流のトランスフォームで使用できるようにします。このテンプレートでは、この目的のために model_adapters
と model_training
モジュールを別々にしています。adapter.py
ファイルにモデルアダプターを作成してください。
モデルアダプターの定義は、学習されるモデルに依存します。詳細については、ModelAdapter API リファレンスを参照するか、例の sklearn モデルアダプターを確認してください。また、教師あり機械学習チュートリアルを読んで詳細を学んでください。
次に、コードリポジトリで、学習ロジックを格納する新しい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要件など)を設定することもできます。
コードリポジトリアプリケーションで、プレビュー を選択して、フルビルドを実行せずにトランスフォームロジックをテストできます。ただし、プレビューは、@configure
アノテーションで設定した場合とは異なる、より小さなリソースプロファイルで実行されることに注意してください。
ModelOutput
プレビューを使用すると、モデルトレーニングロジック、モデルのシリアル化・デシリアル化、API実装を検証できます。
ModelInput
プレビューを使用すると、既存のモデルに対して推論ロジックを検証できます。コードリポジトリでのプレビューでは、すべての ModelInput
に対して5GBのサイズ制限があることに注意してください。
コードリポジトリで、ビルドを選択してトランスフォームを実行します。Foundryは、Pythonの依存関係とモデルの依存関係を解決してから、トレーニングロジックを実行します。
ModelOutput.publish()
を呼び出すと、モデルのバージョンがFoundryに公開されます。Foundryは、ModelAdapter.save()
関数を呼び出し、ModelAdapterに実行に必要なすべてのフィールドをシリアル化する能力を与えます。
モデルは、以下の目的でモデリングオブジェクティブに公開されることがあります。
以下の詳細に従って、パイプラインで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
オブジェクトは、コードリポジトリのモデルと直接やり取りするためのオブジェクトです。オブジェクトの概要は以下のとおりです。
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 インスタンスは、関連付けられたロード済みモデルの状態とモデルアダプターで定義されたすべてのメソッドにアクセスできます。
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
オブジェクトにシリアライズすることが可能になります。