注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
モデルは、Code Repositories アプリケーションでモデルトレーニングテンプレートを使用してトレーニングできます。
モデルをトレーニングするには、次の手順を実行します。
モデルはモデルアダプターを使用して、Foundry がモデルの初期化、シリアライズ、デシリアライズ、および推論を正しく実行できるようにします。Code Repositories では、モデルアダプターライブラリテンプレートまたはモデルトレーニングテンプレートからモデルアダプターを作成できます。
Python トランスフォームのリポジトリでは、モデルアダプターを直接作成できません。既存のリポジトリからモデルを作成するには、モデルアダプターライブラリを使用して、そのライブラリをトランスフォームのリポジトリにインポートするか、モデルトレーニングテンプレートに移行してください。
各種類のモデルアダプターリポジトリを使用する場面と、その作成方法については、モデルアダプターの作成ドキュメントを参照してください。以下の手順では、モデルトレーニングテンプレートの使用を前提としています。

トレーニング済みモデルを下流のトランスフォームで使用できるようにするため、モデルアダプターとモデルトレーニングのコードは別々の 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 24from transforms.api import transform, Input from palantir_models.transforms import ModelOutput from model_adapter.example_adapter import ExampleModelAdapter # これはカスタム ModelAdapter です def train_model(training_data): ''' この関数にはカスタムの学習ロジックが含まれます。 ''' pass @transform.using( 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 を呼び出してモデルを生成します )
このロジックは ModelOutput に公開します。変更をコミットすると、Foundry は指定したパスにモデルリソースを自動的に作成します。機密情報区分に基づくアクセス制御(CBAC)を使用するエンロールメントでは、トランスフォームが自身の出力リソースを作成することはできません。そのため、ビルドする前に、対象フォルダーで + 新規 > モデルを選択してモデルを作成し、新しく作成するリソースに必要なファイルの機密情報区分を設定してから、ModelOutput がその既存のパスを指すようにします。同じ制限は、トランスフォームで宣言する Output データセットにも適用されます。出力がまだ存在しないトランスフォームをビルドすると、機密情報区分に基づくアクセス制御が有効な場合はデータセットの作成が許可されないというエラーで失敗します。また、@configure 注釈を使用して、CPU、メモリー、GPU の要件など、モデルトレーニングに必要なリソースを設定できます。
モデル実験は、モデルトレーニングの実行中に生成されるメトリクスとハイパーパラメーターを記録するための軽量フレームワークです。記録したメトリクスとハイパーパラメーターは、モデルとともに公開し、モデルページに保存できます。
Code Repositories アプリケーションでは、プレビューを選択して、完全なビルドを実行せずにトランスフォームのロジックをテストできます。ただし、プレビューは、@configure 注釈で設定したリソースプロファイルよりも小さいリソースプロファイルで実行されます。
ModelOutput のプレビューでは、モデルトレーニングのロジックに加え、モデルのシリアライズ、デシリアライズ、および API の実装を検証できます。

ModelInput のプレビューでは、既存のモデルに対して推論ロジックを検証できます。Code Repositories でのプレビューには、各 ModelInput に 5 GB のサイズ制限があります。

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

ModelOutput.publish() を呼び出すと、モデルのバージョンが Foundry に公開されます。Foundry は ModelAdapter.save() 関数を呼び出し、ModelAdapter が実行に必要なすべてのフィールドをシリアライズできるようにします。
モデルは、次の用途のためにモデリング目標に公開できます。
以下に詳しく説明するように、パイプラインで Palantir モデルを使用することもできます。
モデルが定義されていないトランスフォームのリポジトリ内でモデルを実行するには、ModelInput で use_sidecar = True を設定します。これにより、モデルアダプターとその依存関係が自動的にインポートされ、依存関係の競合を防ぐために別の環境で実行されます。詳細については、ModelInput クラスのリファレンスを参照してください。この機能は、palantir_models バージョン 0.2010.0 以降で、Spark を使用しないトランスフォーム(@lightweight または @transform.using デコレーターを使用)で利用可能です。
use_sidecar が True に設定されていない場合、モデルアダプターとその依存関係を現在のコードリポジトリにインポートするか、そのリポジトリ内で定義する必要があります。
モデルを作成したリポジトリとは異なる Python トランスフォームのリポジトリでモデルを使用する場合は、開発用 Python 環境にモデルアダプターの Python ライブラリを追加する必要があります。これにより、モデルの読み込みに必要な Python パッケージが、モデルを利用するリポジトリの環境に取り込まれます。コード開発用のユーザーインターフェースは、モデルの依存関係がリポジトリに存在しないことを検出し、警告にカーソルを合わせると、ライブラリのインポートを提案します。特定のモデルバージョンに対応するアダプターライブラリとそのバージョンは、Foundry のモデルページで確認できます。

Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22from transforms.api import transform, Input, Output, LightweightInput, LightweightOutput from palantir_models.transforms import ModelInput from palantir_models import ModelAdapter @transform.using( inference_input=Input("/path/to/inference_input"), model=ModelInput( "/path/to/model", # 現在のトランスフォームリポジトリの外部で定義されたモデルには use_sidecar=True を推奨します ), inference_output=Output("/path/to/inference_output"), ) def compute( inference_input: LightweightInput, model: ModelAdapter, inference_output: LightweightOutput ): inference_results = model.transform(inference_input) # "output_data" を、モデルバージョンの API で指定されている出力に置き換えます。この出力はモデルバージョンの Web ページで確認できます。 # たとえば、Hugging Face アダプターでは inference_results.output_data が適切な出力です。 inference = inference_results.output_data inference_output.write_pandas(inference)
上記のトランスフォームで呼び出される ModelInput および ModelOutput オブジェクトは、Code Repositories でモデルとのやり取りを直接担うオブジェクトです。これらのオブジェクトの概要は次のとおりです。
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)を引数として1個受け取ります。 アセットがまだ存在しない場合、ユーザーが Commit または Build を選択してトランスフォームのチェック(CI)が実行されると、ModelOutput がアセットを作成します。 ''' pass
トランスフォーム関数内で、ModelOutput を割り当てることで取得されるオブジェクトは、publish() メソッドを使用して新しいモデルバージョンを公開できる WritableModel です。このメソッドは、モデルアダプターをパラメーターとして受け取り、それに関連付けられた新しいモデルバージョンを作成します。publish() の実行中、プラットフォームは定義された @auto_serialize インスタンスを使用するか、実装された save() メソッドを実行します。これにより、モデルアダプターはモデルファイルやチェックポイントを state_writer オブジェクトにシリアライズできます。