このページは機械翻訳したものです。

MLアプリケーション・パッケージとしてのMLユース・ケースの実装

新しいMLアプリケーション実装を開発するプロバイダは、実装に対応する新しいアプリケーション・パッケージを作成する必要があります。

アプリケーション・パッケージを使用すると、環境に依存しないリージョンに依存しない方法でML機能の標準パッケージ化が可能になります。これにより、任意のテナンシ、リージョンまたは環境で使用できるポータブル・ソリューションになります。アップロード・プロセス中に、リージョンまたは環境に固有のインフラストラクチャ依存性(VCNやログOCIDsなど)がパッケージ引数として提供されます。

パッケージには、コンポーネントやアプリケーション・コンポーネントなどのTerraform、実装バージョン情報を含む記述子、構成スキーマなど、MLアプリケーションのすべての実装詳細が含まれます。これらのパッケージは、既存のMLアプリケーション実装リソースにアップロードまたはデプロイでき、パッケージの新しいバージョンがアップロードされると、MLアプリケーション・サービスによって新しいMLアプリケーション実装バージョンが自動的に作成され、パッケージを使用するすべてのMLアプリケーション・インスタンスのアップグレードが開始されます。

このパッケージには、MLユース・ケースを実装するコンポーネントが含まれています。コンポーネントには、次の2つのタイプがあります。
アプリケーション・コンポーネント
これらは、MLアプリケーション実装ごとに作成する必要のあるリソースであり、新しいMLアプリケーション実装のプロビジョニングには、対応するアプリケーション・コンポーネントの作成が含まれます。アプリケーション・コンポーネントは、MLアプリケーション実装のすべてのインスタンスに共通であり、新しいMLアプリケーション・インスタンスがプロビジョニングされても作成または再作成されません。
インスタンス・コンポーネント
これらは、MLアプリケーション・インスタンスごとに作成する必要があるリソースです。新しいMLアプリケーション・インスタンスのプロビジョニングには、対応するインスタンス・コンポーネントの作成が含まれます。インスタンス・コンポーネントは、MLアプリケーション実装のすべてのインスタンスで異なります。

すべてのアプリケーション・コンポーネントのTerraform構成は、アプリケーション・パッケージのapplication_componentsディレクトリ内にあります。同様に、すべてのインスタンス・コンポーネントのTerraformは、instance_componentsディレクトリに存在します。

アプリケーション・コンポーネントとインスタンス・コンポーネントの区別をより明確にするために、一部のMLアプリケーションのユース・ケース(次の部分を含む)のソリューション(MLアプリケーション実装)を開発することをプロバイダが検討します。
モデルのトレーニングとデプロイ
プロバイダは、一部のトレーニング・データに基づいて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アプリケーションの構成要素

MLアプリケーションは、他のOCIリソースを使用して構築されます。次の表に、許可されるリソース・タイプを示します。
許可されるリソース・タイプ
コンポーネント・タイプ 許可されるOCIリソース 備考
アプリケーション・コンポーネント データ・サイエンス
  • ジョブ
  • パイプライン
  • モデル
データ・フロー
  • データ・フロー・アプリケーション

マルチテナント・コンポーネントは、実装内のすべてのMLアプリケーション・インスタンスで共有されます。

データ・サイエンス:

  • 「ジョブ」および「パイプライン」は、アプリケーション・コンポーネントとして一般的に使用され、アプリケーションによって実行されるワークフローまたはタスクを定義します。顧客に対してワークフローまたはタスクがトリガーされると、新しいパイプライン実行またはジョブ実行が作成されます。通常は、トリガーによって提供される顧客固有のパラメータを使用します。
  • 「モデル」は、事前トレーニング済の即時利用可能なモデルがアプリケーションで使用可能である場合、アプリケーション・コンポーネントとして使用されます。

データ・フロー・アプリケーションを使用して大規模に変換できます

パイプライン内のステップとして使用できます。

データ・フロー・ステップを含むパイプラインが実行されると、そのステップに関連付けられたデータ・フロー・アプリケーションの新しい実行が自動的に作成および管理されます。データ・フロー実行は、パイプライン内の他のステップと同様に処理され、正常に完了すると、パイプラインは実行を続行し、パイプラインのオーケストレーションの一部として後のステップを開始します。

詳細は、「データ・フロー統合」を参照してください。

インスタンス・コンポーネント データ・サイエンス
  • モデル
  • モデルのデプロイメント
  • スケジューラ
    • スケジュール
オブジェクト・ストレージ
  • バケット
  • オブジェクト
ノート:

MLアプリケーション・トリガーは、インスタンス・コンポーネントとして使用できます。

MLアプリケーション・トリガーはOCIリソースではありませんが、インスタンス・コンポーネントとして使用できます。

トリガーは、アプリケーションに定義されているワークフロー(トレーニングなど)のエントリ・ポイントです。ワークフローが開始される条件を定義し、MLアプリケーション・インスタンス(datasciencemlappinstanceリソース・プリンシパル)のアイデンティティを使用してワークフローが開始されるようにします。

シングルテナント・リソースは、MLアプリケーション・インスタンス(SaaS顧客)ごとに一意に作成されます。

  • モデルは、新しいモデルがデータを使用して顧客ごとに特別にトレーニングされるときに、インスタンス・コンポーネントとして使用されます。
  • モデル・デプロイメントは、顧客固有のモデルをサービスとして公開するためのインスタンス・コンポーネントとして機能します。
  • バケットは、取り込み、変換または処理されたデータ用の顧客固有のストレージとして機能します。
  • オブジェクトは通常、顧客に固有の構成を格納するために使用されます。
  • 「スケジュール」では、定義された間隔に基づいてワークフローを定期的に実行できます。これらは、スケジュールされた間隔で起動するMLアプリケーション・トリガーにリンクされます。
ノート

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
  • タイプ: 文字列
packageVersion
  • description: ML Applicationsパッケージのバージョン。この値は、MLアプリケーション実装のPackage versionフィールドとして表示されます。
  • 必須: true
  • タイプ: 文字列
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
      • 説明: 引数または構成スキーマ・プロパティが指定されていない場合に使用される値(mandatoryfalseの場合にのみ指定できます)。
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)。

必須のTerraform属性

データ・サイエンス・ジョブのすべての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以上