معيار سرعة LLM
القصة الخلفية
قمت بإنشاء معيار سرعة LLM (LLMSB) خلال فترة عملي كمتدرب هندسي بدوام جزئي في Anarchy (YC W23). LLMSB هي أداة قياس لتقييم أداء نموذج LLM. تستخدم مكتبة [transformers] الخاصة بـ HuggingFace لتحميل وتشغيل نموذج LLM وتقيس:
- إجمالي وقت التشغيل
- عدد الرموز في الثانية
- مواصفات الأجهزة العامة
- استخدام المعالج (التردد الحالي ونسبة استخدام الأنوية بمرور الوقت)
- استخدام الذاكرة (الذاكرة العشوائية والبديلة بمرور الوقت)
- استخدام وحدة معالجة الرسوميات (الحمل، استخدام الذاكرة، ودرجة الحرارة بمرور الوقت)
هنا مثال لتشغيل معيار للـ codellama-13b-oasst-sft-v10 على نموذج يعمل على H100. أنا شخصيًا أمتلك بطاقة Nvidia RTX 2070 Ti، التي تحتوي على 8 جيجابايت من الذاكرة الفيديوية. للأسف، بالنسبة لمعظم نماذج LLM الحديثة، 8 جيجابايت من الذاكرة الفيديوية غير كافية للتعامل مع نموذج. بسبب ذلك، استخدمت RunPod لاستئجار وحدة معالجة الرسوميات وتشغيل معاييري على نماذج معينة.
هذه هي القصة الخلفية/قصة الأصل لـ LLMSB. بما أن المشروع مفتوح المصدر، يمكنك مشاهدة الشيفرة هنا. أدناه، أدرجت ملف README من المستودع إذا أردت الاطلاع عليه.
حول
🚧 معيار سرعة LLM (LLMSB) حاليًا في النسخة التجريبية (v0). يرجى عدم استخدامه في الإنتاج، أو استخدمه على مسؤوليتك الخاصة. ما زلنا نعمل على إصلاح بعض العيوب وتحسين الوظائف. إذا صادفت أي أخطاء أو لديك اقتراحات، يرجى الإبلاغ عنها تحت المشكلات. ملاحظاتك لا تقدر بثمن!
معيار سرعة LLM (LLMSB) هو أداة قياس لتقييم أداء نماذج LLM عبر منصات أجهزة مختلفة. هدفه النهائي هو تجميع مجموعة بيانات شاملة توضح أداء نماذج LLM على أنظمة متعددة، مما يمكّن المستخدمين من اختيار النموذج (النماذج) المناسب لمشاريعهم بشكل أكثر فعالية.
القيود
LLMSB في الإصدار v0، لذا لديه قيود:
- مصمم فقط للتشغيل على أنظمة تشغيل مبنية على ديبيان، أي أنه غير مصمم للتشغيل على ويندوز. ذلك لأن LLMSB يستخدم neofetch و nvidia-smi لجمع المقاييس داخليًا ومنطق مسارات الملفات يعتمد على أنظمة يونكس.
- نظرًا لطريقة تسجيل المقاييس، قد يستغرق جامع المقاييس حتى ثانية واحدة لإجراء جمع. هذا يعني أنه في أسرع حالة يمكننا جمع مقاييس الأجهزة كل ثانية.
- LLMSB يستخدم فقط HuggingFace لتحميل وتشغيل النماذج. هذا يعمل حاليًا، لكن الهدف هو أن يدعم LLMSB أطر عمل متعددة، وليس فقط HuggingFace.
- حاليًا، يتم تشغيل جميع النماذج عبر المنطق الموجود في الدالة run_llm()، الموجودة في src/hf.py، حيث تُستخدم الدوال AutoTokenizer() و AutoModelForCausalLM() لتحميل وتشغيل نموذج. هذا يعمل لكنه يحد من قدرتنا على تكوين/تحسين نماذج معينة. بناءً على ذلك، الهدف هو إنشاء فئات منفصلة لكل نموذج شائع واستخدام الفئات الخاصة بنماذج HuggingFace، مثل LlamaTokenizer و LlamaForCausalLM، بدلاً من ذلك.
- LLMSB يجمع فقط المقاييس العامة والعالية المستوى. في المستقبل، نود جمع مقاييس أدنى مستوى. نعتقد أن ذلك يمكن تحقيقه جزئيًا باستخدام porfiler wrapper الخاص بـ Pytorch.
نماذج المخرجات
November 22, 2023
تم تشغيل/اختبار LLMSB على وحدتي GPU L40 و H100 عبر RunPod. في تلك المعايير تم اختبار النماذج llama-2-7b-hf، codellama-13b-oasst-sft-v10، و mpt-7b. اطلع على النتائج هنا. إذا لاحظت أي أخطاء/مشكلات، يرجى الإبلاغ عنها إلى المشكلات.
الإعداد
-
إنشاء وتفعيل بيئة بايثون:
python3 -m venv env source env/bin/activate
-
تثبيت تبعيات الحزمة (باستخدام APT):
apt -y update apt install -y vim apt install -y neofetch
-
تثبيت تبعيات بايثون:
pip3 install transformers pip3 install psutil pip3 install gputil pip3 install tabulate pip3 install sentencepiece pip3 install protobuf
-
تثبيت Pytorch
# install pytorch stable build, for linux, using CUDA 12.1: pip3 install torch torchvision torchaudio
-
تثبيت LLM-VM:
pip install llm-vm
-
(اختياري) إذا كنت تستخدم نماذج مثل LLAMA، ستحتاج إلى رمز وصول HuggingFace. قم بإعداد رمز الوصول الخاص بك هنا ثم احفظ الرمز في وحدة التحكم الخاصة بك عن طريق تشغيل الأمر التالي:
huggingface-cli login
كيفية التشغيل
-
أكمل الخطوات المذكورة في قسم الإعداد.
-
لتكوين مجموعتك، تحتاج إلى إنشاء ملف json بالمعلمات التالية (إليك مثال):
- ملاحظة: ليس كل إطار عمل يدعم نفس المعلمات
{ "model": "bigscience/bloom-560m", # the model's path/repo on HuggingFace (https://huggingface.co/models) "prompt": "Hello World!", # the prompt you want to input into the LLM model "device": "cuda:0", # the device you want to run the LLM model on (GPU/CPU) "max_length": 50, # the maximun length of the generated tokens "temperature": 0.9, # temperatue value for the LLM model "top_k": 50, # top-k value for the LLM model "top_p": 0.9, # top-p value for the LLM model "num_return_sequences": 1, # the number of independently ran instances of the model "time_delay": 0, # the time delay (seconds) the metrics-collecter will wait per interation "model_start_pause": 1, # the time (seconds) the test will wait BEFORE running the LLM model "model_end_pause": 1 # the time (seconds) the test will wait AFTER the LLM model is done running, "framework": "llm-vm" # the name of the framework/library you want to use to run the model }
-
باستخدام مسار ملف الإعداد الذي أنشأته في الخطوة السابقة، شغّل التالي لبدء المعيار (اختر أحد الخيارين):
# run one benchmark python3 run.py --config ./configs/llmvm_test.json # run more then one benchmark (in this case 3) python3 run.py --config ./configs/llmvm_test.json --loops 3
-
بعد انتهاء المعيار من التشغيل، تحقق من النتائج النهائية في ملف يجب أن يبدو مثل هذا:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
إعداد RunPod:
-
قم بإعداد RunPod، إعداد شهادة/مفتاح SSH الخاص بك، وتشغيل وحدة (pod). يمكنك الوصول إلى وحدتك (وحداتك) على صفحة وحدة التحكم الخاصة بـ RunPod.
-
انقر زر “Connect” للحصول على معلومات اتصال SSH. يجب أن تبدو هذه المعلومات هكذا:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example
-
هذا الأمر سيُصاغ هكذا:
ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
-
-
باستخدام الأمر في الخطوة #2، يجب أن تكون قادرًا على الدخول عبر SSH إلى الوحدة واستخدام وحدة معالجة الرسوميات التي اخترتها في تلك الوحدة RunPod.
-
إذا أردت نسخ ملف من الوحدة إلى جهازك المحلي، ستشغل الأمر بهذا الشكل (هذا يشير إلى المتغيرات المعروضة في الخطوة #2):
scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>
-
إليك مثال على هذا الأمر:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
بعد الانتهاء من الوحدة، أغلقها أو أوقفها مؤقتًا. لكن تحذير، إذا أوقفتها مؤقتًا ستستمر في الفوترة، ولكن بمعدل أقل بكثير.
مصادر رائعة:
- مجموعات البيانات التوجيهية: awesome-chatgpt-prompts, bigscience/P3, & writing-prompts
- تعرف على المزيد حول معلمات LLM
- معيار رائع لقياس نماذج LLM السحابية
- لوحات صدارة الذكاء LLM الرائعة: FastEval & open_llm_leaderboard