NVIDIA cuML ile Orman İnference Kütüphanesi ile Ağaç Tabanlı Model Çıktılarını Hızlandırma

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
Tablo 1. cuML 25.04 ile orman tahmini benchmarkları için incelenen model ve grup boyutları parametreleri.

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
Tablo 2. cuML’nin önceki sürümü ile orman modeli tahmin performansını karşılaştıran özet istatistikler.

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.

batch size 1 speedup chart comparing cuml 25.04 vs 25.02
Şekil 1. Farklı model derinlikleri, ağaç sayıları ve özellik sayıları için 25.04 ve önceki sürüm arasındaki grup boyutu 1 performans karşılaştırması.

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.

Şekil 2. Farklı model derinlikleri, ağaç sayıları ve özellik sayıları için cuML 25.04 ve önceki sürüm arasındaki maksimum aktarım karşılaştırması.

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
Tablo 3. 25.04’ün yerel Scikit-Learn tahmini ile karşılaştırılması.

Gruplama boyutu 1 için hız artışları aşağıda gösterilmiştir:

Şekil 3. Grup boyutu 1 için cuML 25.04 ile önceki sürüm ve scikit-learn yerel tahmin karşılaştırması.

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:

Şekil 4. Büyük grup boyutu için cuML 25.04 ile scikit-learn yerel tahmin performansı karşılaştırması.

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.

Kaynak

Nvdia Blog

Exit mobile version