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 22.04 LTS.
  • Vytvoří úlohu a tři úkoly, které se mají spustit na 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

Spuštění aplikace

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 z levého navigačního 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. Nastavení počátečního uzlu fondu zabere 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...

Je pauza ve Monitoring all tasks for 'Completed' state, timeout in 00:30:00..., zatímco se spouští výpočetní uzly fondu. Při vytváření úkolů je služba Batch zařadí do fronty, aby se spustily ve fondu. Jakmile bude k dispozici první výpočetní uzel, spustí se na uzlu první úloha. Stav uzlu, úkolu a úlohy můžete sledovat na stránce účtu Batch v 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í klientských služeb a nahrání souborů zdrojů

  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 sad, ú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 obsahuje odkaz na obrázek Ubuntu Serveru 22.04 LTS z Azure Marketplace. Batch podporuje širokou škálu obrazů pro Linux a Windows Server Marketplace a také podporuje vlastní obrazy virtuálních počítačů.

POOL_NODE_COUNT A POOL_VM_SIZE jsou definovány konstanty. Aplikace vytvoří fond o dvou uzlech Standard_DS1_v2. 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="22_04-lts",
                version="latest"
            ),
            node_agent_sku_id="batch.node.ubuntu 22.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 Batch je logické seskupení jednoho nebo více úkolů. Úloha zahrnuje nastavení společná pro jednotlivé úkoly, jako je priorita a pool, na kterém se úkoly spouštějí.

Aplikace používá třídu JobAddParameter k vytvoření úlohy v poolu. Metoda job.add přidá úlohu do zadaného účtu Batch. Zpočátku úloha nemá žá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í úkolů. Po úspěšném spuštění každé úlohy 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)

Uklidit zdroje

Aplikace automaticky odstraní kontejner úložiště, který vytvoří, a poskytne vám možnost odstranit fond a úlohu Batch. Za fondy a uzly se účtují poplatky, i když nejsou spuštěné úlohy, během jejich provozu. Pokud už pool 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 zdrojů do kontejneru úložiště, spustila úkoly na výpočetních uzlech a zobrazila výstupy z těchto 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.