Local AI

Yerel RAG Gecikmesini Optimize Etme: Tüketici Donanımında Vektör Arama ve Çıkarım Aşırı Yükünü Azaltma

Getirime Dayalı Üretim (RAG) boru hatlarını yerel olarak çalıştırmak, gizliliğe odaklanan geliştirme için standart hale geldi. Ancak birçok geliştirici can sıkıcı bir duvara çarpıyor: gecikme. Tüketici donanımında—genellikle 8GB veya 16GB VRAM ile sınırlı—sorgudan cevaba kadar geçen süre saniyelerden dakikalara kadar değişebilir. Bu genellikle hesaplama gücünün yetersizliğinden değil, optimize edilmemiş vektör aramasından ve verimsiz model çıkarımından kaynaklanır. Bu kılavuzda, bu aşırı yükleri keskin bir şekilde azaltan somut teknikleri inceleyerek yerel RAG'ın hızlı ve üretim için hazır hissettirmesini sağlayacağız.

Verimli Endekslerle Vektör Aramasını Hızlandırma

Getirme işlemi genellikle ilk darboğazdır. Hâlâ büyük veri setlerinde kaba kuvvet araması veya basit kosinüs benzerliği kullanıyorsanız, performanstan mahrum kalıyorsunuz. Yerel kurulumlar için hnswlib kütüphanesi veya FAISS (Facebook AI Similarity Search) mükemmel seçimlerdir. HNSW (Hierarchical Navigable Small World) grafikleri, alt doğrusal arama karmaşıklığı sağlayarak en yakın k komşuyu bulma süresini önemli ölçüde azaltır.

Ayrıca, gömme (embedding) modeli boyutunu göz önünde bulundurun. Daha küçük bir model yeterli olduğunda yüksek parametreli bir model kullanmak gereksiz aşırı yük ekler. Yerel kullanım için all-MiniLM-L6-v2 veya nomic-embed-text, kalite ve hız arasında mükemmel bir denge sağlar.


import hnswlib
import numpy as np

# Bir HNSW endeksi başlatın
dim = 384 # MiniLM-L6 için örnek boyut
max_elements = 10000
index = hnswlib.Index(space='cosine', dim=dim)

# Düşük gecikme için yapılandırın: daha büyük ef_construction, daha küçük ef_search
index.init_index(max_elements=max_elements, ef_construction=200, M=16)
index.set_num_threads(4) # CPU çekirdeklerini verimli kullanın

# Vektörleri ekleyin
vectors = np.random.rand(100, dim)
ids = np.arange(100)
index.add_items(vectors, ids)

# Hız ve doğruluk için ayarlanmış ef parametresiyle arayın
k = 5
ef_search = 16
labels, distances = index.knn_query(vectors[:1], k=k)

Kuantizasyon ve ONNX ile LLM Çıkarımını Hızlandırma

Getirme işlemi optimize edildikten sonra darboğaz Dil Modeline kayar. Tüketici GPU'ları, modeller çok büyükse FP16 veya FP32 modellerle zorlanır. Yapabileceğiniz en etkili değişiklik Kuantizasyon'dur. Modelinizi INT8 veya INT4'e dönüştürmek bellek ayak izini azaltır ve verimliliği artırır. llama.cpp veya vLLM gibi kütüphaneler bunu yerel olarak ele alır, ancak daha geniş uyumluluk için ONNX Runtime güçlü bir çözümdür.

ONNX kullanarak, donanımınıza özel ayarlanmış yürütme sağlayıcılarıyla (NVIDIA için CUDA, AMD/Intel için DirectML) OrtInferenceSession'ı kullanabilirsiniz. Ayrıca, RAG sisteminiz birden fazla sorguyu eşzamanlı olarak işliyorsa dinamik toplu işlemeyi (dynamic batching) etkinleştirin.


import onnxruntime as ort

# ONNX modelini yükleyin
so = ort.SessionOptions()
so.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL

providers = ["CUDAExecutionProvider", "CPUExecutionProvider"]

session = ort.InferenceSession("llama_onnx_model.onnx", so, providers=providers)

# Girdi jetonlarını tanımlayın (örnek)
input_ids = np.array([[1, 2, 3, 4]], dtype=np.int64)

# Çıkarımı çalıştırın
outputs = session.run(None, {"input_ids": input_ids, "attention_mask": np.ones_like(input_ids)})

Pratik İpucu: Parçalama ve Bağlam Penceresi Yönetimi

Bağlam penceresini aşırı doldurmayın. Parçalarınız çok büyükse, LLM alakasız jetonları işleme için daha fazla zaman harcar. Yüksek alaka düzeyini sağlamak için 200-500 jetonluk parçalar hedefleyin. Daha fazla bağlam dahil etmeniz gerekiyorsa küçük bir "harita-azalt" (map-reduce) yaklaşımı kullanın: önce alt parçaları özetleyin, ardından birleştirin. Bu, son LLM çağrısına beslenen jeton sayısını azaltarak çıkarım süresini doğrudan düşürür.

Sonuç

Yerel RAG'ı optimize etmek çok katmanlı bir süreçtir. HNSW gibi verimli vektör endekslerini, hafif gömme modellerini ve kuantize ONNX çıkarımını birleştirerek tüketici donanımında neredeyse gerçek zamanlı yanıtlar elde edebilirsiniz. Profillemeye başlayın: darboğazınızın getirme mi yoksa üretim mi olduğunu belirlemek için py-spy veya Nsight Systems gibi araçları kullanın. En büyük sorunu önce ele alın ve yerel yapay zeka uygulamalarınız gerçekten tepkisel hissettirecektir.

Share: