إنشاء حزم نموذج (معاينة)

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

هام

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

لمزيد من المعلومات، راجع ⁧⁩شروط الاستخدام التكميلية لمعاينات Microsoft Azure⁧⁩.

في هذه المقالة، ستتعلم كيفية حزم نموذج للتوزيع.

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

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

حول هذا المثال

في هذا المثال، ستتعلم كيفية حزم النماذج في Azure التعلم الآلي.

نسخ المستودع

يستند المثال في هذه المقالة إلى نماذج التعليمات البرمجية الموجودة في مستودع أمثلة azureml. لتشغيل الأوامر محليا دون الحاجة إلى نسخ/لصق YAML والملفات الأخرى، قم أولا باستنساخ المستودع ثم تغيير الدلائل إلى المجلد:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

يستخدم هذا القسم المثال في نقاط نهاية المجلد /online/deploy-packages/custom-model.

الاتصال بمساحة العمل

الاتصال إلى مساحة عمل Azure التعلم الآلي حيث ستقوم بعملك.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

حزم نموذج

يمكنك إنشاء حزم نماذج بشكل صريح للسماح لك بالتحكم في كيفية إجراء عملية التعبئة والتغليف. استخدم سير العمل هذا عندما:

  • تريد تخصيص كيفية إنشاء حزمة النموذج.
  • تريد نشر حزمة النموذج خارج Azure التعلم الآلي.
  • تريد استخدام حزم النموذج في سير عمل MLOps.

يمكنك إنشاء حزم نموذج عن طريق تحديد:

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

تسجيل النموذج

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

MODEL_NAME='sklearn-regression'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model

إنشاء البيئة الأساسية

تستخدم البيئات الأساسية للإشارة إلى الصورة الأساسية وتبعيات حزمة Python النموذجية. يتطلب نموذجنا استخدام الحزم التالية كما هو موضح في ملف conda:

conda.yaml

name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.9
  - numpy=1.23.5
  - pip=23.0.1
  - scikit-learn=1.2.2
  - scipy=1.10.1
  - xgboost==1.3.3

إشعار

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

إنشاء البيئة كما يلي:

إنشاء تعريف بيئة:

sklearn-regression-env.yml

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: sklearn-regression-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: conda.yaml
description: An environment for models built with XGBoost and Scikit-learn.

ثم قم بإنشاء البيئة:

az ml environment create -f environment/sklearn-regression-env.yml

إنشاء مواصفات حزمة

يمكنك إنشاء حزم نماذج في Azure التعلم الآلي، باستخدام Azure CLI أو Azure التعلم الآلي SDK ل Python. تدعم مواصفات الحزمة المخصصة السمات التالية:

السمة النوع الوصف مطلوب
target_environment str اسم الحزمة المراد إنشاؤها. نتيجة عملية الحزمة هي بيئة في Azure التعلم الآلي. ‏‏نعم‬
base_environment_source object الصورة الأساسية التي يجب استخدامها لإنشاء الحزمة حيث يتم تحديد تبعيات النموذج. نعم، ما لم يكن النموذج هو MLflow.
base_environment_source.type str نوع الصورة الأساسية. يتم دعم استخدام بيئة أخرى فقط كصورة أساسية (type: environment_asset).
base_environment_source.resource_id str معرف المورد للبيئة الأساسية المراد استخدامها. استخدام تنسيق azureml:<name>:<version> أو معرف مورد طويل.
inferencing_server object خادم الاستدلال لاستخدامه. ‏‏نعم‬
inferencing_server.type azureml_online
custom
استخدم azureml_online لخادم الاستدلال التعلم الآلي Azure، أو custom لخادم مخصص عبر الإنترنت مثل خدمة TensorFlow أو خدمة Torch. ‏‏نعم‬
inferencing_server.code_configuration object تكوين التعليمات البرمجية مع روتين الاستدلال. يجب أن يحتوي على ملف Python واحد على الأقل مع أساليب init و run. نعم، ما لم يكن النموذج هو MLflow.
model_configuration object تكوين النموذج. استخدم هذه السمة للتحكم في كيفية حزم النموذج في الصورة الناتجة. لا
model_configuration.mode download
copy
الإشارة إلى كيفية وضع النموذج في الحزمة. القيم المحتملة هي download (افتراضي) و copy. استخدم download عندما تريد تنزيل النموذج من سجل النموذج في وقت النشر. ينشئ هذا الخيار صور docker أصغر نظرا لعدم تضمين النموذج عليه. استخدم copy عندما تريد قطع اتصال الصورة ب Azure التعلم الآلي. سيتم نسخ النموذج داخل صورة docker في وقت الحزمة. copy غير معتمد على مساحات العمل الخاصة الممكنة للارتباط. لا
  1. إنشاء مواصفات حزمة كما يلي:

    package-moe.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    base_environment_source:
        type: environment_asset
        resource_id: azureml:sklearn-regression-env:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  2. بدء عملية حزمة النموذج:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. نتيجة عملية الحزمة هي بيئة.

حزم نموذج له تبعيات في موجزات Python الخاصة

يمكن لحزم النماذج حل تبعيات Python المتوفرة في الموجزات الخاصة. لاستخدام هذه الإمكانية، تحتاج إلى إنشاء اتصال من مساحة العمل الخاصة بك إلى الموجز وتحديد تكوين الرمز المميز PAT. توضح التعليمات البرمجية Python التالية كيف يمكنك تكوين مساحة العمل حيث تقوم بتشغيل عملية الحزمة.

from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration

# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]

credentials = PatTokenConfiguration(pat=git_pat)

ws_connection = WorkspaceConnection(
    name="<workspace_connection_name>",
    target="<git_url>",
    type="git",
    credentials=credentials,
)

ml_client.connections.create_or_update(ws_connection)

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

conda.yml

name: foo
channels:
  - defaults
dependencies:
  - python
  - pip
  - pip:
    - --extra-index-url <python_feed_url>
    - bar

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

حزم نموذج مستضاف في سجل

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

تنشئ التعليمات البرمجية التالية حزمة t5-base من النموذج من سجل:

  1. الاتصال إلى السجل حيث يوجد النموذج ومساحة العمل التي تحتاج فيها إلى إنشاء حزمة النموذج:

    az login
    
  2. احصل على مرجع إلى النموذج الذي تريد حزمه. في هذه الحالة، نقوم بتعبئة النموذج t5-base من azureml السجل.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. تكوين مواصفات الحزمة. نظرا لأن النموذج الذي نريد حزمه هو MLflow، فإن البيئة الأساسية والبرنامج النصي لتسجيل النقاط اختياري.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. ابدأ العملية لإنشاء حزمة النموذج:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. يتم الآن إنشاء الحزمة في مساحة العمل الهدف وجاهزة للتوزيع.

نماذج الحزمة للنشر خارج Azure التعلم الآلي

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

توضح التعليمات البرمجية التالية كيفية التكوين copy في حزمة نموذج:

package-external.yml

$schema: http://azureml/sdk-2-0/ModelVersionPackage.json
base_environment_source:
    type: environment_asset
    resource_id: azureml:sklearn-regression-env:1
target_environment: sklearn-regression-docker-pkg
inferencing_server: 
    type: azureml_online
    code_configuration:
      code: src
      scoring_script: score.py
model_configuration:
  mode: copy

الخطوة التالية