LLM Hız Benchmarkı
Arka Plan
LLM Speed Benchmark (LLMSB)‘i, Anarchy (YC W23) şirketinde yarı zamanlı Mühendislik Stajyeri olarak çalıştığım süre boyunca geliştirdim. LLMSB, bir LLM modelinin performansını değerlendirmek için bir benchmark aracıdır. HuggingFace’in transformers kütüphanesini kullanarak bir LLM modelini yükler ve çalıştırır ve şunları ölçer:
- toplam çalışma süresi
- saniye başına token
- genel donanım özellikleri
- CPU kullanımı (mevcut frekans ve çekirdeklerin zaman içindeki kullanım %‘si)
- RAM kullanımı (RAM ve takas zaman içinde)
- GPU kullanımı (yük, bellek kullanımı ve sıcaklık zaman içinde)
BURADA, bir H100 üzerinde çalışan codellama-13b-oasst-sft-v10 modeli için bir benchmark çalıştırmasının örneği bulunmaktadır. Kişisel olarak 8 GB VRAM’e sahip bir Nvidia RTX 2070 Ti sahibiyim. Ne yazık ki, çoğu modern LLM modeli için 8 GB VRAM bir modelle etkileşim kurmak için yeterli değildir. Bu nedenle, belirli modellerde benchmarklarımı çalıştırmak için RunPod üzerinden GPU(lar) “kiraladım”.
Bu, LLMSB’nin arka plan/köken hikayesiydi. Proje açık kaynak olduğundan, kodu BURADA görebilirsiniz. Aşağıda, incelemek isterseniz repo’dan README’yi ekledim.
Hakkında
🚧 LLM Speed Benchmark (LLMSB) şu anda beta (v0) aşamasındadır. Lütfen bunu üretimde kullanmayın veya kendi sorumluluğunuzda kullanın. Hâlâ bazı hataları gideriyor ve işlevselliği geliştiriyoruz. Herhangi bir hata ile karşılaşırsanız veya öneriniz varsa, lütfen ISSUES altında bildirin. Geri bildiriminiz çok değerli!
LLM Speed Benchmark (LLMSB), farklı donanım platformlarında LLM modellerinin performansını değerlendirmek için bir benchmark aracıdır. Nihai hedefi, çeşitli sistemlerde LLM modellerinin performansını ayrıntılı bir şekilde gösteren kapsamlı bir veri seti derlemek ve kullanıcıların projeleri için doğru LLM model(ler)ini daha etkili bir şekilde seçmelerini sağlamaktır.
Sınırlamalar
LLMSB v0 sürümünde olduğundan sınırlamaları vardır:
- Sadece Debian tabanlı işletim sistemlerinde çalışacak şekilde tasarlanmıştır, yani Windows’ta çalışması amaçlanmamıştır. Bunun nedeni, LLMSB’nin arka planda metrik toplamak için neofetch ve nvidia-smi kullanması ve dosya yolu mantığının Unix işletim sistemlerine dayanmasıdır.
- Metrikler nasıl kaydedildiği nedeniyle, metrik toplayıcı bir toplama işlemini tamamlamak için 1 saniyeye kadar sürebilir. Bu, en hızlı durumda donanım metriklerini her 1 saniyede bir toplayabileceğimiz anlamına gelir.
- LLMSB sadece HuggingFace’i model yüklemek ve çalıştırmak için kullanır. Şu an için bu işe yarıyor, ancak hedefimiz LLMSB’nin sadece HuggingFace değil, birden fazla çerçeveyi desteklemesini sağlamaktır.
- Şu anda tüm modeller, src/hf.py içinde bulunan run_llm() fonksiyonunda sunulan mantık üzerinden çalıştırılıyor; burada AutoTokenizer() ve AutoModelForCausalLM() fonksiyonları bir modeli yüklemek ve çalıştırmak için kullanılıyor. Bu işe yarıyor ancak belirli modelleri yapılandırma/optimize etme şeklimizi sınırlıyor. Bunu bilerek, hedefimiz her popüler model için ayrı sınıflar oluşturmak ve HuggingFace’in model‑spesifik sınıflarını, örneğin LlamaTokenizer ve LlamaForCausalLM gibi, kullanmaktır.
- LLMSB sadece genel, yüksek seviyeli metrikler toplar. Gelecekte daha düşük seviyeli metrikler toplamak istiyoruz. Bunun bir kısmının Pytorch’un profiler wrapper kullanılarak yapılabileceğini düşünüyoruz.
Örnek Çıktılar
22 Kasım 2023
LLMSB, RunPod üzerinden bir L40 ve H100 GPU’da çalıştırıldı/test edildi. Bu benchmarklarda llama-2-7b-hf, codellama-13b-oasst-sft-v10 ve mpt-7b modelleri test edildi. Sonuçları BURADA inceleyin. Herhangi bir hata/issue fark ederseniz, lütfen ISSUES kısmına bildirin.
Kurulum
-
Python ortamı oluşturun ve etkinleştirin:
python3 -m venv env source env/bin/activate
-
Paket bağımlılıklarını kurun (APT kullanarak):
apt -y update apt install -y vim apt install -y neofetch
-
Python bağımlılıklarını kurun:
pip3 install transformers pip3 install psutil pip3 install gputil pip3 install tabulate pip3 install sentencepiece pip3 install protobuf
-
Pytorch kurun
# pytorch stabil sürümünü kur, linux için, CUDA 12.1 kullanarak: pip3 install torch torchvision torchaudio
-
LLM-VM kurun:
pip install llm-vm
-
(isteğe bağlı) LLAMA gibi modeller kullanıyorsanız bir HuggingFace erişim belirteci gerekir. Erişim belirtecini BURADA ayarlayın ve ardından aşağıdaki komutu çalıştırarak belirteci konsola kaydedin:
huggingface-cli login
Nasıl Çalıştırılır
-
Kurulum bölümünde listelenen adımları tamamlayın.
-
Ayarlarınızı yapılandırmak için aşağıdaki parametreleri içeren bir json dosyası oluşturmanız gerekir (örnek aşağıdadır):
- NOT: her çerçeve aynı parametreleri desteklemez
{ "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 }
-
Önceki adımda oluşturduğunuz yapılandırma dosyasının yolunu kullanarak benchmark’ı başlatmak için aşağıdakileri çalıştırın (bir seçenek seçin):
# 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
-
Benchmark tamamlandıktan sonra, aşağıdaki gibi bir dosyada bulunan nihai sonuçları kontrol edin:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
RunPod’u Kurma:
-
RunPod’u kurun, ssh sertifikanızı/anahtarınızı ayarlayın ve bir pod çalıştırın. Pod(lar)ınıza RunPod’un Konsol Sayfası üzerinden erişebilirsiniz.
-
“Connect” (Bağlan) düğmesine tıklayarak ssh bağlantı bilgilerini alın. Bu bilgi aşağıdaki gibi görünmelidir:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example
-
Bu komut şu şekilde biçimlendirilir:
ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
-
-
#2 adımındaki komutu kullanarak pod’a ssh ile bağlanabilir ve seçtiğiniz RunPod pod’undaki GPU’yu kullanabilirsiniz.
-
Pod’dan yerel makinenize bir dosya kopyalamak isterseniz, aşağıdaki formatta bir komut çalıştırmanız gerekir (bu, #2 adımında gösterilen değişkenlere atıfta bulunur):
scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>
-
Böyle bir komutun örneği:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
Pod ile işiniz bittiğinde, pod’u kapatın veya duraklatın. Ancak uyarı: duraklatırsanız yine de ücretlendirilirsiniz, sadece çok daha az.
Harika Kaynaklar:
- Prompt Veri Setleri: awesome-chatgpt-prompts, bigscience/P3, & writing-prompts
- LLM parametreleri hakkında daha fazla bilgi edinin
- Bulut tabanlı LLM modelleri için harika bir benchmark
- Havalı LLM zeka liderlik tabloları: FastEval & open_llm_leaderboard