Vytváření balíčků modelů (Preview)

Balíček modelu je funkce ve službě Azure Machine Učení, která umožňuje shromažďovat všechny závislosti potřebné k nasazení modelu strojového učení na obslužnou platformu. Vytváření balíčků před nasazením modelů poskytuje robustní a spolehlivé nasazení a efektivnější pracovní postup MLOps. Balíčky je možné přesouvat mezi pracovními prostory a dokonce i mimo službu Azure Machine Učení.

Důležité

Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti.

Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

V tomto článku se dozvíte, jak zabalit model pro nasazení.

Požadavky

Než budete postupovat podle kroků v tomto článku, ujistěte se, že máte následující požadavky:

  • Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte bezplatnou nebo placenou verzi služby Azure Machine Učení.

  • Pracovní prostor služby Azure Machine Learning. Pokud ho nemáte, vytvořte si ho pomocí kroků v článku Správa pracovních prostorů.

  • Řízení přístupu na základě role v Azure (Azure RBAC) slouží k udělení přístupu k operacím ve službě Azure Machine Learning. Pokud chcete provést kroky v tomto článku, musí mít váš uživatelský účet přiřazenou roli vlastníka nebo přispěvatele pro pracovní prostor azure machine Učení nebo vlastní roli. Další informace najdete v tématu Správa přístupu k pracovnímu prostoru Azure Machine Učení.

O tomto příkladu

V tomto příkladu se dozvíte, jak zabalit modely ve službě Azure Machine Učení.

Klonování úložiště

Příklad v tomto článku vychází z ukázek kódu obsažených v úložišti azureml-examples . Pokud chcete příkazy spustit místně, aniž byste museli kopírovat nebo vkládat YAML a další soubory, nejprve naklonujte úložiště a pak změňte adresáře do složky:

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

Tato část používá příklad v koncových bodech složky /online/deploy-packages/custom-model.

Připojení k pracovnímu prostoru

Připojení do pracovního prostoru Azure Machine Učení, kde budete pracovat.

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

Zabalení modelu

Balíčky modelů můžete vytvořit explicitně, abyste mohli řídit, jak se operace balení provádí. Tento pracovní postup použijte v těchto případech:

  • Chcete přizpůsobit způsob vytvoření balíčku modelu.
  • Balíček modelu chcete nasadit mimo azure Machine Učení.
  • Chcete použít balíčky modelů v pracovním postupu MLOps.

Balíčky modelu můžete vytvořit zadáním následujících:

  • Model, který se má zabalit: Každý balíček modelu může obsahovat pouze jeden model. Azure Machine Učení nepodporuje balení více modelů ve stejném balíčku modelu.
  • Základní prostředí: Prostředí slouží k označení základní image a v balíčcích Pythonu závislosti, které váš model potřebuje. U modelů MLflow azure Machine Učení automaticky vygeneruje základní prostředí. U vlastních modelů je potřeba ho zadat.
  • Obslužná technologie: Odvozovací zásobník použitý ke spuštění modelu.

Registrace modelu

Balíčky modelů vyžadují, aby byl model zaregistrovaný v pracovním prostoru nebo v registru Učení Azure Machine. V tomto příkladu už máte místní kopii modelu v úložišti, takže potřebujete model publikovat jenom do registru v pracovním prostoru. Tuto část můžete přeskočit, pokud už je model, který se pokoušíte nasadit, zaregistrovaný.

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

Vytvoření základního prostředí

Základní prostředí se používají k označení základní image a závislostí balíčku Pythonu modelu. Náš model vyžaduje použití následujících balíčků, jak je uvedeno v souboru 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

Poznámka:

Jak se základní prostředí liší od prostředí, které používáte pro nasazení modelu do online a dávkových koncových bodů? Při nasazování modelů do koncových bodů musí vaše prostředí zahrnovat závislosti modelu a balíčky Pythonu, které jsou potřeba pro fungování spravovaných online koncových bodů. To přináší do nasazení ruční proces, kdy musíte kombinovat požadavky modelu s požadavky obsluhované platformy. Na druhou stranu použití balíčků modelů odebere toto tření, protože požadované balíčky pro server odvozování se automaticky vloží do balíčku modelu v době balení.

Vytvořte prostředí následujícím způsobem:

Vytvořte definici prostředí:

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.

Pak vytvořte prostředí:

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

Vytvoření specifikace balíčku

Balíčky modelů můžete vytvářet ve službě Azure Machine Učení pomocí Azure CLI nebo sady Azure Machine Učení SDK pro Python. Specifikace vlastního balíčku podporuje následující atributy:

Atribut Typ Popis Povinní účastníci
target_environment str Název balíčku, který chcete vytvořit. Výsledkem operace balíčku je prostředí ve službě Azure Machine Učení. Ano
base_environment_source object Základní image, která se má použít k vytvoření balíčku, kde jsou zadány závislosti modelu. Ano, pokud model není MLflow.
base_environment_source.type str Typ základní image. Podporuje se pouze použití jiného prostředí, protože je podporována základní image (type: environment_asset).
base_environment_source.resource_id str ID prostředku základního prostředí, které se má použít. Použijte formát azureml:<name>:<version> nebo dlouhé ID prostředku.
inferencing_server object Server odvozování, který se má použít. Ano
inferencing_server.type azureml_online
custom
Používá se azureml_online pro azure machine Učení odvozovací server nebo custom pro vlastní online server, jako je služba TensorFlow nebo služba Torch. Ano
inferencing_server.code_configuration object Konfigurace kódu s rutinou odvozování. Měl by obsahovat alespoň jeden soubor Pythonu s metodami init a run. Ano, pokud model není MLflow.
model_configuration object Konfigurace modelu. Tento atribut slouží k řízení způsobu zabalení modelu do výsledné image. No
model_configuration.mode download
copy
Uveďte, jak se model umístí do balíčku. Možné hodnoty jsou download (výchozí) a copy. Použijte download , když chcete, aby se model stáhl z registru modelu v době nasazení. Tato možnost vytvoří menší image Dockeru, protože model není součástí. Použijtecopy, když chcete odpojit image od azure machine Učení. Model se zkopíruje uvnitř image Dockeru v době balíčku. copy nepodporuje se u pracovních prostorů s podporou privátního propojení. No
  1. Následujícím způsobem vytvořte specifikaci balíčku:

    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. Spusťte operaci balíčku modelu:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. Výsledkem operace balíčku je prostředí.

Zabalení modelu, který má závislosti v privátních informačních kanálech Pythonu

Balíčky modelů můžou vyřešit závislosti Pythonu, které jsou k dispozici v privátních informačních kanálech. Pokud chcete tuto funkci použít, musíte vytvořit připojení z pracovního prostoru k informačnímu kanálu a zadat konfiguraci tokenu PAT. Následující kód Pythonu ukazuje, jak nakonfigurovat pracovní prostor, ve kterém spouštíte operaci balíčku.

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)

Po vytvoření připojení sestavte balíček modelu, jak je popsáno v části Balíček modelu. V následujícím příkladu základní prostředí balíčku používá privátní informační kanál pro závislost barPythonu, jak je uvedeno v následujícím souboru conda:

conda.yml

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

Pokud používáte model MLflow, jsou závislosti modelu uvedené uvnitř samotného modelu, a proto není potřeba základní prostředí . Místo toho při protokolování modelu určete závislosti privátního kanálu, jak je vysvětleno v modelech protokolování s vlastním podpisem, prostředím nebo ukázkami.

Zabalení modelu hostovaného v registru

Balíčky modelů poskytují pohodlný způsob, jak shromáždit závislosti před nasazením. Pokud jsou ale modely hostované v registrech, cíl nasazení je obvykle jiný pracovní prostor. Při vytváření balíčků v tomto nastavení použijte target_environment vlastnost k určení úplného umístění, kam chcete balíček modelu vytvořit, a ne pouze jeho název.

Následující kód vytvoří balíček t5-base modelu z registru:

  1. Připojení do registru, ve kterém se model nachází, a do pracovního prostoru, ve kterém je potřeba vytvořit balíček modelu:

    az login
    
  2. Získejte odkaz na model, který chcete zabalit. V tomto případě model t5-base zabalíme z azureml registru.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Nakonfigurujte specifikaci balíčku. Vzhledem k tomu, že model, který chceme zabalit, je MLflow, základní prostředí a bodovací skript volitelné.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Spuštěním operace vytvořte balíček modelu:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. Balíček se teď vytvoří v cílovém pracovním prostoru a je připravený k nasazení.

Zabalení modelů pro nasazení mimo službu Azure Machine Učení

Balíčky modelů je možné v případě potřeby nasadit mimo službu Azure Machine Učení. Pokud chcete zaručit přenositelnost, stačí zajistit, aby konfigurace modelu v balíčku byla nastavena takcopy, aby se samotný model zkopíroval do vygenerované image Dockeru místo odkazu z registru modelů ve službě Azure Machine Učení.

Následující kód ukazuje, jak nakonfigurovat copy v balíčku modelu:

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

Další krok