خدمة نماذج متعددة لنقطة نهاية خدمة نموذج

توضح هذه المقالة كيفية تكوين نقطة نهاية خدمة نموذج برمجيا لخدمة نماذج متعددة وتقسيم نسبة استخدام الشبكة بينها.

يتيح لك تقديم نماذج متعددة من نقطة نهاية واحدة تقسيم نسبة استخدام الشبكة بين نماذج مختلفة لمقارنة أدائها وتسهيل اختبار A/B. يمكنك أيضا تقديم إصدارات مختلفة من النموذج في نفس الوقت، ما يجعل تجربة الإصدارات الجديدة أسهل، مع الحفاظ على الإصدار الحالي في الإنتاج.

يمكنك خدمة أي من أنواع النماذج التالية على نقطة نهاية خدمة نموذج الفسيفساء الذكاء الاصطناعي. لا يمكنك تقديم أنواع نماذج مختلفة في نقطة نهاية واحدة. على سبيل المثال، لا يمكنك خدمة نموذج مخصص ونموذج خارجي في نفس نقطة النهاية.

المتطلبات

راجع متطلبات إنشاء نقطة نهاية خدمة النموذج.

لفهم خيارات التحكم في الوصول لنماذج تخدم نقاط النهاية وإرشادات أفضل الممارسات لإدارة نقطة النهاية، راجع خدمة قوائم التحكم في الوصول لنقطة النهاية.

إنشاء نقطة نهاية وتعيين تقسيم نسبة استخدام الشبكة الأولي

عند إنشاء نموذج يخدم نقاط النهاية باستخدام Databricks Mosaic الذكاء الاصطناعي خدمة API أو واجهة مستخدم Databricks Mosaic الذكاء الاصطناعي، يمكنك أيضا تعيين تقسيم نسبة استخدام الشبكة الأولي للنماذج التي تريد خدمتها على نقطة النهاية هذه. توفر الأقسام التالية أمثلة على تعيين تقسيم نسبة استخدام الشبكة لنماذج مخصصة متعددة أو نماذج الذكاء الاصطناعي إنشاءية يتم تقديمها على نقطة نهاية.

خدمة نماذج مخصصة متعددة إلى نقطة نهاية

ينشئ مثال واجهة برمجة تطبيقات REST التالي نقطة نهاية واحدة مع نموذجين مخصصين ويعين تقسيم نسبة استخدام الشبكة لنقطة النهاية بين هذه النماذج. الكيان الذي تم تقديمه، current، يستضيف الإصدار 1 من model-A ويحصل على 90٪ من نسبة استخدام الشبكة لنقطة النهاية، بينما يستضيف الكيان الآخر الذي تم تقديمه، challengerالإصدار 1 من model-B ويحصل على 10٪ من نسبة استخدام الشبكة لنقطة النهاية.

POST /api/2.0/serving-endpoints

{
   "name":"multi-model"
   "config":
   {
      "served_entities":
      [
         {
            "name":"current",
            "entity_name":"model-A",
            "entity_version":"1",
            "workload_size":"Small",
            "scale_to_zero_enabled":true
         },
         {
            "name":"challenger",
            "entity_name":"model-B",
            "entity_version":"1",
            "workload_size":"Small",
            "scale_to_zero_enabled":true
         }
      ],
      "traffic_config":
      {
         "routes":
         [
            {
               "served_model_name":"current",
               "traffic_percentage":"90"
            },
            {
               "served_model_name":"challenger",
               "traffic_percentage":"10"
            }
         ]
      }
   }
}

خدمة نماذج متعددة لنقطة نهاية معدل النقل المتوفرة

ينشئ مثال REST API التالي واجهة برمجة تطبيقات نموذج أساس واحدة توفر نقطة نهاية معدل النقل مع نموذجين ويعين تقسيم نسبة استخدام الشبكة لنقطة النهاية بين هذه النماذج. نقطة النهاية المسماة multi-pt-model، تستضيف الإصدار 2 mistral_7b_instruct_v0_1-2 منها تحصل على 60٪ من نسبة استخدام الشبكة لنقطة النهاية، وتستضيف أيضا الإصدار 3 mixtral_8x7b_instruct_v0_1-3 الذي يحصل على 40٪ من نسبة استخدام الشبكة لنقطة النهاية.


POST /api/2.0/serving-endpoints
{
   "name":"multi-pt-model"
   "config":
   {
      "served_entities":
      [
         {
            "name":"mistral_7b_instruct_v0_1-2",
            "entity_name":"system.ai.mistral_7b_instruct_v0_1",
            "entity_version":"2",
            "min_provisioned_throughput":0,
            "max_provisioned_throughput":1940
         },
         {
            "name":"mixtral_8x7b_instruct_v0_1-3",
            "entity_name":"system.ai.mixtral_8x7b_instruct_v0_1",
            "entity_version":"3",
            "min_provisioned_throughput":0,
            "max_provisioned_throughput":1240
         }
      ],
      "traffic_config":
      {
         "routes":
         [
            {
               "served_model_name":"mistral_7b_instruct_v0_1-2",
               "traffic_percentage":"60"
            },
            {
               "served_model_name":"mixtral_8x7b_instruct_v0_1-3",
               "traffic_percentage":"40"
            }
         ]
      }
   }
}

تقديم نماذج خارجية متعددة إلى نقطة نهاية

يمكنك أيضا تكوين نماذج خارجية متعددة في نقطة نهاية خدمة طالما أن جميعها لها نفس نوع المهمة ولكل نموذج فريد name. لا يمكن أن يكون لديك كل من النماذج الخارجية والنماذج غير الخارجية في نفس نقطة نهاية الخدمة.

ينشئ المثال التالي نقطة نهاية خدمة توجه 50٪ من نسبة استخدام الشبكة التي gpt-4 يوفرها OpenAI و50٪ المتبقية التي claude-3-opus-20240229 يوفرها Anthropic.

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

client.create_endpoint(
    name="mix-chat-endpoint",
    config={
        "served_entities": [
            {
                "name": "served_model_name_1",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
                    }
                }
            },
            {
                "name": "served_model_name_2",
                "external_model": {
                    "name": "claude-3-opus-20240229",
                    "provider": "anthropic",
                    "task": "llm/v1/chat",
                    "anthropic_config": {
                        "anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
                    }
                }
            }
        ],
        "traffic_config": {
            "routes": [
                {"served_model_name": "served_model_name_1", "traffic_percentage": 50},
                {"served_model_name": "served_model_name_2", "traffic_percentage": 50}
            ]
        },
    }
)

تحديث تقسيم نسبة استخدام الشبكة بين النماذج المقدمة

يمكنك أيضا تحديث تقسيم نسبة استخدام الشبكة بين النماذج المقدمة. يعين مثال واجهة برمجة تطبيقات REST التالي النموذج المقدم، current، للحصول على 50٪ من نسبة استخدام الشبكة لنقطة النهاية والنموذج الآخر، ، challengerللحصول على 50٪ المتبقية من نسبة استخدام الشبكة.

يمكنك أيضا إجراء هذا التحديث من علامة التبويب تقديم في واجهة مستخدم الذكاء الاصطناعي Databricks Mosaic باستخدام زر تحرير التكوين .

PUT /api/2.0/serving-endpoints/{name}/config

{
   "served_entities":
   [
      {
         "name":"current",
         "entity_name":"model-A",
         "entity_version":"1",
         "workload_size":"Small",
         "scale_to_zero_enabled":true
      },
      {
         "name":"challenger",
         "entity_name":"model-B",
         "entity_version":"1",
         "workload_size":"Small",
         "scale_to_zero_enabled":true
      }
   ],
   "traffic_config":
   {
      "routes":
      [
         {
            "served_model_name":"current",
            "traffic_percentage":"50"
         },
         {
            "served_model_name":"challenger",
            "traffic_percentage":"50"
         }
      ]
   }
}

الاستعلام عن نماذج فردية خلف نقطة نهاية

في بعض السيناريوهات، قد تحتاج إلى الاستعلام عن نماذج فردية خلف نقطة النهاية.

يمكنك القيام بذلك باستخدام:

POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations

هنا يتم الاستعلام عن النموذج المحدد المقدم. تنسيق الطلب هو نفسه الاستعلام عن نقطة النهاية. أثناء الاستعلام عن النموذج المقدم الفردي، يتم تجاهل إعدادات نسبة استخدام الشبكة.

في سياق multi-model مثال نقطة النهاية، إذا تم إرسال جميع الطلبات إلى /serving-endpoints/multi-model/served-models/challenger/invocations، تقديم جميع الطلبات بواسطة challenger النموذج المقدم.