स्थानीय LLM मॉडलों का बेंचमार्क
पृष्ठभूमि
मैंने अनार्की (YC W23) में पार्ट-टाइम इंजीनियरिंग इंटर्न के रूप में अपने समय के दौरान LLM स्पीड बेंचमार्क (LLMSB) बनाया। LLMSB एक बेंचमार्किंग उपकरण है जो LLM मॉडल के प्रदर्शन का आकलन करता है। यह HuggingFace के transformers पुस्तकालय का उपयोग करके LLM मॉडल को लोड और चलाने के लिए करता है और यह मापता है:
- कुल रनटाइम
- प्रति सेकंड टोकन
- सामान्य हार्डवेयर स्पेक्स
- CPU उपयोग (वर्तमान आवृत्ति और कोर का उपयोग % समय के साथ)
- RAM उपयोग (RAM और स्वैप समय के साथ)
- GPU उपयोग (लोड, मेमोरी उपयोग, और तापमान समय के साथ)
यहाँ codellama-13b-oasst-sft-v10 मॉडल के लिए बेंचमार्क रन का एक उदाहरण है जो H100 पर चल रहा है। मेरे पास व्यक्तिगत रूप से Nvidia RTX 2070 Ti है, जिसमें 8 जीबी का VRAM है। दुर्भाग्यवश, अधिकांश आधुनिक LLM मॉडलों के लिए, 8 जीबी का VRAM एक मॉडल के साथ इंटरफेस करने के लिए पर्याप्त नहीं है। इस कारण से, मैंने RunPod का उपयोग करके GPU(s) “किराए पर” लिया और कुछ मॉडलों पर अपने बेंचमार्क चलाए।
यह LLMSB की पृष्ठभूमि/उत्पत्ति कहानी थी। चूंकि प्रोजेक्ट ओपन-सोर्स है, आप कोड यहाँ देख सकते हैं। नीचे, मैंने यदि आप इसे देखना चाहते हैं तो रेपो से README शामिल किया है।
बारे में
🚧 LLM स्पीड बेंचमार्क (LLMSB) वर्तमान में बीटा (v0) में है। कृपया इसका उत्पादन में उपयोग न करें, या इसे अपने जोखिम पर उपयोग करें। हम अभी भी कुछ खामियों को ठीक कर रहे हैं और कार्यक्षमता में सुधार कर रहे हैं। यदि आप किसी बग का सामना करते हैं या आपके पास सुझाव हैं, तो कृपया उन्हें ISSUES के तहत रिपोर्ट करें। आपकी प्रतिक्रिया अमूल्य है!
LLM स्पीड बेंचमार्क (LLMSB) विभिन्न हार्डवेयर प्लेटफार्मों पर LLM मॉडलों के प्रदर्शन का आकलन करने के लिए एक बेंचमार्किंग उपकरण है। इसका अंतिम लक्ष्य विभिन्न सिस्टम पर LLM मॉडलों के प्रदर्शन का एक व्यापक डेटासेट संकलित करना है, जिससे उपयोगकर्ताओं को अपने प्रोजेक्ट के लिए सही LLM मॉडल(s) चुनने में अधिक प्रभावी ढंग से मदद मिल सके।
सीमाएँ
LLMSB v0 पर है, इसलिए इसमें सीमाएँ हैं:
- केवल डेबियन आधारित ऑपरेटिंग सिस्टम पर चलाने के लिए डिज़ाइन किया गया है, यानी यह विंडोज़ पर चलाने के लिए डिज़ाइन नहीं किया गया है। इसका कारण यह है कि LLMSB नेफेच और nvidia-smi का उपयोग करके मेट्रिक्स एकत्र करता है और फ़ाइल पथ लॉजिक यूनिक्स ऑपरेटिंग सिस्टम पर आधारित है।
- मेट्रिक्स रिकॉर्ड करने के तरीके के कारण, मेट्रिक्स कलेक्टर को एक संग्रह करने में 1 सेकंड तक लग सकता है। इसका मतलब है कि, तेज़ी से, हम हर 1 सेकंड में हार्डवेयर मेट्रिक्स एकत्र कर सकते हैं।
- LLMSB केवल HuggingFace का उपयोग करके मॉडल लोड और चलाता है। यह अभी के लिए काम करता है, लेकिन लक्ष्य है कि LLMSB कई ढांचे का समर्थन करे, न कि केवल HuggingFace।
- वर्तमान में, सभी मॉडल src/hf.py में प्रस्तुत लॉजिक के माध्यम से चलाए जाते हैं, जहां AutoTokenizer() और AutoModelForCausalLM() फ़ंक्शन का उपयोग करके एक मॉडल को लोड और चलाया जाता है। यह काम करता है लेकिन यह हमें विशिष्ट मॉडलों को कॉन्फ़िगर/ऑप्टिमाइज़ करने की सीमाएँ देता है। इसे जानकर, लक्ष्य है कि प्रत्येक लोकप्रिय मॉडल के लिए अलग-अलग कक्षाएँ बनाई जाएँ और HuggingFace के मॉडल विशिष्ट कक्षाओं का उपयोग किया जाए, जैसे LlamaTokenizer और LlamaForCausalLM।
- LLMSB केवल सामान्य, उच्च स्तर के मेट्रिक्स एकत्र करता है। भविष्य में, हम निम्न स्तर के मेट्रिक्स एकत्र करना चाहेंगे। हमें लगता है कि यह आंशिक रूप से Pytorch के प्रोफाइलर रैपर का उपयोग करके किया जा सकता है।
नमूना आउटपुट
22 नवंबर, 2023
LLMSB को RunPod के माध्यम से L40 और H100 GPU पर चलाया/परीक्षण किया गया। उन बेंचमार्क में llama-2-7b-hf, codellama-13b-oasst-sft-v10, और mpt-7b मॉडल का परीक्षण किया गया। परिणामों की जांच करें यहाँ। यदि कोई त्रुटियाँ/समस्याएँ देखी जाती हैं, तो कृपया उन्हें ISSUES पर रिपोर्ट करें।
सेटअप
-
पायथन वातावरण बनाएं और सक्रिय करें:
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 स्थापित करें:
# लिनक्स के लिए, CUDA 12.1 का उपयोग करते हुए pytorch स्थिर निर्माण स्थापित करें: pip3 install torch torchvision torchaudio -
LLM-VM स्थापित करें:
pip install llm-vm -
(वैकल्पिक) यदि आप LLAMA जैसे मॉडलों का उपयोग कर रहे हैं, तो आपको एक HuggingFace एक्सेस टोकन की आवश्यकता होगी। अपना एक्सेस टोकन यहाँ सेट करें और फिर निम्नलिखित कमांड चलाकर अपने टोकन को अपने कंसोल में सहेजें:
huggingface-cli login
कैसे चलाएँ
-
सेटअप अनुभाग में सूचीबद्ध चरणों को पूरा करें।
-
अपने सेट को कॉन्फ़िगर करने के लिए, आपको निम्नलिखित पैरामीटर के साथ एक json फ़ाइल बनानी होगी (यहाँ एक उदाहरण है):
- नोट: हर ढांचा समान पैरामीटर का समर्थन नहीं करता है
{ "model": "bigscience/bloom-560m", # HuggingFace पर मॉडल का पथ/रेपो (https://huggingface.co/models) "prompt": "Hello World!", # वह प्रॉम्प्ट जिसे आप LLM मॉडल में इनपुट करना चाहते हैं "device": "cuda:0", # वह डिवाइस जिस पर आप LLM मॉडल चलाना चाहते हैं (GPU/CPU) "max_length": 50, # उत्पन्न टोकनों की अधिकतम लंबाई "temperature": 0.9, # LLM मॉडल के लिए तापमान मान "top_k": 50, # LLM मॉडल के लिए टॉप-के मान "top_p": 0.9, # LLM मॉडल के लिए टॉप-पी मान "num_return_sequences": 1, # मॉडल के स्वतंत्र रूप से चलाए गए उदाहरणों की संख्या "time_delay": 0, # समय विलंब (सेकंड) जो मेट्रिक्स-एकत्रक प्रति इंटरटेशन इंतजार करेगा "model_start_pause": 1, # समय (सेकंड) जो परीक्षण LLM मॉडल चलाने से पहले इंतजार करेगा "model_end_pause": 1 # समय (सेकंड) जो परीक्षण LLM मॉडल चलाने के बाद इंतजार करेगा, "framework": "llm-vm" # वह ढांचा/पुस्तकालय जिसका आप मॉडल चलाने के लिए उपयोग करना चाहते हैं } -
पिछले चरण में बनाए गए कॉन्फ़िग फ़ाइल के पथ का उपयोग करते हुए, बेंचमार्क शुरू करने के लिए निम्नलिखित चलाएँ (एक विकल्प चुनें):
# एक बेंचमार्क चलाएँ python3 run.py --config ./configs/llmvm_test.json # एक से अधिक बेंचमार्क चलाएँ (इस मामले में 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 प्रमाणपत्र/की सेट करें, और एक पॉड चलाएँ। आप अपने पॉड(s) पर RunPod के कंसोल पृष्ठ पर पहुँच सकते हैं।
-
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 पॉड में चयनित GPU का उपयोग करने में सक्षम होना चाहिए।
-
यदि आप पॉड से अपनी स्थानीय मशीन पर एक फ़ाइल कॉपी करना चाहते हैं, तो आप इस प्रारूप में कमांड चलाएँ (यह चरण #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