LLM गति बेंचमार्क

प्रोजेक्ट का GitHub रेपो

पृष्ठभूमि

मैंने LLM गति बेंचमार्क (LLMSB) अपने अंशकालिक इंजीनियरिंग इंटर्न के दौरान Anarchy (YC W23) में बनाया। LLMSB एक बेंचमार्किंग टूल है जो LLM मॉडल के प्रदर्शन का मूल्यांकन करता है। यह HuggingFace की transformers लाइब्रेरी का उपयोग करके LLM मॉडल को लोड और चलाता है और यह मापता है:

  • कुल रनटाइम
  • प्रति सेकंड टोकन
  • सामान्य हार्डवेयर विनिर्देश
  • CPU उपयोग (वर्तमान फ़्रीक्वेंसी और कोर उपयोग % समय के साथ)
  • RAM उपयोग (RAM और स्वैप समय के साथ)
  • GPU उपयोग (लोड, मेमोरी उपयोग, और तापमान समय के साथ)

यहाँ एक उदाहरण है एक बेंचमार्क रन का जो codellama-13b-oasst-sft-v10 मॉडल पर H100 पर चल रहा है। मेरे पास व्यक्तिगत रूप से एक Nvidia RTX 2070 Ti है, जिसमें 8 GB VRAM है। दुर्भाग्यवश, अधिकांश आधुनिक LLM मॉडलों के लिए 8 GB VRAM मॉडल के साथ इंटरफ़ेस करने के लिए पर्याप्त नहीं है। इसी कारण मैं RunPod का उपयोग करके GPU(s) को “किराए” पर लेता हूँ और कुछ मॉडलों पर अपने बेंचमार्क चलाता हूँ।

यह LLMSB की पृष्ठभूमि/उत्पत्ति कहानी थी। चूँकि प्रोजेक्ट ओपन-सोर्स है, आप कोड यहाँ देख सकते हैं। नीचे, मैंने रेपो से README शामिल किया है यदि आप इसे देखना चाहते हैं।

बारे में

🚧 LLM गति बेंचमार्क (LLMSB) वर्तमान में बीटा (v0) में है। कृपया इसे उत्पादन में उपयोग न करें, या अपने जोखिम पर उपयोग करें। हम अभी कुछ समस्याओं को ठीक कर रहे हैं और कार्यक्षमता में सुधार कर रहे हैं। यदि आपको कोई बग मिलते हैं या सुझाव हैं, तो कृपया उन्हें ISSUES के तहत रिपोर्ट करें। आपका फीडबैक अमूल्य है!

LLM गति बेंचमार्क (LLMSB) एक बेंचमार्किंग टूल है जो विभिन्न हार्डवेयर प्लेटफ़ॉर्म पर LLM मॉडलों के प्रदर्शन का मूल्यांकन करता है। इसका अंतिम लक्ष्य विभिन्न सिस्टमों पर LLM मॉडलों के प्रदर्शन का विस्तृत डेटासेट संकलित करना है, जिससे उपयोगकर्ता अपने प्रोजेक्ट्स के लिए सही LLM मॉडल(ओं) को अधिक प्रभावी ढंग से चुन सकें।

सीमाएँ

LLMSB v0 पर है, इसलिए इसमें सीमाएँ हैं:

  • केवल डेबियन-आधारित ऑपरेटिंग सिस्टम पर चलाने के लिए डिज़ाइन किया गया है, अर्थात यह विंडोज़ पर चलाने के लिए नहीं बनाया गया है। यह इसलिए है क्योंकि LLMSB अंतर्निहित रूप से मीट्रिक्स एकत्र करने के लिए neofetch और nvidia-smi का उपयोग करता है और फ़ाइल पथ लॉजिक यूनिक्स ऑपरेटिंग सिस्टम पर आधारित है।
  • मीट्रिक्स कैसे रिकॉर्ड होते हैं, इस कारण मीट्रिक्स कलेक्टर को एक संग्रह करने में अधिकतम 1 सेकंड लग सकता है। इसका मतलब है कि, तेज़ी से, हम हर 1 सेकंड में हार्डवेयर मीट्रिक्स एकत्र कर सकते हैं।
  • LLMSB केवल HuggingFace का उपयोग करके मॉडल लोड और चलाता है। यह अभी काम करता है, लेकिन लक्ष्य है कि LLMSB कई फ्रेमवर्क्स का समर्थन करे, न कि केवल HuggingFace।
  • वर्तमान में, सभी मॉडल run_llm() फ़ंक्शन में प्रस्तुत लॉजिक के माध्यम से चलाए जाते हैं, जो 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 पर रिपोर्ट करें।

सेटअप

  1. Python वातावरण बनाएं और सक्रिय करें:

    python3 -m venv env
    source env/bin/activate
    
  2. पैकेज निर्भरताएँ स्थापित करें (APT का उपयोग करके):

    apt -y update
    apt install -y vim
    apt install -y neofetch
    
  3. Python निर्भरताएँ स्थापित करें:

    pip3 install transformers
    pip3 install psutil
    pip3 install gputil
    pip3 install tabulate
    pip3 install sentencepiece
    pip3 install protobuf
    
  4. Pytorch स्थापित करें

    # install pytorch stable build, for linux, using CUDA 12.1:
    pip3 install torch torchvision torchaudio
    
  5. LLM-VM स्थापित करें:

    pip install llm-vm
    
  6. (वैकल्पिक) यदि आप LLAMA जैसे मॉडल का उपयोग कर रहे हैं, तो आपको एक HuggingFace एक्सेस टोकन की आवश्यकता होगी। अपना एक्सेस टोकन यहाँ सेटअप करें और फिर निम्न कमांड चलाकर टोकन को अपने कंसोल में सहेजें:

    huggingface-cli login
    

कैसे चलाएँ

  1. सेटअप सेक्शन में सूचीबद्ध चरणों को पूरा करें।

  2. अपना सेट कॉन्फ़िगर करने के लिए, आपको निम्न पैरामीटरों के साथ एक 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
    }
    
  3. पिछले चरण में बनाई गई कॉन्फ़िग फ़ाइल के पथ का उपयोग करके, बेंचमार्क शुरू करने के लिए निम्न चलाएँ (एक विकल्प चुनें):

    # 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
    
  4. बेंचमार्क चलने के बाद, अंतिम परिणामों को एक फ़ाइल में देखें जो कुछ इस तरह दिखेगा:

    report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
    

RunPod सेटअप:

  1. RunPod सेटअप करें, अपना ssh प्रमाणपत्र/की सेट करें, और एक पॉड चलाएँ। आप अपने पॉड(s) को RunPod के कंसोल पेज पर एक्सेस कर सकते हैं.

  2. “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>
      
  3. चरण #2 में दिए गए कमांड का उपयोग करके, आप पॉड में ssh कर सकेंगे और उस RunPod पॉड में चयनित GPU का उपयोग कर सकेंगे।

  4. यदि आप पॉड से अपनी स्थानीय मशीन पर फ़ाइल कॉपी करना चाहते हैं, तो आप इस फ़ॉर्मेट में कमांड चलाएँगे (यह चरण #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/
      
  5. पॉड के साथ काम समाप्त करने के बाद, इसे बंद या पॉज़ करें। लेकिन चेतावनी, यदि आप इसे पॉज़ करते हैं तो भी आपसे शुल्क लिया जाएगा, लेकिन बहुत कम।

उत्कृष्ट स्रोत: