مقامی LLM ماڈلز کا بینچ مارک
پسِ منظر
میں نے Anarchy (YC W23) میں جز وقتی انجینئرنگ انٹرن کی حیثیت سے کام کرنے کے دوران LLM Speed Benchmark (LLMSB) بنایا۔ LLMSB ایک LLM ماڈل کی کارکردگی جانچنے کا ٹول ہے۔ یہ LLM ماڈل لوڈ کرنے اور چلانے کے لیے HuggingFace کی transformers لائبریری استعمال کرتا ہے اور یہ درج ذیل چیزوں کی پیمائش کرتا ہے:
- مکمل رن ٹائم
- فی سیکنڈ ٹوکنز
- عمومی ہارڈویئر کی تفصیلات
- CPU کا استعمال (موجودہ فریکوئنسی اور وقت کے ساتھ کورز کے استعمال کا فیصد)
- RAM کا استعمال (وقت کے ساتھ RAM اور swap)
- GPU کا استعمال (وقت کے ساتھ لوڈ، میموری کا استعمال، اور درجہ حرارت)
یہاں codellama-13b-oasst-sft-v10 ماڈل کے H100 پر چلائے گئے بینچ مارک کا ایک نمونہ موجود ہے۔ میرے پاس ذاتی طور پر Nvidia RTX 2070 Ti ہے، جس میں 8 GB کی VRAM موجود ہے۔ افسوس کی بات ہے کہ زیادہ تر جدید LLM ماڈلز کے لیے 8 GB کی VRAM کسی ماڈل کے ساتھ تعامل کرنے کے لیے کافی نہیں ہے۔ اسی وجہ سے میں نے RunPod استعمال کرتے ہوئے GPU(s) “کرائے پر” لیے اور مخصوص ماڈلز پر اپنے بینچ مارکس چلائے۔
یہ LLMSB کا پسِ منظر/آغاز کی کہانی تھی۔ چونکہ یہ پروجیکٹ اوپن سورس ہے، آپ اس کا کوڈ یہاں دیکھ سکتے ہیں۔ ذیل میں، اگر آپ اسے دیکھنا چاہیں تو میں نے ریپوزٹری کی README شامل کی ہے۔
تعارف
🚧 LLM Speed Benchmark (LLMSB) فی الحال بیٹا (v0) میں ہے۔ براہِ کرم اسے پروڈکشن میں استعمال نہ کریں، یا اسے اپنی ذمہ داری پر استعمال کریں۔ ہم ابھی بھی کچھ مسائل دور کر رہے ہیں اور فعالیت بہتر بنا رہے ہیں۔ اگر آپ کو کوئی بگ نظر آئے یا آپ کے پاس تجاویز ہوں تو براہِ کرم انہیں مسائل کے تحت رپورٹ کریں۔ آپ کی رائے ہمارے لیے بے حد قیمتی ہے!
LLM Speed Benchmark (LLMSB) مختلف ہارڈویئر پلیٹ فارمز پر LLM ماڈلز کی کارکردگی جانچنے کا ایک ٹول ہے۔ اس کا حتمی مقصد مختلف سسٹمز پر LLM ماڈلز کی کارکردگی کی تفصیلات پر مشتمل ایک جامع ڈیٹاسیٹ مرتب کرنا ہے، تاکہ صارفین اپنے پروجیکٹس کے لیے درست LLM ماڈل(ز) کا زیادہ مؤثر طریقے سے انتخاب کر سکیں۔
محدودیتیں
LLMSB v0 پر ہے، اس لیے اس میں کچھ محدودیتیں ہیں:
- اسے صرف Debian پر مبنی آپریٹنگ سسٹمز پر چلانے کے لیے ڈیزائن کیا گیا ہے، یعنی اسے Windows پر چلانے کے لیے ڈیزائن نہیں کیا گیا۔ اس کی وجہ یہ ہے کہ LLMSB پسِ پردہ پیمائشیں جمع کرنے کے لیے neofetch اور nvidia-smi استعمال کرتا ہے اور فائل پاتھ کی منطق Unix آپریٹنگ سسٹمز پر مبنی ہے۔
- پیمائشیں ریکارڈ کیے جانے کے طریقے کی وجہ سے، میٹرکس کلیکٹر کو ایک کلیکشن مکمل کرنے میں 1 سیکنڈ تک لگ سکتا ہے۔ اس کا مطلب ہے کہ زیادہ سے زیادہ ہم ہر 1 سیکنڈ میں ہارڈویئر میٹرکس جمع کر سکتے ہیں۔
- LLMSB ماڈلز لوڈ اور چلانے کے لیے صرف HuggingFace استعمال کرتا ہے۔ فی الحال یہ کام کرتا ہے، لیکن مقصد یہ ہے کہ LLMSB صرف HuggingFace تک محدود نہ رہے بلکہ متعدد فریم ورکس کو سپورٹ کرے۔
- فی الحال، تمام ماڈلز src/hf.py میں موجود run_llm() فنکشن میں پیش کردہ منطق کے ذریعے چلائے جاتے ہیں، جہاں AutoTokenizer() اور AutoModelForCausalLM() فنکشنز ماڈل لوڈ اور چلانے کے لیے استعمال ہوتے ہیں۔ یہ کام تو کرتا ہے، لیکن اس سے یہ محدود ہو جاتا ہے کہ ہم مخصوص ماڈلز کو کس طرح ترتیب یا بہتر بنا سکتے ہیں۔ اس بات کو مدِنظر رکھتے ہوئے، مقصد یہ ہے کہ ہر مقبول ماڈل کے لیے علیحدہ کلاسز بنائی جائیں اور اس کے بجائے HuggingFace کی ماڈل مخصوص کلاسز، جیسے LlamaTokenizer اور LlamaForCausalLM، استعمال کی جائیں۔
- LLMSB صرف عمومی اور اعلیٰ سطح کی میٹرکس جمع کرتا ہے۔ مستقبل میں ہم نچلی سطح کی میٹرکس جمع کرنا چاہیں گے۔ ہمارا خیال ہے کہ یہ کام جزوی طور پر Pytorch کے porfiler wrapper کے ذریعے کیا جا سکتا ہے۔
نمونہ نتائج
22 نومبر، 2023
LLMSB کو RunPod کے ذریعے L40 اور H100 GPU پر چلایا/آزمایا گیا۔ ان بینچ مارکس میں llama-2-7b-hf، codellama-13b-oasst-sft-v10، اور mpt-7b ماڈلز کو آزمایا گیا۔ نتائج یہاں دیکھیں۔ اگر کوئی غلطیاں/مسائل نظر آئیں تو براہِ کرم انہیں مسائل کو رپورٹ کریں۔
سیٹ اپ
-
Python ماحول بنائیں اور فعال کریں:
python3 -m venv env source env/bin/activate -
پیکیج کی انحصاریات (APT استعمال کرتے ہوئے) انسٹال کریں:
apt -y update apt install -y vim apt install -y neofetch -
Python کی انحصاریات انسٹال کریں:
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 } -
پچھلے مرحلے میں بنائی گئی config فائل کے پاتھ کو استعمال کرتے ہوئے، بینچ مارک شروع کرنے کے لیے درج ذیل میں سے کوئی ایک آپشن چلائیں:
# 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 چلائیں۔ آپ اپنے pod(s) تک RunPod کے Console صفحے پر رسائی حاصل کر سکتے ہیں۔
-
ssh کنکشن کی معلومات حاصل کرنے کے لیے “Connect” بٹن پر کلک کریں۔ یہ معلومات کچھ اس طرح نظر آنی چاہییں:
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 میں دی گئی کمانڈ استعمال کرتے ہوئے، آپ pod میں ssh کے ذریعے داخل ہو سکیں گے اور اس RunPod pod میں منتخب کردہ GPU استعمال کر سکیں گے۔
-
اگر آپ pod سے اپنی مقامی مشین پر کوئی فائل نقل کرنا چاہتے ہیں تو اس فارمیٹ میں کمانڈ چلائیں گے (یہ مرحلہ #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/
-
-
pod کے ساتھ کام مکمل ہونے کے بعد اسے بند کر دیں یا موقوف کر دیں۔ لیکن خبردار رہیں، اگر آپ اسے موقوف کرتے ہیں تو بھی آپ سے چارج لیا جائے گا، صرف بہت کم۔
بہترین ذرائع:
- پرامپٹ ڈیٹاسیٹس: awesome-chatgpt-prompts، bigscience/P3، اور writing-prompts
- LLM پیرامیٹرز کے بارے میں مزید جانیں
- کلاؤڈ پر مبنی LLM ماڈلز کا بہترین بینچ مارک
- عمدہ LLM ذہانت کے لیڈر بورڈز: FastEval اور open_llm_leaderboard