स्थानिक LLM मॉडेल्सचे बेंचमार्क

प्रकल्पाचे GitHub रिपॉझिटरी

पार्श्वभूमी

मी 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 हे मॉडेलशी इंटरफेस करण्यासाठी पुरेसे नाही. त्यामुळे, काही मॉडेल्सवर माझे बेंचमार्क चालवण्यासाठी मी GPU(s) “भाड्याने” घेण्यासाठी RunPod वापरले.

ही LLMSB ची पार्श्वभूमी/उत्पत्तीची कथा होती. हा प्रकल्प ओपन-सोर्स असल्यामुळे, तुम्ही त्याचा कोड येथे पाहू शकता. तुम्हाला तो तपासायचा असल्यास, खाली मी रिपॉझिटरीमधील README समाविष्ट केले आहे.

याबद्दल

🚧 LLM Speed Benchmark (LLMSB) सध्या बीटा (v0) अवस्थेत आहे. कृपया हे उत्पादनात वापरू नका किंवा स्वतःच्या जोखमीवर वापरा. आम्ही अजूनही काही अडचणी दूर करून कार्यक्षमता सुधारत आहोत. तुम्हाला कोणतेही बग आढळल्यास किंवा काही सूचना असल्यास, कृपया त्या ISSUES अंतर्गत नोंदवा. तुमचा अभिप्राय अमूल्य आहे!

LLM Speed Benchmark (LLMSB) हे विविध हार्डवेअर प्लॅटफॉर्मवर LLM मॉडेल्सच्या कार्यक्षमतेचे मूल्यांकन करण्यासाठीचे बेंचमार्किंग साधन आहे. विविध प्रणालींवरील LLM मॉडेल्सच्या कार्यक्षमतेचा तपशील असलेला सर्वसमावेशक डेटासेट तयार करणे हे त्याचे अंतिम उद्दिष्ट आहे, ज्यामुळे वापरकर्त्यांना त्यांच्या प्रकल्पांसाठी योग्य LLM मॉडेल(s) अधिक प्रभावीपणे निवडता येतील.

मर्यादा

LLMSB v0 वर आहे, त्यामुळे त्याला काही मर्यादा आहेत:

  • हे केवळ debian-आधारित ऑपरेटिंग सिस्टमवर चालण्यासाठी डिझाइन केलेले आहे, म्हणजेच Windows वर चालण्यासाठी ते डिझाइन केलेले नाही. याचे कारण असे की LLMSB अंतर्गत मेट्रिक्स गोळा करण्यासाठी neofetch आणि nvidia-smi वापरते आणि फाइलपाथचे तर्क unix ऑपरेटिंग सिस्टमवर आधारित आहेत.
  • मेट्रिक्स ज्या पद्धतीने नोंदवले जातात त्यानुसार, मेट्रिक्स कलेक्टरला एक संकलन करण्यासाठी 1 सेकंदापर्यंत वेळ लागू शकतो. याचा अर्थ असा की, कमाल वेगाने आपण हार्डवेअर मेट्रिक्स प्रत्येक 1 सेकंदाला गोळा करू शकतो.
  • LLMSB मॉडेल्स लोड आणि चालवण्यासाठी केवळ HuggingFace वापरते. सध्या हे कार्य करते, परंतु केवळ HuggingFace नव्हे तर अनेक फ्रेमवर्क्सना LLMSB ने समर्थन द्यावे हे उद्दिष्ट आहे.
  • सध्या, सर्व मॉडेल्स src/hf.py मध्ये असलेल्या run_llm() फंक्शनमध्ये सादर केलेल्या तर्काद्वारे चालवली जातात, जिथे मॉडेल लोड आणि चालवण्यासाठी AutoTokenizer() आणि AutoModelForCausalLM() फंक्शन्स वापरली जातात. हे कार्य करते, परंतु विशिष्ट मॉडेल्सचे कॉन्फिगर/ऑप्टिमाइझ करण्याच्या आपल्या क्षमतेवर मर्यादा आणते. हे लक्षात घेऊन, प्रत्येक लोकप्रिय मॉडेलसाठी स्वतंत्र क्लासेस तयार करणे आणि त्याऐवजी LlamaTokenizer आणि LlamaForCausalLM सारखे HuggingFace चे मॉडेल-विशिष्ट क्लासेस वापरणे हे उद्दिष्ट आहे.
  • LLMSB केवळ सामान्य, उच्च-स्तरीय मेट्रिक्स गोळा करते. भविष्यात, आम्हाला निम्न-स्तरीय मेट्रिक्स गोळा करायचे आहेत. यातील काही भाग Pytorch च्या porfiler wrapper वापरून करता येईल असे आम्हाला वाटते.

नमुना आउटपुट

22 नोव्हेंबर 2023

RunPod द्वारे L40 आणि H100 GPU वर LLMSB चालवून/तपासून पाहण्यात आले. त्या बेंचमार्कमध्ये 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 प्रमाणपत्र/की सेट अप करा आणि एक pod चालू करा. तुम्ही RunPod च्या Console Page वर तुमच्या pod(s) मध्ये प्रवेश करू शकता.

  2. 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>
      
  3. पायरी #2 मधील कमांड वापरून, तुम्ही pod मध्ये ssh करू शकाल आणि त्या RunPod pod मध्ये निवडलेला GPU वापरू शकाल.

  4. तुम्हाला 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/
      
  5. pod सोबतचे काम पूर्ण झाल्यानंतर, तो बंद करा किंवा थांबवा. मात्र सावधगिरीची सूचना: तुम्ही तो थांबवला तरी शुल्क आकारले जाईल, फक्त ते खूपच कमी असेल.

उत्तम स्रोत: