Benchmark Lokale LLM-modellen
GitHub-repository van het project
Achtergrond
Ik heb LLM Speed Benchmark (LLMSB) gebouwd tijdens mijn tijd als parttime Engineering Intern bij Anarchy (YC W23). LLMSB is een benchmarktool voor het beoordelen van de prestaties van een LLM-model. Het gebruikt HuggingFace’s transformers-bibliotheek voor het laden en uitvoeren van een LLM-model en meet:
- totale uitvoertijd
- tokens per seconde
- algemene hardwarespecificaties
- cpu-gebruik (huidige frequentie & gebruikspercentage van cores in de loop van de tijd)
- ram-gebruik (ram & swap over de tijd)
- gpu-gebruik (belasting, geheugengebruik, & temperatuur over de tijd)
HIER is een voorbeeld van een benchmarkuitvoering voor het codellama-13b-oasst-sft-v10-model dat draait op een H100. Ik bezit persoonlijk een Nvidia RTX 2070 Ti, die 8 GB VRAM heeft. Helaas is voor de meeste moderne LLM-modellen 8 GB VRAM niet voldoende om met een model te werken. Daarom heb ik RunPod gebruikt om GPU(’s) te “huren” en mijn benchmarks op bepaalde modellen uit te voeren.
Dit was het achtergrond-/oorsprongsverhaal van LLMSB. Omdat het project open source is, kun je de code HIER bekijken. Hieronder heb ik de README uit de repo opgenomen als je die wilt bekijken.
Over
🚧 LLM Speed Benchmark (LLMSB) bevindt zich momenteel in bèta (v0). Gebruik dit alstublieft niet in productie, of gebruik het op eigen risico. We zijn nog bezig met het wegwerken van enkele onvolkomenheden en het verbeteren van de functionaliteit. Als je bugs tegenkomt of suggesties hebt, meld deze dan vriendelijk onder ISSUES. Jouw feedback is van onschatbare waarde!
LLM Speed Benchmark (LLMSB) is een benchmarktool voor het beoordelen van de prestaties van LLM-modellen op verschillende hardwareplatforms. Het uiteindelijke doel is om een uitgebreide dataset samen te stellen waarin de prestaties van LLM-modellen op verschillende systemen worden beschreven, zodat gebruikers effectiever het juiste LLM-model of de juiste LLM-modellen voor hun projecten kunnen kiezen.
Beperkingen
LLMSB is op v0, dus het heeft beperkingen:
- Ontworpen om alleen te draaien op op Debian gebaseerde besturingssystemen, oftewel het is niet ontworpen om op Windows te draaien. Dit komt doordat LLMSB neofetch en nvidia-smi gebruikt om onder de motorkap metrieken te verzamelen en de padlogica gebaseerd is op Unix-besturingssystemen.
- Door de manier waarop metrieken worden vastgelegd, kan het verzamelen van metrieken tot 1 seconde duren. Dit betekent dat we, op zijn snelst, hardwaremetrieken elke 1 seconde kunnen verzamelen.
- LLMSB gebruikt alleen HuggingFace om modellen te laden en uit te voeren. Dit werkt voorlopig, maar het doel is dat LLMSB meerdere frameworks ondersteunt, niet alleen HuggingFace.
- Momenteel worden alle modellen uitgevoerd via de logica die wordt gepresenteerd in de functie run_llm(), in src/hf.py, waar de functies AutoTokenizer() en AutoModelForCausalLM() worden gebruikt om een model te laden en uit te voeren. Dit werkt, maar het beperkt hoe we specifieke modellen kunnen configureren/optimaliseren. Met dit in gedachten is het doel om afzonderlijke klassen voor elk populair model te creëren en in plaats daarvan HuggingFace’s modelspecifieke klassen te gebruiken, zoals LlamaTokenizer & LlamaForCausalLM.
- LLMSB verzamelt alleen algemene metrieken op hoog niveau. In de toekomst willen we metrieken op een lager niveau verzamelen. We denken dat dit deels kan worden gedaan met behulp van Pytorch’s profiler-wrapper.
Voorbeeldresultaten
22 november 2023
LLMSB is uitgevoerd/getest op een L40- en H100-GPU via RunPod. In die benchmarks werden de modellen llama-2-7b-hf, codellama-13b-oasst-sft-v10 en mpt-7b getest. Bekijk de resultaten HIER. Als er fouten/problemen worden opgemerkt, meld deze dan alsjeblieft bij ISSUES.
Installatie
-
Maak een Python-omgeving aan en activeer deze:
python3 -m venv env source env/bin/activate -
Installeer pakketafhankelijkheden (met APT):
apt -y update apt install -y vim apt install -y neofetch -
Installeer Python-afhankelijkheden:
pip3 install transformers pip3 install psutil pip3 install gputil pip3 install tabulate pip3 install sentencepiece pip3 install protobuf -
Installeer Pytorch
# installeer de stabiele build van pytorch, voor linux, met CUDA 12.1: pip3 install torch torchvision torchaudio -
Installeer LLM-VM:
pip install llm-vm -
(optioneel) Als je modellen zoals LLAMA gebruikt, heb je een HuggingFace-toegangstoken nodig. Stel je toegangstoken HIER in en sla je token vervolgens op in je console door het volgende commando uit te voeren:
huggingface-cli login
Hoe uit te voeren
-
Voltooi de stappen die vermeld staan in de sectie Installatie.
-
Om je set te configureren, moet je een json-bestand maken met de volgende parameters (hier is een voorbeeld):
- OPMERKING: niet elk framework ondersteunt dezelfde parameters
{ "model": "bigscience/bloom-560m", # het pad/de repo van het model op HuggingFace (https://huggingface.co/models) "prompt": "Hello World!", # de prompt die je in het LLM-model wilt invoeren "device": "cuda:0", # het apparaat waarop je het LLM-model wilt uitvoeren (GPU/CPU) "max_length": 50, # de maximale lengte van de gegenereerde tokens "temperature": 0.9, # temperatuurwaarde voor het LLM-model "top_k": 50, # top-k-waarde voor het LLM-model "top_p": 0.9, # top-p-waarde voor het LLM-model "num_return_sequences": 1, # het aantal onafhankelijk uitgevoerde instanties van het model "time_delay": 0, # de tijdsvertraging (seconden) die de metrics-verzamelaar per iteratie zal wachten "model_start_pause": 1, # de tijd (seconden) dat de test zal wachten VOORDAT het LLM-model wordt uitgevoerd "model_end_pause": 1 # de tijd (seconden) dat de test zal wachten NADAT het LLM-model klaar is met uitvoeren, "framework": "llm-vm" # de naam van het framework/de bibliotheek die je wilt gebruiken om het model uit te voeren } -
Gebruik het pad naar het configuratiebestand dat je in de vorige stap hebt gemaakt en voer het volgende uit om de benchmark te starten (kies één optie):
# voer één benchmark uit python3 run.py --config ./configs/llmvm_test.json # voer meer dan één benchmark uit (in dit geval 3) python3 run.py --config ./configs/llmvm_test.json --loops 3 -
Nadat de benchmark is uitgevoerd, bekijk je de eindresultaten in een bestand dat er ongeveer zo uit zou moeten zien:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
RunPod instellen:
-
Stel RunPod in, stel je ssh-certificaat/sleutel in en start een pod. Je kunt je pod(s) openen op de consolepagina van RunPod.
-
Klik op de knop “Connect” om de ssh-verbindingsinformatie te krijgen. Deze informatie zou er ongeveer zo uit moeten zien:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example-
Dit commando wordt op de volgende manier opgemaakt:
ssh <gebruiker>@<ip-adres> -p <poort> -i <lokaal-pad-naar-ssh-certificaat>
-
-
Met het commando uit stap #2 zou je via ssh verbinding moeten kunnen maken met de pod en de GPU kunnen gebruiken die je in die RunPod-pod hebt geselecteerd.
-
Als je een bestand van de pod naar je lokale machine wilt kopiëren, voer je een commando uit in dit formaat (dit verwijst naar de variabelen die in stap #2 worden getoond):
scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>-
Hier is een voorbeeld van zo’n commando:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
Nadat je klaar bent met de pod, schakel je hem uit of pauzeer je hem. Maar let op: als je hem pauzeert, worden er nog steeds kosten in rekening gebracht, alleen veel minder.
Geweldige bronnen:
- Promptdatasets: awesome-chatgpt-prompts, bigscience/P3, & writing-prompts
- Meer leren over LLM-parameters
- Geweldige benchmark om cloudgebaseerde LLM-modellen te benchmarken
- Coole leaderboarden voor LLM-intelligentie: FastEval & open_llm_leaderboard