Vigezo vya Mfano wa Mitaa vya LLM

Saraka ya GitHub ya Mradi

Historia ya Asili

Nilijenga LLMSB (LLM Speed Benchmark) wakati wangu kama Mwanafunzi wa Uanagenzi wa Uhandisi wa muda wa sehemu katika Anarchy (YC W23). LLMSB ni zana ya ulinganishaji wa kupima utendaji wa modeli ya LLM. Inatumia maktaba ya HuggingFace transformers kwa kupakia na kuendesha modeli ya LLM na hupima:

  • muda wote wa utekelezaji
  • tokeni kwa sekunde
  • vipimo vya jumla vya maunzi
  • matumizi ya CPU (masafa ya sasa na asilimia ya matumizi ya viini kwa muda)
  • matumizi ya RAM (RAM na swap kwa muda)
  • matumizi ya GPU (mzigo, matumizi ya kumbukumbu, na joto kwa muda)

HAPA ni mfano wa utekelezaji wa ulinganishaji kwa modeli ya codellama-13b-oasst-sft-v10 inayoendeshwa kwenye H100. Mimi binafsi ninamiliki Nvidia RTX 2070 Ti, ambayo ina 8 GB za VRAM. Kwa bahati mbaya, kwa miundo mingi ya kisasa ya LLM, 8 GB za VRAM hazitoshi kuingiliana na modeli. Kwa sababu hii, nilitumia RunPod “kukodisha” GPU(s) na kuendesha vigezo vyangu kwenye baadhi ya miundo.

Hii ilikuwa historia ya asili/chanzo cha LLMSB. Kwa kuwa mradi ni wa chanzo wazi, unaweza kuona msimbo HAPA. Hapa chini, nimejumuisha README kutoka kwenye repo ikiwa unataka kuiangalia.

Kuhusu

🚧 LLM Speed Benchmark (LLMSB) kwa sasa iko katika beta (v0). Tafadhali usitumie hili katika uzalishaji, au litumie kwa hatari yako mwenyewe. Bado tunarekebisha baadhi ya kasoro na kuboresha utendaji. Ukikumbana na hitilafu zozote au una mapendekezo, tafadhali yaripoti chini ya ISSUES. Maoni yako ni ya thamani sana!

LLM Speed Benchmark (LLMSB) ni zana ya ulinganishaji ya kutathmini utendaji wa miundo ya LLM kwenye majukwaa tofauti ya maunzi. Lengo lake kuu ni kukusanya mkusanyiko wa data wa kina unaoeleza utendaji wa miundo ya LLM kwenye mifumo mbalimbali, kuwawezesha watumiaji kuchagua kwa ufanisi zaidi modeli(s) sahihi za LLM kwa miradi yao.

Vikwazo

LLMSB iko katika v0, kwa hiyo ina vikwazo:

  • Imeundwa tu kufanya kazi kwenye mifumo endeshi inayotokana na Debian, yaani haikuundwa kufanya kazi kwenye Windows. Hii ni kwa sababu LLMSB hutumia neofetch na nvidia-smi kukusanya vipimo kwa ndani na mantiki ya njia ya faili inategemea mifumo endeshi ya Unix.
  • Kwa sababu ya jinsi vipimo vinavyorekodiwa, mkusanyaji wa vipimo unaweza kuchukua hadi sekunde 1 kufanya mkusanyiko. Hii ina maana kwamba, kwa haraka zaidi, tunaweza kukusanya vipimo vya maunzi kila sekunde 1.
  • LLMSB hutumia tu HuggingFace kupakia na kuendesha miundo. Hili linafanya kazi kwa sasa, lakini lengo ni kuwa LLMSB iunge mkono mifumo mingi, si HuggingFace pekee.
  • Hivi sasa, miundo yote inaendeshwa kupitia mantiki iliyowasilishwa katika kazi run_llm(), iliyopo katika src/hf.py, ambapo kazi AutoTokenizer() na AutoModelForCausalLM() zinatumika kupakia na kuendesha modeli. Hili linafanya kazi lakini linapunguza jinsi tunavyoweza kusanidi/kuboresha miundo mahususi. Tukijua hili, lengo ni kuunda madarasa tofauti kwa kila modeli maarufu na kutumia madarasa mahususi ya modeli ya HuggingFace, kama LlamaTokenizer na LlamaForCausalLM, badala yake.
  • LLMSB hukusanya tu vipimo vya jumla vya kiwango cha juu. Katika siku zijazo, tungependa kukusanya vipimo vya kiwango cha chini zaidi. Tunaona kwamba hili linaweza kufanyika kwa sehemu kwa kutumia kifuniko cha profiler cha Pytorch porfiler wrapper.

Matokeo ya Mfano

Novemba 22, 2023

LLMSB iliendeshwa/kujaribiwa kwenye GPU ya L40 na H100 kupitia RunPod. Katika vigezo hivyo miundo llama-2-7b-hf, codellama-13b-oasst-sft-v10, na mpt-7b ziliangaliwa. Angalia matokeo HAPA. Ikiwa kuna hitilafu/masuala yoyote yanayoonekana, tafadhali yaripoti kwenye ISSUES.

Usanidi

  1. Tengeneza na uwashe mazingira ya python:

    python3 -m venv env
    source env/bin/activate
    
  2. Sakinisha utegemezi wa kifurushi (kwa kutumia APT):

    apt -y update
    apt install -y vim
    apt install -y neofetch
    
  3. Sakinisha utegemezi wa python:

    pip3 install transformers
    pip3 install psutil
    pip3 install gputil
    pip3 install tabulate
    pip3 install sentencepiece
    pip3 install protobuf
    
  4. Sakinisha Pytorch

    # sakinisha ujenzi thabiti wa pytorch, kwa linux, kwa kutumia CUDA 12.1:
    pip3 install torch torchvision torchaudio
    
  5. Sakinisha LLM-VM:

    pip install llm-vm
    
  6. (hiari) Ikiwa unatumia miundo kama LLAMA, utahitaji tokeni ya ufikiaji ya HuggingFace. Sanidi tokeni yako ya ufikiaji HAPA kisha hifadhi tokeni yako kwenye koni yako kwa kuendesha amri ifuatayo:

    huggingface-cli login
    

Jinsi ya Kuendesha

  1. Kamilisha hatua zilizoorodheshwa katika sehemu ya Usanidi.

  2. Ili kusanidi seti yako, unahitaji kuunda faili ya json yenye vigezo vifuatavyo (hapa ni mfano):

    • KUMBUKA: si kila fremework inasaidia vigezo vile vile
    {
      "model": "bigscience/bloom-560m",   # njia/ghala ya modeli kwenye HuggingFace (https://huggingface.co/models)
      "prompt": "Hello World!",           # kidokezo unachotaka kuingiza kwenye modeli ya LLM
      "device": "cuda:0",                 # kifaa unachotaka kuendesha modeli ya LLM kwenye (GPU/CPU)
      "max_length": 50,                   # urefu wa juu zaidi wa tokeni zinazozalishwa
      "temperature": 0.9,                 # thamani ya joto kwa modeli ya LLM
      "top_k": 50,                        # thamani ya top-k kwa modeli ya LLM
      "top_p": 0.9,                       # thamani ya top-p kwa modeli ya LLM
      "num_return_sequences": 1,          # idadi ya matukio ya modeli yanayoendeshwa kwa kujitegemea
      "time_delay": 0,                    # ucheleweshaji wa muda (sekunde) ambao mkusanyaji wa vipimo atasubiri kwa kila marudio
      "model_start_pause": 1,             # muda (sekunde) ambao jaribio litasubiri KABLA ya kuendesha modeli ya LLM
      "model_end_pause": 1                # muda (sekunde) ambao jaribio litasubiri BAADA ya modeli ya LLM kumaliza kuendesha,
      "framework": "llm-vm"               # jina la fremework/maktaba unayotaka kutumia kuendesha modeli
    }
    
  3. Kwa kutumia njia ya faili ya usanidi uliyounda katika hatua iliyotangulia, endesha yafuatayo ili kuanza ulinganishaji (chagua chaguo moja):

    # endesha ulinganishaji mmoja
    python3 run.py --config ./configs/llmvm_test.json
    
    # endesha zaidi ya ulinganishaji mmoja (katika kesi hii 3)
    python3 run.py --config ./configs/llmvm_test.json --loops 3
    
  4. Baada ya ulinganishaji kumaliza kuendesha, angalia matokeo ya mwisho kwenye faili ambalo linapaswa kuonekana kama hili:

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

Kuseti RunPod:

  1. Seta RunPod, seta cheti/ufunguo wako wa ssh, na pata pod ikiendelea. Unaweza kufikia pod(s) zako kwenye Ukurasa wa Konzi ya RunPod.

  2. Bonyeza kitufe cha “Connect” ili kupata taarifa za muunganisho wa ssh. Taarifa hii inapaswa kuonekana kama ifuatavyo:

    ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example
    
    • Amri hii itapangwa hivi:

      ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
      
  3. Kwa kutumia amri katika hatua ya #2, unapaswa kuweza kufanya ssh kuingia kwenye pod na kutumia GPU uliyochagua katika pod hiyo ya RunPod.

  4. Ikiwa unataka kunakili faili kutoka kwenye pod kwenda kwenye mashine yako ya ndani, ungeendesha amri katika umbo hili (hii inarejelea vigezo vilivyoonyeshwa katika hatua ya #2):

    scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>
    
    • Hapa kuna mfano wa amri kama hiyo:

      scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
      
  5. Baada ya kumaliza na pod, izime au isitishe. Lakini onyo, ukiisitishe bado utatozwa, ila kwa kiwango kidogo zaidi.

Vyanzo Vizuri: