تحليل الكمون والذاكرة لنماذج المحولات للتدريب والاستدلال
LLMAnalysis تطفو العديد من الصيغ أو المعادلات في الأوراق والمدونات وما إلى ذلك ، حول كيفية حساب زمن التدريب أو الاستدلال وذاكرة النماذج اللغوية الكبيرة (LLMS) أو المحولات. بدلاً من القيام بالرياضيات على الأوراق أو الكتابة في أوراق Excel ، let's automate the boring stuff with llm-analysis !
بالنظر إلى النموذج المحدد و GPU ونوع البيانات وتكوينات التوازي ، يقدر التحليل LLM-Analysis زمن الوصول واستخدام الذاكرة لـ LLMs للتدريب أو الاستدلال. مع التحليل LLM ، يمكن للمرء بسهولة تجربة إعدادات التدريب/الاستدلال المختلفة من الناحية النظرية ، وفهم أداء النظام بشكل أفضل لسيناريوهات مختلفة.
يساعد التحليل LLM في الإجابة على أسئلة مثل:
feasible (لا تحصل على OOM) وإعداد optimal (زيادة الإنتاجية مع قيود الكمون) للتدريب أو الاستدلالtime الذي يستغرقه الإعداد المحدد للقيام بالتدريب أو الاستدلال cost (GPU-Hours)modeling change ، hardware improvement ، quantization ، parallelism ، وما إلى ذلك)تحقق من مثال استخدام حالات الاستخدام. مع تحليل LLM ، يمكنك إجراء مثل هذا التحليل في دقائق!
لتثبيت تحليل LLM من PYPI:
pip install llm-analysisلتثبيت أحدث بناء تطوير:
pip install --upgrade git+https://github.com/cli99/llm-analysis.git@main للتثبيت من المصدر ، استنساخ repo وتثبيت pip install . أو poetry install (تثبيت الشعر بواسطة pip install poetry ).
LLMAnalysis لدمج تحليل LLM في الكود الخاص بك ، استخدم فئة LLMAnalysis . الرجوع إلى Doc llmanalysis للحصول على التفاصيل.
يتم إنشاء LLMAnalysis مع التقلبات وأرقام كفاءة الذاكرة وفئات التكوين التالية:
ModelConfig معلومات النموذج ، أي طول تسلسل Max ، وعدد طبقات المحولات ، وعدد رؤوس الاهتمام ، والبعد المخفي ، وحجم المفرداتGPUConfig حساب حساب GPU ومواصفات الذاكرةDtypeConfig عدد البتات المستخدمة لوزن النموذج والتنشيط والتضمينParallelismConfig التوازي الموتر ( tp ) ، وتوازي خط الأنابيب ( pp ) ، التسلسل التوازي ( sp ) ، التوازي الخبير ( ep ) ، والموازاة للبيانات ( dp ). ثم يمكن الاستعلام عن LLMAnalysis مع حجج مختلفة من خلال أساليب التدريب والاستدلال.
يوفر التحليل LLM وظيفتين للدخول ، القطار والاستدلال ، لسهولة الاستخدام من خلال واجهة سطر الأوامر. يجري
python -m llm_analysis.analysis train --helpأو
python -m llm_analysis.analysis infer --helpللتحقق من الخيارات أو قراءة المستند المرتبط. ارجع إلى الأمثلة لمعرفة كيفية استخدامها.
train infer استخدام تعيينات الاسم إلى التكوين المُحددة مسبقًا ( model_configs ، gpu_configs ، dtype_configs ) وغيرها من وسيطات مدخلات المستخدم لبناء LLMAnalysis والقيام بالاستعلام.
يتم ملء التعيينات المحددة مسبقًا في وقت التشغيل من Files و GPU و CONFICTION CONFIGTION من نوع البيانات json ضمن MODEM_CONFIGS و GPU_CONFIGS و DTYPE_CONFIGS. لإضافة نموذج جديد أو GPU أو نوع البيانات إلى التعيين للاستعلام ، ما عليك سوى إضافة ملف وصف json إلى المجلد المقابل.
يدعم LLM-ANALYSIS أيضًا استرداد ModelConfig من مسار ملف json config أو وجه المعانقة مع اسم النموذج.
python -m llm_analysis.analysis train --model_name=local_example_model.json . تحقق من تكوينات النموذج ضمن مجلد Model_Configs.EleutherAI/gpt-neox-20b كـ model_name عند الاتصال train أو infer وظائف الدخول. python -m llm_analysis.analysis train --model_name=EleutherAI/gpt-neox-20b --total_num_gpus 32 --ds_zero 3 . مع هذه الطريقة ، يعتمد تحليل LLM على transformers للعثور على تكوين النموذج المقابل على Huggingface.co/Models ، مما يعني أن معلومات النماذج الأحدث موجودة فقط بعد إصدار معين من مكتبة Transformers. للوصول إلى أحدث النماذج من خلال أسمائها ، قم بتحديث حزمة transformers المثبتة. يتم توفير قائمة بالأوامر المفيدة للاستعلام مقابل التعيينات المحددة مسبقًا بالإضافة إلى الوجه المعانقة ، أو لتفريغ التكوينات. قم بتشغيل python -m llm_analysis.config --help للحصول على التفاصيل.
بعض الأمثلة:
python -m llm_analysis.config get_model_config_by_name EleutherAI/gpt-neox-20b يحصل على ModelConfig من الخرائط المأهولة بالاسم ، إذا لم يتم العثور عليها ، يحاول تحليل LLM الحصول عليه من Huggingface.
لاحظ أن نماذج LLAMA تحتاج إلى transformers-4.28.1 لاسترداد ، إما تحديث إلى مكتبة transformers اللاحقة ، أو استخدام ModelConfig المحدد مسبقًا لنماذج LLAMA ( / في أسماء النماذج يتم استبدالها بـ _ ).
python -m llm_analysis.config list_gpu_configsيسرد أسماء جميع تكوينات GPU المحددة مسبقًا ، ثم يمكنك الاستعلام مع
python -m llm_analysis.config get_gpu_config_by_name a100-sxm-80gb لإظهار GPUConfig المقابلة.
يعطي إعداد التقلبات وكفاءة الذاكرة إلى 1 (افتراضي) الحد الأدنى للتدريب أو زمن استنتاج الاستدلال ، لأنه يفترض أداءً للأجهزة الذروة (وهو ما ليس هو الحال أبدًا). يمكن العثور على تقليص واقعية أو كفاءة الذاكرة عن طريق القياس والتوصيف باستخدام أبعاد الإدخال في النموذج.
إذا كان على المرء أن يضع افتراضات ، من أجل كفاءة التقلب ، تقارير الأدب ما يصل إلى 0.5 للتدريب على النطاق على نطاق واسع ، وما يصل إلى 0.7 للاستدلال ؛ 0.9 يمكن أن يكون هدفا عدوانية لكفاءة الذاكرة.
يهدف التحليل LLM إلى توفير تقدير lower-bound من استخدام الذاكرة والكمون.
يغطي التحليل LLM حاليًا التوازي الموتر (TP) ، وتوازي خط الأنابيب (PP) ، والتوازي التسلسلي (SP) ، والتوازي الخبير (EP) ، والتوازي البيانات (DP).
تتبنى TP و PP و SP أسلوب التوازي المستخدم في Megatron-LM للتدريب ومتسابقات FasterTransformer للاستدلال
في تحليل التدريب ، يفترض DP Sharding باستخدام DeepSpeed ZeRO أو FSDP . يتم استخدام ds_zero لتحديد استراتيجية Sharding DP
| DS_ZERO | السفن العميقة صفر | FSDP | Sharding |
|---|---|---|---|
| 0 | عاجز | no_shard | لا Sharding |
| 1 | المرحلة 1 | ن/أ | حالات محسّن شارد |
| 2 | المرحلة 2 | Shard_grad_op | تدرجات Shard وحالات التحسين |
| 3 | المرحلة 3 | full_shard | تدرجات Shard ، حالات المحسّن ، معلمات النموذج |
يوضح EP عدد خبراء MLP عبر أجهزة ep_size ، أي عدد الخبراء لكل وحدة معالجة الرسومات هو total number of experts / ep_size . وبالتالي بالنسبة لوحدة MLP ، يتم تقسيم عدد الأجهزة لأبعاد التوازي الأخرى على ep_size مقارنة بأجزاء أخرى من النموذج.
يتم حساب التواصل TP على أنه باستخدام ring allreduce . يتم حساب اتصال EP على أنه باستخدام alltoall . يتم تقدير وقت الاتصال DP لإلغاء وزن النموذج عند استخدام FSDP أو Deepspeed Zero ومقارنتها مع زمن انتقال الحساب ، وتستخدم القيمة الأكبر للاثنين للكمون الإجمالي. يتم تجاهل اتصالات DP و PP الأخرى في الوقت الحالي ، أي على افتراض التداخل المثالي للحساب والاتصالات ، وهو أمر غير صحيح عندما لا يمكن أن يتداخل الاتصال مع الحساب بسبب التبعية ، أو عندما يكون الاتصال طويلًا جدًا للاختباء بسبب بطيء التوصيل أو حجم البيانات الكبير.
يدعم التحليل LLM كل من إعادة التنشيط الكامل والانتقائي.
| Activation_recomputation | ما هو نقاط التفتيش وإعادة حسابه |
|---|---|
| 0 | لا إعادة تنشيط. يتطلب أكبر قدر من الذاكرة |
| 1 | نقاط التفتيش حساب الانتباه (qk^t مصفوفة مضاعفة ، softmax ، تسرب softmax ، والانتباه على V.) في وحدة الانتباه لطبقة المحولات ؛ كما هو موضح في تقليل إعادة صياغة التنشيط في نماذج المحولات الكبيرة. |
| 2 | نقاط التفتيش المدخلات إلى وحدة الانتباه في طبقة محول ؛ يتطلب تمريرًا إضافيًا للأمام على الاهتمام. |
| 3 | نقاط التفتيش مدخلات إلى تسلسل الوحدات النمطية (Layernom-attention-attentionom) في طبقة محول ؛ يتطلب تمريرًا إضافيًا للأمام (layernom-attention-layernom). |
| 4 | تخزن إعادة التفعيل الكامل المدخلات إلى طبقة المحول ؛ يتطلب أقل كمية من الذاكرة. يتطلب تمريرة إلى الأمام الإضافية للطبقة بأكملها. |
يتم التعبير عن أنواع البيانات بعدد البتات ، فقط 32 (FP32 ، TF32) ، 16 (FP16 ، BF16) ، 8 (int8) ، و 4 (int4) يتم تصميم أنواع البيانات في الوقت الحالي.
يتم صياغة صقل دقيق (يتم التحكم فيه بواسطة total_num_tokens التي تم تمريرها إلى وظيفة إدخال train ) على أنها تدريب مسبق ، وبالتالي افتراض صقل كامل (جميع المعلمات النموذجية). الصقل الدقيق-الكفاءة المعلمة (PEFT) في الدعم المستقبلي.
يفترض الاستدلال تداخلًا مثاليًا لعمليات الحساب والذاكرة عند حساب الكمون ، وأقصى قدر من إعادة استخدام الذاكرة عند حساب استخدام الذاكرة.
تحقق من Todos أدناه لما هو التالي واصل ضبطه؟! أي مساهمات أو ردود الفعل مرحب بها للغاية!
إذا كنت تستخدم تحليل LLM في عملك ، فيرجى الاستشهاد:
Cheng Li. (2023). LLM-Analysis: Latency and Memory Analysis of Transformer Models for Training and Inference. GitHub repository, https://github.com/cli99/llm-analysis.
أو
@misc{llm-analysis-chengli,
author = {Cheng Li},
title = {LLM-Analysis: Latency and Memory Analysis of Transformer Models for Training and Inference},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/cli99/llm-analysis}},
}
المساهمات والاقتراحات مرحب بها.
يستخدم التحليل LLM قبل الالتزام لضمان أن تنسيق الكود متسق. للحصول على طلبات السحب بمساهمة رمز ، يرجى تثبيت اللبلاب المسبق ( pip install pre-commit ) وكذلك الخطافات المستخدمة ( pip install في الريبو) ، وتنسيق الرمز (يتم تشغيله تلقائيًا قبل كل ملزم GIT) قبل إرسال العلاقات العامة.