Benchmark ng Lokal na mga LLM na Modelo
Pinagmulan
Binuo ko ang LLM Speed Benchmark (LLMSB) habang ako ay isang part-time Engineering Intern sa Anarchy (YC W23). Ang LLMSB ay isang benchmarking tool para tasahin ang pagganap ng isang LLM na modelo. Gumagamit ito ng HuggingFace’s transformers library para i-load at patakbuhin ang isang LLM na modelo at sinusukat nito ang:
- kabuuang oras ng pagtakbo
- tokens bawat segundo
- pangkalahatang specs ng hardware
- paggamit ng cpu (kasalukuyang frequency at porsyento ng paggamit ng mga cores sa paglipas ng oras)
- paggamit ng ram (ram at swap sa paglipas ng oras)
- paggamit ng gpu (load, paggamit ng memory, at temperatura sa paglipas ng oras)
NARITO ay isang halimbawa ng isang benchmark run para sa codellama-13b-oasst-sft-v10 na modelo na tumatakbo sa isang H100. Personal akong nagmamay-ari ng isang Nvidia RTX 2070 Ti, na may 8 GB ng VRAM. Nakakalungkot, para sa karamihan ng mga modernong LLM na modelo, ang 8 GB ng VRAM ay hindi sapat para makipag-interface sa isang modelo. Dahil dito, ginamit ko ang RunPod para “umuupa” ng GPU(s) at patakbuhin ang aking mga benchmark sa ilang mga modelo.
Ito ang kwento/orijin ng LLMSB. Dahil ang proyekto ay open-source, maaari mong tingnan ang code DITO. Sa ibaba, isinama ko ang README mula sa repo kung nais mong suriin ito.
Tungkol sa
🚧 Ang LLM Speed Benchmark (LLMSB) ay kasalukuyang nasa beta (v0). Mangyaring huwag gamitin ito sa produksyon, o gamitin ito sa iyong sariling pananagutan. Patuloy pa rin naming inaayos ang ilang suliranin at pinapabuti ang functionality. Kung makakita ka ng anumang bug o may suhestiyon, mangyaring i-report ang mga ito sa ilalim ng ISSUES. Napakahalaga ng iyong feedback!
Ang LLM Speed Benchmark (LLMSB) ay isang benchmarking tool para tasahin ang pagganap ng mga LLM na modelo sa iba’t ibang hardware platform. Ang panghuling layunin nito ay makabuo ng isang komprehensibong dataset na nagdedetalye ng pagganap ng mga LLM na modelo sa iba’t ibang sistema, na nagpapahintulot sa mga user na mas epektibong pumili ng tamang LLM na modelo(s) para sa kanilang mga proyekto.
Mga Limitasyon
Ang LLMSB ay nasa v0, kaya mayroon itong mga limitasyon:
- Dinisenyo lamang upang tumakbo sa mga debian based operating system, ibig sabihin hindi ito dinisenyo para tumakbo sa Windows. Ito ay dahil gumagamit ang LLMSB ng neofetch at nvidia-smi upang mangalap ng mga metric sa ilalim ng hood at ang logic ng filepath ay naka-base sa unix operating systems.
- Dahil sa paraan ng pag-record ng mga metric, maaaring tumagal ng hanggang 1 segundo para gawin ng metrics collector ang isang koleksyon. Ibig sabihin, sa pinakamabilis, maaari nating kolektahin ang mga hardware metric bawat 1 segundo.
- Ang LLMSB ay gumagamit lamang ng HuggingFace para i-load at patakbuhin ang mga modelo. Gumagana ito sa ngayon, ngunit ang layunin ay suportahan ng LLMSB ang maramihang frameworks, hindi lamang HuggingFace.
- Sa kasalukuyan, lahat ng mga modelo ay pinapatakbo gamit ang logic na ipinakita sa run_llm() function, na matatagpuan sa src/hf.py, kung saan ang mga functions na AutoTokenizer() at AutoModelForCausalLM() ay ginagamit upang i-load at patakbuhin ang isang modelo. Gumagana ito ngunit nililimitahan nito kung paano natin mai-configure/mai-optimize ang partikular na mga modelo. Batid ito, ang layunin ay lumikha ng hiwalay na klase para sa bawat popular na modelo at gamitin ang model specific classes ng HuggingFace, tulad ng LlamaTokenizer & LlamaForCausalLM, sa halip.
- Ang LLMSB ay nangongolekta lamang ng pangkalahatan, mataas na lebel, na mga metric. Sa hinaharap, nais naming mangolekta ng mas mababang lebel na mga metric. Naniniwala kami na maaari itong bahagyang magawa gamit ang Pytorch’s profiler wrapper.
Mga Halimbawang Resulta
Nobyembre 22, 2023
Ang LLMSB ay pinatakbo/sinubukan sa isang L40 at H100 GPU sa pamamagitan ng RunPod. Sa mga benchmark na iyon ang mga modelo llama-2-7b-hf, codellama-13b-oasst-sft-v10, at mpt-7b ang sinubukan. Tingnan ang mga resulta DITO. Kung mapapansin ang anumang mga error/isyu, mangyaring i-report ang mga ito sa ISSUES.
Pag-setup
-
Gumawa at i-activate ang python environment:
python3 -m venv env source env/bin/activate -
I-install ang mga dependency ng package (gamit ang APT):
apt -y update apt install -y vim apt install -y neofetch -
I-install ang mga python dependency:
pip3 install transformers pip3 install psutil pip3 install gputil pip3 install tabulate pip3 install sentencepiece pip3 install protobuf -
I-install ang Pytorch
# install pytorch stable build, for linux, using CUDA 12.1: pip3 install torch torchvision torchaudio -
I-install ang LLM-VM:
pip install llm-vm -
(opsyonal) Kung gumagamit ka ng mga modelo tulad ng LLAMA, kakailanganin mo ng HuggingFace access token. I-setup ang iyong access token DITO pagkatapos i-save ang iyong token sa iyong console sa pamamagitan ng pagpapatakbo ng sumusunod na command:
huggingface-cli login
Paano Patakbuhin
-
Kumpletuhin ang mga hakbang na nakalista sa seksyon ng Pag-setup.
-
Upang i-configure ang iyong set, kailangan mong gumawa ng isang json file na may sumusunod na mga parameter (narito ang isang halimbawa):
- TANDAAN: hindi lahat ng framework ay sumusuporta sa parehong mga parameter
{ "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 } -
Gamit ang path papunta sa config file na ginawa mo sa nakaraang hakbang, patakbuhin ang sumusunod upang simulan ang benchmark (pumili ng isang opsyon):
# 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 -
Pagkatapos matapos ang benchmark, tingnan ang panghuling mga resulta sa isang file na dapat magmukhang ganito:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
Pagsasaayos ng RunPod:
-
I-setup ang RunPod, i-setup ang iyong ssh cert/key, at patakbuhing ang isang pod. Maaari mong ma-access ang iyong pod(s) sa RunPod’s Console Page.
-
I-click ang “Connect” na button upang makuha ang ssh connection info. Ang impormasyong ito ay dapat magmukhang ganito:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example-
Ang command na ito ay maa-format ng ganito:
ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
-
-
Gamit ang command sa hakbang #2, dapat kang makapag-ssh papasok sa pod at magamit ang GPU na pinili mo sa RunPod pod na iyon.
-
Kung nais mong kopyahin ang isang file mula sa pod papunta sa iyong lokal na makina, tatakbo ka ng command sa format na ito (tinutukoy nito ang mga variable na ipinakita sa hakbang #2):
scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>-
Narito ang isang halimbawa ng ganoong command:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
Pagkatapos mong matapos sa pod, patayin o i-pause ito. Ngunit babala, kung i-pause mo ito ay sisingilin ka pa rin, ngunit mas kaunti lamang.
Magagandang Pinagmulan:
- Mga Prompt Dataset: awesome-chatgpt-prompts, bigscience/P3, at writing-prompts
- Matuto nang higit pa tungkol sa mga parameter ng LLM
- Magandang benchmark para i-benchmark ang cloud-based na mga LLM na modelo
- Mga cool na leaderboard ng katalinuhan ng LLM: FastEval at open_llm_leaderboard