جمع بيانات الإنتاج من النماذج المنشورة للاستدلال في الوقت الحقيقي

ينطبق على:ملحق ML Azure CLI v2 (الحالي)Python SDK azure-ai-ml v2 (الحالي)

في هذه المقالة، ستتعلم كيفية استخدام Azure التعلم الآلي Data collector لجمع بيانات استدلال الإنتاج من نموذج يتم نشره إلى نقطة نهاية مدارة عبر الإنترنت التعلم الآلي Azure أو نقطة نهاية Kubernetes عبر الإنترنت.

يمكنك تمكين جمع البيانات لنشر نقاط النهاية الجديدة أو الحالية عبر الإنترنت. يسجل مجمع البيانات Azure التعلم الآلي بيانات الاستدلال في Azure Blob Storage. يتم تسجيل البيانات التي تم جمعها باستخدام Python SDK تلقائيا كأصل بيانات في مساحة عمل Azure التعلم الآلي. يمكن استخدام أصل البيانات هذا لمراقبة النموذج.

إذا كنت مهتما بجمع بيانات استدلال الإنتاج لنموذج MLflow الذي تم نشره إلى نقطة نهاية في الوقت الفعلي، فشاهد جمع البيانات لنماذج MLflow.

المتطلبات الأساسية

قبل اتباع الخطوات الواردة في هذه المقالة، تأكد من توفر المتطلبات الأساسية التالية لديك:

  • يتم استخدام عناصر التحكم في الوصول المستندة إلى الدور في (Azure RBAC) لمنح الوصول إلى العمليات في التعلم الآلي من Microsoft Azure. لتنفيذ الخطوات الواردة في هذه المقالة، يجب تعيين دور المالك أو المساهم لحساب المستخدم لمساحة عمل التعلم الآلي من Microsoft Azure، أو دور مخصص يسمح Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. لمزيدٍ من المعلومات، راجع إدارة الوصول إلى مساحة عمل Azure Machine Learning.

إجراء تسجيل مخصص لمراقبة النموذج

يسمح لك جمع البيانات مع التسجيل المخصص بتسجيل Pandas DataFrames مباشرة من البرنامج النصي لتسجيل النقاط قبل وأثناء وبعد أي تحويلات بيانات. باستخدام التسجيل المخصص، يتم تسجيل البيانات الجدولية في الوقت الفعلي إلى مساحة العمل Blob Storage أو حاوية تخزين blob مخصصة. يمكن أن تستهلك أجهزة عرض النموذج البيانات من التخزين.

تحديث البرنامج النصي لتسجيل النقاط باستخدام رمز تسجيل مخصص

للبدء، أضف رمز تسجيل مخصص إلى البرنامج النصي لتسجيل النقاط (score.py). للتسجيل المخصص، تحتاج إلى الحزمة azureml-ai-monitoring . لمزيد من المعلومات حول هذه الحزمة، راجع صفحة PyPI الشاملة ل SDK جامع البيانات.

  1. استيراد الحزمة azureml-ai-monitoring عن طريق إضافة السطر التالي إلى أعلى البرنامج النصي لتسجيل النقاط:

    from azureml.ai.monitoring import Collector
    
  2. أعلن عن متغيرات جمع البيانات (حتى خمسة منها) في دالتك init() :

    إشعار

    إذا كنت تستخدم الأسماء model_inputs والكائنات model_outputs الخاصة بك Collector ، فإن نظام مراقبة النموذج يتعرف تلقائيا على أصول البيانات المسجلة تلقائيا لتوفير تجربة مراقبة نموذج أكثر سلاسة.

    global inputs_collector, outputs_collector
    inputs_collector = Collector(name='model_inputs')          
    outputs_collector = Collector(name='model_outputs')
    

    بشكل افتراضي، يثير Azure التعلم الآلي استثناء إذا كان هناك فشل أثناء جمع البيانات. اختياريا، يمكنك استخدام المعلمة on_error لتحديد دالة لتشغيلها في حالة حدوث فشل في التسجيل. على سبيل المثال، باستخدام المعلمة on_error في التعليمات البرمجية التالية، يسجل Azure التعلم الآلي الخطأ بدلا من طرح استثناء:

    inputs_collector = Collector(name='model_inputs', on_error=lambda e: logging.info("ex:{}".format(e)))
    
  3. في الدالة الخاصة بك run() ، استخدم الدالة collect() لتسجيل DataFrames قبل وبعد التسجيل. context يتم إرجاع من الاستدعاء الأول إلى collect()، ويحتوي على معلومات لربط مدخلات النموذج ومخرجات النموذج لاحقا.

    context = inputs_collector.collect(data) 
    result = model.predict(data)
    outputs_collector.collect(result, context)
    

    إشعار

    حاليا، collect() تسجل واجهة برمجة التطبيقات Pandas DataFrames فقط. إذا لم تكن البيانات في DataFrame عند تمريرها إلى collect()، فلن يتم تسجيلها في التخزين وسيتم الإبلاغ عن خطأ.

التعليمات البرمجية التالية هي مثال على برنامج نصي كامل لتسجيل النقاط (score.py) يستخدم تسجيل Python SDK المخصص.

import pandas as pd
import json
from azureml.ai.monitoring import Collector

def init():
  global inputs_collector, outputs_collector, inputs_outputs_collector

  # instantiate collectors with appropriate names, make sure align with deployment spec
  inputs_collector = Collector(name='model_inputs')                    
  outputs_collector = Collector(name='model_outputs')

def run(data): 
  # json data: { "data" : {  "col1": [1,2,3], "col2": [2,3,4] } }
  pdf_data = preprocess(json.loads(data))
  
  # tabular data: {  "col1": [1,2,3], "col2": [2,3,4] }
  input_df = pd.DataFrame(pdf_data)

  # collect inputs data, store correlation_context
  context = inputs_collector.collect(input_df)

  # perform scoring with pandas Dataframe, return value is also pandas Dataframe
  output_df = predict(input_df) 

  # collect outputs data, pass in correlation_context so inputs and outputs data can be correlated later
  outputs_collector.collect(output_df, context)
  
  return output_df.to_dict()
  
def preprocess(json_data):
  # preprocess the payload to ensure it can be converted to pandas DataFrame
  return json_data["data"]

def predict(input_df):
  # process input and return with outputs
  ...
  
  return output_df

تحديث البرنامج النصي لتسجيل النقاط لتسجيل معرفات فريدة مخصصة

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

  1. أكمل أولا الخطوات الواردة في القسم السابق، ثم قم باستيراد الحزمة azureml.ai.monitoring.context عن طريق إضافة السطر التالي إلى البرنامج النصي لتسجيل النقاط:

    from azureml.ai.monitoring.context import BasicCorrelationContext
    
  2. في البرنامج النصي لتسجيل النقاط، قم بإنشاء مثيل لعنصر BasicCorrelationContext وتمرير في الذي id ترغب في تسجيله لهذا الصف. نوصي بأن يكون هذا id معرفا فريدا من النظام الخاص بك، بحيث يمكنك تحديد كل صف مسجل بشكل فريد من Blob Storage. مرر هذا الكائن إلى collect() استدعاء API كمعلمة:

      # create a context with a custom unique id
      artificial_context = BasicCorrelationContext(id='test')
    
      # collect inputs data, store correlation_context
      context = inputs_collector.collect(input_df, artificial_context)
    
  3. تأكد من تمرير السياق إلى الخاص بك outputs_collector بحيث يكون لإدخالات النموذج ومخرجاته نفس المعرف الفريد الذي تم تسجيله معهم، ويمكن ربطها بسهولة لاحقا:

      # collect outputs data, pass in context so inputs and outputs data can be correlated later
      outputs_collector.collect(output_df, context)
    

التعليمات البرمجية التالية هي مثال على برنامج نصي كامل لتسجيل النقاط (score.py) يسجل معرفات فريدة مخصصة.

import pandas as pd
import json
from azureml.ai.monitoring import Collector
from azureml.ai.monitoring.context import BasicCorrelationContext

def init():
  global inputs_collector, outputs_collector, inputs_outputs_collector

  # instantiate collectors with appropriate names, make sure align with deployment spec
  inputs_collector = Collector(name='model_inputs')                    
  outputs_collector = Collector(name='model_outputs')

def run(data): 
  # json data: { "data" : {  "col1": [1,2,3], "col2": [2,3,4] } }
  pdf_data = preprocess(json.loads(data))
  
  # tabular data: {  "col1": [1,2,3], "col2": [2,3,4] }
  input_df = pd.DataFrame(pdf_data)

  # create a context with a custom unique id
  artificial_context = BasicCorrelationContext(id='test')

  # collect inputs data, store correlation_context
  context = inputs_collector.collect(input_df, artificial_context)

  # perform scoring with pandas Dataframe, return value is also pandas Dataframe
  output_df = predict(input_df) 

  # collect outputs data, pass in context so inputs and outputs data can be correlated later
  outputs_collector.collect(output_df, context)
  
  return output_df.to_dict()
  
def preprocess(json_data):
  # preprocess the payload to ensure it can be converted to pandas DataFrame
  return json_data["data"]

def predict(input_df):
  # process input and return with outputs
  ...
  
  return output_df

جمع البيانات لمراقبة أداء النموذج

إذا كنت ترغب في استخدام البيانات التي تم جمعها لمراقبة أداء النموذج، فمن المهم أن يكون لكل صف مسجل صف فريد correlationid يمكن استخدامه لربط البيانات ببيانات الحقيقة الأساسية، عندما تصبح هذه البيانات متاحة. سيقوم مجمع البيانات تلقائيا بإنشاء فريد correlationid لكل صف مسجل وتضمين هذا المعرف الذي تم إنشاؤه تلقائيا في correlationid الحقل في كائن JSON. لمزيد من المعلومات حول مخطط JSON، راجع تخزين البيانات المجمعة في تخزين كائن ثنائي كبير الحجم.

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

تحديث تبعياتك

قبل أن تتمكن من إنشاء النشر الخاص بك باستخدام البرنامج النصي المحدث لتسجيل النقاط، تحتاج إلى إنشاء بيئتك باستخدام الصورة mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04 الأساسية وتبعيات conda المناسبة. بعد ذلك، يمكنك إنشاء البيئة، باستخدام المواصفات في YAML التالي.

channels:
  - conda-forge
dependencies:
  - python=3.8
  - pip=22.3.1
  - pip:
      - azureml-defaults==1.38.0
      - azureml-ai-monitoring~=0.1.0b1
name: model-env

تحديث YAML للتوزيع

بعد ذلك، يمكنك إنشاء نشر YAML. لإنشاء YAML للتوزيع، قم بتضمين السمة data_collector وتمكين جمع البيانات للكائناتCollector، وmodel_outputs، model_inputs التي قمت بإنشاء مثيل لها سابقا عبر تسجيل Python SDK المخصص:

data_collector:
  collections:
    model_inputs:
      enabled: 'True'
    model_outputs:
      enabled: 'True'

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

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my_endpoint
model: azureml:iris_mlflow_model@latest
environment:
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
  conda_file: model/conda.yaml
code_configuration:
  code: scripts
  scoring_script: score.py
instance_type: Standard_F2s_v2
instance_count: 1
data_collector:
  collections:
    model_inputs:
      enabled: 'True'
    model_outputs:
      enabled: 'True'

اختياريا، يمكنك ضبط المعلمات الإضافية التالية ل data_collector:

  • data_collector.rolling_rate: معدل تقسيم البيانات في التخزين. اختر من القيم: Minuteأو Hourأو DayMonth.Year
  • data_collector.sampling_rate: النسبة المئوية، الممثلة كمعدل عشري، من البيانات المراد جمعها. على سبيل المثال، تمثل قيمة 1.0 جمع 100٪ من البيانات.
  • data_collector.collections.<collection_name>.data.name: اسم أصل البيانات للتسجيل مع البيانات التي تم جمعها.
  • data_collector.collections.<collection_name>.data.path: مسار مخزن بيانات Azure التعلم الآلي الكامل حيث يجب تسجيل البيانات المجمعة كأصل بيانات.
  • data_collector.collections.<collection_name>.data.version: إصدار أصل البيانات المراد تسجيله مع البيانات التي تم جمعها في تخزين الكائن الثنائي كبير الحجم.

جمع البيانات إلى حاوية تخزين كائن ثنائي كبير الحجم مخصصة

يمكنك استخدام مجمع البيانات لجمع بيانات استدلال الإنتاج إلى حاوية تخزين blob مخصصة باتباع الخطوات التالية:

  1. الاتصال حاوية التخزين إلى مخزن بيانات Azure التعلم الآلي. لمزيد من المعلومات حول توصيل حاوية التخزين بمخزن بيانات Azure التعلم الآلي، راجع إنشاء مخازن البيانات.

  2. تحقق من أن نقطة نهاية Azure التعلم الآلي لديها الأذونات اللازمة للكتابة إلى وجهة مخزن البيانات.

    يدعم مجمع البيانات كلا من الهويات المدارة المعينة من قبل النظام (SAMIs) والهويات المدارة المعينة من قبل المستخدم (UAMIs). أضف الهوية إلى نقطة النهاية الخاصة بك. Storage Blob Data Contributor تعيين الدور لهذه الهوية مع حاوية تخزين Blob لاستخدامها كوجهة البيانات. لمعرفة كيفية استخدام الهويات المدارة في Azure، راجع تعيين أدوار Azure إلى هوية مدارة.

  3. قم بتحديث YAML للتوزيع لتضمين الخاصية data داخل كل مجموعة.

    • تحدد المعلمة المطلوبة، data.name، اسم أصل البيانات الذي سيتم تسجيله مع البيانات المجمعة.
    • تحدد المعلمة المطلوبة، data.pathمسار مخزن بيانات Azure التعلم الآلي الذي تم تكوينه بالكامل، والمتصل بحاوية Azure Blob Storage.
    • تحدد المعلمة الاختيارية، data.version، إصدار أصل البيانات (الافتراضيات إلى 1).

    يوضح تكوين YAML التالي مثالا على كيفية تضمين الخاصية data داخل كل مجموعة.

    data_collector:
      collections:
        model_inputs:
          enabled: 'True'
          data: 
            name: my_model_inputs_data_asset
            path: azureml://datastores/workspaceblobstore/paths/modelDataCollector/my_endpoint/blue/model_inputs
            version: 1
        model_outputs:
          enabled: 'True'
          data: 
            name: my_model_outputs_data_asset
            path: azureml://datastores/workspaceblobstore/paths/modelDataCollector/my_endpoint/blue/model_outputs 
            version: 1
    

    إشعار

    يمكنك أيضا استخدام المعلمة data.path للإشارة إلى مخازن البيانات في اشتراكات Azure المختلفة عن طريق توفير مسار يتبع التنسيق: azureml://subscriptions/<sub_id>/resourcegroups/<rg_name>/workspaces/<ws_name>/datastores/<datastore_name>/paths/<path>

إنشاء النشر الخاص بك باستخدام جمع البيانات

انشر النموذج مع تمكين التسجيل المخصص:

$ az ml online-deployment create -f deployment.YAML

لمزيد من المعلومات حول كيفية تنسيق YAML للتوزيع الخاص بك لجمع البيانات باستخدام نقاط نهاية Kubernetes عبر الإنترنت، راجع مخطط YAML لتوزيع CLI (v2) الذي يدعم Kubernetes عبر الإنترنت في Azure Arc.

لمزيد من المعلومات حول كيفية تنسيق توزيع YAML لجمع البيانات باستخدام نقاط النهاية المدارة عبر الإنترنت، راجع مخطط YAML للتوزيع المدار عبر الإنترنت ل CLI (v2).

إجراء تسجيل البيانات الأساسية

بالإضافة إلى التسجيل المخصص باستخدام Python SDK المتوفر، يمكنك جمع بيانات حمولة HTTP للطلب والاستجابة مباشرة دون الحاجة إلى زيادة البرنامج النصي لتسجيل النقاط (score.py).

  1. لتمكين تسجيل الحمولة، في توزيع YAML، استخدم الأسماء request و response:

    $schema: http://azureml/sdk-2-0/OnlineDeployment.json
    
    endpoint_name: my_endpoint 
    name: blue 
    model: azureml:my-model-m1:1 
    environment: azureml:env-m1:1 
    data_collector:
       collections:
           request:
               enabled: 'True'
           response:
               enabled: 'True'
    
  2. انشر النموذج مع تمكين تسجيل الحمولة:

    $ az ml online-deployment create -f deployment.YAML
    

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

عند استخدام التوزيع الخاص بك، تتدفق البيانات المجمعة إلى تخزين Blob لمساحة العمل الخاصة بك. التعليمات البرمجية JSON التالية هي مثال على طلب HTTP الذي تم جمعه:

{"specversion":"1.0",
"id":"19790b87-a63c-4295-9a67-febb2d8fbce0",
"source":"/subscriptions/d511f82f-71ba-49a4-8233-d7be8a3650f4/resourceGroups/mire2etesting/providers/Microsoft.MachineLearningServices/workspaces/mirmasterenvws/onlineEndpoints/localdev-endpoint/deployments/localdev",
"type":"azureml.inference.request",
"datacontenttype":"application/json",
"time":"2022-05-25T08:59:48Z",
"data":{"data": [  [1,2,3,4,5,6,7,8,9,10], [10,9,8,7,6,5,4,3,2,1]]},
"path":"/score",
"method":"POST",
"contentrange":"bytes 0-59/*",
"correlationid":"f6e806c9-1a9a-446b-baa2-901373162105","xrequestid":"f6e806c9-1a9a-446b-baa2-901373162105"}

التعليمات البرمجية JSON التالية هي مثال آخر على استجابة HTTP التي تم جمعها:

{"specversion":"1.0",
"id":"bbd80e51-8855-455f-a719-970023f41e7d",
"source":"/subscriptions/d511f82f-71ba-49a4-8233-d7be8a3650f4/resourceGroups/mire2etesting/providers/Microsoft.MachineLearningServices/workspaces/mirmasterenvws/onlineEndpoints/localdev-endpoint/deployments/localdev",
"type":"azureml.inference.response",
"datacontenttype":"application/json",
"time":"2022-05-25T08:59:48Z",
"data":[11055.977245525679, 4503.079536107787],
"contentrange":"bytes 0-38/39",
"correlationid":"f6e806c9-1a9a-446b-baa2-901373162105","xrequestid":"f6e806c9-1a9a-446b-baa2-901373162105"}

تخزين البيانات التي تم جمعها في تخزين كائن ثنائي كبير الحجم

يسمح لك جمع البيانات بتسجيل بيانات استدلال الإنتاج إلى وجهة تخزين Blob التي تختارها. إعدادات وجهة البيانات قابلة للتكوين على collection_name المستوى .

إخراج/تنسيق تخزين Blob:

  • بشكل افتراضي، يتم تخزين البيانات التي تم جمعها في المسار التالي في مساحة العمل Blob Storage: azureml://datastores/workspaceblobstore/paths/modelDataCollector.

  • سيتم إلحاق المسار النهائي في الكائن الثنائي كبير الحجم ب {endpoint_name}/{deployment_name}/{collection_name}/{yyyy}/{MM}/{dd}/{HH}/{instance_id}.jsonl.

  • كل سطر في الملف هو كائن JSON يمثل طلب/استجابة استدلال واحد تم تسجيله.

إشعار

collection_name يشير إلى اسم جمع البيانات (على سبيل المثال، model_inputs أو model_outputs). instance_id هو معرف فريد يحدد تجميع البيانات التي تم تسجيلها.

تتبع البيانات المجمعة مخطط JSON التالي. تتوفر البيانات التي تم جمعها من data المفتاح ويتم توفير بيانات تعريف إضافية.

{"specversion":"1.0",
"id":"725aa8af-0834-415c-aaf5-c76d0c08f694",
"source":"/subscriptions/636d700c-4412-48fa-84be-452ac03d34a1/resourceGroups/mire2etesting/providers/Microsoft.MachineLearningServices/workspaces/mirmasterws/onlineEndpoints/localdev-endpoint/deployments/localdev",
"type":"azureml.inference.inputs",
"datacontenttype":"application/json",
"time":"2022-12-01T08:51:30Z",
"data":[{"label":"DRUG","pattern":"aspirin"},{"label":"DRUG","pattern":"trazodone"},{"label":"DRUG","pattern":"citalopram"}],
"correlationid":"3711655d-b04c-4aa2-a6c4-6a90cbfcb73f","xrequestid":"3711655d-b04c-4aa2-a6c4-6a90cbfcb73f",
"modelversion":"default",
"collectdatatype":"pandas.core.frame.DataFrame",
"agent":"monitoring-sdk/0.1.2",
"contentrange":"bytes 0-116/117"}

تلميح

يتم عرض فواصل الأسطر فقط لسهولة القراءة. في ملفات .jsonl التي تم جمعها، لن يكون هناك أي فواصل أسطر.

تخزين حمولات كبيرة

إذا كانت حمولة البيانات أكبر من 4 ميغابايت، فسيكون هناك حدث في {instance_id}.jsonl الملف الموجود داخل {endpoint_name}/{deployment_name}/request/.../{instance_id}.jsonl المسار الذي يشير إلى مسار ملف أولي، والذي يجب أن يكون له المسار التالي: blob_url/{blob_container}/{blob_path}/{endpoint_name}/{deployment_name}/{rolled_time}/{instance_id}.jsonl. ستكون البيانات التي تم جمعها موجودة في هذا المسار.

تخزين البيانات الثنائية

مع البيانات الثنائية التي تم جمعها، نعرض الملف الأولي مباشرة، مع instance_id كاسم الملف. يتم وضع البيانات الثنائية في نفس المجلد مثل مسار مجموعة مصدر الطلب، استنادا rolling_rateإلى . يعكس المثال التالي المسار في حقل البيانات. التنسيق هو json، ويتم عرض فواصل الأسطر فقط لسهولة القراءة:

{
"specversion":"1.0",
"id":"ba993308-f630-4fe2-833f-481b2e4d169a",
"source":"/subscriptions//resourceGroups//providers/Microsoft.MachineLearningServices/workspaces/ws/onlineEndpoints/ep/deployments/dp",
"type":"azureml.inference.request",
"datacontenttype":"text/plain",
"time":"2022-02-28T08:41:07Z",
"data":"https://masterws0373607518.blob.core.windows.net/modeldata/mdc/%5Byear%5D%5Bmonth%5D%5Bday%5D-%5Bhour%5D_%5Bminute%5D/ba993308-f630-4fe2-833f-481b2e4d169a",
"path":"/score?size=1",
"method":"POST",
"contentrange":"bytes 0-80770/80771",
"datainblob":"true"
}

تجميع مجمعات البيانات

إذا تم إرسال الطلبات خلال فترات زمنية قصيرة لبعضها البعض، يقوم مجمع البيانات بتجميعها معا في نفس كائن JSON. على سبيل المثال، إذا قمت بتشغيل برنامج نصي لإرسال بيانات نموذجية إلى نقطة النهاية الخاصة بك، وتم تمكين تجميع البيانات في النشر، يمكن تجميع بعض الطلبات معا، اعتمادا على الفاصل الزمني بينهما. إذا كنت تستخدم جمع البيانات مع مراقبة نموذج Azure التعلم الآلي، فإن خدمة مراقبة النموذج تعالج كل طلب بشكل مستقل. ومع ذلك، إذا كنت تتوقع أن يكون لكل صف من البيانات المسجلة صف فريد correlationidخاص به، يمكنك تضمين correlationid عمود في pandas DataFrame الذي تقوم بتسجيله مع جامع البيانات. لمزيد من المعلومات حول كيفية تضمين فريدك correlationid ك عمود في pandas DataFrame، راجع تجميع البيانات لمراقبة أداء النموذج.

فيما يلي مثال على طلبين مسجلين يتم تجميعهما معا:

{"specversion":"1.0",
"id":"720b8867-54a2-4876-80eb-1fd6a8975770",
"source":"/subscriptions/79a1ba0c-35bb-436b-bff2-3074d5ff1f89/resourceGroups/rg-bozhlinmomoignite/providers/Microsoft.MachineLearningServices/workspaces/momo-demo-ws/onlineEndpoints/credit-default-mdc-testing-4/deployments/main2",
"type":"azureml.inference.model_inputs",
"datacontenttype":"application/json",
"time":"2024-03-05T18:16:25Z",
"data":[{"LIMIT_BAL":502970,"AGE":54,"BILL_AMT1":308068,"BILL_AMT2":381402,"BILL_AMT3":442625,"BILL_AMT4":320399,"BILL_AMT5":322616,"BILL_AMT6":397534,"PAY_AMT1":17987,"PAY_AMT2":78764,"PAY_AMT3":26067,"PAY_AMT4":24102,"PAY_AMT5":-1155,"PAY_AMT6":2154,"SEX":2,"EDUCATION":2,"MARRIAGE":2,"PAY_0":0,"PAY_2":0,"PAY_3":0,"PAY_4":0,"PAY_5":0,"PAY_6":0},{"LIMIT_BAL":293458,"AGE":35,"BILL_AMT1":74131,"BILL_AMT2":-71014,"BILL_AMT3":59284,"BILL_AMT4":98926,"BILL_AMT5":110,"BILL_AMT6":1033,"PAY_AMT1":-3926,"PAY_AMT2":-12729,"PAY_AMT3":17405,"PAY_AMT4":25110,"PAY_AMT5":7051,"PAY_AMT6":1623,"SEX":1,"EDUCATION":3,"MARRIAGE":2,"PAY_0":-2,"PAY_2":-2,"PAY_3":-2,"PAY_4":-2,"PAY_5":-1,"PAY_6":-1}],
"contentrange":"bytes 0-6794/6795",
"correlationid":"test",
"xrequestid":"test",
"modelversion":"default",
"collectdatatype":"pandas.core.frame.DataFrame",
"agent":"azureml-ai-monitoring/0.1.0b4"}

عرض البيانات في واجهة مستخدم الاستوديو

لعرض البيانات التي تم جمعها في Blob Storage من واجهة مستخدم الاستوديو:

  1. انتقل إلى علامة التبويب Data في مساحة عمل Azure التعلم الآلي:

    لقطة شاشة تبرز صفحة البيانات في مساحة عمل Azure التعلم الآلي

  2. انتقل إلى Datastores وحدد workspaceblobstore (افتراضي):

    لقطة شاشة تبرز صفحة Datastores في مساحة عمل AzureML

  3. استخدم القائمة استعراض لعرض بيانات الإنتاج التي تم جمعها:

    لقطة شاشة تبرز بنية شجرة البيانات في Datastore

جمع البيانات لنماذج MLflow

إذا كنت تقوم بنشر نموذج MLflow إلى نقطة نهاية Azure التعلم الآلي عبر الإنترنت، يمكنك تمكين جمع بيانات استدلال الإنتاج مع تبديل واحد في واجهة مستخدم الاستوديو. إذا تم تشغيل جمع البيانات، فإن Azure التعلم الآلي أدوات تلقائية لبرنامجك النصي لتسجيل النقاط باستخدام رمز تسجيل مخصص للتأكد من تسجيل بيانات الإنتاج في مساحة العمل Blob Storage. يمكن لمراقبة النموذج بعد ذلك استخدام البيانات لمراقبة أداء نموذج MLflow الخاص بك في الإنتاج.

أثناء تكوين توزيع النموذج الخاص بك، يمكنك تمكين جمع بيانات الإنتاج. ضمن علامة التبويب Deployment، حدد Enabled for Data collection.

بعد تمكين جمع البيانات، سيتم تسجيل بيانات استدلال الإنتاج إلى Azure التعلم الآلي مساحة العمل Blob Storage وسيتم إنشاء أصلين للبيانات بالأسماء <endpoint_name>-<deployment_name>-model_inputs و<endpoint_name>-<deployment_name>-model_outputs. يتم تحديث أصول البيانات هذه في الوقت الفعلي أثناء استخدامك للتوزيع في الإنتاج. يمكن لمراقبة النموذج بعد ذلك استخدام أصول البيانات لمراقبة أداء النموذج الخاص بك في الإنتاج.