En iyi LLM Çıkarım performansı için iki temel unsur gerekiyor: hız ve geliştirici hızı. Hız, altındaki donanımın verimliliğini en üst düzeye çıkararak yüksek optimize edilmiş hesaplama çekirdeklerinin algoritmalarını kullanmayı ifade eder. Geliştirici hızı ise bu yeni çekirdekleri hızlı bir şekilde benimseme ve yeni modeller, algoritmalar ve donanımlar geliştirme yeteneğini belirtir. Sonuç olarak, bu hız, yeni hesaplama çekirdeklerinin hızlı bir şekilde dağıtılması ve bu çekirdeklerin çerçevelere entegrasyonunu kolaylaştırır.

FlashInfer, verimli LLM hizmet motorları oluşturmak için özelleştirilebilir ve etkili bir kütüphanedir. KV-cache depolamasını blok-seyrek ve birleşilebilir formatlar kullanarak optimize eder, bu sayede bellek erişimini iyileştirir ve tekrarı azaltır. Farklı ayarlarla uyumlu bir özelleştirilebilir dikkat şablonu sunar; bu şablon, anlık derleme (JIT) ile uyum sağlamaktadır. Dinamik kullanıcı taleplerine göre ayarlanan yük dengeli planlama algoritması, NVIDIA CUDA Grafik statik yapılandırmasıyla uyumlu kalır. FlashInfer, MLC Engine, SGLang ve vLLM gibi önde gelen LLM hizmet çerçeveleri ve çeşitli özel motorlarla entegre edilmiştir.
FlashInfer, Carnegie Mellon Üniversitesi Paul G. Allen Bilgisayar Bilimleri ve Mühendislik Okulu ile OctoAI (NVIDIA tarafından satın alındı) arasındaki işbirlikçi bir araştırma projesi olarak başladı. Ekip, motor bağımsız, yüksek optimize edilmiş ve yeni tekniklere kolayca genişletilebilen bir LLM çıkarım çekirdekleri kütüphanesi yaratmayı hedefledi. Şimdi, üretim dağıtımları ve AI sistemleri topluluğundaki araştırma ve geliştirme ekiplerinin katkılarıyla büyüyen bir açık kaynak projesidir.
Teknik makale FlashInfer: Verimli ve Özelleştirilebilir Dikkat Motoru LLM Çıkarım Hizmeti için, MLSys 2025’te en iyi makale ödülü almıştır.
NVIDIA, şimdi FlashInfer’de en performanslı LLM çıkarım çekirdeklerini yayımlamaktadır. Bu çekirdekler, NVIDIA TensorRT-LLM gibi yerlerden gelir ve vLLM, SGLang ve özel çıkarım motorlarına kolay entegrasyon sağlar.
FlashInfer Mimari Genel Görünümü
FlashInfer, LLM hizmeti için özel olarak yapılandırılmış bir NVIDIA GPU operatör yığını olarak, en yeni çekirdekler için hız ve geliştirici hızı hedeflemektedir. Çıkarım platformları, yeni kütüphanelerin beklenmesine gerek kalmadan veya CUDA C++’da çekirdekleri yeniden yazmadan yenilikçi fikirleri benimseyebilir. Bu çekirdekler, DLPack API’si aracılığıyla tüm çerçevelere sunulacak ve birçok çıkarım motoruna kolay entegrasyon sağlamak için PyTorch operatörleri olarak kaydedilecektir. JIT yeteneği, kullanıcıların hedef model tarafından kullanılan çekirdekleri gerçekleştirmesine olanak tanır; bu sayede FlashInfer, bağımlılık olarak minimal bir ayak izine sahiptir.
FlashInfer, LLM iş yüklerini Dikkat, GEMM, İletişim ve Örnekleme olmak üzere dört operatör ailesine böler ve her bir aileyi minimal kod değişiklikleri ile herhangi bir hizmet motoruna entegre edilebilen hafif, yüksek performanslı toplu işlemler aracılığıyla sunar.
Dikkat
Modern çıkarım talepleri, olağanüstü farklı sıra uzunlukları, KV tampon blok boyutları, maskeleme kuralları ve konum kodlama şemaları ile gelir. FlashInfer, bu dinamizmi hassas bir şekilde yönetir:
- Birleşik depolama: her tamponu blok/vektör seyrek matris olarak temsil eder.
- Şablon ve JIT çekirdekleri: CUDA/CUTLASS kod tabanı, özelleştirme düğmeleri, logits/anahtar/soru, gruplandırılmış, MLA ve gelecekteki varyantlar ile.
- İnceleme–uygulayıcı arayüzü: önce istek şekillerini ve ön paylaşım modellerini inceleyen, ardından hafif bir planlayıcı aracılığıyla optimize edilmiş çekirdekleri başlatan PyTorch dostu bir API.

GEMM ve İletişim
LLM blokları hala yoğun bir şekilde matris çarpımına dayanıyor. Geleneksel GEMV/GEMM hesaplamalarının yanı sıra, karışım uzmanları ve LoRA katmanları gibi son gelişmeler, gruplandırılmış GEMM gibi yeni gereksinimleri de beraberinde getiriyor—birden fazla küçük matris çarpımını tek bir çağrıda gerçekleştiriyor—ve her yere iletişim sağlamaktadır. FlashInfer, en hızlı açık kaynak veya NVIDIA çekirdeklerini (fp4 / fp8 tensor-core yollarını da içeren) seçer ve bunları tek bir tutarlı API’nin arkasında sunarak, hizmet yığını uygulama mantığını değiştirmeden GPU’ları veya çekirdekleri değiştirebilir.
Token Örnekleme
Bir sonraki token’ı üretmek genellikle Top-K/Top-P filtrelemesine takılmaktadır. Geleneksel uygulamalar, yalnızca birkaç logits’in önemli olduğu durumlarda tüm kelime dağarcığını sıralamakta, bu da gereksiz bir iş yükü yaratmaktadır. FlashInfer, küresel sıralamaları, olasılığı düşük olan token’ları anında elemek için bir red-esaslı ve sıralama-free örnekleyici ile değiştirir, böylece büyük kelime hazinelerinde gecikmeyi azaltıyor ve sayısal olarak doğru kalıyor.
Geleceği Garantileme
Tüm bu katmanlar ile birlikte, hizmet çerçeveleri KV-cache düzenlerini değiştirme, yeni dikkat tasarımlarını tanıtma, rastgele uzunlukları gruplama veya daha sıkı gecikme hedeflerini takip etme imkanına sahip olur; bu da çekirdekleri yeniden yazmayı veya CPU’ya dönmeyi gerektirmez. İlk sorgudan son token’a, FlashInfer kritik çıkarım yolunu GPU üzerinde tutarak esnek, geleceği garantileyen ve hızlı olmayı başarır.
FlashInfer Kullanımı
Flashinfer paketi PyPI üzerinde mevcuttur. Denemek için:
pip install flashinfer-python
FlashInfer, plan/uygula tasarımı ile çekirdek derleme/seçim/ayarları ve çekirdek çalıştırmayı ayrıştıran Torch-yerli API’lar sunar. Dikkat için API şöyle görünmektedir:
from flashinfer.attention import BatchAttention
attention = BatchAttention(backend="cutlass") # Birden fazla arka uç uygulaması sağlıyoruz
attention.plan(
qo_offsets, # değişken uzunluklu sorgu/çıkışta her talep için offsetler
kv_lens, # sayfa tablosundaki her talep için kv uzunluğu
kv_block_table, # sayfa tablosundaki blok indekslerini belirten blok tablosu, paketlenebilir/doldurulabilir
num_qo_heads, # sorgu/çıkış başlarının sayısı
num_kv_heads, # anahtar/değer başlarının sayısı
head_dim_qk, # anahtar/sorgu baş boyutu
head_dim_vo, # değer/çıkış baş boyutu
dtype_q=torch.bfloat16, # sorgu veri türü
dtype_kv=torch.bfloat16, # kv veri türü
dtype_o=torch.bfloat16, # çıkış veri türü
**variant_kwargs, # dikkat varyantlarını belirtme gibi diğer argümanlar
)
O, lse = attention.run(q, (k, v)) # çıktı/lse döndür
Çekirdek seçimi ve ayarı, plan aşamasında gerçekleştirilir; bu aşama gerek duyulan meta verileri toplar. Aynı plan bilgileri, aynı meta verilere sahip sonraki çalıştırmalar için yeniden kullanılabilir (LLM üretim adımındaki tüm katmanlar için).
Kullanıcılar, kullanım durumları için en iyi performansı elde etmek amacıyla birden fazla dikkat arka ucu arasından seçim yapabilir. Tüm çekirdekler CUDAGraph güvenliği sağlar; bu da düşük gecikmeli LLM çıkarım hizmetine olanak tanır.
Logits işleme için modüler bir arayüz, farklı logits işlemcilerini bir araya getirirken, flashinfer etkili bir şekilde reddetme örnekleme tabanlı bir uygulama üretir. Sonunda, blog yazımız flashinfer reddetme örnekleme algoritmasının nasıl çalıştığını açıklamaktadır.
import flashinfer
from flashinfer.logits_processor import LogitsPipe, Temperature, Softmax, TopP, Sample
# Bir boru hattı oluştur
pipe = LogitsPipe([
Temperature(), # Logit'leri sıcaklık ile ölçeklendir
Softmax(), # Logit'leri olasılıklara dönüştür
TopP(), # Top-p filtrelemesi uygula
Sample() # Dağılım üzerinden örnek al
])
# Boru hattını uygula
logits = torch.randn(batch_size, vocab_size, device="cuda")
output_ids = pipe(logits, temperature=0.7, top_p=0.9)
FlashInfer ile başlamanız için GitHub reposu ve belgelere göz atabilirsiniz.