Accelerate documentation

عملية التنفيذ

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

عملية التنفيذ

عند العمل مع أنظمة التدريب الموزّع، من المهم إدارة كيفية تنفيذ العمليات ومتى عبر وحدات معالجة الرسوميات (GPUs). بعض العمليات تُنجز أسرع من غيرها، وبعض العمليات لا ينبغي أن تبدأ إذا لم تكتمل عمليات أخرى بعد. يوفر Accelerate أدوات لتنسيق توقيت تنفيذ العمليات لضمان بقاء كل شيء متزامنًا عبر جميع الأجهزة.

ستعلّمك هذه الشرحية كيفية تنفيذ عملية على جهاز واحد فقط، وكيفية تأجيل التنفيذ حتى تصل جميع العمليات إلى نقطة معينة.

التنفيذ على عملية واحدة

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

البيانات
function

يجب عليك استخدام accelerator.is_local_main_process للإشارة إلى الأكواد التي ينبغي تنفيذها مرة واحدة فقط.

from tqdm.auto import tqdm

progress_bar = tqdm(range(args.max_train_steps), disable=not accelerator.is_local_main_process)

يمكنك أيضًا تضمين عبارة داخل accelerator.is_local_main_process.

بالنسبة إلى عبارات print المستقلة غير المغلفة بـ accelerator.is_local_main_process، استبدل print بطريقة print() الخاصة بـ Accelerate لطباعة النص مرة واحدة لكل عملية.

if accelerator.is_local_main_process:
    print("Accelerate is the best")

يمكنك أيضًا توجيه Accelerate لتنفيذ الكود مرة واحدة عبر جميع العمليات بغض النظر عن عدد الأجهزة. وهذا مفيد إذا كنت ترفع نموذجًا نهائيًا إلى Hub.

بيان
function

يجب عليك استخدام accelerator.is_main_process للإشارة إلى الأكواد التي ينبغي تنفيذها مرة واحدة فقط عبر جميع العمليات.

if accelerator.is_main_process:
    repo.push_to_hub()

التنفيذ على عملية محددة

يمكن لـ Accelerate أيضًا مساعدتك في تنفيذ الدوال التي يجب أن تُنفَّذ فقط على عملية محددة أو على فهرس عملية محلية.

عملية محددة
عملية محلية

استخدم طريقة on_process() وحدد فهرس العملية لتنفيذ دالة عليها.

@accelerator.on_process(process_index=0)
def do_my_thing():
    "Something done on process index 0"
    do_thing_on_index_zero()

تأجيل التنفيذ

عند تشغيل سكربت على عدة وحدات معالجة رسومية (GPU) في وقت واحد، قد يتم تنفيذ بعض الأكواد بشكل أسرع من غيرها. قد تحتاج إلى الانتظار حتى تصل جميع العمليات إلى نقطة معينة قبل تنفيذ مجموعة التعليمات التالية. على سبيل المثال، لا ينبغي لك حفظ النموذج قبل التأكد من أن كل عملية قد انتهت من التدريب.

لتنفيذ ذلك، أضف wait_for_everyone() في كودك. هذا يمنع جميع العمليات التي انتهت أولاً من المتابعة حتى تصل جميع العمليات المتبقية إلى نفس النقطة (لا يؤثر هذا الأمر إذا كنت تعمل على وحدة معالجة رسومات واحدة أو وحدة معالجة مركزية واحدة).

accelerator.wait_for_everyone()
Update on GitHub