Sdílet prostřednictvím


Vytváření a spouštění kanálů strojového učení pomocí komponent pomocí rozhraní příkazového řádku služby Azure Machine Learning

PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)

V tomto článku se dozvíte, jak vytvářet a spouštět kanály strojového učení pomocí Azure CLI a komponent. Kanály můžete vytvářet bez použití komponent, ale komponenty poskytují flexibilitu a umožňují opakované použití. Kanály Azure Machine Learning je možné definovat v JAZYCE YAML a spouštět z rozhraní příkazového řádku, vytvářet v Pythonu nebo se skládat v Návrháři studia Azure Machine Learning prostřednictvím uživatelského rozhraní pro přetahování myší. Tento článek se zaměřuje na rozhraní příkazového řádku.

Požadavky

Navrhované předběžné předčítání

Vytvořte své první potrubí s komponentami

Nejprve vytvoříte kanál s komponentami pomocí příkladu. Tím získáte počáteční dojem na to, jak kanál a komponenta vypadají ve službě Azure Machine Learning.

cli/jobs/pipelines-with-components/basics V adresáři azureml-examples úložiště přejděte do 3b_pipeline_with_data podadresáře. V tomto adresáři jsou tři typy souborů. Toto jsou soubory, které potřebujete vytvořit pro vytvoření vlastního pipeline.

  • pipeline.yml. Tento soubor YAML definuje kanál strojového učení. Popisuje, jak rozdělit úlohu strojového učení na vícekrokový pracovní postup. Představte si například jednoduchou úlohu strojového učení, která používá historická data k trénování modelu prognózování prodeje. Můžete chtít vytvořit sekvenční pracovní postup, který obsahuje kroky zpracování dat, trénování modelu a vyhodnocení modelu. Každý krok je komponenta, která má dobře definované rozhraní a je možné ji nezávisle vyvíjet, testovat a optimalizovat. YAML pipeliny také definuje, jak se podřízené kroky připojují k ostatním krokům v pipelině. Například krok trénování modelu vygeneruje soubor modelu a soubor modelu se předá do kroku vyhodnocení modelu.

  • component.yml. Tyto soubory YAML definují komponenty. Obsahují následující informace:

    • Metadata: Název, zobrazovaný název, verze, popis, typ atd. Metadata pomáhají popsat a spravovat komponentu.
    • Rozhraní: Vstupy a výstupy. Například komponenta trénování modelu přebírá trénovací data a počet epoch jako vstup a vygeneruje trénovaný soubor modelu jako výstup. Po definování rozhraní můžou různé týmy vyvíjet a testovat komponentu nezávisle.
    • Příkaz, kód a prostředí: Příkaz, kód a prostředí pro spuštění komponenty. Příkazem je příkaz prostředí pro spuštění komponenty. Kód obvykle odkazuje na adresář zdrojového kódu. Prostředí může být prostředí Azure Machine Learning (kurátorované nebo vytvořené zákazníkem), image Dockeru nebo prostředí conda.
  • component_src. Toto jsou adresáře zdrojového kódu pro konkrétní komponenty. Obsahují zdrojový kód, který se spouští v komponentě. Můžete použít upřednostňovaný jazyk, včetně Pythonu, jazyka R a dalších. Kód musí být spuštěn příkazem v shellu. Zdrojový kód může z příkazového řádku prostředí přijmout několik vstupů pro řízení, jak se tento krok spouští. Například krok trénování může zahrnovat trénovací data, rychlost učení a počet iterací pro řízení procesu trénování. Argument příkazu prostředí slouží k předávání vstupů a výstupů kódu.

Teď vytvoříte kanál pomocí příkladu 3b_pipeline_with_data . Každý soubor je vysvětlen dále v následujících částech.

Nejprve pomocí následujícího příkazu vypíšete dostupné výpočetní prostředky:

az ml compute list

Pokud ho nemáte, vytvořte cluster volaný cpu-cluster spuštěním tohoto příkazu:

Poznámka:

Tento krok přeskočte, pokud chcete používat bezserverové výpočetní prostředky.

az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 10

Teď vytvořte úlohu kanálu definovanou v souboru pipeline.yml spuštěním následujícího příkazu. Na cílový výpočetní objekt se odkazuje v souboru pipeline.yml jako azureml:cpu-cluster. Pokud váš cílový výpočetní objekt používá jiný název, nezapomeňte ho aktualizovat v souboru pipeline.yml.

az ml job create --file pipeline.yml

Měli byste obdržet slovník JSON s informacemi o úloze v rámci pipeline, včetně následujících:

Klíč Popis
name Název úlohy založený na identifikátoru GUID.
experiment_name Název, pod kterým budou úlohy uspořádány ve studiu.
services.Studio.endpoint Adresa URL pro monitorování a kontrolu úlohy kanálu.
status Stav úlohy. Pravděpodobně to bude Preparing v tuto chvíli.

Přejděte na services.Studio.endpoint adresu URL a zobrazte vizualizaci kanálu:

Snímek obrazovky s vizualizací kanálu

Vysvětlení definice kanálu YAML

Teď se podíváte na definici kanálu v souboru 3b_pipeline_with_data/pipeline.yml .

Poznámka:

Pokud chcete používat bezserverové výpočetní prostředky, nahraďte default_compute: azureml:cpu-cluster ho default_compute: azureml:serverless v tomto souboru.

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

display_name: 3b_pipeline_with_data
description: Pipeline with 3 component jobs with data dependencies

settings:
  default_compute: azureml:cpu-cluster

outputs:
  final_pipeline_output:
    mode: rw_mount

jobs:
  component_a:
    type: command
    component: ./componentA.yml
    inputs:
      component_a_input: 
        type: uri_folder
        path: ./data

    outputs:
      component_a_output: 
        mode: rw_mount
  component_b:
    type: command
    component: ./componentB.yml
    inputs:
      component_b_input: ${{parent.jobs.component_a.outputs.component_a_output}}
    outputs:
      component_b_output: 
        mode: rw_mount
  component_c:
    type: command
    component: ./componentC.yml
    inputs:
      component_c_input: ${{parent.jobs.component_b.outputs.component_b_output}}
    outputs:
      component_c_output: ${{parent.outputs.final_pipeline_output}}
      #  mode: upload

Následující tabulka popisuje nejčastěji používaná pole schématu YAML kanálu. Další informace najdete v úplném schématu YAML kanálu.

Klíč Popis
type Povinný: Typ úlohy. Musí se jednat o pipeline úlohy potrubí.
display_name Zobrazovaný název pipelinové úlohy v uživatelském rozhraní Studio. Upravitelné v uživatelském rozhraní studia. Nemusí být jedinečný pro všechny úlohy v pracovním prostoru.
jobs Povinný: Slovník souboru jednotlivých úloh, které se mají spustit jako kroky v pipeline. Tyto úlohy jsou považovány za podřízené úlohy nadřazené úlohy kanálu. Ve stávající verzi jsou podporované typy úloh v datovém kanálu command a sweep.
inputs Slovník vstupů pro potrubní úlohu. Klíč je název vstupu v kontextu úlohy a hodnota je vstupní hodnota. Na tyto vstupy kanálu můžete odkazovat vstupy jednotlivých krokových úloh v kanálu pomocí výrazu ${{ parent.inputs.<input_name> }} .
outputs Slovník výstupních konfigurací úlohy v rámci zpracovatelského řetězce. Klíč je název výstupu v kontextu úlohy a hodnota je výstupní konfigurace. Na tyto výstupy potrubí můžete odkazovat pomocí výstupů jednotlivých kroků úloh v potrubí a výrazu ${{ parents.outputs.<output_name> }}.

Příklad 3b_pipeline_with_data obsahuje třístupňový kanál.

  • Tři kroky jsou definovány v části jobs. Všechny tři kroky jsou typu command. Definice každého kroku je v odpovídajícím component*.yml souboru. Soubory YAML komponenty můžete zobrazit v adresáři 3b_pipeline_with_data . componentA.yml je popsáno v další části.
  • Tento kanál má závislost na datech, což je běžné v reálných kanálech. Komponenta A přebírá vstup dat z místní složky pod ./data řádky 18–21 a předává výstup do komponenty B (řádek 29). Na výstup komponenty A lze odkazovat jako ${{parent.jobs.component_a.outputs.component_a_output}}.
  • default_compute definuje výchozí výpočet pro kanál. Pokud komponenta jobs definuje jiný výpočetní výkon, budou se respektovat nastavení specifická pro jednotlivé komponenty.

Snímek obrazovky kanálu s příkladem dat

Čtení a zápis dat v potrubí

Jedním z běžných scénářů je čtení a zápis dat v kanálu. Ve službě Azure Machine Learning použijete stejné schéma ke čtení a zápisu dat pro všechny typy úloh (úlohy kanálu, úlohy příkazů a úlohy úklidu). Tady jsou příklady použití dat v kanálech pro běžné scénáře:

Vysvětlení definice komponenty YAML

Tady je soubor componentA.yml , příklad YAML, který definuje komponentu:

$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
type: command

name: component_a
display_name: componentA
version: 1

inputs:
  component_a_input:
    type: uri_folder

outputs:
  component_a_output:
    type: uri_folder

code: ./componentA_src

environment: 
  image: python

command: >-
  python hello.py --componentA_input ${{inputs.component_a_input}} --componentA_output ${{outputs.component_a_output}}

Tato tabulka definuje nejčastěji používaná pole YAML komponenty. Další informace najdete ve schématu YAML úplné komponenty.

Klíč Popis
name Povinný: Název komponenty. Musí být jedinečný v rámci pracovního prostoru Azure Machine Learning. Musí začínat malým písmenem. Jsou povolená malá písmena, číslice a podtržítka (_). Maximální délka je 255 znaků.
display_name Zobrazovaný název komponenty v uživatelském rozhraní studia. Nemusí být v rámci pracovního prostoru jedinečný.
command Povinný: Příkaz, který se má spustit.
code Místní cesta k adresáři zdrojového kódu, který se má nahrát a použít pro komponentu.
environment Povinný: Prostředí, které se používá ke spuštění komponenty.
inputs Slovník vstupů komponent. Klíč je název vstupu v kontextu komponenty a hodnota je definice vstupu komponenty. V příkazu můžete odkazovat na vstupy pomocí výrazu ${{ inputs.<input_name> }}.
outputs Slovník výstupů komponent. Klíč je název výstupu v kontextu komponenty a hodnota je definice výstupu komponenty. Výstupy v příkazu můžete odkazovat pomocí výrazu ${{ outputs.<output_name> }} .
is_deterministic Jestli se má znovu použít výsledek předchozí úlohy, pokud se vstupy součástí nezmění. Výchozí hodnota je true. Toto nastavení se ve výchozím nastavení označuje také jako opakované použití. Běžným scénářem při nastavení false je vynucení opětovného načtení dat z cloudového úložiště nebo adresy URL.

V příkladu v 3b_pipeline_with_data/componentA.yml má komponenta A jeden vstup dat a jeden datový výstup, který je možné připojit k dalším krokům v nadřazeném potrubí. Všechny soubory v oddílu code v komponentě YAML se po odeslání úlohy kanálu nahrají do služby Azure Machine Learning. V tomto příkladu budou soubory pod ./componentA_src nahrány. (Řádek 16 v componentA.yml.) Nahraný zdrojový kód můžete zobrazit v uživatelském rozhraní studia: v grafu poklikejte na krok ComponentA a přejděte na kartu Kód , jak je znázorněno na následujícím snímku obrazovky. Vidíte, že se jedná o skript hello-world, který provádí jednoduchý výpis, a že zapíše aktuální datum a čas do souboru cesty componentA_output. Komponenta přebírá vstup a poskytuje výstup přes příkazový řádek. Zpracovává se v hello.py přes argparse.

Snímek obrazovky potrubí s příkladem dat. Zobrazuje komponentu A.

Vstup a výstup

Vstup a výstup definují rozhraní komponenty. Vstup a výstup mohou být literální hodnoty (typu string, number, integernebo ) nebo booleanobjekt, který obsahuje vstupní schéma.

Vstup objektu (typu uri_file, uri_folder, mltable, mlflow_model, nebo custom_model) se může připojit k dalším krokům v nadřazeném pipeline úkolu a předat data nebo modely dalším krokům. V grafu pipeline se vstup typu objektu vykreslí jako spojovací bod.

Vstupy literálových hodnot (string, number, integer, boolean) jsou parametry, které lze předat komponentě za běhu. Do pole můžete přidat výchozí hodnotu vstupů literálů default . Pro number a integer typy můžete také přidat minimální a maximální hodnoty pomocí min polí a max polí. Pokud je vstupní hodnota menší než minimum nebo větší než maximum, proces neuspěje při ověřování. Ověření se provádí před odesláním úlohy v rámci pipeline, což může ušetřit čas. Ověřování funguje pro rozhraní příkazového řádku, sadu Python SDK a uživatelské rozhraní Návrháře. Následující snímek obrazovky ukazuje příklad ověření v uživatelském rozhraní návrháře. Podobně můžete definovat povolené hodnoty v enum polích.

Snímek obrazovky se vstupem a výstupem komponenty modelu lineární regrese trénování

Pokud chcete do komponenty přidat vstup, musíte provést úpravy na třech místech:

  • Pole inputs v komponentě YAML.
  • Pole command v komponentě YAML.
  • Ve zdrojovém kódu komponenty pro zpracování vstupu příkazového řádku.

Tato umístění jsou označená zelenými poli na předchozím snímku obrazovky.

Další informace o vstupech a výstupech najdete v tématu Správa vstupů a výstupů pro komponenty a kanály.

Prostředí

Prostředí je prostředí, ve kterém komponenta běží. Může to být prostředí Azure Machine Learning (připravené nebo vlastní registrované), Docker image nebo prostředí conda. Podívejte se na následující příklady:

Registrace komponenty pro opakované použití a sdílení

I když jsou některé komponenty specifické pro konkrétní kanál, skutečný přínos součástí pochází z opakovaného použití a sdílení. Komponentu můžete zaregistrovat v pracovním prostoru Machine Learning, aby byla k dispozici pro opakované použití. Registrované komponenty podporují automatickou správu verzí, abyste mohli součást aktualizovat, ale ujistěte se, že kanály, které vyžadují starší verzi, budou i nadále fungovat.

V úložišti azureml-examples přejděte do cli/jobs/pipelines-with-components/basics/1b_e2e_registered_components adresáře.

Pokud chcete zaregistrovat komponentu, použijte příkaz az ml component create :

az ml component create --file train.yml
az ml component create --file score.yml
az ml component create --file eval.yml

Po dokončení těchto příkazů uvidíte komponenty ve Studiu, v části Assety>Komponenty:

Snímek obrazovky se sadou Studio Zobrazuje registrované komponenty.

Vyberte komponentu. Zobrazí se podrobné informace pro každou verzi komponenty.

Karta Podrobnosti zobrazuje základní informace, jako je název komponenty, kdo ho vytvořil, a verzi. Existují upravitelná pole pro značky a popis. Značky můžete použít k přidání klíčových slov hledání. Pole popisu podporuje formátování Markdownu. Měli byste ho použít k popisu funkčnosti a základního použití komponenty.

Na kartě Úlohy se zobrazí historie všech úloh, které tuto komponentu používají.

Použití registrovaných komponent v souboru YAML úlohy kanálu

Teď použijete 1b_e2e_registered_components jako příklad použití registrované komponenty v kanálu YAML. Přejděte do 1b_e2e_registered_components adresáře a otevřete pipeline.yml soubor. Klíče a hodnoty v inputs polích outputs jsou podobné těm, které už jsou popsány. Jediným významným rozdílem je hodnota component pole v jobs.<job_name>.component položkách. Hodnota component je ve formuláři azureml:<component_name>:<component_version>. Definice train-job například určuje, že se má použít nejnovější verze registrované komponenty my_train :

type: command
component: azureml:my_train@latest
inputs:
  training_data: 
    type: uri_folder 
    path: ./data      
  max_epocs: ${{parent.inputs.pipeline_job_training_max_epocs}}
  learning_rate: ${{parent.inputs.pipeline_job_training_learning_rate}}
  learning_rate_schedule: ${{parent.inputs.pipeline_job_learning_rate_schedule}}
outputs:
  model_output: ${{parent.outputs.pipeline_job_trained_model}}
services:
  my_vscode:

Správa komponent

Podrobnosti o komponentách a správu komponent můžete zkontrolovat pomocí rozhraní příkazového řádku v2. Slouží az ml component -h k získání podrobných pokynů k příkazům komponent. V následující tabulce jsou uvedeny všechny dostupné příkazy. Další příklady najdete v referenčních informacích k Azure CLI.

Příkaz Popis
az ml component create Vytvořte komponentu.
az ml component list Zobrazení seznamu komponent v pracovním prostoru
az ml component show Umožňuje zobrazit podrobnosti o komponentě.
az ml component update Aktualizujte součást. Pouze několik polí (popis, display_name) podporuje aktualizaci.
az ml component archive Archivace kontejneru komponenty
az ml component restore Obnovení archivované komponenty

Další krok