التشغيل السريع: استخدم Python لإنشاء تجمع دفعات وتشغيل وظيفة

يوضح لك هذا التشغيل السريع كيفية بدء استخدام Azure Batch عن طريق تشغيل تطبيق يستخدم مكتبات Azure Batch ل Python. تطبيق Python:

  • تحميل العديد من ملفات بيانات الإدخال إلى حاوية كائن ثنائي كبير الحجم تخزين Azure لاستخدامها في معالجة المهام الدفعية.
  • ينشئ مجموعة من جهازين افتراضيين (VMs)، أو عقدتي حوسبة، تعمل بنظام Ubuntu 22.04 LTS.
  • إنشاء وظيفة وثلاث مهام لتشغيلها على العقد. تعالج كل مهمة أحد ملفات الإدخال باستخدام سطر أوامر Bash shell.
  • يعرض ملفات الإخراج التي ترجعها المهام.

بعد إكمال هذا التشغيل السريع، ستفهم المفاهيم الرئيسية لخدمة Batch وتكون جاهزا لاستخدام Batch مع أحمال عمل أكثر واقعية وأوسع نطاقا.

Prerequisites

تشغيل التطبيق

لإكمال هذا التشغيل السريع، يمكنك تنزيل تطبيق Python أو استنساخه، وتوفير قيم حسابك، وتشغيل التطبيق، والتحقق من الإخراج.

تنزيل التطبيق أو استنساخه

  1. قم بتنزيل تطبيق Azure Batch Python Quickstart أو استنساخه من GitHub. استخدم الأمر التالي لاستنساخ مستودع التطبيق باستخدام عميل Git:

    git clone https://github.com/Azure-Samples/batch-python-quickstart.git
    
  2. قم بالتبديل إلى المجلد batch-python-quickstart/src ، وقم بتثبيت الحزم المطلوبة باستخدام pip.

    pip install -r requirements.txt
    

تقديم معلومات حسابك

يحتاج تطبيق Python إلى استخدام أسماء حسابات Batch و Storage وقيم مفتاح الحساب ونقطة نهاية حساب Batch . يمكنك الحصول على هذه المعلومات من مدخل Microsoft Azure أو واجهات برمجة تطبيقات Azure أو أدوات سطر الأوامر.

للحصول على معلومات حسابك من مدخل Microsoft Azure:

  1. من شريط بحث Azure، ابحث عن اسم حساب Batch وحدده.
  • حساب الدفعة
  • نقطة نهاية الحساب
  • اسم حساب التخزين

في تطبيق Python الذي تم تنزيله، قم بتحرير السلاسل التالية في ملف config.py لتوفير القيم التي نسختها.

BATCH_ACCOUNT_NAME = '<batch account>'
BATCH_ACCOUNT_URL = '<account endpoint>'
STORAGE_ACCOUNT_NAME = '<storage account name>'

قم بتشغيل التطبيق وعرض الإخراج

قم بتشغيل التطبيق لرؤية سير عمل Batch قيد التنفيذ.

python python_quickstart_client.py

وقت التشغيل النموذجي حوالي ثلاث دقائق. يستغرق الإعداد الأولي لعقدة التجمع معظم الوقت.

يقوم التطبيق بإرجاع إخراج مشابه للمثال التالي:

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

هناك توقف مؤقت أثناء Monitoring all tasks for 'Completed' state, timeout in 00:30:00... بدء عقد الحوسبة في التجمع. عند إنشاء المهام، تضعها Batch في قائمة الانتظار لتشغيلها على التجمع. بمجرد توفر عقدة الحساب الأولى ، يتم تشغيل المهمة الأولى على العقدة. يمكنك مراقبة العقدة والمهمة وحالة الوظيفة من صفحة حساب Batch في مدخل Microsoft Azure.

بعد اكتمال كل مهمة، سترى إخراج مشابه للمثال التالي:

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

مراجعة الرمز

راجع التعليمات البرمجية لفهم الخطوات في التشغيل السريع ل Azure Batch Python.

إنشاء عملاء الخدمة وتحميل ملفات الموارد

  1. يقوم التطبيق بإنشاء كائن BlobServiceClient للتفاعل مع حساب التخزين.

    blob_service_client = BlobServiceClient(
            account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/",
            credential=DefaultAzureCredential()
        )
    
  2. يستخدم التطبيق المرجع blob_service_client لإنشاء حاوية في حساب التخزين وتحميل ملفات البيانات إلى الحاوية. يتم تعريف الملفات المخزنة على أنها كائنات مجمعة ResourceFile والتي يمكن لـ Batch تنزيلها لاحقاً إلى عقد الحساب.

    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. يقوم التطبيق بإنشاء كائن BatchClient لإنشاء وإدارة مجموعات التجمع والوظائف والمهام في حساب Batch (الحساب). يستخدم عميل Batch مصادقة Microsoft Entra.

    
        batch_client = BatchClient(
            endpoint=config.BATCH_ACCOUNT_URL,
            credential=DefaultAzureCredential())
    

قم بإنشاء مجموعة من العقد الحسابية

لإنشاء مجموعة دفعات، يستخدم التطبيق فئة BatchPoolCreateOptions لتعيين عدد العقد، حجم الآلة الافتراضية، وتكوين المجموعة. الكائن التالي VirtualMachineConfiguration يحدد صورة BatchVmImageReference إلى صورة Azure Marketplace لخادم أوبونتو 22.04 LTS. يدعم Batch مجموعة واسعة من صور Linux و Windows Server Marketplace ، ويدعم أيضا صور VM المخصصة.

وهما POOL_NODE_COUNTPOOL_VM_SIZE ثوابت محددة. يقوم التطبيق بإنشاء مجموعة من عقدتين Standard_DS1_v2 حجم. يوفر هذا الحجم توازنا جيدا بين الأداء مقابل التكلفة لهذا التشغيل السريع.

طريقة create_pool تقدم المجموعة إلى خدمة الدفعات.

new_pool = models.BatchPoolCreateOptions(
        id=pool_id,
        virtual_machine_configuration=models.VirtualMachineConfiguration(
            image_reference=models.BatchVmImageReference(
                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_client.create_pool(pool=new_pool)

إنشاء وظيفة دفعية

وظيفة الدفعة هي تجميع منطقي لمهمة واحدة أو أكثر. تتضمن المهمة الإعدادات الشائعة للمهام، مثل الأولوية والتجمع لتشغيل المهام عليها.

يستخدم التطبيق فئة BatchJobCreateOptions لإنشاء وظيفة في المجموعة. تضيف طريقة create_job المهمة إلى حساب الدفعة المحدد. في البداية لا توجد مهام للوظيفة.

job = models.BatchJobCreateOptions(
    id=job_id,
    pool_info=models.BatchPoolInfo(pool_id=pool_id))

batch_client.create_job(job=job)

إنشاء مهام

توفر Batch عدة طرق لنشر التطبيقات والبرامج النصية لحساب العقد. ينشئ هذا التطبيق قائمة بكائنات المهام باستخدام فئة BatchTaskCreateOptions . تعالج كل مهمة ملف إدخال باستخدام معلمة command_line لتحديد تطبيق أو برنامج نصي.

يعالج البرنامج النصي التالي كائنات الإدخال resource_files عن طريق تشغيل الأمر Bash shell cat لعرض الملفات النصية. ثم يستخدم التطبيق طريقة create_tasks لإضافة كل مهمة إلى المهمة، مما يصف المهام لتعمل على عقد الحوسبة.

tasks = []

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

batch_client.create_tasks(job_id=job_id, task_collection=tasks)

عرض إخراج المهام

يراقب التطبيق حالة المهمة للتأكد من اكتمال المهام. عند تشغيل كل مهمة بنجاح، يكتب إخراج أمر المهمة إلى ملف stdout.txt . يعرض التطبيق بعد ذلك ملف stdout.txt لكل مهمة مكتملة.

tasks = batch_client.list_tasks(job_id=job_id)

for task in tasks:

    node_id = batch_client.get_task(job_id=job_id, task_id=task.id).node_info.node_id
    print(f"Task: {task.id}")
    print(f"Node: {node_id}")

    stream = batch_client.download_task_file(
        job_id=job_id, task_id=task.id, file_path=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)

تنظيف الموارد

يقوم التطبيق تلقائيا بحذف حاوية التخزين التي يقوم بإنشائها، ويمنحك خيار حذف تجمع الدفعات والوظيفة. تتحمل التجمعات والعقد رسوما أثناء تشغيل العقد، حتى إذا لم تكن تشغل وظائف. إذا لم تعد بحاجة إلى التجمع ، فاحذفه.

عندما لا تحتاج إلى موارد الدفعة الخاصة بك، يمكنك حذف مجموعة الموارد التي تحتوي عليها. في مدخل Microsoft Azure، حدد حذف مجموعة الموارد في الجزء العلوي من صفحة مجموعة الموارد. في شاشة حذف مجموعة موارد ، أدخل اسم مجموعة الموارد، ثم حدد حذف.

الخطوات التالية

في هذا التشغيل السريع، قمت بتشغيل تطبيق يستخدم واجهة برمجة تطبيقات Batch Python لإنشاء تجمع دفعات وعقد ووظيفة ومهام. قامت المهمة بتحميل ملفات الموارد إلى حاوية تخزين، وتشغيل المهام على العقد، وعرض الإخراج من العقد.

الآن بعد أن فهمت المفاهيم الرئيسية لخدمة Batch، فأنت مستعد لاستخدام Batch مع أحمال عمل أكثر واقعية وأوسع نطاقا. لمعرفة المزيد حول Azure Batch والاطلاع على حمل عمل متوازي مع تطبيق من العالم الحقيقي، تابع إلى البرنامج التعليمي Batch Python.