Sdílet prostřednictvím


Rychlý start: Použití Pythonu k vytvoření fondu služby Batch a spuštění úlohy

V tomto rychlém startu se dozvíte, jak začít se službou Azure Batch spuštěním aplikace, která používá knihovny Azure Batch pro Python. Aplikace v Pythonu:

  • Nahraje několik vstupních datových souborů do kontejneru objektů blob služby Azure Storage, který se použije ke zpracování úloh Batch.
  • Vytvoří fond dvou virtuálních počítačů nebo výpočetních uzlů se systémem Ubuntu 20.04 LTS.
  • Vytvoří úlohu a tři úkoly ke spuštění v uzlech. Každý úkol zpracovává jeden ze vstupních souborů pomocí příkazového řádku prostředí Bash.
  • Zobrazí výstupní soubory, které úkoly vrátí.

Po dokončení tohoto rychlého startu rozumíte klíčovým konceptům služby Batch a jste připraveni službu Batch používat s realističtějšími a většími úlohami škálování.

Požadavky

Spustit aplikaci

K dokončení tohoto rychlého startu si stáhnete nebo naklonujete aplikaci Python, zadáte hodnoty účtu, spustíte aplikaci a ověříte výstup.

Stažení nebo klonování aplikace

  1. Stáhněte nebo naklonujte aplikaci Rychlý start pro Azure Batch Python z GitHubu. Pomocí následujícího příkazu naklonujte úložiště aplikace pomocí klienta Git:

    git clone https://github.com/Azure-Samples/batch-python-quickstart.git
    
  2. Přepněte do složky batch-python-quickstart/src a nainstalujte požadované balíčky pomocí pip.

    pip install -r requirements.txt
    

Zadejte informace o svém účtu.

Aplikace v Pythonu musí používat názvy účtů Batch a Storage, hodnoty klíče účtu a koncový bod účtu Batch. Tyto informace můžete získat z webu Azure Portal, rozhraní API Azure nebo nástrojů příkazového řádku.

Získání informací o účtu z webu Azure Portal:

  1. Na panelu Azure Search vyhledejte a vyberte název účtu Batch.
  2. Na stránce účtu Batch vyberte v levém navigačním panelu klíče .
  3. Na stránce Klíče zkopírujte následující hodnoty:
  • Účet Batch
  • Koncový bod účtu
  • Primární přístupový klíč
  • Název účtu úložiště
  • Klíč1

Ve stažené aplikaci v Pythonu upravte následující řetězce v souboru config.py a zadejte hodnoty, které jste zkopírovali.

BATCH_ACCOUNT_NAME = '<batch account>'
BATCH_ACCOUNT_KEY = '<primary access key>'
BATCH_ACCOUNT_URL = '<account endpoint>'
STORAGE_ACCOUNT_NAME = '<storage account name>'
STORAGE_ACCOUNT_KEY = '<key1>'

Důležité

Zveřejnění klíčů účtu ve zdroji aplikace se nedoporučuje pro produkční využití. Měli byste omezit přístup k přihlašovacím údajům a odkazovat na ně v kódu pomocí proměnných nebo konfiguračního souboru. Nejlepší je ukládat klíče účtu Batch a Storage ve službě Azure Key Vault.

Spuštění aplikace a zobrazení výstupu

Spuštěním aplikace zobrazíte pracovní postup Batch v akci.

python python_quickstart_client.py

Typická doba běhu je přibližně tři minuty. Instalace počátečního uzlu fondu trvá nejvíce času.

Aplikace vrátí výstup podobný následujícímu příkladu:

Sample start: 11/26/2012 4:02:54 PM

Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [PythonQuickstartPool]...
Creating job [PythonQuickstartJob]...
Adding 3 tasks to job [PythonQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...

Během spuštění výpočetních uzlů fondu se zastaví Monitoring all tasks for 'Completed' state, timeout in 00:30:00... . Při vytváření úkolů je Služba Batch zařadí do fronty, aby běžela ve fondu. Jakmile bude k dispozici první výpočetní uzel, spustí se na uzlu první úloha. Stav uzlu, úkolu a úlohy můžete monitorovat na stránce účtu Batch na webu Azure Portal.

Po dokončení každého úkolu se zobrazí výstup podobný následujícímu příkladu:

Printing task output...
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard output:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...

Kontrola kódu

Projděte si kód a seznamte se s kroky v rychlém startu pro Azure Batch Python.

Vytvoření klientů služeb a nahrání souborů prostředků

  1. Aplikace vytvoří objekt BlobServiceClient pro interakci s účtem úložiště.

    blob_service_client = BlobServiceClient(
            account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/",
            credential=config.STORAGE_ACCOUNT_KEY
        )
    
  2. Aplikace používá blob_service_client odkaz k vytvoření kontejneru v účtu úložiště a nahrání datových souborů do kontejneru. Soubory v úložišti jsou definované jako objekty ResourceFile služby Batch, které může služba Batch později stáhnout do výpočetních uzlů.

    input_file_paths = [os.path.join(sys.path[0], 'taskdata0.txt'),
                        os.path.join(sys.path[0], 'taskdata1.txt'),
                        os.path.join(sys.path[0], 'taskdata2.txt')]
    
    input_files = [
        upload_file_to_container(blob_service_client, input_container_name, file_path)
        for file_path in input_file_paths]
    
  3. Aplikace vytvoří objekt BatchServiceClient pro vytváření a správu fondů, úloh a úkolů v účtu Batch. Klient Batch používá ověřování pomocí sdíleného klíče. Batch také podporuje ověřování Microsoft Entra.

    credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME,
            config.BATCH_ACCOUNT_KEY)
    
        batch_client = BatchServiceClient(
            credentials,
            batch_url=config.BATCH_ACCOUNT_URL)
    

Vytvoření fondu výpočetních uzlů

K vytvoření fondu Batch používá aplikace třídu PoolAddParameter k nastavení počtu uzlů, velikosti virtuálního počítače a konfigurace fondu. Následující objekt VirtualMachineConfiguration určuje ImageReference na image Ubuntu Server 20.04 LTS Azure Marketplace. Batch podporuje širokou škálu imagí z Linuxu a Windows Serveru Marketplace a podporuje také vlastní image virtuálních počítačů.

POOL_VM_SIZE A POOL_NODE_COUNT jsou definovány konstanty. Aplikace vytvoří fond dvou velikostí Standard_DS1_v2 uzly. Tato velikost nabízí dobrou rovnováhu mezi výkonem a náklady na tento rychlý start.

Metoda pool.add odešle fond do služby Batch.

new_pool = batchmodels.PoolAddParameter(
        id=pool_id,
        virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
            image_reference=batchmodels.ImageReference(
                publisher="canonical",
                offer="0001-com-ubuntu-server-focal",
                sku="20_04-lts",
                version="latest"
            ),
            node_agent_sku_id="batch.node.ubuntu 20.04"),
        vm_size=config.POOL_VM_SIZE,
        target_dedicated_nodes=config.POOL_NODE_COUNT
    )
    batch_service_client.pool.add(new_pool)

Vytvoření úlohy Batch

Úloha služby Batch je logická skupina jednoho nebo víc úkolů. Úloha zahrnuje nastavení společná pro úkoly, jako je priorita a fond pro spouštění úkolů.

Aplikace používá JobAddParameter třídy k vytvoření úlohy ve fondu. Metoda job.add přidá úlohu do zadaného účtu Batch. Na začátku úloha neobsahuje žádné úkoly.

job = batchmodels.JobAddParameter(
    id=job_id,
    pool_info=batchmodels.PoolInformation(pool_id=pool_id))

batch_service_client.job.add(job)

Vytvoření úkolů

Služba Batch nabízí několik způsobů nasazení aplikací a skriptů do výpočetních uzlů. Tato aplikace vytvoří seznam objektů úkolů pomocí TaskAddParameter třídy. Každý úkol zpracovává vstupní soubor pomocí parametru command_line k určení aplikace nebo skriptu.

Následující skript zpracuje vstupní resource_files objekty spuštěním příkazu prostředí cat Bash k zobrazení textových souborů. Aplikace pak pomocí metody task.add_collection přidá každou úlohu do úlohy, která zařadí úkoly do fronty ke spuštění na výpočetních uzlech.

tasks = []

for idx, input_file in enumerate(resource_input_files):
    command = f"/bin/bash -c \"cat {input_file.file_path}\""
    tasks.append(batchmodels.TaskAddParameter(
        id=f'Task{idx}',
        command_line=command,
        resource_files=[input_file]
    )
    )

batch_service_client.task.add_collection(job_id, tasks)

Zobrazení výstupu úkolu

Aplikace monitoruje stav úlohy, aby se zajistilo dokončení úloh. Po úspěšném spuštění každého úkolu se výstup příkazu úlohy zapíše do stdout.txt souboru. Aplikace pak zobrazí stdout.txt soubor pro každý dokončený úkol.

tasks = batch_service_client.task.list(job_id)

for task in tasks:

    node_id = batch_service_client.task.get(job_id, task.id).node_info.node_id
    print(f"Task: {task.id}")
    print(f"Node: {node_id}")

    stream = batch_service_client.file.get_from_task(
        job_id, task.id, config.STANDARD_OUT_FILE_NAME)

    file_text = _read_stream_as_string(
        stream,
        text_encoding)

    if text_encoding is None:
        text_encoding = DEFAULT_ENCODING

    sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = text_encoding)
    sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = text_encoding)

    print("Standard output:")
    print(file_text)

Vyčištění prostředků

Aplikace automaticky odstraní kontejner úložiště, který vytvoří, a dá vám možnost odstranit fond a úlohu služby Batch. Za spuštěné uzly a fondy se účtují poplatky, i když nejsou spuštěné úlohy. Pokud už fond nepotřebujete, odstraňte ho.

Pokud už prostředky služby Batch nepotřebujete, můžete odstranit skupinu prostředků, která je obsahuje. Na webu Azure Portal vyberte v horní části stránky skupiny prostředků možnost Odstranit skupinu prostředků. Na obrazovce Odstranit skupinu prostředků zadejte název skupiny prostředků a pak vyberte Odstranit.

Další kroky

V tomto rychlém startu jste spustili aplikaci, která používá rozhraní API Batch Pythonu k vytvoření fondu, uzlů, úloh a úkolů batch. Úloha nahrála soubory prostředků do kontejneru úložiště, spustila úkoly na uzlech a zobrazila výstup z uzlů.

Teď, když rozumíte klíčovým konceptům služby Batch, jste připraveni službu Batch používat s realističtějšími a většími škálovacími úlohami. Pokud chcete získat další informace o službě Azure Batch a projít si paralelní úlohu pomocí reálné aplikace, pokračujte kurzem k Batch Pythonu.