Accelerate documentation
مقدّر ذاكرة النموذج
مقدّر ذاكرة النموذج
من أصعب الجوانب عند استكشاف النماذج المحتملة للاستخدام على جهازك هو معرفة حجم النموذج الذي يمكن أن يتسع في الذاكرة مع جهازك الحالي (مثل تحميل النموذج على CUDA أو XPU).
لمساعدتكم في التخفيف من هذه المشكلة، يوفر Accelerate واجهة سطر أوامر عبر accelerate estimate-memory. سيُساعدكم هذا الشرح في استخدام هذه الأداة خطوة بخطوة، وما الذي يمكن توقعه، وفي النهاية سيُحيلكم إلى العرض التفاعلي المستضاف على Hub والذي يتيح لكم حتى نشر تلك النتائج مباشرةً على مستودع النموذج!
حاليًا، ندعم البحث عن نماذج يمكن استخدامها في timm وtransformers.
ستقوم هذه الواجهة البرمجية بتحميل النموذج في الذاكرة على جهاز
meta، لذا نحن لا نقوم فعليًا بتنزيل الأوزان الكاملة للنموذج وتحميلها في الذاكرة، ولا نحتاج إلى ذلك. ونتيجةً لذلك، من الممكن تمامًا قياس نماذج تحتوي على 8 مليارات من المعاملات (أو أكثر)، دون الحاجة إلى القلق بشأن ما إذا كان المعالج المركزي (CPU) لديك قادر على التعامل معها!
تطبيقات Gradio
فيما يلي بعض عروض gradio المتعلقة بما تم وصفه أعلاه. العرض الأول هو مساحة تقدير الذاكرة الرسمية من Hugging Face، والتي تستخدم Accelerate مباشرةً:
قام أحد أعضاء المجتمع بأخذ الفكرة وتوسيعها أكثر، مما يتيح لك تصفية النماذج مباشرةً والاطلاع على ما إذا كان بإمكانك تشغيل نموذج LLM معين في ظل قيود GPU وإعدادات LoRA. للتجربة، راجع هنا لمزيد من التفاصيل.
الأمر
عند استخدام accelerate estimate-memory، تحتاج إلى تمرير اسم النموذج الذي تريد استخدامه، وإطار العمل الذي يستخدمه ذلك النموذج (في حال تعذر العثور عليه تلقائيًا)، وأنواع البيانات التي تريد تحميل النموذج بها.
على سبيل المثال، فيما يلي كيفية حساب بصمة الذاكرة لـbert-base-cased:
accelerate estimate-memory bert-base-cased
سيؤدي هذا إلى تنزيل config.json الخاص بـ bert-based-cased، وتحميل النموذج على جهاز meta، والإبلاغ عن مقدار المساحة التي سيستهلكها:
استهلاك الذاكرة لتحميل bert-base-cased:
| dtype | أكبر طبقة | الحجم الكلي | التدريب باستخدام Adam |
|---|---|---|---|
| float32 | 84.95 م.ب | 418.18 م.ب | 1.61 GB |
| float16 | 42.47 ميغابايت | 206.59 م.ب | 826.36 م.ب |
| int8 | 21.24 ميغابايت | 103.29 ميغابايت | 413.18 م.ب |
| int4 | 10.62 ميغابايت | 51.65 ميغابايت | 206.59 م.ب |
بشكل افتراضي، ستُرجع جميع أنواع البيانات المدعومة (من int4 إلى float32)، ولكن إذا كنت مهتمًا بأنواع محددة، فيمكن تصفية هذه الأنواع.
مكتبات محددة
إذا تعذّر تحديد مكتبة المصدر تلقائيًا (كما هو الحال مع bert-base-cased)، يمكن تمرير اسم المكتبة.
accelerate estimate-memory HuggingFaceM4/idefics-80b-instruct --library_name transformers
استهلاك الذاكرة عند تحميل HuggingFaceM4/idefics-80b-instruct:
| dtype | أكبر طبقة | الحجم الكلي | التدريب باستخدام Adam |
|---|---|---|---|
| float32 | 3.02 غيغابايت | 297.12 GB | 1.16 تيرابايت |
| float16 | 1.51 جيجابايت | 148.56 GB | 594.24 GB |
| int8 | 772.52 م.ب | 74.28 GB | 297.12 GB |
| int4 | 386.26 م.ب | 37.14 GB | 148.56 GB |
accelerate estimate-memory timm/resnet50.a1_in1k --library_name timm
استهلاك الذاكرة لتحميل timm/resnet50.a1_in1k:
| dtype | أكبر طبقة | الحجم الكلي | التدريب باستخدام Adam |
|---|---|---|---|
| float32 | 9.0 ميغابايت | 97.7 ميغابايت | 390.78 ميجابايت |
| float16 | 4.5 ميغابايت | 48.85 ميغابايت | 195.39 م.ب |
| int8 | 2.25 ميغابايت | 24.42 ميغابايت | 97.7 ميغابايت |
| int4 | 1.12 ميغابايت | 12.21 ميغابايت | 48.85 ميغابايت |
أنواع بيانات محددة
كما ذُكر سابقاً، على الرغم من أننا نعيد int4 حتى float32 افتراضياً، يمكن استخدام أي نوع بيانات من float32، float16، int8، وint4.
لذلك، قم بتضمينها بعد تحديد --dtypes:
accelerate estimate-memory bert-base-cased --dtypes float32 float16
استهلاك الذاكرة لتحميل bert-base-cased:
| dtype | أكبر طبقة | الحجم الكلي | التدريب باستخدام Adam |
|---|---|---|---|
| float32 | 84.95 م.ب | 413.18 م.ب | 1.61 GB |
| float16 | 42.47 ميغابايت | 206.59 م.ب | 826.36 م.ب |
ملاحظات حول هذا الحاسب
ستخبرك هذه الآلة الحاسبة بكمية الذاكرة المطلوبة لتحميل النموذج فقط، وليس لأداء الاستدلال.
هذا الحساب دقيق ضمن هامش بضع % من القيمة الفعلية، لذا فهو يعطي صورة جيدة جداً عن مقدار الذاكرة التي سيستهلكها. فعلى سبيل المثال، تحميل bert-base-cased يستهلك فعلياً 413.68 MB عند تحميله على CUDA بدقة كاملة، بينما يقدّر الحاسب 413.18 MB.
عند تنفيذ الاستدلال، يمكن أن تتوقع إضافة ما يصل إلى 20% إضافية كما وجدته EleutherAI. سنقوم بإجراء أبحاث لإيجاد تقدير أدق لهذه القيم، وسنقوم بتحديث هذا الحاسب عند الانتهاء.
Update on GitHub