التحديث (29/08/2023): تمت إضافة معيار H100 إلى منشور المدونة هذا. كما تم تحديث جميع أرقام الأداء بإصدارات أحدث من البرامج.
يحقق Optimum Habana v1.7 على Habana Gaudi2 سرعات x2.5 مقارنة بـ A100 وx1.4 مقارنة بـ H100 عند ضبط BridgeTower، وهو نموذج حديث للغة الرؤية. يعتمد تحسين الأداء هذا على تحميل البيانات المسرّعة بواسطة الأجهزة لتحقيق أقصى استفادة من أجهزتك.
تنطبق هذه التقنيات على أي أعباء عمل أخرى مقيدة بتحميل البيانات، وهو ما يحدث في كثير من الأحيان بالنسبة للعديد من أنواع نماذج الرؤية. سيأخذك هذا المنشور خلال العملية والمعيار الذي استخدمناه لمقارنة ضبط BridgeTower الدقيق على Habana Gaudi2 وNvidia H100 وNvidia A100 80GB. ويوضح أيضًا مدى سهولة الاستفادة من هذه الميزات في النماذج القائمة على المحولات.
برج الجسر
في الماضي القريب، اكتسبت نماذج لغة الرؤية (VL) أهمية هائلة وأظهرت هيمنتها في مجموعة متنوعة من مهام لغة الرؤية (VL). تستفيد معظم الأساليب الشائعة من أدوات التشفير أحادية الوسائط لاستخراج التمثيلات من الطرائق الخاصة بها. ثم يتم دمج هذه التمثيلات معًا، أو يتم إدخالها في برنامج تشفير متعدد الوسائط. للتعامل بكفاءة مع بعض القيود والقيود على الأداء في تعلم تمثيل VL، يقدم BridgeTower العديد من القيود طبقات الجسر التي تبني اتصالاً بين الطبقات العليا لأجهزة التشفير أحادية الوسائط وكل طبقة من أجهزة التشفير متعددة الوسائط. يتيح ذلك محاذاة فعالة عبر الوسائط من الأسفل إلى الأعلى والاندماج بين التمثيلات المرئية والنصية على مستويات دلالية مختلفة في برنامج التشفير عبر الوسائط.
تم تدريب BridgeTower مسبقًا باستخدام صور بحجم 4M فقط (انظر التفاصيل أدناه)، ويحقق أداءً متطورًا في العديد من مهام لغة الرؤية النهائية. على وجه الخصوص، يحقق BridgeTower دقة تبلغ 78.73% في مجموعة اختبار VQAv2، متفوقًا على النموذج المتطور السابق (METER) بنسبة 1.09% باستخدام نفس بيانات التدريب المسبق ومعلمات إضافية وتكاليف حسابية لا تذكر تقريبًا. ومن الجدير بالذكر أنه عند توسيع نطاق النموذج بشكل أكبر، يحقق BridgeTower دقة تبلغ 81.15%، متجاوزًا النماذج التي تم تدريبها مسبقًا على مجموعات بيانات أكبر حجمًا.
الأجهزة
NVIDIA H100 Tensor Core GPU هو أحدث وأسرع جيل من وحدات معالجة الرسومات Nvidia. يتضمن محرك محول مخصصًا يتيح تنفيذ عمليات تشغيل fp8 ذات الدقة المختلطة. جهاز واحد لديه 80 جيجابايت من الذاكرة.
تتضمن وحدة معالجة الرسوميات Nvidia A100 Tensor Core الجيل الثالث من تقنية Tensor Core. لا يزال هذا هو أسرع GPU الذي ستجده لدى معظم موفري الخدمات السحابية. نستخدم هنا متغير الذاكرة سعة 80 جيجابايت والذي يوفر أيضًا نطاق ترددي أسرع للذاكرة من الإصدار الذي تبلغ سعته 40 جيجابايت.
Habana Gaudi2 هو مسرع أجهزة الذكاء الاصطناعي من الجيل الثاني الذي صممته Habana Labs. يحتوي الخادم الواحد على 8 أجهزة تسريع تسمى HPUs بذاكرة تبلغ 96 جيجابايت لكل منها. راجع منشور مدونتنا السابق للحصول على مقدمة أكثر تفصيلاً ودليل يوضح كيفية الوصول إليها من خلال Intel Developer Cloud. على عكس العديد من مسرعات الذكاء الاصطناعي في السوق، من السهل جدًا تطبيق الميزات المتقدمة لتحقيق أقصى استفادة من Gaudi2 مع Optimum Habana، الذي يمكّن المستخدمين من نقل البرامج النصية المتوافقة مع Transformers إلى Gaudi بمجرد تغيير سطرين.
المعيار
لقياس التدريب، سنقوم بضبط نقطة تفتيش BridgeTower الكبيرة التي تتكون من 866 مليون معلمة. تم تدريب نقطة التحقق هذه مسبقًا على اللغة الإنجليزية باستخدام نمذجة اللغة المقنعة، ومطابقة نص الصورة وفقدان التباين بين نص الصورة في التسميات التوضيحية المفاهيمية، والتسميات التوضيحية لـ SBU، والتسميات التوضيحية لـ MSCOCO، والجينوم المرئي.
سنقوم بتحسين نقطة التحقق هذه بشكل أكبر في مجموعة بيانات مسابقة New Yorker Caption Contest والتي تتكون من رسوم كاريكاتورية من The New Yorker والتسميات التوضيحية الأكثر تصويتًا.
المعلمات الفائقة هي نفسها لجميع المسرعات. استخدمنا حجم دفعة من 48 عينة لكل جهاز. يمكنك التحقق من المعلمات الفائقة هنا لـ Gaudi2 وهناك لـ A100.
عند التعامل مع مجموعات البيانات التي تتضمن صورًا، غالبًا ما يكون تحميل البيانات بمثابة عنق الزجاجة لأنه يتم حساب العديد من العمليات المكلفة على وحدة المعالجة المركزية (فك تشفير الصور، تكبير الصور) ثم يتم إرسال الصور الكاملة إلى أجهزة التدريب. من الناحية المثالية، نود إرسال وحدات البايت الأولية فقط إلى الأجهزة ثم إجراء فك التشفير وتحويلات الصور المختلفة على الجهاز. ولكن دعونا نرى أولا كيف بسهولة تخصيص المزيد من الموارد لتحميل البيانات لتسريع عمليات التشغيل الخاصة بك.
الاستفادة من dataloader_num_workers
عندما يتم تحميل الصور على وحدة المعالجة المركزية، فإن إحدى الطرق السريعة لتسريعها هي تخصيص المزيد من العمليات الفرعية لتحميل البيانات. من السهل جدًا القيام بذلك باستخدام Transformers TrainingArguments (أو نظيره هافانا الأمثل GaudiTrainingArguments): يمكنك استخدام dataloader_num_workers=N وسيطة لتعيين عدد العمليات الفرعية (N) المخصصة على وحدة المعالجة المركزية لتحميل البيانات.
القيمة الافتراضية هي 0، مما يعني أنه يتم تحميل البيانات في العملية الرئيسية. قد لا يكون هذا هو الأمثل لأن العملية الرئيسية لديها أشياء كثيرة يجب إدارتها. يمكننا ضبطه على 1 للحصول على عملية فرعية مخصصة بالكامل لتحميل البيانات. عندما يتم تخصيص عدة عمليات فرعية، ستكون كل واحدة منها مسؤولة عن إعداد الدفعة. وهذا يعني أن استهلاك ذاكرة الوصول العشوائي (RAM) سيزداد مع زيادة عدد العاملين. قد تكون إحدى التوصيات هي تعيينه على عدد مراكز وحدة المعالجة المركزية، ولكن هذه النوى قد لا تكون مجانية بالكامل لذا سيتعين عليك تجربتها للعثور على أفضل تكوين.
لنجري التجارب الثلاثة التالية:
- دقة مختلطة (bfloat16/float32) يتم توزيعها على 8 أجهزة حيث يتم تحميل البيانات بنفس العملية مثل كل شيء آخر (على سبيل المثال
dataloader_num_workers=0) - دقة مختلطة (bfloat16/float32) يتم تشغيلها موزعة على 8 أجهزة مع عملية فرعية واحدة مخصصة لتحميل البيانات (على سبيل المثال
dataloader_num_workers=1) - نفس المدى مع
dataloader_num_workers=2
فيما يلي الإنتاجية التي حصلنا عليها على Gaudi2 وH100 وA100:
| جهاز | dataloader_num_workers=0 |
dataloader_num_workers=1 |
dataloader_num_workers=2 |
|---|---|---|---|
| غاودي2 HPU | 601.5 عينة/ثانية | 747.4 عينة/ثانية | 768.7 عينة/ثانية |
| وحدة معالجة الرسومات H100 | 336.5 عينة/ثانية | 580.1 عينة/ثانية | 602.1 عينة/ثانية |
| وحدة معالجة الرسومات A100 | 227.5 عينة/ثانية | 339.7 عينة/ثانية | 345.4 عينة/ثانية |
نحن نرى ذلك أولاً Gaudi2 أسرع بمقدار 1.28 مرة من H100 مع dataloader_num_workers=2، x1.29 أسرع مع dataloader_num_workers=1 وx1.79 أسرع مع dataloader_num_workers=0. يعد Gaudi2 أيضًا أسرع بكثير من الجيل السابق لأنه كذلك x2.23 أسرع من A100 مع dataloader_num_workers=2، x2.20 أسرع مع dataloader_num_workers=1 وx2.64 أسرع مع dataloader_num_workers=0، وهو أفضل من عمليات التسريع التي أبلغنا عنها سابقًا!
ثانياً، نرى ذلك يمكن أن يؤدي تخصيص المزيد من الموارد لتحميل البيانات إلى عمليات تسريع سهلة: x1.28 على Gaudi2، x1.79 على H100 وx1.52 على A100.
لقد أجرينا أيضًا تجارب على العديد من العمليات الفرعية المخصصة لتحميل البيانات ولكن الأداء لم يكن أفضل من ذلك dataloader_num_workers=2 لجميع المسرعات. هكذا، استخدام dataloader_num_workers>0 عادةً ما تكون هذه طريقة أولى جيدة لتسريع عمليات الجري التي تتضمن الصور!
يمكن تصور سجلات Tensorboard هنا لـ Gaudi2 وهناك لـ A100.
تحميل البيانات المسرّعة بواسطة الأجهزة باستخدام Optimum Habana
للحصول على عمليات تسريع أكبر، سنقوم الآن بنقل أكبر عدد ممكن من عمليات تحميل البيانات من وحدة المعالجة المركزية إلى أجهزة التسريع (أي وحدات HPU على Gaudi2 أو وحدات معالجة الرسومات على A100/H100). يمكن القيام بذلك على Gaudi2 باستخدام خط أنابيب الوسائط الخاص بـ Habana.
بالنظر إلى مجموعة البيانات، تتبع معظم أدوات تحميل البيانات الوصفة التالية:
- جلب البيانات (على سبيل المثال، مكان تخزين صور JPEG على القرص)
- تقرأ وحدة المعالجة المركزية الصور المشفرة
- تقوم وحدة المعالجة المركزية بفك تشفير الصور
- تطبق وحدة المعالجة المركزية تحويلات الصور على الصور المعززة
- وأخيرًا، يتم إرسال الصور إلى الأجهزة (على الرغم من أن أداة تحميل البيانات نفسها لا تفعل ذلك عادةً)
بدلاً من تنفيذ العملية بأكملها على وحدة المعالجة المركزية وإرسال بيانات جاهزة للتدريب إلى الأجهزة، سيكون سير العمل الأكثر كفاءة هو إرسال الصور المشفرة إلى الأجهزة أولاً ثم تنفيذ فك تشفير الصور وتعزيزاتها:
- نفس ما كان عليه من قبل
- نفس ما كان عليه من قبل
- يتم إرسال الصور المشفرة إلى الأجهزة
- أجهزة فك تشفير الصور
- تطبق الأجهزة تحويلات الصور لتكبير الصور
وبهذه الطريقة يمكننا الاستفادة من القوة الحاسوبية لأجهزتنا لتسريع فك تشفير الصور وتحويلاتها. لاحظ أن هناك تحذيرين يجب الانتباه إليهما عند القيام بذلك:
- سيزداد استهلاك ذاكرة الجهاز، لذا قد تضطر إلى تقليل حجم الدفعة إذا لم تكن هناك ذاكرة خالية كافية. وهذا قد يخفف من التسارع الناتج عن هذا النهج.
- إذا تم استخدام الأجهزة بشكل مكثف (100% أو ما يقرب من ذلك) عند القيام بتحميل البيانات على وحدة المعالجة المركزية، فلا تتوقع أي تسريع عند القيام بذلك على الأجهزة لأن أيديهم مشغولة بالفعل.
لتنفيذ ذلك على Gaudi2، قمنا بتغطيتك: يوفر مثال نص الصورة المتباين في Optimum Habana الآن خط أنابيب وسائط جاهز للاستخدام يمكنك استخدامه مع مجموعات البيانات المشابهة لـ COCO والتي تحتوي على نصوص وصور! سيكون عليك فقط أن تضيف --mediapipe_dataloader لأمرك لاستخدامه.
بالنسبة للقراء المهتمين، توجد نظرة عامة على المستوى الأدنى في وثائق Gaudi هنا وتتوفر قائمة بجميع المشغلين المدعومين هناك.
سنقوم الآن بإعادة إجراء التجارب السابقة بإضافة mediapipe_dataloader حجة لأنه متوافق مع dataloader_num_workers:
| جهاز | dataloader_num_workers=0 |
dataloader_num_workers=2 |
dataloader_num_workers=2 + mediapipe_dataloader |
|---|---|---|---|
| غاودي2 HPU | 601.5 عينة/ثانية | 768.7 عينة/ثانية | 847.7 عينة/ثانية |
| وحدة معالجة الرسومات H100 | 336.5 عينة/ثانية | 602.1 عينة/ثانية | / |
| وحدة معالجة الرسومات A100 | 227.5 عينة/ثانية | 345.4 عينة/ثانية | / |
لقد حصلنا على تسريع إضافي بمقدار x1.10 مقارنةً بالتشغيل السابق dataloader_num_workers=2 فقط. وبالتالي فإن هذا التشغيل النهائي أسرع بمقدار 1.41 مرة من تشغيلنا الأساسي على Gaudi2 ما عليك سوى إضافة وسيطتين تدريبيتين جاهزتين للاستخدام. إنه كذلك x1.41 أسرع من H100 و x2.45 أسرع من A100 مع dataloader_num_workers=2!
إعادة إنتاج هذا المعيار
لإعادة إنتاج هذا المعيار، تحتاج أولاً إلى الوصول إلى Gaudi2 من خلال Intel Developer Cloud (راجع هذا الدليل لمزيد من المعلومات).
بعد ذلك، تحتاج إلى تثبيت أحدث إصدار من Optimum Habana وتشغيله run_bridgetower.py والتي يمكنك العثور عليها هنا. إليك كيفية القيام بذلك:
pip install optimum[habana]
git clone https://github.com/huggingface/optimum-habana.git
cd optimum-habana/examples/contrastive-image-text
pip install -r requirements.txt
سطر الأوامر الأساسي لتشغيل البرنامج النصي هو:
python ../gaudi_spawn.py --use_mpi --world_size 8 run_bridgetower.py \
--output_dir /tmp/bridgetower-test \
--model_name_or_path BridgeTower/bridgetower-large-itm-mlm-itc \
--dataset_name jmhessel/newyorker_caption_contest --dataset_config_name matching \
--dataset_revision 3c6c4f6c0ff7e902833d3afa5f8f3875c2b036e6 \
--image_column image --caption_column image_description \
--remove_unused_columns=False \
--do_train --do_eval --do_predict \
--per_device_train_batch_size="40" --per_device_eval_batch_size="16" \
--num_train_epochs 5 \
--learning_rate="1e-5" \
--push_to_hub --report_to tensorboard --hub_model_id bridgetower\
--overwrite_output_dir \
--use_habana --use_lazy_mode --use_hpu_graphs_for_inference --gaudi_config_name Habana/clip \
--throughput_warmup_steps 3 \
--logging_steps 10
الذي يتوافق مع هذه القضية --dataloader_num_workers 0. يمكنك بعد ذلك إضافة --dataloader_num_workers N و --mediapipe_dataloader لاختبار التكوينات الأخرى.
لدفع نموذجك وسجلات Tensorboard إلى Hugging Face Hub، سيتعين عليك تسجيل الدخول إلى حسابك مسبقًا باستخدام:
huggingface-cli login
بالنسبة لـ A100 وH100، يمكنك استخدام نفس الشيء run_bridgetower.py البرنامج النصي مع بعض التغييرات الصغيرة:
- يستبدل
GaudiTrainerوGaudiTrainingArgumentsمعTrainerوTrainingArgumentsمن المحولات - إزالة المراجع إلى
GaudiConfig,gaudi_configوHabanaDataloaderTrainer - يستورد
set_seedمباشرة من المحولات:from transformers import set_seed
تم الحصول على النتائج المعروضة في هذا المعيار باستخدام مثيل Nvidia H100 Lambda ومثيل Nvidia A100 80GB GCP مع 8 أجهزة تستخدم صور Nvidia’s Docker.
لاحظ أن --mediapipe_dataloader متوافق مع Gaudi2 فقط ولن يعمل مع A100/H100.
فيما يتعلق بنتائج fp8 على H100 باستخدام Transformer Engine، فهي غير متوفرة بسبب تعطل الكود وسيتطلب تعديل نموذج BridgeTower في Transformers. سنعيد النظر في هذه المقارنة عندما يتم دعم fp8 على Gaudi2.
خاتمة
عند التعامل مع الصور، قدمنا حلين لتسريع سير عمل التدريب: تخصيص المزيد من الموارد لمحمل البيانات، وفك تشفير الصور وزيادتها مباشرة على أجهزة التسريع بدلاً من وحدة المعالجة المركزية. لقد أظهرنا أن ذلك يؤدي إلى تسريع كبير عند تدريب نموذج لغة الرؤية SOTA مثل BridgeTower: Habana Gaudi2 مع Optimum Habana أسرع بحوالي x1.4 من Nvidia H100 وأسرع x2.5 من Nvidia A100 80GB مع Transformers!
وهذا سهل الاستخدام للغاية حيث تحتاج فقط إلى توفير بعض الحجج التدريبية الإضافية.
للمضي قدمًا، نتطلع إلى استخدام الرسوم البيانية HPU لنماذج التدريب بشكل أسرع وتقديم كيفية استخدام DeepSpeed ZeRO-3 على Gaudi2 لتسريع تدريب طلاب LLM الخاصين بك. ابقوا متابعين!
إذا كنت مهتمًا بتسريع تدريب التعلم الآلي وسير عمل الاستدلال باستخدام أحدث مسرعات أجهزة الذكاء الاصطناعي ومكتبات البرامج، فاطلع على برنامج تسريع الخبراء الخاص بنا. لمعرفة المزيد عن حلول Habana، اقرأ عن شراكتنا واتصل بهم هنا. لمعرفة المزيد حول جهود Hugging Face لجعل مسرعات أجهزة الذكاء الاصطناعي سهلة الاستخدام، راجع برنامج شركاء الأجهزة الخاص بنا.
موضوعات ذات صلة