Program
Büyük dil modelleri (LLM'ler) birçok sektörde devrim yaratıyor. Müşteri hizmetleri sohbet botlarından sofistike veri analizi araçlarına kadar, bu güçlü teknolojinin yetenekleri dijital etkileşim ve otomasyon alanını yeniden şekillendiriyor.
Ancak LLM'lerin pratik uygulamaları, yüksek güçlü hesaplamaya duyulan ihtiyaç veya hızlı yanıt süreleri gerekliliği nedeniyle sınırlı olabilir. Bu modeller genellikle karmaşık donanım ve kapsamlı bağımlılıklar gerektirir; bu da daha kısıtlı ortamlarda benimsenmelerini zorlaştırabilir.
İşte burada LLaMa.cpp (veya LLaMa C++) imdada yetişiyor ve ağır çerçevelere kıyasla daha hafif, daha taşınabilir bir alternatif sunuyor.

Llama.cpp logosu (kaynak)
Yapay Zeka Uygulamaları Geliştirin
Llama.cpp nedir?
Llama.cpp, Georgi Gerganov tarafından geliştirildi. Meta'nın LLaMa mimarisini verimli C/C++ ile uygular ve LLM çıkarımı alanındaki en dinamik açık kaynak topluluklarından biridir; resmi GitHub deposunda 900'den fazla katkıcı, 69.000+ yıldız ve 2600+ sürüm bulunmaktadır.

LLama.cpp kullanarak LLM çıkarımının bazı temel faydaları
- Evrensel uyumluluk: Llama.cpp'nin CPU-öncelikli bir C++ kitaplığı olarak tasarımı, daha az karmaşıklık ve diğer programlama ortamlarıyla sorunsuz entegrasyon anlamına gelir. Bu geniş uyumluluk, çeşitli platformlarda benimsenmesini hızlandırmıştır.
- Kapsamlı özellik entegrasyonu: Kritik düşük seviye özellikler için bir depo görevi gören Llama.cpp, yüksek seviye yetenekler için LangChain yaklaşımını yansıtır; bu da geliştirme sürecini kolaylaştırır, ancak gelecekte ölçeklenebilirlik açısından zorluklar doğurabilir.
- Odaklı optimizasyon: Llama.cpp tek bir model mimarisine odaklanır; bu da hassas ve etkili iyileştirmeleri mümkün kılar. GGML ve GGUF gibi formatlar aracılığıyla Llama modellerine olan bağlılığı, önemli verimlilik kazanımlarına yol açmıştır.
Bu Llama.cpp anlayışıyla, bu eğitimin sonraki bölümleri bir metin üretimi kullanım senaryosunun uygulanması sürecini adım adım ele alır. LLama.cpp temellerini keşfederek başlıyor, eldeki projenin uçtan uca iş akışını anlıyor ve farklı sektörlerdeki bazı uygulamalarını inceliyoruz.
Llama.cpp Mimarisi
Llama.cpp'nin belkemiği, dönüştürücü (transformer) mimarisine dayanan orijinal Llama modelleridir. Llama yazarları, sonrasında önerilen çeşitli iyileştirmelerden yararlanmış ve PaLM gibi farklı modellerde kullanılan yaklaşımları benimsemiştir.

Transformer ve Llama mimarisi arasındaki fark (Llama mimarisi: Umar Jamil)
LLaMa mimarisi ile transformer'lar arasındaki başlıca farklar:
- Ön-normalizasyon (GPT3): Çıkışı normalleştirmek yerine her transformer alt katmanının girdisini RMSNorm yaklaşımıyla normalleştirerek eğitim kararlılığını artırmak için kullanılır.
- SwiGLU aktivasyon fonksiyonu (PaLM): Orijinal doğrusal olmayan ReLU aktivasyon fonksiyonu, performans iyileştirmeleri sağlayan SwiGLU aktivasyon fonksiyonuyla değiştirilmiştir.
- Döner gömme (GPTNeo): Mutlak konumsal gömmeler kaldırıldıktan sonra, ağın her katmanına döner konumsal gömmeler (RoPE) eklenmiştir.
Ortamın Kurulumu
LLama.cpp ile çalışmaya başlamak için gereken ön koşullar şunlardır:
Python: Python paket yöneticisi pip'i çalıştırabilmek içinLlama-cpp-python: llama.cpp için Python bağlayıcısı
Sanal ortam oluşturma
Kurulum sürecine ilişkin sorunları önlemek için bir sanal ortam oluşturulması önerilir; bu amaçla conda iyi bir adaydır.
Bu bölümdeki tüm komutlar bir terminalden çalıştırılır. conda create ifadesini kullanarak llama-cpp-env adlı bir sanal ortam oluşturuyoruz.
conda create --name llama-cpp-env
Sanal ortam başarıyla oluşturulduktan sonra, aşağıdaki gibi conda activate ifadesini kullanarak bu sanal ortamı etkinleştiriyoruz:
conda activate llama-cpp-env
Yukarıdaki ifade, terminalin başında köşeli parantezler içinde ortam değişkeninin adını aşağıdaki gibi göstermelidir:

Etkinleştirmeden sonra sanal ortamın adı
Artık llama-cpp-python paketini aşağıdaki gibi kurabiliriz:
pip install llama-cpp-python
or
pip install llama-cpp-python==0.1.48
llama_cpp_script.py dosyasının başarıyla çalıştırılması, kitaplığın doğru şekilde kurulduğu anlamına gelir.
Kurulumun başarılı olduğundan emin olmak için bir import ifadesi oluşturalım ve ardından betiği çalıştıralım.
- Önce
from llama_cpp import Llamaifadesinillama_cpp_script.pydosyasına ekleyin, ardından - Python ile
llama_cpp_script.pydosyasını çalıştırın. Kitaplık içe aktarılamazsa bir hata oluşur; bu durumda kurulum sürecinin daha ayrıntılı incelenmesi gerekir.
Llama.cpp Temellerini Anlama
Bu aşamada kurulum sürecinin başarılı olması gerekir. Şimdi LLama.cpp'nin temellerini anlamaya dalalım.
Yukarıda içe aktarılan Llama sınıfı, Llama.cpp kullanılırken başvurulan ana kurucudur ve birkaç parametre alır; aşağıdakilerle sınırlı değildir. Parametrelerin tam listesi resmi belgelerde verilmiştir:
model_path: Kullanılan Llama model dosyasının yoluprompt: Modele verilecek giriş istemi. Bu metin belirteçlere ayrılır ve modele iletilir.device: Llama modelini çalıştırmak için kullanılacak aygıt; CPU veya GPU olabilir.max_tokens: Modelin yanıtında üretilecek azami belirteç sayısıstop: Modelin üretim sürecini durduracak dizelerin listesitemperature: 0 ile 1 arasında bir değerdir. Değer ne kadar düşükse sonuç o kadar belirleyicidir. Öte yandan, daha yüksek bir değer daha fazla rastgelelik ve dolayısıyla daha çeşitli ve yaratıcı çıktı sağlar.top_p: Tahminlerin çeşitliliğini kontrol etmek için kullanılır; kümülatif olasılığı belirli bir eşiği aşan en olası belirteçleri seçer. Sıfırdan başlayarak, daha yüksek bir değer daha iyi bir çıktı bulma şansını artırır ancak ek hesaplama gerektirir.echo: Modelin orijinal istemi başta dahil edip etmeyeceğini (True) veya etmeyeceğini (False) belirlemek için kullanılan bir boolean
Örneğin, geçerli çalışma dizininde depolanan <MY_AWESOME_MODEL> adlı bir büyük dil modelini kullanmak istediğimizi düşünelim. Örnekleme işlemi şu şekilde olacaktır:
# Instanciate the model
my_aweseome_llama_model = Llama(model_path="./MY_AWESOME_MODEL")
prompt = "This is a prompt"
max_tokens = 100
temperature = 0.3
top_p = 0.1
echo = True
stop = ["Q", "\n"]
# Define the parameters
model_output = my_aweseome_llama_model(
prompt,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
echo=echo,
stop=stop,
)
final_result = model_output["choices"][0]["text"].strip()
Kod kendini açıklar niteliktedir ve her bir parametrenin anlamını belirten ilk madde işaretlerinden kolayca anlaşılabilir.
Modelin sonucu, üretilen yanıtı ve bazı ek üst verileri içeren bir sözlüktür. Çıktının formatı, makalenin sonraki bölümlerinde incelenmektedir.
İlk Llama.cpp Projeniz
Artık metin üretim projesinin uygulanmasına başlama zamanı. Yeni bir Llama.cpp projesine başlamak, ilgi duyulan büyük dil modelini yüklemekten nihai yanıtı üretmeye kadar tüm adımları açıklayan yukarıdaki Python kod şablonunu izlemekten ibarettir.
Proje, Hugging Face kaynağındaki Zephyr-7B-Beta'nın GGUF sürümünden yararlanır. Bu model, mistralai/Mistral-7B-v0.1'in, Direct Preference Optimization (DPO) kullanılarak kamuya açık, sentetik veri kümelerinin bir karışımı üzerinde ince ayar yapılmış bir sürümüdür.
Transformers ve Hugging Face Kullanımına Giriş yazımız, Transformers hakkında daha iyi bir kavrayış ve gerçek hayattaki problemleri çözmek için güçlerinden nasıl yararlanılacağını sunar. Ayrıca bir Mistral 7B eğitimi de hazırladık.

Hugging Face'ten Zephyr modeli (kaynak)
Model yerel olarak indirildikten sonra, proje konumundaki model klasörüne taşıyabiliriz. Uygulamaya dalmadan önce, projenin yapısını anlayalım:

Projenin yapısı
İlk adım, Llama kurucusunu kullanarak modeli yüklemektir. Bu büyük bir model olduğundan, yüklenecek modelin azami bağlam boyutunu belirtmek önemlidir. Bu özel projede 512 belirteç kullanıyoruz.
from llama_cpp import Llama
# GLOBAL VARIABLES
my_model_path = "./model/zephyr-7b-beta.Q4_0.gguf"
CONTEXT_SIZE = 512
# LOAD THE MODEL
zephyr_model = Llama(model_path=my_model_path,
n_ctx=CONTEXT_SIZE)
Model yüklendikten sonra, sonraki adım özgün kod şablonunu kullanarak metin üretimi aşamasıdır; ancak bunun yerine generate_text_from_prompt adlı bir yardımcı işlev kullanıyoruz.
def generate_text_from_prompt(user_prompt,
max_tokens = 100,
temperature = 0.3,
top_p = 0.1,
echo = True,
stop = ["Q", "\n"]):
# Define the parameters
model_output = zephyr_model(
user_prompt,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
echo=echo,
stop=stop,
)
return model_output
__main__ koşulu içinde, işlev belirli bir istemle çalıştırılabilir.
if __name__ == "__main__":
my_prompt = "What do you think about the inclusion policies in Tech companies?"
zephyr_model_response = generate_text_from_prompt(my_prompt)
print(zephyr_model_response)
Model yanıtı aşağıda verilmiştir:

Modelin yanıtı
Model tarafından üretilen yanıt <What do you think about the inclusion policies in Tech companies?> olup, modelin tam yanıtı turuncu kutuda vurgulanmıştır.
- Orijinal istem 12 belirteçten oluşur
- Yanıt veya tamamlama belirteçleri 10 belirteçtir ve
- Toplam belirteç sayısı yukarıdaki iki değerin toplamı olup 22'dir
Bu tam çıktı, sonraki kullanım için faydalı olsa da, yalnızca modelin metinsel yanıtıyla ilgileniyor olabiliriz. Yanıtı, aşağıdaki gibi “choices” öğesinin “text” alanını seçerek bu sonucu elde edecek şekilde biçimlendirebiliriz:
final_result = model_output["choices"][0]["text"].strip()
strip() işlevi, bir dizgenin başındaki ve sonundaki boşlukları kaldırmak için kullanılır ve sonuç şudur:
Tech companies want diverse workforces to build better products.
Llama.CPP'nin Gerçek Dünya Uygulamaları
Bu bölüm, LLama.cpp'nin gerçek dünyadaki bir uygulamasını ele alır ve altta yatan problemi, olası çözümü ve Llama.cpp kullanmanın faydalarını sunar.
Problem
ETP4Africa adlı, eğitim uygulamaları için çeşitli cihazlarda verimli şekilde çalışabilen ve gecikmeye neden olmayan bir dil modeline ihtiyaç duyan bir teknoloji girişimini hayal edin.
Llama.cpp ile Çözüm
CPU'ya optimize edilmiş performansından ve Go tabanlı arka uçlarıyla arayüz oluşturabilme yeteneğinden yararlanarak Llama.cpp'yi uygularlar.
Faydalar
- Taşınabilirlik ve hız: Llama.cpp'nin hafif tasarımı, hızlı yanıtlar ve birçok cihazla uyumluluk sağlar.
- Özelleştirme: Uyarlanmış düşük seviye özellikler, uygulamanın etkili gerçek zamanlı kodlama yardımı sağlamasına olanak tanır.
Llama.cpp entegrasyonu, ETP4Africa uygulamasının anında, etkileşimli programlama rehberliği sunmasına olanak tanıyarak kullanıcı deneyimini ve etkileşimini artırır.
Veri Mühendisliği, herhangi bir Veri Bilimi ve Yapay Zekâ projesinin temel bir bileşenidir ve Veri Mühendisliği ve Veri Uygulamaları için LangChain'e Giriş eğitimiz, büyük dil modellerinden gelen yapay zekâyı veri hatlarına ve uygulamalara dahil etmek için kapsamlı bir rehber sunar.
Sonuç
Özetle, bu makale LLama.cpp ile büyük dil modellerinin kurulumu ve kullanımı hakkında kapsamlı bir genel bakış sundu.
Llama.cpp'nin temellerini anlamanıza, çalışma ortamını kurmanıza, gerekli kitaplığı yüklemenize ve bir metin üretimi (soru-cevap) kullanım senaryosunu uygulamanıza yardımcı olacak ayrıntılı talimatlar verildi.
Son olarak, gerçek bir uygulama için pratik içgörüler ve Llama.cpp'nin altta yatan problemi verimli bir şekilde nasıl ele alabileceği aktarıldı.
Daha büyük dil modelleri dünyasına daha derinlemesine dalmaya hazır mısınız? Yapay zekâ profesyonellerinin kullandığı güçlü derin öğrenme çerçeveleri LangChain ve Pytorch ile becerilerinizi geliştirin: LangChain ile LLM Uygulamaları Nasıl Geliştirilir eğitimi ve PyTorch ile Bir LLM Nasıl Eğitilir.
SSS
Llama.cpp diğer hafif LLM çerçevelerinden nasıl ayrılır?
Llama.cpp özellikle CPU kullanımı için optimize edilmiştir; bu da GPU hızlandırmasına büyük ölçüde dayanabilen diğer çerçevelerden ayrılmasını sağlar. Bu özellik, sınırlı donanım kaynaklarına sahip ortamlar için onu uygun kılar.
Llama.cpp'yi verimli biçimde çalıştırmak için sistem gereksinimleri nelerdir?
Llama.cpp hafif olacak şekilde tasarlanmış olsa da, yine de daha büyük modelleri yönetmek için modern çok çekirdekli bir CPU'dan ve yeterli RAM'den fayda sağlar. Kesin gereksinimler, üzerinde çalıştığınız modelin boyutuna bağlıdır.
Llama.cpp Python dışında diğer programlama dilleriyle entegre edilebilir mi?
Evet, Llama.cpp'nin bir C++ kitaplığı olarak tasarımı, Python dışındaki farklı programlama ortamlarına da entegrasyona olanak tanır; ancak her dil için özel bağlayıcıların uygulanması gerekir.
Llama modelleri bağlamında bahsedilen GGML ve GGUF formatları nedir?
GGML (Georgi Gerganov Model Language) ve GGUF, Llama modellerini verimli şekilde depolamak için kullanılan formatlardır; depolama boyutunu azaltmaya ve yükleme hızını artırmaya odaklanırlar.
Llama.cpp, LLaMa modellerindeki güncellemeleri ve iyileştirmeleri nasıl ele alıyor?
Açık kaynak topluluğu Llama.cpp'yi etkin biçimde sürdürür; böylece LLaMa modellerindeki en son gelişmeler ve optimizasyonlar dâhil edilir ve verimlilik ile performans kazanımlarına katkı sağlanır.
Llama.cpp kullanmanın bilinen sınırlamaları veya sorunları var mı?
Diğer yazılımlarda olduğu gibi, Llama.cpp'nin de özellikle çok büyük modeller veya karmaşık iş akışlarında ölçeklenebilirlik açısından sınırlamaları olabilir. Ayrıca, CPU'ya optimize edilmiş olması, belirli görevlerde GPU tabanlı çözümlerin performansına ulaşamayabilir.
Temperature parametresi Llama.cpp çıktısını nasıl etkiler?
temperature parametresi, model yanıtlarındaki rastgeleliği etkiler. Düşük değerler çıktıyı daha belirleyici kılarken, daha yüksek değerler değişkenlik katar; bu da yaratıcı uygulamalarda faydalı olabilir.

Bilgisini paylaşmaktan ve başkalarına katkı sunmaktan keyif alan, çok yönlü bir veri bilimci olan Zoumana, YouTube’da içerik üretiyor ve Medium’da önde gelen teknoloji yazarları arasında yer alıyor. Konuşmaktan, kod yazmaktan ve öğretmekten büyük zevk alıyor. Zoumana’nın iki yüksek lisans derecesi bulunuyor: İlki Fransa, Paris’te Makine Öğrenmesi odaklı Bilgisayar Bilimleri; ikincisi ise ABD’de Texas Tech University’den Veri Bilimi. Kariyerine Fransa’da Groupe OPEN’da Yazılım Geliştirici olarak başladı; ardından IBM’de Makine Öğrenmesi Danışmanı olarak çalıştı ve sigorta şirketleri için uçtan uca yapay zeka çözümleri geliştirdi. Paris ve Montreal merkezli ilk Sürdürülebilir YZ girişimi olan Axionable’a katıldı. Burada Veri Bilimci olarak görev yaptı ve çoğunlukla NLP kullanım örnekleri olmak üzere, Fransa, Montreal, Singapur ve İsviçre’den müşteriler için YZ ürünleri hayata geçirdi. Ayrıca zamanının %5’ini Araştırma ve Geliştirme’ye ayırdı. Hâlihazırda IFC – Dünya Bankası Grubu’nda Kıdemli Veri Bilimci olarak çalışmaktadır.