Ağaç topluluğu modelleri, tabular veri konusunda her zaman tercih edilen bir seçenek olmuştur. Bu modeller, yüksek doğruluk sunmalarının yanı sıra, eğitim maliyetleri göreceli olarak düşüktür ve hızlıdır. Ancak, Python ile yapılan tahminlerin merkezi işlem birimlerinde (CPU) uygulanması, 10 ms altı gecikme veya saniyede milyonlarca tahmin gerektiren durumlarda hızla bir darboğaza dönüşmektedir.
Forest Inference Library (FIL), 2019 yılında cuML 0.9 ile tanıtıldı ve her zaman bir amaca hizmet etti: Gradient-boşaltma ağaçları ve rastgele ormanlar için çığır açan hızda tahmin. Bu modeller, XGBoost, LightGBM, Scikit-learn veya NVIDIA cuML ile eğitildiğinde kullanılabilir. Genel olarak, modeliniz eğer Treelite‘e dönüştürülebiliyorsa, FIL’den faydalanabilirsiniz.
FIL, RAPIDS 25.04 ile yeniden tasarlandı ve bu yeni sürümle birlikte gelen yenilikler şunlardır:
- GPU veya CPU üzerinde toplu tahmin yapmanıza olanak tanıyan yeni C++ uygulaması
- Tahmin modelinizi ayarlamak için bir optimize() işlevi
- Yeni gelişmiş tahmin API’leri (predict_per_tree, apply)
- cuML 25.02 FIL’e göre %400’e kadar daha hızlı GPU verimliliği
Bu blog yazısında, FIL’in cuML 25.04’teki yeni yetenekleri, performansı ve özellikleri hakkında bilgi edinecek ve önceki cuML sürümlerine göre sunduğu avantajların altını çizeceksiniz.
Hızlı başlangıç örneği (XGBoost → FIL)
Kullanıcılar, XGBoost, LightGBM veya Scikit-learn’de modellerini eğitebilir, diske kaydedebilir ve ardından FIL ile bu modelleri yeniden yükleyip yeni verilere uygulayabilirler. Bu, bir dağıtım sunucusunda veya eğitim yapılan cihazdan tamamen farklı bir donanımda olabilir. İşte bu kullanışlı Python API’sinin kolay bir örneği:
import xgboost as xgb
from cuml.fil import ForestInference
# Modelinizi normal şekilde eğitin ve kaydedin
xgb_model = xgb.XGBClassifier()
xgb_model.fit(X_train, y_train)
xgb_model.save_model("xgb_model.ubj")
# FIL'e yükleyin ve 10 k'lık satır grupları için otomatik ayar yapın
fil_model = ForestInference.load("xgb_model.ubj")
# Artık FIL ile doğrudan tahmin yapabilirsiniz
preds = fil_model.predict(X_test)
probs = fil_model.predict_proba(X_test)
cuML’de FIL’deki Yenilikler
Otomatik Optimizasyon
cuML’deki orman tahmin yetenekleri, kullanıcıların performansı çeşitli üst parametrelerle ince ayar yapmasına olanak tanır. Ancak, her bir model ve grup boyutu için optimal değerlerin ne olacağını tahmin etmek genelde zor olur. FIL’in yeni sürümü, belirli bir grup boyutunda otomatik optimizasyon yapan yerleşik bir yönteme sahiptir:
fil_model = ForestInference.load("xgb_model.ubj")
fil_model.optimize(batch_size=1_000_000)
result = fil_model.predict(data)
.optimize
çağrıldıktan sonra, sonraki tahmin işlemleri belirlenen grup boyutu için bulunan optimal performans üst parametrelerini kullanacaktır. Ayrıca, seçilen üst parametreleri .layout ve .default_chunk_size niteliklerine bakarak kontrol edebilirsiniz.
print(fil_model.layout)
print(fil_model.default_chunk_size)
Yeni Tahmin API’leri
Genel olarak, bir orman modelinin nihai çıktısı çoğu zaman yeterli olmakla birlikte, bazen bireysel ağaçlar hakkında daha ayrıntılı bilgi almak faydalı olabilir. Bu nedenle, .predict_per_tree
ve .apply
olmak üzere iki yeni tahmin yöntemi tanıtıldı.
İlk olarak, .predict_per_tree
, her ağacın bireysel tahminlerini verir. Bu, yenilikçi toplama teknikleriyle deneme yapmak veya topluluğun genel bir tahmine nasıl ulaştığını analiz etmek için yararlı olabilir. Örneğin, her bir ağacı yaşına, dış-ağaç AUC’sine veya veri kayması puanına göre ağırlıklandırabilir ve daha akıllı bir nihai karar için ağaç oylarını ortalayabilirsiniz, tekrar eğitim gerektirmeden. Başka bir örnek, hızlı bir şekilde tahmin aralıkları sağlamaktır:
per_tree = fil_model.predict_per_tree(X)
mean = per_tree.mean(axis=1)
lower = cupy.percentile(per_tree, 10, axis=1)
upper = cupy.percentile(per_tree, 90, axis=1)
İkincisi, .apply
, belirtilen bir giriş için her bir ağacın yaprak düğümünün kimlik numarasını verir. Bu, orman modellerinin basit regresyon veya sınıflandırmanın ötesinde yeni kullanım durumlarına açılmasını sağlar. Basit bir uygulama olarak, iki satırın ne kadar “benzer” olduğunu, kaç ağacın onları aynı yaprağa gönderdiğini sayarak ölçebilirsiniz:
leaf = fil_model.apply(X)
sim = (leaf[i] == leaf[j]).mean() # eşleşen yaprakların oranı
print(f"{sim:.0%} ağacın {i} & {j} satırlarında aynı görüşte olduğuna dair")
GPU ve CPU Desteği
cuML’deki orman tahmin yetenekleri, başlangıçta GPU’larda hızlandırma yapmayı amaçlasa da, kullanıcılar GPU içermeyen sistemlerde orman tahmin uygulamaları geliştirmek istemiştir. Yaygın bir kullanım durumu, üretim ortamına bir modeli dağıtmadan önce küçük veri kümelerinde yerel test yapmaktır.
Ayrıca, trafik ışıklarının hafif olduğu durumlarda yalnızca CPU tabanlı makinelerde ölçeklenebilmek ve trafik hacmi arttığında hız ve maliyet tasarrufu sağlamak için GPU kullanarak ölçeklenmek de değerlidir.
FIL’i yalnızca CPU modu ile derleyebilir ve C++’tan çağırabilirsiniz. Bu, CUDA bağımlılığı olmadan kullanılmanızı sağlarken, yine de Treelite uyumlu modelleri yükleyebilir ve tahmini mevcut tüm CPU çekirdeklerine yayabilirsiniz.
Python kullanıcıları, cuML 25.04’te tanıtılan yeni bir bağlam yöneticisi aracılığıyla CPU ile FIL’i deneyebilirler:
from cuml.fil import ForestInference, get_fil_device_type, set_fil_device_type
with set_fil_device_type("cpu"):
fil_model = ForestInference.load("xgboost_model.ubj")
result = fil_model.predict(data)
Gelecek sürümler ayrıca, yalnızca CPU sistemlerinde yüklenebilecek Python paketleri sunacaktır.
FIL Nasıl Hız Kazanıyor?
Bu yeni sürüm, ağaç tabanlı modelleri, verilerin bellekten ne sıklıkla alınması gerektiğini azaltarak hızlı hale getirir. Her bir karar noktası veya ağacın düğümü, artık gerekli minimum boyutta otomatik olarak saklanır (genellikle 8 veya 16 byte) ve düğümler daha akıllı düzenlerde sıralanır. Çoğu zaman, işlemci bir sonraki düğümü tek bir hızlı okuma ile alabilir.
Varsayılan depth_first
düzeni, derin ağaçlar (derinlik ≥ 4) için en iyi sonuçları verir. Eğer ağaçlarınız sığsa, layered
düzenini daha küçük gruplar (1–128 satır) veya breadth_first
düzenini daha büyük gruplar için deneyebilirsiniz. Ancak, unutmayın ki yerleşik .optimize
işlevi bunları sizin için test edebilir.
Ayrıca, eşitleme byte’ları adı verilen yeni bir performans üst parametresi, derin etki ve geniş etki düzenlerinde ağaçların önbellek satırı sınırlarında başlayacak şekilde hizalanmasını sağlar. Bu bazen, ancak her zaman değil, bir performans artışı sağlar. CPU’da 64 byte hizalama, çoğu model için optimal performans sağlar. GPU’da ise, bu hizalama nadiren fayda sağlar, ancak bazı modeller 128 byte hizalamadan yararlanabilir.
Performans
FIL’in yeni performans özelliklerini en iyi şekilde anlamak için, birçok değişkenin kapsamlı bir taramasını gerçekleştirdik ve sonuçlar aşağıdaki tabloda özetlenmiştir:
Değişken | Değerler |
---|---|
Maksimum ağaç derinliği | 2; 4; 8; 16; 32 |
Ağaç sayısı | 16; 128; 1024; 2048 |
Özellik sayısı | 8; 32; 128; 512 |
Gruplama Boyutu | 1; 16; 128; 1,024; 1,048,576; 16,777,216 |
Bir RandomForestRegressor
modeli, 10.000 satırlık sentetik veri kullanarak maksimum ağaç derinliği, ağaç sayısı ve özellik sayısı ile her kombinasyon için eğitildi. cuML 25.04’te, yeni .optimize
yöntemi kullanıldı ve önceki sürümde manuel bir ızgara araması yapıldı.
Çalışma zamanı performansı, eğitim verisiyle aynı dağılımdan elde edilen sentetik giriş grupları kullanılarak test edildi. Giriş, GPU FIL için CuPy dizileri ve CPU FIL için NumPy dizileri aracılığıyla sağlandı. Her iki sürüm de üç ısınma turu verilerek test edildi. Performansı ölçmek için beş tahmin turu gerçekleştirildi ve bu turlardan minimum çalışma süresi alındı.
GPU sonuçları için tek bir NVIDIA H100 (80GB HBM3) kullanıldı ve CPU sonuçları için bir 2 soketli Intel Xeon Platinum 8480CL makinesi kullanıldı. Tüm bu senaryolar arasında, cuML 25.04, önceki versiyondan 75% oranında daha iyi performans sergiledi. Aşağıdaki tabloda en iyi, en kötü ve medyan göreli ve mutlak performans değişiklikleri gösterilmektedir. Göreli hız artışı birden az ise, bu bir performans düşüşünü ifade etmektedir. En kötü mutlak yavaşlama 62 milisaniye olurken, en iyi mutlak hız artışı beş saniye olmuştur.
Hız Artışı (cuML 25.04 vs 25.02) | |
Minimum | 0.73x |
Medyan | 1.16x |
Maksimum | 4.1x |
Bu yüksek düzeydeki özet istatistikler, yeni FIL’in performans iyileştirmeleri hakkında genel bir fikir sunsa da, performansı belirli bir kullanım senaryosu için incelemek de faydalıdır. Genelde en çok ilgi çeken iki senaryo, grup boyutu 1 performansı ile herhangi bir grup boyutundaki maksimum aktarım hızıdır. Bu, tahmin taleplerinin birer birer işlenmesi gereken durumları veya gecikmeyi en aza indirmek gerektiği kullanımları temsil ederken, gruplama tahmininin mümkün olduğu durumlarda işleme süresini ve maliyetini azaltmayı sağlar.

Görüldüğü üzere, grup boyutu 1’de, 25.04 önceki sürümlerden daha iyi performans gösteriyor ve test edilen modellerin %81’inde avantaj sağlıyor. Derin ağaçlar içeren modellerde ise hafif bir düşüş gözlemlenmiştir ancak genel olarak medyan hız artışı 1.6x’tir.
Maksimum aktarım performansı da benzer bir ısı haritası ile gösterilmektedir.

Buradan, cuML 25.04, önceki sürüm için %76 oranında daha iyi performans göstermektedir; ortalama hız artışı 1.4x olarak kaydedilmiştir. Sığ ağaç durumlarında ise küçük gerilemeler gözlemlenmiştir.
Performansı daha iyi anlayabilmek için, cuML 25.04’ü scikit-learn‘in RandomForest
performansı ile de karşılaştırmak önemlidir. Scikit-learn’in temiz ve basit uygulamalara sahip olması büyük bir avantajdır. Kullanıcılar, bir algoritmanın uygulamasına bakarak tam olarak nasıl çalıştığını anlama ve değiştirme fırsatına sahiptir.
Ama, RandomForest
modellerinin bu şekilde uygulanması her zaman en yüksek tahmin performansını sağlamamaktadır. Güncellemeyle birlikte, kullanıcıların ek karmaşıklık katmadan en iyi performansı elde edebilmeleri için scikit-learn orman modellerinin doğrudan hızlandırılması amaçlanmıştır.
Bu senaryoların %100’ünde, AMD EPYC 9654P 96 çekirdekli CPU ile H100 (80GB HBM3) GPU karşılaştırıldığında, FIL, scikit-learn yerel çalışmasını geride bırakmıştır. Genel performans aşağıdaki tabloda özetlenmiştir:
Hız Artışı (Yeni FIL ile Sklearn Yerel Karşılaştırması) | |
Minimum | 13.9x |
Medyan | 147x |
Maksimum | 882x |
Gruplama boyutu 1 için hız artışları aşağıda gösterilmiştir:

Isı haritalarından, medyan grup boyutu 1 hız artışının 239x olduğu hesaplanabilir. Maksimum aktarım performansı da aşağıdaki şekilde sunulmuştur:

Bugün NVIDIA cuML’de FIL ile Başlayın
Forest Inference Library’nin yeni yazımı, birçok yararlı yeni özellik ve önceki sürümlere kıyasla kayda değer performans iyileştirmeleri sunmaktadır. Yeni otomatik optimizasyon özelliği, bu performans iyileştirmelerinden en iyi şekilde yararlanmayı kolaylaştırır.
Bu, FIL’in aşağıdaki birçok senaryo için ideal hale gelmesini sağlar:
- Kullanıcıya yönelik API’ler, her milisaniyede büyük öneme sahiptir
- Yüksek hacimli grup işleri (reklam tıklama puanlama, IoT analitiği)
- Hibrit dağıtımlar — aynı model dosyası, çalışma zamanında CPU veya GPU seçimi
- Yerel prototip oluşturma ve GPU hızlandırmalı üretim sunucularına dağıtım
- Maliyet azaltma — bir GPU, 50 çekirdek veya daha fazla CPU’yu değiştirebilir.
Bugün FIL’in yeni orman tahmin yeteneklerini indirin ve cuML 25.04 sürümünden faydalanmaya başlayın. Bu olanaklar, Gelecek sürümlerde Triton Inference Server’da da kullanılabilir olacaktır.
Yakın zamanda gelecek blog yazıları, bu yeni uygulamanın teknik detaylarını, daha fazla benchmark ve FIL’in NVIDIA Triton Inference Server ile entegrasyonunu paylaşacaktır.
FIL hakkında daha fazla bilgi edinmek ve performans, API belgeleri, benchmarklar ve daha fazlasını incelemek için cuML FIL belgelerine göz atabilirsiniz. Hızlandırılmş veri bilimi konusunda daha fazla bilgi edinmek için, DLI Öğrenme Yolu üzerindeki pratik kursları inceleyin.