モデル・グループ

Multimodel Serving(MMS)では、モデル・グループと呼ばれる構成を介して複数の機械学習モデルをグループとしてデプロイおよび管理できる新機能が導入されました。

モデル・グループは、モデル・ストア内のモデルのコレクションを表すリソースです。単一のモデル・デプロイメントで最大500のモデル(シェイプごとに制限)をデプロイおよび管理できます。これを使用すると、複数の個別のモデル・デプロイメントを管理するオーバーヘッドを削減することで、操作が簡素化されます。これは、従来の単一モデル・デプロイメントから、より動的なモデル管理およびコスト対応推論へと大きく進化したことを示しています。

モデル・グループ・リソースの主な機能は次のとおりです。

  • モデル・グループ・ライフサイクル管理 - モデル・グループは不変性およびバージョニングをサポートしており、堅牢なライフサイクル追跡、再現性およびデプロイメントの安全な反復を提供します。
  • 推論キー - 呼出しの推論には、モデルOCIDsのかわりにSaaSのわかりやすい名前を使用できます。推論キーは、モデルOCIDsの別名です。
  • カスタム・メタデータ– モデル・グループ内の推論コンテナおよびモデル固有の変数に渡されるキーと値のペアのリスト。この機能は、複数のLLMをGPUカードに固定するのに役立ちます。

モデル・グループを使用するには、モデル・グループ・ポリシーを適用する必要があります。

主要な概念

モデル・グループ

  • モデル・グループは、複数のモデルを保持する論理リソースです。
  • デプロイすると、モデル・グループ内の各モデルは、そのモデルOCIDおよび推論キーによって識別されます(オプション)。
  • 次の型がサポートされています。
    同種
    共有ランタイム環境に一緒にデプロイされた同じタイプのモデルのグループ。これらのモデルは独立して動作しますが、同じコンピュート・リソースとメモリー・リソースを使用してインフラストラクチャの使用を効率化します。
    スタック
    ベース・モデルといくつかの微調整された重みを持つ大規模言語モデル(LLM)用に設計されたHomogeneous Groupの拡張。
    異種
    モデル・グループは、PyTorch、TensorFlow、ONNXなどの様々なMLフレームワーク上に構築されたモデルで構成されます。このグループ・タイプを使用すると、多様なモデル・アーキテクチャを単一のサービス環境に配置できます。
    ノート

    独自のコンテナの持込み(BYOC)アプローチを使用して、このタイプのモデル・グループ・デプロイメントを作成します
  • 推論キー
    推論キーを使用すると、推論コールを行う際に、モデルOCIDsのかわりにSaaSフレンドリな別名を使用できます。推論キーは、特定のモデルOCIDにマップされた別名として機能し、モデル・グループの作成時に定義されます。
    ノート

    推論キーでは、最大32文字の長さがサポートされます。

    次に、REST APIとSDKの両方を使用して推論キーを定義する方法を示すスナップショットを示します。

    Rest API:
    
    "memberModelEntries": {
            "memberModelDetails": [
                {
                    "inferenceKey": "key1",
                    "modelId": "ocid1.datasciencemodel.oc1.iad.aaaaaaaa4kqzxsqdmlf3x2hedpyghfpy727odfuwr3pwwhocw32wbtjuj5zq"
                },
                {
                    "inferenceKey": "key2",
                    "modelId": "ocid1.datasciencemodel.oc1.iad.aaaaaaaa5oyorntk2xa2swphlzqgjwmevnrentlcay7ixy5bahkuwb34xlpq"
                },
                {
                    "inferenceKey": "key3",
                    "modelId": "ocid1.datasciencemodel.oc1.iad.aaaaaaaatutjajr32s5uggnv3zud3ve4rya57innybhpkuam3egzmvow4zvq"
                }
            ]
        }
    SDK:
    
    member_model_details_list = [
            MemberModelDetails(
                model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxziav7hda2c2xn57bifhvfjnb63teaxsyal4hie2uykkwrtq",
                inference_key="key-1"),
            MemberModelDetails(
                model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxzia4qrtrviyzlhkvaimsl6aub7nldtnzts72voejpdvmu2q",
                inference_key="key-2"),
            MemberModelDetails(
                model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxziaxicmn7domsjwl5ojmks3dki32ffy26prhey6tmxiwkeq",
                inference_key="key-3")
        ]

モデル・グループの作成

モデル・グループの作成には、次の3つのオプションを使用できます。
モデル・グループの作成
新しいモデル・グループを最初から作成するには、このオプションを使用します。
既存のモデル・グループの複製および変更
既存のモデル・グループがすでに存在し、モデルを追加または削除して変更する場合は、このオプションを使用します。
モデル・グループのバージョン履歴からクローニング
モデル・グループ・バージョン履歴の最新モデル・グループ・バージョンを更新するには、このオプションを使用します。

モデル・グループの作成

モデル・グループを最初から作成します。

  • このオプションを使用して、新規モデル・グループを作成します。モデル・グループ・ポリシーを適用します。既存のモデル・グループがすでに存在し、モデルを追加または削除して変更する場合は、このステップをスキップして「ステップ2: モデル・グループのクローニング」または「モデル・グループのパッチ」に進みます。

    1. 「モデル・グループの作成」ページにナビゲートします。
    2. 「新規モデル・グループの作成」を選択します。
    3. (オプション)一意の名前(255文字の制限)を入力します。名前を指定しない場合は、名前が自動的に生成されます。
    4. (オプション)モデル・グループの説明(400文字の制限)を入力します。
    5. HOMOGENOUSタイプのモデル・グループを作成する場合は、アーティファクトのアップロード・オプションを使用して、モデル・グループ・デプロイメント・ランタイム・アーティファクトをアップロードします。
    6. コンパートメントを選択します。
    7. プロジェクトを選択します。
    8. モデル・グループに含めるモデルを選択します。
    9. (オプション)モデル・グループにバージョン履歴を追加します。
      • 新しいバージョン履歴を作成するには、「新しいモデル・グループ・バージョン履歴の作成」を選択します。
        1. リストから、コンパートメントを選択します。
        2. (オプション)名前(255文字の制限)を入力します。名前を指定しない場合は、名前が自動的に生成されます。
        3. (オプション)モデル・グループの説明(400文字の制限)を入力します。
      • 既存のバージョン履歴を選択するには、「既存のモデル・グループ・バージョン履歴の使用」を選択します。
        1. リストから、コンパートメントを選択します。
        2. リストからプロジェクトを選択します。
        3. リストからモデル・グループのバージョン履歴を選択します。
    10. モデル・グループの分類
      モデル・グループのタイプは次のとおりです。
      • 同種
      • 異種
      • 積上げ推論
    11. 「作成」を選択します。
    1. (オプション)モデル・グループのバージョン履歴の作成:
      def __create_model_group_version_history(compartment_id, project_id):
          model_group_version_history_details_object = CreateModelGroupVersionHistoryDetails()
          model_groupversion_history_details_object.compartment_id = f'<compartment_id>
          model_group_version_history_details_object.display_name = f'<display_name>
          model_group_version_history_details_object.project_id = f'<project_id>
       
          try:
              mgvh_response = data_science_client.create_model_group_version_history(model_group_version_history_details_object)
              mgvh_id = json.loads(str(mgvh_response.data))['id']
              return mgvh_id
          except Exception as e:
              logger.error("Failed to create model group version history with error: %s", format(e))
    2. モデル・グループの作成:
      def __create_model_group(compartment_id, project_id):
          model_group_details_object = ModelGroupDetails()
          model_group_details_object.type = ModelGroupDetails.TYPE_HOMOGENEOUS
          #  Optionally, use model_group_details_object.custom_metadata_list to specify custom metadata for the model group.
       
          member_model_details_list = [
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxziav7hda2c2xn57bifhvfjnb63teaxsyal4hie2uykkwrtq",
                  inference_key="key-1"),
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxzia4qrtrviyzlhkvaimsl6aub7nldtnzts72voejpdvmu2q",
                  inference_key="key-2"),
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxziaxicmn7domsjwl5ojmks3dki32ffy26prhey6tmxiwkeq",
                  inference_key="key-3")
          ]
       
          member_model_entries = MemberModelEntries()
          member_model_entries.member_model_details = member_model_details_list
       
          create_model_group_details_object = CreateModelGroupDetails()
          create_model_group_details_object.compartment_id = f'<compartment_id>
          create_model_group_details_object.display_name = f'<display_name>
          create_model_group_details_object.project_id = f'<project_id>
          create_model_group_details_object.member_model_entries = member_model_entries
          create_model_group_details_object.model_group_details = model_group_details_object
       
          try:
              model_group_response = data_science_client.create_model_group(create_model_group_details_object)
              model_group_id = json.loads(str(model_group_response.data))['id']
              # Get the data from response
              logger.info(model_group_response.headers)
              return model_group_id
          except Exception as e:
              logger.error("Failed to create model group with error: %s", format(e)))
    3. バージョニングを使用したモデル・グループの作成:
      def __create_model_group_with_versioning(compartment_id, project_id, model_group_version_history_id):
          model_group_details_object = ModelGroupDetails()
          model_group_details_object.type = ModelGroupDetails.TYPE_HOMOGENEOUS
          # Optionally, use model_group_details_object.custom_metadata_list to specify custom metadata for the model group.
       
          member_model_details_list = [
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxziav7hda2c2xn57bifhvfjnb63teaxsyal4hie2uykkwrtq",
                  inference_key="key-1"),
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxzia4qrtrviyzlhkvaimsl6aub7nldtnzts72voejpdvmu2q",
                  inference_key="key-2"),
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.iad.amaaaaaam3xyxziaxicmn7domsjwl5ojmks3dki32ffy26prhey6tmxiwkeq",
                  inference_key="key-3")
          ]
       
          member_model_entries = MemberModelEntries()
          member_model_entries.member_model_details = member_model_details_list
       
          create_model_group_details_object = CreateModelGroupDetails()
          create_model_group_details_object.compartment_id = f'<compartment_id>
          create_model_group_details_object.display_name = f'<display_name>
          create_model_group_details_object.project_id = f'<project_id>
          create_model_group_details_object.member_model_entries = member_model_entries
          create_model_group_details_object.model_group_details = model_group_details_object
          create_model_group_details_object.model_group_version_history_id = model_group_version_history_id
          create_model_group_details_object.version_label = f'<version_label>
       
          try:
              model_group_response = data_science_client.create_model_group(create_model_group_details_object)
              model_group_id = json.loads(str(model_group_response.data))['id']
              # Get the data from response
              logger.info(model_group_response.headers)
              return model_group_id
          except Exception as e:
              logger.error("Failed to create model group with error: %s", format(e))
              exit(1)
    4. Model Groupアーティファクトのアップロード:
      def __attach_model_group_artifact(modelGroupId, file_name):
          logger.info("Create model group artifact")
          f = open(file_name, "rb")
          logger.info("File open")
          content_disposition = "attachment;filename={}".format(file_name)
          logger.debug(content_disposition)
          try:
              data_science_client.base_client.timeout = 30 * 60
              data_science_client.create_model_group_artifact(
                  modelGroupId, f, content_disposition=content_disposition)
              logger.info("Upload success")
          except Exception as e:
              logger.error("Upload error")
          f.close()
          return
    1. モデル・グループ・バージョン履歴の作成:
      {
          "displayName":"ModelGroupVersionHistory-Demo-1",
          "description":"Model Group Version History Demo ",
          "compartmentId":"ocid1.compartment.oc1.iad.aaaaaaaasrc2amzllrujrnevxzq2lqgiblp3xs2iwit7xamanuwzdbipe2zq",
          "projectId":"ocid1.datascienceproject.oc1.iad.aaaaaaaa5i2bgmfne4nmlotldb2ngo4itvmbck24m3dro2gdqszsissmydoq"
      }
    2. モデル・グループの作成要求ペイロード(均質タイプ):
      {
          "createType": "CREATE",
          "compartmentId": "ocid1.tenancy.oc1..aaaaaaaahzy3x4boh7ipxyft2rowu2xeglvanlfewudbnueugsieyuojkldq",
          "projectId": "ocid1.datascienceproject.oc1.iad.aaaaaaaa5i2bgmfne4nmlotldb2ngo4itvmbck24m3dro2gdqszsissmydoq",
          "displayName": "Model-Group-Create-Demo-1",
          "description": "Test model group creation",
          "modelGroupDetails" : {
              "type": "HOMOGENEOUS",
              "customMetadataList": [{
                  "key":"key-1",
                  "value":"val-1",
                  "description": "Model Group metadata",
                  "category": "Configuration"
              }]
          },
          "memberModelEntries": {
              "memberModelDetails": [
                  {
                      "inferenceKey": "key1",
                      "modelId": "ocid1.datasciencemodel.oc1.iad.aaaaaaaa4kqzxsqdmlf3x2hedpyghfpy727odfuwr3pwwhocw32wbtjuj5zq"
                  },
                  {
                      "inferenceKey": "key2",
                      "modelId": "ocid1.datasciencemodel.oc1.iad.aaaaaaaa5oyorntk2xa2swphlzqgjwmevnrentlcay7ixy5bahkuwb34xlpq"
                  },
                  {
                      "inferenceKey": "key3",
                      "modelId": "ocid1.datasciencemodel.oc1.iad.aaaaaaaatutjajr32s5uggnv3zud3ve4rya57innybhpkuam3egzmvow4zvq"
                  }
              ]
          }
      }
    3. バージョニングを使用したモデル・グループの作成リクエスト:
      {
          "createType": "CREATE",
          "compartmentId": "ocid1.tenancy.oc1..<ocid>",
          "projectId": "ocid1.datascienceproject.oc1.<ocid>",
          "displayName": "Model-Group-Create-Demo-1",
          "description": "Test model group creation",
          "modelGroupDetails" : {
              "type": "HOMOGENEOUS",
              "customMetadataList": [{
                  "key":"key-1",
                  "value":"val-1",
                  "description": "Model Group metadata",
                  "category": "Configuration"
              }]
          },
          "memberModelEntries": {
              "memberModelDetails": [
                  {
                      "inferenceKey": "key1",
                      "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                  },
                  {
                      "inferenceKey": "key2",
                      "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                  },
                  {
                      "inferenceKey": "key3",
                      "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                  }
              ]
          },
          "modelGroupVersionHistoryId":"ocid1.notreviewedplaceholder.oc1.<ocid>",
          "versionLabel": "Model group versioning demo"
      }
    4. モデル・グループ・アーチファクトのアップロード
      POST https://datascience.<region-identifier>.oci.oraclecloud.com/20190101/modelGroups/<model-group-ocid>/artifact
       
      Body:
      type: binary
      attachment: model-artifact file

モデル・グループのクローニングまたはパッチ適用

既存のモデル・グループが存在し、1つ以上のモデルを追加または削除してその構成を変更する場合は、このオプションを使用します。既存のグループを変更する必要がない場合は、次のステップに進みます。

クローンの使用:

  • 既存のモデル・グループから新しいモデル・グループを作成します。

  • クローニング中にモデルを変更(追加または削除)します。

パッチ操作

  • INSERT: 新しいモデルを追加します。

  • 削除: 既存のモデルを削除します。

    1. 「基本情報」ページで、「既存のモデル・グループのクローニングと変更」を選択します。
    2. (オプション)一意の名前(255文字の制限)を入力します。名前を指定しない場合は、名前が自動的に生成されます。
    3. (オプション)モデル・グループの説明(400文字の制限)を入力します。
    4. リストから、コンパートメントを選択します。
    5. HOMOGENOUSタイプのモデル・グループを作成する場合は、アーティファクトのアップロード・オプションを使用して、モデル・グループ・デプロイメント・ランタイム・アーティファクトをアップロードします。
    6. 使用可能なモデル・グループのリストを表示するコンパートメントを選択します。
    7. モデル・グループを選択します。
    8. モデル・グループに追加するモデルを選択します。
    9. 「モデルの追加」を選択して、新しいモデルをモデル・グループに追加します。
    10. コンパートメントを選択します。
    11. プロジェクトを選択します。
    12. 追加するモデルを選択します。
    13. (オプション)バージョニングを使用してモデル・グループを作成します:
      新しいモデル・グループ・バージョン履歴を作成するか、既存のモデル・グループ履歴を使用します。
      • 「新規モデル・グループ・バージョン履歴の作成」を選択します
        1. コンパートメントの選択
        2. プロジェクトを選択します。
        3. (オプション)一意の名前(255文字の制限)を入力します。名前を指定しない場合は、名前が自動的に生成されます。
        4. (オプション)モデル・グループ・バージョン履歴の説明(400文字の制限)を入力します。
      • 「既存のモデル・グループ・バージョン履歴の使用」を選択します
        1. コンパートメントの選択
        2. プロジェクトを選択します。
        3. モデル・グループのバージョン履歴を選択します。
    14. モデル・グループの分類
      モデル・グループのタイプは次のとおりです。
      • 同種
      • 異種
      • 積上げ推論
    15. 「作成」を選択します。
    1. 既存のモデル・グループからモデル・グループをクローニングします。
      def __clone_from_model_group(compartment_id, project_id):
          print("cloning from the Model Group")
          new_member_model_details_list = [
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.<ocid>",
                  inference_key="key-11"),
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.<ocid>",
                  inference_key="key-12")
          ]
       
          remove_member_model_details_list = [
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.<ocid>",
                  inference_key="key-3")
          ]
          patch_insert_model_details = PatchInsertNewMemberModels()
          patch_insert_model_details.values = new_member_model_details_list
       
          patch_remove_model_details = PatchRemoveMemberModels()
          patch_remove_model_details.values = remove_member_model_details_list
       
          patch_instruction_list = [patch_insert_model_details, patch_remove_model_details]
       
          patch_model_group_member_model_details_object = PatchModelGroupMemberModelDetails()
          patch_model_group_member_model_details_object.items = patch_instruction_list
       
          modify_model_group_details_object = ModifyModelGroupDetails()
          modify_model_group_details_object.display_name = "test model group clone"
          modify_model_group_details_object.description = "test model group clone"
       
          clone_create_from_model_group_object = CloneCreateFromModelGroupDetails()
          clone_create_from_model_group_object.source_id = baseModelGroupId
          clone_create_from_model_group_object.patch_model_group_member_model_details = patch_model_group_member_model_details_object
          clone_create_from_model_group_object.modify_model_group_details = modify_model_group_details_object
       
          clone_model_group_details_object = CloneModelGroupDetails()
          clone_model_group_details_object.compartment_id = compartment_id
          clone_model_group_details_object.project_id = project_id
          clone_model_group_details_object.model_group_clone_source_details = clone_create_from_model_group_object
       
          try:
              model_group_response = data_science_client.create_model_group(clone_model_group_details_object)
              model_group_id = json.loads(str(model_group_response.data))['id']
              logger.info(model_group_id)
              print(model_group_response.headers)
              return model_group_id
          except Exception as e:
              logger.error("Failed to create model group with error: %s", format(e))
    2. モデル・グループの最新バージョン履歴からモデル・グループをクローニングします。
      def __clone_from_model_group_version_history(compartment_id, project_id, model_group_version_history_id):
          print("cloning from the Model Group Version History")
          new_member_model_details_list = [
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.<ocid>",
                  inference_key="key-11"),
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.<ocid>",
                  inference_key="key-12")
          ]
       
          remove_member_model_details_list = [
              MemberModelDetails(
                  model_id="ocid1.datasciencemodel.oc1.<ocid>",
                  inference_key="key-3")
          ]
          patch_insert_model_details = PatchInsertNewMemberModels()
          patch_insert_model_details.values = new_member_model_details_list
       
          patch_remove_model_details = PatchRemoveMemberModels()
          patch_remove_model_details.values = remove_member_model_details_list
       
          patch_instruction_list = [patch_insert_model_details, patch_remove_model_details]
       
          patch_model_group_member_model_details_object = PatchModelGroupMemberModelDetails()
          patch_model_group_member_model_details_object.items = patch_instruction_list
       
          modify_model_group_details_object = ModifyModelGroupDetails()
          modify_model_group_details_object.display_name = "test model group clone from mgvh"
          modify_model_group_details_object.description = "test model group clone from mgvh"
       
          clone_create_from_model_group_version_history_object = CloneCreateFromModelGroupVersionHistoryDetails()
          clone_create_from_model_group_version_history_object.source_id = model_group_version_history_id
          clone_create_from_model_group_version_history_object.patch_model_group_member_model_details = patch_model_group_member_model_details_object
          clone_create_from_model_group_version_history_object.modify_model_group_details = modify_model_group_details_object
       
          clone_model_group_details_object = CloneModelGroupDetails()
          clone_model_group_details_object.compartment_id = compartment_id
          clone_model_group_details_object.project_id = project_id
          clone_model_group_details_object.model_group_clone_source_details = clone_create_from_model_group_version_history_object
       
          try:
              model_group_response = data_science_client.create_model_group(clone_model_group_details_object)
              model_group_id = json.loads(str(model_group_response.data))['id']
              logger.info(model_group_id)
              print(model_group_response.headers)
              return model_group_id
          except Exception as e:
              logger.error("Failed to create model group with error: %s", format(e))
    1. モデル・グループからのクローニング:
      {
          "createType": "CLONE",
          "modelGroupCloneSourceDetails" : {
              "modelGroupCloneSourceType": "MODEL_GROUP",
              "sourceId": "ocid1.notreviewedplaceholder.oc1.<ocid>",
              "modifyModelGroupDetails": {
                  "description": "cloned model group"
              },
              "patchModelGroupMemberModelDetails": {
                  "items" : [
                      {
                          "operation":"INSERT",
                          "values": [
                              {
                                  "inferenceKey": "key101",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              },
                              {
                                  "inferenceKey": "key102",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              }
                          ]
                      },
                      {
                          "operation":"REMOVE",
                          "values": [
                              {
                                  "inferenceKey": "key3",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              }  
                          ]
                      }
                  ]
              }
          }
      }
    2. モデル・グループ・バージョン履歴の最新バージョンからクローニングします。
      {
          "createType": "CLONE",
          "modelGroupCloneSourceDetails" : {
              "modelGroupCloneSourceType": "MODEL_GROUP_VERSION_HISTORY",
              "sourceId": "ocid1.notreviewedplaceholder.oc1.<ocid>",
              "modifyModelGroupDetails": {
                  "description": "cloned model group from the latest of model group version history"
              },
              "patchModelGroupMemberModelDetails": {
                  "items" : [
                      {
                          "operation":"INSERT",
                          "values": [
                              {
                                  "inferenceKey": "key101",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              },
                              {
                                  "inferenceKey": "key102",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              }
                          ]
                      },
                      {
                          "operation":"REMOVE",
                          "values": [
                              {
                                  "inferenceKey": "key2",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              }  
                          ]
                      }
                  ]
              }
          }
      }
    3. モデル・グループを更新します。
      {
          "displayName": "updated display name -1 ",
          "description": "update test-1",
          "modelGroupVersionHistoryId": "ocid1.notreviewedplaceholder.oc1.<ocid>",
          "versionLabel": "Model Group Versioning Demo"
      }

モデル・グループ・バージョン履歴からのモデル・グループのクローニング

    1. 「モデル・グループ・バージョン履歴からクローニング」を選択します。
    2. (オプション)一意の名前(255文字の制限)を入力します。名前を指定しない場合は、名前が自動的に生成されます。
    3. (オプション)モデル・グループの説明(400文字の制限)を入力します。
    4. コンパートメントを選択します。
    5. HOMOGENOUSタイプのモデル・グループを作成する場合は、アーティファクトのアップロード・オプションを使用して、モデル・グループ・デプロイメント・ランタイム・アーティファクトをアップロードします。
    6. モデル・グループのバージョン履歴を選択します。
      1. コンパートメントの選択
      2. 既存のモデル・グループから追加する1つ以上のモデルを選択します。
      3. 「モデルの追加」を選択して、新しいモデルをモデル・グループに追加します。
      4. コンパートメントの選択
      5. プロジェクトを選択します。
      6. 追加する1つ以上のモデルを選択します。
    7. (オプション)バージョニングを使用してモデル・グループを作成します:
      新しいモデル・グループ・バージョン履歴を作成するか、既存のモデル・グループ履歴を使用します。
      • 「新規モデル・グループ・バージョン履歴の作成」を選択します
        1. コンパートメントの選択
        2. プロジェクトを選択します。
        3. (オプション)一意の名前(255文字の制限)を入力します。名前を指定しない場合は、名前が自動的に生成されます。
        4. (オプション)モデル・グループ・バージョン履歴の説明(400文字の制限)を入力します。
      • 「既存のモデル・グループ・バージョン履歴の使用」を選択します
        1. コンパートメントの選択
        2. プロジェクトを選択します。
        3. モデル・グループのバージョン履歴を選択します。
    8. モデル・グループの分類
      モデル・グループのタイプは次のとおりです。
      • 同種
      • 異種
      • 積上げ推論
    9. 「作成」を選択します。

    SDK

    モデル・グループの最新バージョン履歴からモデル・グループをクローニングします。
    def __clone_from_model_group_version_history(compartment_id, project_id, model_group_version_history_id):
        print("cloning from the Model Group Version History")
        new_member_model_details_list = [
            MemberModelDetails(
                model_id="ocid1.datasciencemodel.oc1.<ocid>",
                inference_key="key-11"),
            MemberModelDetails(
                model_id="ocid1.datasciencemodel.oc1.<ocid>",
                inference_key="key-12")
        ]
     
        remove_member_model_details_list = [
            MemberModelDetails(
                model_id="ocid1.datasciencemodel.oc1.<ocid>",
                inference_key="key-3")
        ]
        patch_insert_model_details = PatchInsertNewMemberModels()
        patch_insert_model_details.values = new_member_model_details_list
     
        patch_remove_model_details = PatchRemoveMemberModels()
        patch_remove_model_details.values = remove_member_model_details_list
     
        patch_instruction_list = [patch_insert_model_details, patch_remove_model_details]
     
        patch_model_group_member_model_details_object = PatchModelGroupMemberModelDetails()
        patch_model_group_member_model_details_object.items = patch_instruction_list
     
        modify_model_group_details_object = ModifyModelGroupDetails()
        modify_model_group_details_object.display_name = "test model group clone from mgvh"
        modify_model_group_details_object.description = "test model group clone from mgvh"
     
        clone_create_from_model_group_version_history_object = CloneCreateFromModelGroupVersionHistoryDetails()
        clone_create_from_model_group_version_history_object.source_id = model_group_version_history_id
        clone_create_from_model_group_version_history_object.patch_model_group_member_model_details = patch_model_group_member_model_details_object
        clone_create_from_model_group_version_history_object.modify_model_group_details = modify_model_group_details_object
     
        clone_model_group_details_object = CloneModelGroupDetails()
        clone_model_group_details_object.compartment_id = compartment_id
        clone_model_group_details_object.project_id = project_id
        clone_model_group_details_object.model_group_clone_source_details = clone_create_from_model_group_version_history_object
     
        try:
            model_group_response = data_science_client.create_model_group(clone_model_group_details_object)
            model_group_id = json.loads(str(model_group_response.data))['id']
            logger.info(model_group_id)
            print(model_group_response.headers)
            return model_group_id
        except Exception as e:
            logger.error("Failed to create model group with error: %s", format(e))

    API

    1. モデル・グループ・バージョン履歴の最新バージョンからクローニングします。
      {
          "createType": "CLONE",
          "modelGroupCloneSourceDetails" : {
              "modelGroupCloneSourceType": "MODEL_GROUP_VERSION_HISTORY",
              "sourceId": "ocid1.notreviewedplaceholder.oc1.<ocid>",
              "modifyModelGroupDetails": {
                  "description": "cloned model group from the latest of model group version history"
              },
              "patchModelGroupMemberModelDetails": {
                  "items" : [
                      {
                          "operation":"INSERT",
                          "values": [
                              {
                                  "inferenceKey": "key101",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              },
                              {
                                  "inferenceKey": "key102",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              }
                          ]
                      },
                      {
                          "operation":"REMOVE",
                          "values": [
                              {
                                  "inferenceKey": "key2",
                                  "modelId": "ocid1.datasciencemodel.oc1.<ocid>"
                              }  
                          ]
                      }
                  ]
              }
          }
      }
    2. モデル・グループを更新します。
      {
          "displayName": "updated display name -1 ",
          "description": "update test-1",
          "modelGroupVersionHistoryId": "ocid1.notreviewedplaceholder.oc1.<ocid>",
          "versionLabel": "Model Group Versioning Demo"
      }

モデル・グループのデプロイ

    1. 「モデル」を選択します。
    2. 「モデル・グループ」を選択します。
    3. デプロイするモデル・グループを選択します。
    4. 「発行」を選択します。
  • モデル・グループ・デプロイメントを作成します。
    # 1. Create model group configuration details object
        model_group_config_details = ModelGroupConfigurationDetails(
        model_group_id="ocid1.modelgroup.oc1..exampleuniqueID"
        bandwidth_mbps=<bandwidth-mbps>,
        instance_configuration=<instance-configuration>,
        scaling_policy=<scaling-policy>
        )
     
     
    # 2. Create infrastructure configuration details object
        infrastructure_config_details = InstancePoolInfrastructureConfigurationDetails(
        infrastructure_type="INSTANCE_POOL",
        instance_configuration=instance_config,
        scaling_policy=scaling_policy
        )
     
    # 3. Create environment configuration
        environment_config_details = ModelDeploymentEnvironmentConfigurationDetails(
        environment_configuration_type="DEFAULT",
        environment_variables={"WEB_CONCURRENCY": "1"}
        )
      
    # 4. Create category log details
        category_log_details = CategoryLogDetails(
        access=LogDetails(
            log_group_id=<log-group-id>,
            log_id=<log-id>
        ),
        predict=LogDetails(
            log_group_id=<log-group-id>,
            log_id=<log-id>
        )
        )
     
    # 5. Bundle into deployment configuration
        model_group_deployment_config_details = ModelGroupDeploymentConfigurationDetails(
        deployment_type="MODEL_GROUP",
        model_group_configuration_details=model_group_config,
        infrastructure_configuration_details=infrastructure_config_details,
        environment_configuration_details=environment_config_details
        )
     
    # 6. Set up parameters required to create a new model deployment.
        create_model_deployment_details = CreateModelDeploymentDetails(
        display_name=<deployment_name>,
        description=<description>,
        compartment_id=<compartment-id>,
        project_id=<project-id>,
        model_deployment_configuration_details=model_group_deployment_config_details,
        category_log_details=category_log_details
        )
     
    # 7. Create deployment using SDK client
        response = data_science_client.create_model_deployment(
        create_model_deployment_details=create_model_deployment_details
        )
     
    print("Model Deployment OCID:", response.data.id)
  • モデル・グループ・デプロイメントを作成します。
    {
            "displayName": "MMS Model Group Deployment",
            "description": "mms",
            "compartmentId": compartment_id,
            "projectId": project_id,
            "modelDeploymentConfigurationDetails": {
                "deploymentType": "MODEL_GROUP",
                "modelGroupConfigurationDetails": {
                    "modelGroupId": model_group_id
                },
                "infrastructureConfigurationDetails": {
                    "infrastructureType": "INSTANCE_POOL",
                    "instanceConfiguration": {
                        "instanceShapeName": "VM.Standard.E4.Flex",
                        "modelDeploymentInstanceShapeConfigDetails": {
                            "ocpus": 8,
                            "memoryInGBs": 128
                        }
                    },
                    "scalingPolicy": {
                        "policyType": "FIXED_SIZE",
                        "instanceCount": 1
                    }
                },
                "environmentConfigurationDetails": {
                    "environmentConfigurationType": "DEFAULT",
                    "environmentVariables": {
                        "WEB_CONCURRENCY": "1"
                    }
                }
            },
            "categoryLogDetails": {
                "access": {
                    "logGroupId": "ocid1.loggroup.oc1.iad.amaaaaaav66vvniaygnbicsbzb4anlmf7zg2gsisly3ychusjlwuq34pvjba",
                    "logId": "ocid1.log.oc1.iad.amaaaaaav66vvniavsuh34ijk46uhjgsn3ddzienfgquwrr7dwa4dzt4pirq"
                },
                "predict": {
                    "logGroupId": "ocid1.loggroup.oc1.iad.amaaaaaav66vvniaygnbicsbzb4anlmf7zg2gsisly3ychusjlwuq34pvjba",
                    "logId": "ocid1.log.oc1.iad.amaaaaaav66vvniavsuh34ijk46uhjgsn3ddzienfgquwrr7dwa4dzt4pirq"
                }
            }
        }
    }

積上げモデル・グループの作成

  1. CreateModel APIコマンドを使用してベース・モデルを作成します。
  2. CreateModel APIコマンドを使用してファインチューニング・ウェイト・モデルを作成します。
  3. modelGroupDetailsを使用してモデル・グループを作成します。
    1. 型: STACKED
    2. baseModelId: $baseModelOCID (ステップ1で作成)
    例:
    compartment_id = "compartmentID"
    project_id = "projectID"
    mg_payload = json.dumps({
            "createType": "CREATE",
            "compartmentId": compartment_id,
            "projectId": project_id,
            "displayName": "Model Group - Stacked ",
            "description": "Test stacked model group",
            "modelGroupDetails" : {
                "type": "STACKED",
                "baseModelId": "ocid1.datasciencemodel.oc1.iad.amaaaaaav66vvnia5eofo6co5mduy7rkfia2ve3xk6trqzkvrolwvxhkdwxa"
            },
            "memberModelEntries": {
                "memberModelDetails": [
                    {
                        "inferenceKey": "basemodel",
                        "modelId": "ocid1.datasciencemodel.oc1.iad.amaaaaaav66vvnia5eofo6co5mduy7rkfia2ve3xk6trqzkvrolwvxhkdwxa"
                    },
                    {
                        "inferenceKey": "sql-lora-1",
                        "modelId": "ocid1.datasciencemodel.oc1.iad.amaaaaaav66vvniavutbdm736xd6azkwdimfgae2j75nh5aem2ejkywbzsia"
                    },
                    {
                        "inferenceKey": "sql-lora-2",
                        "modelId": "ocid1.datasciencemodel.oc1.iad.amaaaaaav66vvniajgixlb4ajceyrv2vlxtz3opkangpcgt3cl3jeovva3oa"
                    }
                ]
            }
        })