MLアプリケーション・パッケージとしてのMLユース・ケースの実装
新しいMLアプリケーション実装を開発するプロバイダは、実装に対応する新しいアプリケーション・パッケージを作成する必要があります。
アプリケーション・パッケージを使用すると、環境に依存しないリージョンに依存しない方法でML機能の標準パッケージ化が可能になります。これにより、任意のテナンシ、リージョンまたは環境で使用できるポータブル・ソリューションになります。アップロード・プロセス中に、リージョンまたは環境に固有のインフラストラクチャ依存性(VCNやログOCIDsなど)がパッケージ引数として提供されます。
パッケージには、コンポーネントやアプリケーション・コンポーネントなどのTerraform、実装バージョン情報を含む記述子、構成スキーマなど、MLアプリケーションのすべての実装詳細が含まれます。これらのパッケージは、既存のMLアプリケーション実装リソースにアップロードまたはデプロイでき、パッケージの新しいバージョンがアップロードされると、MLアプリケーション・サービスによって新しいMLアプリケーション実装バージョンが自動的に作成され、パッケージを使用するすべてのMLアプリケーション・インスタンスのアップグレードが開始されます。
- アプリケーション・コンポーネント
- これらは、MLアプリケーション実装ごとに作成する必要のあるリソースであり、新しいMLアプリケーション実装のプロビジョニングには、対応するアプリケーション・コンポーネントの作成が含まれます。アプリケーション・コンポーネントは、MLアプリケーション実装のすべてのインスタンスに共通であり、新しいMLアプリケーション・インスタンスがプロビジョニングされても作成または再作成されません。
- インスタンス・コンポーネント
- これらは、MLアプリケーション・インスタンスごとに作成する必要があるリソースです。新しいMLアプリケーション・インスタンスのプロビジョニングには、対応するインスタンス・コンポーネントの作成が含まれます。インスタンス・コンポーネントは、MLアプリケーション実装のすべてのインスタンスで異なります。
すべてのアプリケーション・コンポーネントのTerraform構成は、アプリケーション・パッケージのapplication_components
ディレクトリ内にあります。同様に、すべてのインスタンス・コンポーネントのTerraformは、instance_components
ディレクトリに存在します。
- モデルのトレーニングとデプロイ
- プロバイダは、一部のトレーニング・データに基づいてMLモデルをトレーニングする機械学習アルゴリズムを記述します。プロバイダは、モデルのトレーニング、モデル・カタログへの格納、モデルのデプロイにジョブを使用します。
- トレーニングに使用するデータ
- モデルは、コンシューマ・テナンシのオブジェクト・ストレージ・バケットにある顧客(コンシューマ)データに基づいてトレーニングされます。MLジョブは、コンシューマOSバケットからプロバイダのオブジェクト・ストレージ・バケットにデータをロードします。
この例では、MLジョブはアプリケーション・コンポーネントで、MLジョブを作成するためのTerraform構成はアプリケーション・パッケージのapplication_components
ディレクトリの一部です。実際のトレーニングが消費者データに対して行われると、MLアプリケーション実装の新しいMLアプリケーション・インスタンスがプロビジョニングされたときにトレーニングがトリガーされます。新しいMLアプリケーション・インスタンスが作成されると、新しいジョブ実行が作成され、トリガーされます。これにより、コンシューマ・オブジェクト・ストレージ・バケットからプロバイダ・オブジェクト・ストレージ・バケットにデータがロードされ、モデルがトレーニングされ、モデルがモデル・カタログに格納されてから、モデルがデプロイされます。新しいジョブ実行は、すべてのインスタンス(顧客)に対して作成する必要があります。ジョブ実行はインスタンス・コンポーネントです。また、ターゲット・オブジェクト・ストレージ・バケットはインスタンスごとに作成されるため、インスタンス・コンポーネントになります。同様に、モデル・デプロイメントもインスタンス・コンポーネントです。
アプリケーション・コンポーネントとインスタンス・コンポーネントの両方のTerraform構成をパラメータ化できます。MLアプリケーションおよびMLアプリケーション・インスタンスのプロビジョニングに必要なすべてのパラメータは、descriptor.yaml
ファイルで指定できます。たとえば、ジョブ実行で使用するdockerイメージはパラメータ化できます。ジョブを作成する必要があるデータ・サイエンス・プロジェクトをパラメータ化できます。アプリケーション・コンポーネントに属し、新しい実装のプロビジョニング時に必要なすべてのパラメータは、descriptor.yaml
ファイルのpackageArguments
で指定できます。一般に、packageArguments
を使用して、インフラストラクチャOCIDsや環境固有のスケーリング値などの環境固有の値を指定できます。
同様に、MLアプリケーション・インスタンスの作成時に(コンシューマ・テナンシから)ソースOSバケットの名前が必要で、インスタンスごとに(コンシューマからコンシューマまで)異なる場合があります。そのため、これは、MLアプリケーション・インスタンスの作成時にコンシューマによって値が提供されるパラメータである場合があります。このようなすべてのパラメータは、descriptor.yaml
ファイルのconfigurationSchema
で定義できます。
したがって、アプリケーション・パッケージ・ディレクトリの最終構造は次のようになります。
<ml-app-package-name>-<version>.zip
application_components
: すべてのアプリケーション・コンポーネント定義を含むディレクトリ。instance_components
: すべてのインスタンス・コンポーネント定義を含むディレクトリ。descriptor.yaml
: パッケージのディスクリプタ・ファイル。*.trigger.yaml
: トリガー定義ファイル。
アプリケーション・パッケージ構造に関する重要な注意事項:
- アプリケーション・コンポーネントとインスタンス・コンポーネントの両方を対応するディレクトリに定義する必要があります。
application_components
およびinstance_components
ディレクトリはオプションです。application_componentsまたはinstance_componentsディレクトリのないアプリケーション・パッケージは有効です。- ディレクトリの名前は、
application_components
およびinstance_components
と正確(小文字)にする必要があります。 - Terraform構成が
application_components
ディレクトリに存在しないコンポーネントは、アプリケーション・コンポーネントとはみなされません。 - Terraform構成が
instance_components
ディレクトリに存在しないコンポーネントは、インスタンス・コンポーネントとはみなされません。 - 現時点では、すべてのOCIリソースがアプリケーション・コンポーネントまたはインスタンス・コンポーネントとしてサポートされているわけではありません。
- データ・サイエンス・ジョブはサポートされているアプリケーション・コンポーネントですが、データ・サイエンス・モデル、モデル・デプロイメント、ジョブ実行、オブジェクト・ストレージ・バケットおよびオブジェクトはサポートされているインスタンス・コンポーネントです。
次のセクションでは、パッケージ記述子ファイルのスキーマについて詳しく説明します。
MLアプリケーションの構成要素
コンポーネント・タイプ | 許可されるOCIリソース | 備考 |
---|---|---|
アプリケーション・コンポーネント | データ・サイエンス
|
マルチテナント・コンポーネントは、実装内のすべてのMLアプリケーション・インスタンスで共有されます。 データ・サイエンス:
データ・フロー・アプリケーションを使用して大規模に変換できます パイプライン内のステップとして使用できます。 データ・フロー・ステップを含むパイプラインが実行されると、そのステップに関連付けられたデータ・フロー・アプリケーションの新しい実行が自動的に作成および管理されます。データ・フロー実行は、パイプライン内の他のステップと同様に処理され、正常に完了すると、パイプラインは実行を続行し、パイプラインのオーケストレーションの一部として後のステップを開始します。 詳細は、「データ・フロー統合」を参照してください。 |
インスタンス・コンポーネント | データ・サイエンス
MLアプリケーション・トリガーは、インスタンス・コンポーネントとして使用できます。 MLアプリケーション・トリガーはOCIリソースではありませんが、インスタンス・コンポーネントとして使用できます。 トリガーは、アプリケーションに定義されているワークフロー(トレーニングなど)のエントリ・ポイントです。ワークフローが開始される条件を定義し、MLアプリケーション・インスタンス( |
シングルテナント・リソースは、MLアプリケーション・インスタンス(SaaS顧客)ごとに一意に作成されます。
|
MLアプリケーションでは、使用可能なコンポーネントの数に制限は課されません。アプリケーションには1つのパイプライン、1つのトリガー、1つのモデルおよび1つのモデル・デプロイメントが必要な場合がありますが、複数のパイプライン、トリガー、モデルおよびモデル・デプロイメントを含むアプリケーションなど、より複雑なアプリケーションを構築できます。たとえば、5つのトリガー、3つのモデルおよび3つのモデル・デプロイメントを持つ5つのパイプラインです。また、MLアプリケーションは、パイプラインやモデル・デプロイメントを必要とせずに作成できます。
パッケージ記述子ファイル 🔗
- descriptorSchemaVersion
-
- description: スキーマをさらに開発できるパッケージ記述子のスキーマ・バージョン。メジャー・バージョンとマイナー・バージョン(「1.0」など)があり、下位互換性のない変更の場合はメジャー・バージョンが増加し、下位互換性の変更の場合はマイナー・バージョンが増えます。
- 必須: true
- タイプ: 文字列
- description
-
- description: 特定のMLアプリケーション・パッケージとしてパッケージ化されたMLアプリケーション実装の説明。この値は、ML Applications実装の説明フィールドとして表示されます。
- 必須: false
- タイプ: 文字列
- mlApplicationVersion
-
- description: 特定のパッケージによって実装されるMLアプリケーション契約のバージョン(MLアプリケーション・バージョン・リソースのバージョン・フィールド)
ノート
これは、ML Applicationsバージョン・リソースが導入されたときに将来使用するために予約されているプレースホルダです。指定された値は無視されます。 - 必須: true
- タイプ: 文字列
- description: 特定のパッケージによって実装されるMLアプリケーション契約のバージョン(MLアプリケーション・バージョン・リソースのバージョン・フィールド)
- packageVersion
-
- description: ML Applicationsパッケージのバージョン。この値は、MLアプリケーション実装の
Package version
フィールドとして表示されます。 - 必須: true
- タイプ: 文字列
- description: ML Applicationsパッケージのバージョン。この値は、MLアプリケーション実装の
- packageArguments
-
- description: サポートされている引数のリスト。引数は、インフラストラクチャOCIDsや環境固有のスケーリング値など、環境固有の値を提供するために使用できます。
- type: map (引数名は引数のプロパティにマップされます)
- 必須: false
- 引数のプロパティ:
- タイプ
- 必要な
- type:
- type: 列挙(文字列またはocid)
- 必須: true
- description: 引数値のタイプ。
- Boolean (trueまたはfalse)
- required: false(デフォルトはtrue)
- description: 特定の引数が必須かどうか。
- 説明
- タイプ: 文字列
- 必須: true
- description: 引数の説明。
- validationRegexp
- タイプ: 文字列
- 必須: false
- description: 引数値の検証に使用される正規表現。
- defaultValue
- タイプ: 文字列
- 必須: false
- 説明: 引数または構成スキーマ・プロパティが指定されていない場合に使用される値(
mandatory
がfalse
の場合にのみ指定できます)。
- タイプ
- configurationSchema
-
- description: コンシューマがMLアプリケーション・インスタンスのメタデータとして提供する必要がある構成のスキーマ。この値は、MLアプリケーション実装の
configurationSchema
フィールドとして表示されます。 - type: map (構成プロパティ名は構成プロパティのプロパティにマップされます)
- 必須: false
- 引数のプロパティ:
- タイプ
- type: 列挙(文字列またはシークレット)
- 必須: true
- description: 構成値のタイプ。
- 必要な
- type: Boolean (trueまたはfalse)
- required: false(デフォルトはtrue)
- description: 特定の構成プロパティが必須かどうか。
- 説明
- タイプ: 文字列
- 必須: true
- description: 構成プロパティの説明。
- validationRegexp
- タイプ: 文字列
- 必須: false
- description: 構成値の検証に使用される正規表現。
- sampleValue
- タイプ: 文字列
- 必須: true
- description: インスタンス・コンポーネントの検証に使用されるサンプル値。
- defaultValue
- タイプ: 文字列
- 必須: false
- description: 引数または構成スキーマ・プロパティが指定されていない場合に使用される値(必須はfalse)。
- タイプ
- description: コンシューマがMLアプリケーション・インスタンスのメタデータとして提供する必要がある構成のスキーマ。この値は、MLアプリケーション実装の
必須のTerraform属性 🔗
resource oci_datascience_job ingestion_job {
...
delete_related_job_runs = true
...
}
データ・サイエンス・パイプラインのすべてのterraform定義は、パイプラインの削除時に、関連するパイプライン実行が自動的に削除されるようにする必要があります。resource oci_datascience_pipeline ingestion_pipeline {
...
delete_related_pipeline_runs = true
...
}
delete_related_xxx_runs
属性を正しく指定しないと、MLアプリケーション実装バージョンの削除がブロックされます。プロバイダは、削除のブロックを解除するために実行リソースを削除する必要があります。 テナントの分離およびOCI SDKバージョン 🔗
テナント分離により、各顧客のデータとワークロードを確実に分離できます。MLアプリケーション・サービスは、MLアプリケーション・インスタンスのリソース・プリンシパル(アイデンティティ)を、MLアプリケーション・トリガーによって開始されたワークロード(パイプラインまたはジョブ実行)に伝播します。
MLアプリケーション・インスタンス・リソース・プリンシパルの伝播には、OCI SDKでの対応するサポートが必要です。
- Python SDK: バージョン2.126.4以上
- Java SDK: バージョン3.44.4以上