Share via


Skapa modellpaket (förhandsversion)

Modellpaketet är en funktion i Azure Machine Learning som gör att du kan samla in alla beroenden som krävs för att distribuera en maskininlärningsmodell till en serveringsplattform. Att skapa paket innan du distribuerar modeller ger robust och tillförlitlig distribution och ett effektivare MLOps-arbetsflöde. Paket kan flyttas mellan arbetsytor och även utanför Azure Machine Learning.

Viktigt!

Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade.

Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

I den här artikeln lär du dig att paketera en modell för distribution.

Förutsättningar

Innan du följer stegen i den här artikeln kontrollerar du att du har följande förutsättningar:

Om det här exemplet

I det här exemplet får du lära dig att paketera modeller i Azure Machine Learning.

Klona lagringsplatsen

Exemplet i den här artikeln baseras på kodexempel som finns på lagringsplatsen azureml-examples . Om du vill köra kommandona lokalt utan att behöva kopiera/klistra in YAML och andra filer klonar du först lagringsplatsen och ändrar sedan kataloger till mappen:

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

I det här avsnittet används exemplet i mappens slutpunkter/online/deploy-packages/custom-model.

Anslut till din arbetsyta

Anslut till Azure Machine Learning-arbetsytan där du ska utföra ditt arbete.

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

Paketera en modell

Du kan skapa modellpaket explicit så att du kan styra hur paketeringsåtgärden utförs. Använd det här arbetsflödet när:

  • Du vill anpassa hur modellpaketet skapas.
  • Du vill distribuera modellpaketet utanför Azure Machine Learning.
  • Du vill använda modellpaket i ett MLOps-arbetsflöde.

Du kan skapa modellpaket genom att ange följande:

  • Modell att paketera: Varje modellpaket kan bara innehålla en enda modell. Azure Machine Learning stöder inte paketering av flera modeller under samma modellpaket.
  • Basmiljö: Miljöer används för att ange basavbildningen och i Python-paket är beroenden som din modell behöver. För MLflow-modeller genererar Azure Machine Learning automatiskt basmiljön. För anpassade modeller måste du ange det.
  • Serveringsteknik: Den slutsatsdragningsstack som används för att köra modellen.

Registrera modellen

Modellpaket kräver att modellen registreras på din arbetsyta eller i ett Azure Machine Learning-register. I det här exemplet har du redan en lokal kopia av modellen på lagringsplatsen, så du behöver bara publicera modellen till registret på arbetsytan. Du kan hoppa över det här avsnittet om den modell som du försöker distribuera redan är registrerad.

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

Skapa basmiljön

Basmiljöer används för att ange basavbildningen och python-paketberoenden för modellen. Vår modell kräver att följande paket används som anges i conda-filen:

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

Kommentar

Hur skiljer sig basmiljön från den miljö som du använder för modelldistribution till online- och batchslutpunkter? När du distribuerar modeller till slutpunkter måste din miljö innehålla modellens beroenden och De Python-paket som krävs för att hanterade onlineslutpunkter ska fungera. Detta medför en manuell process i distributionen, där du måste kombinera kraven för din modell med kraven för serveringsplattformen. Å andra sidan tar användningen av modellpaket bort den här friktionen, eftersom de nödvändiga paketen för slutsatsdragningsservern automatiskt matas in i modellpaketet vid förpackningstillfället.

Skapa miljön på följande sätt:

Skapa en miljödefinition:

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.

Skapa sedan miljön:

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

Skapa en paketspecifikation

Du kan skapa modellpaket i Azure Machine Learning med hjälp av Azure CLI eller Azure Machine Learning SDK för Python. Den anpassade paketspecifikationen stöder följande attribut:

Attribut Typ Beskrivning Obligatoriskt
target_environment str Namnet på paketet som ska skapas. Resultatet av en paketåtgärd är en miljö i Azure Machine Learning. Ja
base_environment_source object Basavbildningen som ska användas för att skapa paketet där beroenden för modellen anges. Ja, om inte modellen är MLflow.
base_environment_source.type str Basavbildningens typ. Det går bara att använda en annan miljö eftersom basavbildningen stöds (type: environment_asset).
base_environment_source.resource_id str Resurs-ID för den basmiljö som ska användas. Använd format azureml:<name>:<version> eller ett långt resurs-ID.
inferencing_server object Den slutsatsdragningsserver som ska användas. Ja
inferencing_server.type azureml_online
custom
Används azureml_online för Azure Machine Learning-inferensservern eller custom för en anpassad onlineserver som TensorFlow-server eller Torch Serve. Ja
inferencing_server.code_configuration object Kodkonfigurationen med slutsatsdragningsrutinen. Den bör innehålla minst en Python-fil med metoder init och run. Ja, om inte modellen är MLflow.
model_configuration object Modellkonfigurationen. Använd det här attributet för att styra hur modellen paketeras i den resulterande bilden. Nej
model_configuration.mode download
copy
Ange hur modellen ska placeras i paketet. Möjliga värden är download (standard) och copy. Använd download när du vill att modellen ska laddas ned från modellregistret vid distributionstillfället. Det här alternativet skapar mindre Docker-avbildningar eftersom modellen inte ingår i den. Använd copy när du vill koppla från avbildningen från Azure Machine Learning. Modellen kopieras inuti docker-avbildningen vid pakettillfället. copy stöds inte på privata länkaktiverade arbetsytor. Nej
  1. Skapa en paketspecifikation på följande sätt:

    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. Starta modellpaketåtgärden:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. Resultatet av paketåtgärden är en miljö.

Paketera en modell som har beroenden i privata Python-feeds

Modellpaket kan lösa Python-beroenden som är tillgängliga i privata feeds. Om du vill använda den här funktionen måste du skapa en anslutning från din arbetsyta till feeden och ange konfigurationen för PAT-token. Följande Python-kod visar hur du kan konfigurera arbetsytan där du kör paketåtgärden.

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)

När anslutningen har skapats skapar du modellpaketet enligt beskrivningen i avsnittet för Paketera en modell. I följande exempel använder basmiljön för paketet ett privat flöde för Python-beroendet bar, enligt vad som anges i följande conda-fil:

conda.yml

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

Om du använder en MLflow-modell anges modellberoenden i själva modellen och därför behövs ingen basmiljö . Ange i stället privata feedberoenden när du loggar modellen, enligt beskrivningen i Loggningsmodeller med en anpassad signatur, miljö eller exempel.

Paketera en modell som finns i ett register

Modellpaket är ett bekvämt sätt att samla in beroenden före distributionen. Men när modeller finns i register är distributionsmålet vanligtvis en annan arbetsyta. När du skapar paket i den target_environment här installationen använder du egenskapen för att ange den fullständiga plats där du vill att modellpaketet ska skapas, i stället för bara dess namn.

Följande kod skapar ett paket med t5-base modellen från ett register:

  1. Anslut till registret där modellen finns och arbetsytan där du behöver modellpaketet skapas:

    az login
    
  2. Hämta en referens till den modell som du vill paketera. I det här fallet paketerar vi modellen t5-base från azureml registret.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Konfigurera en paketspecifikation. Eftersom modellen vi vill paketera är MLflow är basmiljön och bedömningsskriptet valfritt.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Starta åtgärden för att skapa modellpaketet:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. Paketet skapas nu på målarbetsytan och är redo att distribueras.

Paketmodeller som ska distribueras utanför Azure Machine Learning

Modellpaket kan distribueras utanför Azure Machine Learning om det behövs. För att garantera portabilitet behöver du bara se till att modellkonfigurationen i paketet har läget inställt på copy så att själva modellen kopieras i den genererade docker-avbildningen i stället för att refereras från modellregistret i Azure Machine Learning.

Följande kod visar hur du konfigurerar copy i ett modellpaket:

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

Gå vidare