Vytváření balíčků modelů (Preview)
Balíček modelu je funkce ve službě Azure Machine Learning, 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 Azure Machine Learning.
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 Learning.
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 Služby Azure Machine Learning nebo vlastní roli. Další informace najdete v tématu Správa přístupu k pracovnímu prostoru Azure Machine Learning.
Model, který se má zabalit. V tomto příkladu se používá model MLflow zaregistrovaný v pracovním prostoru.
Upozornění
Balení modelů není podporováno pro modely v katalogu modelů Azure AI, včetně velkých jazykových modelů. Modely v katalogu modelů Azure AI jsou optimalizované pro odvozování cílů nasazení Azure AI a nejsou vhodné pro balení.
O tomto příkladu
V tomto příkladu se dozvíte, jak zabalit modely ve službě Azure Machine Learning.
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řipojte se k pracovnímu prostoru Azure Machine Learning, ve kterém 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 Learning.
- 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 Learning 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. V případě modelů MLflow azure Machine Learning 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 služby Azure Machine Learning. 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 Learning pomocí Azure CLI nebo sady Azure Machine Learning 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 Learning. | 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 server odvozování služby Azure Machine Learning 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žijte copy , když chcete odpojit image od služby Azure Machine Learning. 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 |
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
Spusťte operaci balíčku modelu:
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 bar
Pythonu, 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:
Připojte se k registru, ve kterém se model nachází, a k pracovnímu prostoru, ve kterém je potřeba vytvořit balíček modelu:
Získejte odkaz na model, který chcete zabalit. V tomto případě model
t5-base
zabalíme zazureml
registru.Nakonfigurujte specifikaci balíčku. Vzhledem k tomu, že model, který chceme zabalit, je MLflow, základní prostředí a bodovací skript volitelné.
Spuštěním operace vytvořte balíček modelu:
Balíček se teď vytvoří v cílovém pracovním prostoru a je připravený k nasazení.
Zabalení modelů pro nasazení mimo Azure Machine Learning
Balíčky modelů je možné v případě potřeby nasadit mimo Azure Machine Learning. Pokud chcete zaručit přenositelnost, stačí zajistit, aby konfigurace modelu v balíčku byla nastavena tak copy
, aby se samotný model zkopíroval do vygenerované image Dockeru místo odkazu z registru modelů ve službě Azure Machine Learning.
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