モデル・グループ
Multimodel Serving(MMS)では、モデル・グループと呼ばれる構成を介して複数の機械学習モデルをグループとしてデプロイおよび管理できる新機能が導入されました。
モデル・グループは、モデル・ストア内のモデルのコレクションを表すリソースです。単一のモデル・デプロイメントで最大500のモデル(シェイプごとに制限)をデプロイおよび管理できます。これを使用すると、複数の個別のモデル・デプロイメントを管理するオーバーヘッドを削減することで、操作が簡素化されます。これは、従来の単一モデル・デプロイメントから、より動的なモデル管理およびコスト対応推論へと大きく進化したことを示しています。
モデル・グループ・リソースの主な機能は次のとおりです。
- モデル・グループ・ライフサイクル管理 - モデル・グループは不変性およびバージョニングをサポートしており、堅牢なライフサイクル追跡、再現性およびデプロイメントの安全な反復を提供します。
- 推論キー - 呼出しの推論には、モデルOCIDsのかわりにSaaSのわかりやすい名前を使用できます。推論キーは、モデルOCIDsの別名です。
- カスタム・メタデータ– モデル・グループ内の推論コンテナおよびモデル固有の変数に渡されるキーと値のペアのリスト。この機能は、複数のLLMをGPUカードに固定するのに役立ちます。
モデル・グループを使用するには、モデル・グループ・ポリシーを適用する必要があります。
主要な概念
モデル・グループ
- モデル・グループは、複数のモデルを保持する論理リソースです。
- デプロイすると、モデル・グループ内の各モデルは、そのモデルOCIDおよび推論キーによって識別されます(オプション)。
- 次の型がサポートされています。
- 同種
- 共有ランタイム環境に一緒にデプロイされた同じタイプのモデルのグループ。これらのモデルは独立して動作しますが、同じコンピュート・リソースとメモリー・リソースを使用してインフラストラクチャの使用を効率化します。
- スタック
- ベース・モデルといくつかの微調整された重みを持つ大規模言語モデル(LLM)用に設計されたHomogeneous Groupの拡張。
- 異種
- モデル・グループは、PyTorch、TensorFlow、ONNXなどの様々なMLフレームワーク上に構築されたモデルで構成されます。このグループ・タイプを使用すると、多様なモデル・アーキテクチャを単一のサービス環境に配置できます。
- 推論キー 推論キーを使用すると、推論コールを行う際に、モデルOCIDsのかわりにSaaSフレンドリな別名を使用できます。推論キーは、特定のモデルOCIDにマップされた別名として機能し、モデル・グループの作成時に定義されます。ノート
推論キーでは、最大32文字の長さがサポートされます。次に、REST APIとSDKの両方を使用して推論キーを定義する方法を示すスナップショットを示します。
Rest API:SDK:"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" } ] }
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") ]
モデル・グループの作成
- モデル・グループの作成
- 新しいモデル・グループを最初から作成するには、このオプションを使用します。
- 既存のモデル・グループの複製および変更
- 既存のモデル・グループがすでに存在し、モデルを追加または削除して変更する場合は、このオプションを使用します。
- モデル・グループのバージョン履歴からクローニング
- モデル・グループ・バージョン履歴の最新モデル・グループ・バージョンを更新するには、このオプションを使用します。
モデル・グループの作成
モデル・グループを最初から作成します。
このオプションを使用して、新規モデル・グループを作成します。モデル・グループ・ポリシーを適用します。既存のモデル・グループがすでに存在し、モデルを追加または削除して変更する場合は、このステップをスキップして「ステップ2: モデル・グループのクローニング」または「モデル・グループのパッチ」に進みます。
モデル・グループのクローニングまたはパッチ適用
既存のモデル・グループが存在し、1つ以上のモデルを追加または削除してその構成を変更する場合は、このオプションを使用します。既存のグループを変更する必要がない場合は、次のステップに進みます。
クローンの使用:
-
既存のモデル・グループから新しいモデル・グループを作成します。
-
クローニング中にモデルを変更(追加または削除)します。
パッチ操作
-
INSERT: 新しいモデルを追加します。
-
削除: 既存のモデルを削除します。
モデル・グループ・バージョン履歴からのモデル・グループのクローニング
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. 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" } } } }