LLM Hız Benchmarkı
Arka Plan
LLM Speed Benchmark (LLMSB)‘i yarı zamanlı Mühendis Stajyeri olarak çalıştığım süre boyunca Anarchy (YC W23) şirketinde geliştirdim. LLMSB, bir LLM modelinin performansını değerlendirmek için bir benchmark aracıdır. HuggingFace’in transformers kütüphanesini bir LLM modelini yüklemek ve çalıştırmak için kullanı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 codellama-13b-oasst-sft-v10 modelinin H100 üzerinde çalışan bir benchmark çalıştırmasının örneğidir. 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ğil. Bu yüzden, belirli modellerde benchmarklarımı çalıştırmak için RunPod kullanarak GPU(ları) “kiraladım”.
Bu, LLMSB’nin arka plan/orijin hikayesiydi. Proje açık kaynak olduğu için kodu [BURADA] görebilirsiniz. Aşağıda, incelemek isterseniz depodan README’yi ekledim.
Hakkında
🚧 LLM Speed Benchmark (LLMSB) şu anda beta (v0) sürümündedir. Lütfen bunu üretimde kullanmayın, ya da 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 [SORUNLAR] altında bildirin. Geri bildiriminiz çok değerlidir!
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:
- Yalnızca Debian tabanlı işletim sistemlerinde çalışacak şekilde tasarlanmıştır, yani Windows’ta çalışacak şekilde tasarlanmamıştır. Bunun nedeni LLMSB’nin metrikleri toplamak için arka planda neofetch ve nvidia-smi kullanması ve dosya yolu mantığının Unix işletim sistemlerine dayanmasıdır.
- Metriklerin kaydedilme şekli nedeniyle, metrik toplayıcısının bir toplama yapması en fazla 1 saniye sürebilir. Bu, en hızlı durumda donanım metriklerini her 1 saniyede bir toplayabileceğimiz anlamına gelir.
- LLMSB yalnızca modelleri yüklemek ve çalıştırmak için HuggingFace’i kullanır. Şu an için bu işe yarıyor, ancak hedef LLMSB’nin sadece HuggingFace değil, birden fazla çerçeveyi desteklemesidir.
- Ş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 nasıl yapılandırıp optimize edebileceğimizi sınırlıyor. Bunu bilerek, hedef popüler her 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 yalnızca genel, yüksek seviyeli metrikleri 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 modeller llama-2-7b-hf, codellama-13b-oasst-sft-v10 ve mpt-7b test edildi. Sonuçları [BURADA] inceleyin. Herhangi bir hata/sorun fark edilirse, lütfen SORUNLAR’a 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’u kurun
# install pytorch stable build, for linux, using CUDA 12.1: pip3 install torch torchvision torchaudio
-
LLM-VM’yi kurun:
pip install llm-vm
-
(opsiyonel) LLAMA gibi modeller kullanıyorsanız bir HuggingFace erişim token’ına ihtiyacınız olacak. Erişim token’ınızı [BURADA] ayarlayın ve ardından aşağıdaki komutu çalıştırarak token’ınızı konsola kaydedin:
huggingface-cli login
Nasıl Çalıştırılır
-
Kurulum bölümünde listelenen adımları tamamlayın.
-
Setinizi yapılandırmak için aşağıdaki parametrelerle bir json dosyası oluşturmanız gerekir (işte bir örnek):
- 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 }
-
Yukarıdaki adımda oluşturduğunuz konfigürasyon 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 çalışması tamamlandıktan sonra, aşağıdaki gibi bir dosyada final 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” düğmesine tıklayarak ssh bağlantı bilgilerini alın. Bu bilgi şu şekilde görünebilir:
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>
-
-
Adım #2’deki komutu kullanarak pod’a ssh ile bağlanabilir ve o RunPod pod’unda seçtiğiniz GPU’yu kullanabilirsiniz.
-
Pod’dan yerel makinenize bir dosya kopyalamak istiyorsanız, bu formatta bir komut çalıştırmalısınız (bu, adım #2’de 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>
-
İşte böyle bir komut örneği:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
Pod ile işiniz bittiğinde, kapatın veya duraklatın. Ancak uyarı, duraklatırsanız yine ü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
- Harika LLM zeka liderlik tabloları: FastEval & open_llm_leaderboard