مشاركة عبر


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

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

  • تحميل العديد من ملفات بيانات الإدخال إلى حاوية كائن ثنائي كبير الحجم Azure Storage لاستخدامها في معالجة المهام الدفعية.
  • ينشئ مجموعة من جهازين ظاهريين (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 وحدده.
  2. في صفحة حساب الدفعة الخاصة بك، حدد مفاتيح من شريط التنقل الأيمن.
  3. في صفحة المفاتيح ، انسخ القيم التالية:
  • حساب الدفعة
  • نقطة نهاية الحساب
  • مفتاح الوصول الأساسي
  • اسم حساب التخزين
  • المفتاح1

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

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

مهم

لا يوصى بعرض مفاتيح الحساب في مصدر التطبيق لاستخدام الإنتاج. يجب تقييد الوصول إلى بيانات الاعتماد والرجوع إليها في التعليمات البرمجية باستخدام المتغيرات أو ملف التكوين. من الأفضل تخزين مفاتيح حساب الدفعات والتخزين في Azure Key Vault.

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

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

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

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

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

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

يرسل أسلوب pool.add التجمع إلى خدمة 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)

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

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

يستخدم التطبيق فئة JobAddParameter لإنشاء وظيفة في التجمع. تضيف الأسلوب job.add الوظيفة إلى حساب الدفعة المحدد. في البداية لا توجد مهام للوظيفة.

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

batch_service_client.job.add(job)

إنشاء مهام

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

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

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)

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

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

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)

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

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

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

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

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

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