Yerel LLM Modellerini Karşılaştırma
Arka Plan
LLM Speed Benchmark’ı (LLMSB), Anarchy (YC W23) şirketinde yarı zamanlı bir Mühendislik Stajyeri olarak çalıştığım dönemde geliştirdim. LLMSB, bir LLM modelinin performansını değerlendirmek için kullanılan bir kıyaslama aracıdır. Bir LLM modelini yüklemek ve çalıştırmak için HuggingFace’in transformers kütüphanesini kullanır ve şunları ölçer:
- toplam çalışma süresi
- saniye başına token
- genel donanım özellikleri
- CPU kullanımı (geçerli frekans ve çekirdeklerin zaman içindeki kullanım % oranı)
- RAM kullanımı (RAM ve swap kullanımının zaman içindeki durumu)
- GPU kullanımı (yük, bellek kullanımı ve sıcaklığın zaman içindeki durumu)
BURADA, H100 üzerinde çalışan codellama-13b-oasst-sft-v10 modeli için alınmış bir kıyaslama çalıştırmasının örneğidir. Kişisel olarak 8 GB VRAM’e sahip bir Nvidia RTX 2070 Ti kartına sahibim. 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 modeller üzerinde kıyaslamalarımı çalıştırmak için GPU(lar) “kiralamak” amacıyla RunPod‘u kullandım.
Bu, LLMSB’nin arka planı/köken hikayesiydi. Proje açık kaynaklı olduğundan, kodu BURADA inceleyebilirsiniz. Aşağıda, göz atmak isterseniz depodaki README’yi ekledim.
Hakkında
🚧 LLM Speed Benchmark (LLMSB) şu anda beta aşamasındadır (v0). Lütfen bunu üretim ortamında kullanmayın ya da kendi riskinizle kullanın. Hâlâ bazı pürüzleri gideriyor ve işlevselliği iyileştiriyoruz. Herhangi bir hata ile karşılaşırsanız veya öneriniz varsa, lütfen bunları ISSUES altında bildirin. Geri bildiriminiz çok değerlidir!
LLM Speed Benchmark (LLMSB), LLM modellerinin performansını farklı donanım platformlarında değerlendirmek için kullanılan bir kıyaslama aracıdır. Nihai amacı, LLM modellerinin çeşitli sistemlerdeki performansını ayrıntılı biçimde içeren kapsamlı bir veri kümesi derlemek ve kullanıcıların projeleri için doğru LLM model(ler)ini daha etkili biçimde seçmesini sağlamaktır.
Sınırlamalar
LLMSB v0 sürümündedir, bu nedenle bazı 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 arka planda toplamak için neofetch ve nvidia-smi kullanması ve dosya yolu mantığının Unix işletim sistemlerine dayanmasıdır.
- Metriklerin kaydedilme biçimi nedeniyle, metrik toplayıcının bir toplama işlemini gerçekleştirmesi 1 saniyeye kadar sürebilir. Bu, en hızlı durumda, donanım metriklerini her 1 saniyede bir toplayabileceğimiz anlamına gelir.
- LLMSB, modelleri yüklemek ve çalıştırmak için yalnızca HuggingFace kullanır. Bu şimdilik işe yarıyor, ancak hedef LLMSB’nin yalnızca HuggingFace değil, birden fazla çerçeveyi desteklemesidir.
- Şu anda tüm modeller, src/hf.py içinde yer alan run_llm() fonksiyonunda sunulan mantık üzerinden çalıştırılmaktadır; burada bir modeli yüklemek ve çalıştırmak için AutoTokenizer() ve AutoModelForCausalLM() fonksiyonları kullanılır. Bu çalışır, ancak belirli modelleri nasıl yapılandırıp/optimize edebileceğimizi sınırlar. Bunu bildiğimiz için hedef, her popüler model için ayrı sınıflar oluşturmak ve bunun yerine LlamaTokenizer ve LlamaForCausalLM gibi HuggingFace’e özgü model sınıflarını kullanmaktır.
- LLMSB yalnızca genel, üst düzey metrikleri toplar. Gelecekte daha düşük seviyeli metrikler toplamayı istiyoruz. Bunun kısmen Pytorch’un porfiler wrapper özelliği kullanılarak yapılabileceğini düşünüyoruz.
Örnek Çıktılar
22 Kasım 2023
LLMSB, RunPod aracılığıyla bir L40 ve H100 GPU üzerinde çalıştırıldı/test edildi. Bu kıyaslamalarda llama-2-7b-hf, codellama-13b-oasst-sft-v10 ve mpt-7b modelleri test edildi. Sonuçlara BURADA göz atın. Herhangi bir hata/sorun fark edilirse, lütfen bunları ISSUES’a bildirin.
Kurulum
-
Bir 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
# CUDA 12.1 kullanarak, Linux için PyTorch kararlı sürümünü kurun: pip3 install torch torchvision torchaudio -
LLM-VM kurun:
pip install llm-vm -
(isteğe bağlı) Eğer LLAMA gibi modeller kullanıyorsanız, bir HuggingFace erişim belirtecine ihtiyacınız olacak. Erişim belirtecinizi BURADA ayarlayın, ardından aşağıdaki komutu çalıştırarak belirtecinizi konsolunuza kaydedin:
huggingface-cli login
Nasıl Çalıştırılır
-
Kurulum bölümünde listelenen adımları tamamlayın.
-
Kümenizi 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", # modelin HuggingFace üzerindeki yolu/deposu (https://huggingface.co/models) "prompt": "Hello World!", # LLM modeline girmek istediğiniz istem "device": "cuda:0", # LLM modelini çalıştırmak istediğiniz aygıt (GPU/CPU) "max_length": 50, # üretilen tokenların maksimum uzunluğu "temperature": 0.9, # LLM modeli için sıcaklık değeri "top_k": 50, # LLM modeli için top-k değeri "top_p": 0.9, # LLM modeli için top-p değeri "num_return_sequences": 1, # modelin bağımsız olarak çalıştırılan örneklerinin sayısı "time_delay": 0, # metrik toplayıcının her yineleme başına bekleyeceği zaman gecikmesi (saniye) "model_start_pause": 1, # testin LLM modelini çalıştırmadan ÖNCE bekleyeceği süre (saniye) "model_end_pause": 1 # testin LLM modeli çalışmayı bitirdikten SONRA bekleyeceği süre (saniye) "framework": "llm-vm" # modeli çalıştırmak için kullanmak istediğiniz çerçevenin/kütüphanenin adı } -
Önceki adımda oluşturduğunuz yapılandırma dosyasının yolunu kullanarak, kıyaslamayı başlatmak için aşağıdakilerden birini çalıştırın (bir seçenek seçin):
# bir kıyaslama çalıştır python3 run.py --config ./configs/llmvm_test.json # birden fazla kıyaslama çalıştır (bu durumda 3) python3 run.py --config ./configs/llmvm_test.json --loops 3 -
Kıyaslama çalışmayı bitirdikten sonra, nihai sonuçları aşağıdakine benzer görünen bir dosyada kontrol edin:
report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
RunPod Kurulumu:
-
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.
-
SSH bağlantı bilgilerini almak için “Connect” düğmesine tıklayın. Bu bilgi aşağıdakine benzer görünmelidir:
ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example-
Bu komut şu şekilde biçimlendirilmiş olacaktır:
ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
-
-
- adımdaki komutu kullanarak, pod’a ssh ile bağlanabilmeli ve seçtiğiniz GPU’yu bu RunPod pod’unda kullanabilmelisiniz.
-
Pod’dan yerel makinenize bir dosya kopyalamak isterseniz, komutu şu biçimde çalıştırırsınız (bu, 2. adımda gösterilen değişkenlere atıfta bulunmaktadır):
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 komutun örneği:
scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
-
-
Pod ile işiniz bittikten sonra, onu kapatın ya da duraklatın. Ancak dikkat edin, eğer duraklatırsanız yine ücretlendirilirsiniz, sadece çok daha az.
Harika Kaynaklar:
- İstem Veri Kümeleri: awesome-chatgpt-prompts, bigscience/P3 ve writing-prompts
- LLM parametreleri hakkında daha fazla bilgi edinin
- Bulut tabanlı LLM modellerini karşılaştırmak için harika bir kıyaslama aracı
- Harika LLM zeka lider tabloları: FastEval ve open_llm_leaderboard