Mulai cepat: Menggunakan Python untuk membuat kumpulan Batch dan menjalankan pekerjaan

Mulai cepat ini menunjukkan kepada Anda cara memulai Azure Batch dengan menjalankan aplikasi yang menggunakan pustaka Azure Batch untuk Python. Aplikasi Python:

  • Mengunggah beberapa file data input ke kontainer blob Azure Storage untuk digunakan untuk pemrosesan tugas Batch.
  • Membuat kumpulan dua komputer virtual (VM), atau simpul komputasi, menjalankan OS Ubuntu 20.04 LTS.
  • Membuat pekerjaan dan tiga tugas untuk dijalankan pada simpul. Setiap tugas memproses salah satu file input dengan menggunakan baris perintah shell Bash.
  • Menampilkan file output yang dikembalikan tugas.

Setelah Anda menyelesaikan mulai cepat ini, Anda memahami konsep utama layanan Batch dan siap menggunakan Batch dengan beban kerja skala yang lebih realistis dan lebih besar.

Prasyarat

Menjalankan aplikasi

Untuk menyelesaikan mulai cepat ini, Anda mengunduh atau mengkloning aplikasi Python, menyediakan nilai akun Anda, menjalankan aplikasi, dan memverifikasi output.

Mengunduh atau mengkloning aplikasi

  1. Unduh atau kloning aplikasi Mulai Cepat Azure Batch Python dari GitHub. Gunakan perintah berikut untuk mengkloning repositori aplikasi dengan klien Git:

    git clone https://github.com/Azure-Samples/batch-python-quickstart.git
    
  2. Beralih ke folder batch-python-quickstart/src , dan instal paket yang diperlukan dengan menggunakan pip.

    pip install -r requirements.txt
    

Berikan informasi akun Anda

Aplikasi Python perlu menggunakan nama akun Batch dan Storage, nilai kunci akun, dan titik akhir akun Batch Anda. Anda bisa mendapatkan informasi ini dari alat portal Azure, Azure API, atau baris perintah.

Untuk mendapatkan informasi akun Anda dari portal Azure:

  1. Dari bilah Pencarian Azure, cari dan pilih nama akun Batch Anda.
  2. Pada halaman akun Batch Anda, pilih Kunci dari navigasi kiri.
  3. Pada halaman Kunci , salin nilai berikut:
  • Akun batch
  • Titik akhir akun
  • Kunci akses utama
  • Nama akun penyimpanan
  • Key1

Di aplikasi Python yang diunduh, edit string berikut dalam file config.py untuk menyediakan nilai yang Anda salin.

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>'

Penting

Mengekspos kunci akun di sumber aplikasi tidak disarankan untuk penggunaan Produksi. Anda harus membatasi akses ke kredensial dan merujuknya dalam kode Anda dengan menggunakan variabel atau file konfigurasi. Yang terbaik adalah menyimpan kunci akun Batch dan Storage di Azure Key Vault.

Jalankan aplikasi dan lihat output

Jalankan aplikasi untuk melihat alur kerja Batch dalam tindakan.

python python_quickstart_client.py

Durasi umum adalah sekitar tiga menit. Penyiapan simpul kumpulan awal membutuhkan waktu paling lama.

Aplikasi mengembalikan output yang mirip dengan contoh berikut:

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...

Ada jeda saat Monitoring all tasks for 'Completed' state, timeout in 00:30:00... simpul komputasi kumpulan dimulai. Saat tugas dibuat, Batch mengantrekannya untuk dijalankan pada kumpulan. Segera setelah simpul komputasi pertama tersedia, tugas pertama berjalan pada simpul. Anda dapat memantau status simpul, tugas, dan pekerjaan dari halaman akun Batch Anda di portal Azure.

Setelah setiap tugas selesai, Anda akan melihat output yang mirip dengan contoh berikut:

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...

Mengulas kode

Tinjau kode untuk memahami langkah-langkah dalam Mulai Cepat Azure Batch Python.

Membuat klien layanan dan mengunggah file sumber daya

  1. Aplikasi ini membuat objek BlobServiceClient untuk berinteraksi dengan akun Storage.

    blob_service_client = BlobServiceClient(
            account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/",
            credential=config.STORAGE_ACCOUNT_KEY
        )
    
  2. Aplikasi ini menggunakan blob_service_client referensi untuk membuat kontainer di akun Storage dan mengunggah file data ke kontainer. File dalam penyimpanan didefinisikan sebagai objek Batch ResourceFile yang nantinya dapat diunduh Batch ke node komputasi.

    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. Aplikasi ini membuat objek BatchServiceClient untuk membuat dan mengelola kumpulan, pekerjaan, dan tugas di akun Batch. Klien Batch menggunakan autentikasi kunci bersama. Batch juga mendukung autentikasi Microsoft Entra.

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

Membuat kumpulan simpul komputasi

Untuk membuat kumpulan Batch, aplikasi menggunakan kelas PoolAddParameter untuk mengatur jumlah simpul, ukuran VM, dan konfigurasi kumpulan. Objek VirtualMachineConfiguration berikut menentukan ImageReference ke gambar Marketplace Azure Ubuntu Server 20.04 LTS. Batch mendukung berbagai gambar Linux dan Windows Server Marketplace, dan juga mendukung gambar VM kustom.

POOL_NODE_COUNT dan POOL_VM_SIZE merupakan konstanta yang ditentukan. Aplikasi ini membuat kumpulan dua ukuran Standard_DS1_v2 simpul. Ukuran ini menawarkan keseimbangan performa yang baik versus biaya untuk mulai cepat ini.

Metode pool.add mengirimkan kumpulan ke layanan 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)

Membuat pekerjaan Batch

Pekerjaan Batch adalah pengelompokan logis untuk satu atau lebih tugas. Pekerjaan ini mencakup pengaturan yang umum untuk tugas, seperti prioritas dan kumpulan untuk menjalankan tugas.

Aplikasi ini menggunakan kelas JobAddParameter untuk membuat pekerjaan di kumpulan. Metode job.add menambahkan pekerjaan ke akun Batch yang ditentukan. Awalnya pekerjaan tersebut tidak memiliki tugas.

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

batch_service_client.job.add(job)

Membuat tugas

Batch menyediakan sejumlah cara untuk menyebarkan aplikasi dan skrip ke node komputasi. Aplikasi ini membuat daftar objek tugas dengan menggunakan kelas TaskAddParameter . Setiap tugas memproses file input dengan menggunakan command_line parameter untuk menentukan aplikasi atau skrip.

Skrip berikut memproses objek input resource_files dengan menjalankan perintah shell cat Bash untuk menampilkan file teks. Aplikasi kemudian menggunakan metode task.add_collection untuk menambahkan setiap tugas ke pekerjaan, yang mengantrekan tugas untuk dijalankan pada simpul komputasi.

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)

Melihat output tugas

Aplikasi memantau status tugas untuk memastikan tugas selesai. Ketika setiap tugas berhasil dijalankan, output perintah tugas menulis ke file stdout.txt . Aplikasi kemudian menampilkan file stdout.txt untuk setiap tugas yang diselesaikan.

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)

Membersihkan sumber daya

Aplikasi secara otomatis menghapus kontainer penyimpanan yang dibuatnya, dan memberi Anda opsi untuk menghapus kumpulan dan pekerjaan Batch. Kumpulan dan simpul dikenakan biaya saat simpul berjalan, bahkan jika mereka tidak menjalankan pekerjaan. Jika Anda tidak lagi memerlukan kumpulan, hapus kumpulan tersebut.

Saat Anda tidak lagi memerlukan sumber daya Batch, Anda dapat menghapus grup sumber daya yang berisinya. Di portal Azure, pilih Hapus grup sumber daya di bagian atas halaman grup sumber daya. Pada layar Hapus grup sumber daya, masukkan nama grup sumber daya, lalu pilih Hapus.

Langkah berikutnya

Dalam mulai cepat ini, Anda menjalankan aplikasi yang menggunakan API Python Batch untuk membuat kumpulan Batch, simpul, pekerjaan, dan tugas. Pekerjaan mengunggah file sumber daya ke kontainer penyimpanan, menjalankan tugas pada simpul, dan menampilkan output dari simpul.

Sekarang setelah Anda memahami konsep utama layanan Batch, Anda siap untuk menggunakan Batch dengan beban kerja skala yang lebih realistis dan lebih besar. Untuk mempelajari selengkapnya tentang Azure Batch dan menelusuri beban kerja paralel dengan aplikasi dunia nyata, lanjutkan ke tutorial Batch Python.