TF Lite Delegate: nedir, GPU ve NNAPI delegeleri

Yazar: IT Sectr Yayınlanma: 2026-07-18 Okuma süresi: 10 dk

TF Lite Delegate, sinir ağı işlemlerinin yürütülmesini özel donanıma (GPU, NPU, DSP veya optimize edilmiş CPU) yönlendiren bir TensorFlow Lite bileşenidir. Delege olmadan model, tam uyumluluk modunda CPU'da çalışır — yavaş ama öngörülebilir. Delege, çipe ve modele bağlı olarak çıkarımı 3–10 kat hızlandırır. TensorFlow, 2025'e göre, GPU ve NNAPI delegeleri, önemli bir doğruluk kaybı olmadan çıkarım gecikmesini %60–90 oranında azaltır.

Önemli Noktalar

  • TF Lite Delegate — TensorFlow Lite modelleri için donanım hızlandırma katmanı
  • GPU Delegate — OpenGL/Metal aracılığıyla kayan nokta işlemlerini hızlandırır
  • NNAPI Delegate — NPU ve DSP için Android Neural Networks API'sini kullanır
  • XNNPACK Delegate — SIMD talimatları (ARM NEON, SSE) ile CPU optimizasyonu
  • Core ML Delegate — iOS'ta Apple Neural Engine ile yerel entegrasyon

TF Lite Delegate Nedir: mimari ve çalışma prensibi

TF Lite Delegate, TensorFlow Lite Runtime ile cihazın donanım hızlandırıcısı arasında bir yazılım adaptörüdür. Delege, model grafik işlemlerini (evrişim, havuzlama, matris çarpımları) yakalar ve CPU yerine özel bir bilgi işlem biriminde yürütür. Delege belirli bir işlemi desteklemiyorsa CPU'da çalışır — buna kısmi delegasyon denir.

TF Lite Delegate Mimarisi, SimpleDelegate API arayüzü ve C++'daki TfLiteDelegate yapısı etrafında inşa edilmiştir. Her delege, grafik düğümlerinin delegasyonu, bellek ayırma ve hedef cihazda yürütme yöntemlerini uygular. Geliştirici, Invoke'u çağırmadan önce Interpreter::ModifyGraphWithDelegate aracılığıyla delegeyi bağlar. TensorFlow Kılavuzu'na göre delege, modelin desteklenen tüm işlemlerine otomatik olarak uygulanır.

Uyumluluk kontrolü zorunlu bir adımdır. Tüm işlemler her delege tarafından desteklenmez. TensorFlow Lite, Delegation Compatibility Check aracını sağlar: modeli delege ile çalıştırın ve kaç işlemin (ops) delege edildiğini kontrol edin. %80'den azı delege edilmişse başka bir delege seçmeyi veya CPU'da kalmayı düşünün. TensorFlow (2025)'e göre GPU Delegate 45 işlemi destekler, NNAPI — 60+.

IT Sectr projelerinde, iOS için GPU delegelerini ve Android için XNNPACK'i yerleşik uyumluluk doğrulamasıyla kullanıyoruz: model tüm delegelerde test edilir ve en az %90 delegasyon tamamlama oranıyla en hızlısı seçilir.

kotlin
// Android'de GPU Delegate bağlantısı
val gpuDelegate = GpuDelegate()
val options = Interpreter.Options().apply {
    addDelegate(gpuDelegate)
    setNumThreads(4)
}
val interpreter = Interpreter(modelBuffer, options)
interpreter.run(input, output)
gpuDelegate.close()

Delege edilen işlemlerin kontrolü — Interpreter aracılığıyla uyumluluk kontrolü. Varsayılan olarak delege, desteklediği tüm işlemleri kabul eder. Hata ayıklama için delege edilen düğüm sayısının günlüğe kaydedilmesini kullanın. Model özel işlemler (custom ops) içeriyorsa, delege bunları hızlandırmaz ancak bozmaz da — CPU'da çalışırlar.

kotlin
// Delege edilen işlem sayısını kontrol et
val delegateCount = interpreter.getDelegateOpsCount(gpuDelegate)
val totalNodes = interpreter.getNodesCount()
Log.d("TFLite", "Delege edildi: $delegateCount / $totalNodes")
if (delegateCount < totalNodes * 0.8) {
    // %80 eşik — başka bir delege seç
}

GPU Delegate: grafik işlemcide hızlandırma

GPU Delegate, OpenGL ES 3.1+ (Android) veya Metal (iOS) aracılığıyla GPU'da modelleri çalıştırmak için bir TensorFlow Lite delegeidir. Grafik işlemciler paralel matris işlemleri için optimize edilmiştir — Core ML ve evrişimli sinir ağları (CNN) en fazla faydayı sağlar. GPU Delegate, MobileNet, EfficientNet, Inception gibi modeller için çıkarım gecikmesini 4–8 kat azaltır.

GPU Delegate sınırlamaları: tüm işlemleri desteklemez (TF Lite'daki ~120'den yalnızca 45'i), OpenGL ES 3.1 veya Metal gerektirir, CPU'dan daha fazla güç tüketir. GPU, mobil senaryolarda toplu iş boyutu > 1 için verimsizdir. TensorFlow kıyaslamalarına (2025) göre, Adreno 740 GPU'lu Pixel 8'de MobileNetV2, GPU'da 4,2 ms'ye karşı CPU'da 18,7 ms'de çalışır — 4,4 kat hızlanma.

GPU Delegate yapılandırması hassasiyet seçimini içerir: float16, hassasiyeti azaltır ancak çoğu görev için gözle görülür kalite kaybı olmadan çıkarımı %30–40 hızlandırır. Maksimum GPU performansı için allow_precision_loss=true değerini etkinleştirin. Yüksek hassasiyetli görevler (tıp, finans) için float32 kullanın.

kotlin
// Hassasiyet optimizasyonu ile GPU Delegate
val gpuOptions = GpuDelegateFactory.Options().apply {
    isPrecisionLossAllowed = true
    inferencePreference = GpuDelegateFactory.Options.InferencePreference.SUSTAINED_SPEED
}
val delegate = GpuDelegateFactory.create(gpuOptions)

iOS'ta GPU Delegate, Metal Delegate aracılığıyla Metal Performance Shaders'ı kullanır. iOS'ta delege, Apple Neural Engine için Core ML delege veya doğrudan Metal aracılığıyla çalışır. Apple A17 Pro, MobileNetV2'yi 1,3 ms'de çalıştırır — CPU'dan 6 kat daha hızlı. Metal delege iOS 12'den beri kullanılabilir ve A7+ çipli tüm cihazları destekler.

NNAPI Delegate: Neural Networks API aracılığıyla Android'de sinir ağları

NNAPI Delegate (Android Neural Networks API), Android NN HAL (Donanım Soyutlama Katmanı) aracılığıyla donanım hızlandırması kullanan bir TF Lite delegeidir. NNAPI, kullanılabilir cihaz sürücülerine bağlı olarak model işlemlerini NPU, DSP veya GPU'ya yönlendirir. Android 8.1+ (API 27+) üzerinde desteklenir ve Android için varsayılan olarak önerilen delegeidir.

NNAPI avantajı — otomatik hızlandırıcı seçimi. Cihazda NPU (Qualcomm Hexagon, MediaTek APU, Samsung NPU) varsa NNAPI işlemleri ona delege eder. NPU yoksa — OpenCL aracılığıyla GPU'ya. GPU da desteklenmiyorsa — DSP optimizasyonlarıyla CPU'ya. Geliştirici belirli bir hızlandırıcı belirtmez — NNAPI en uygun olanı seçer. Google I/O 2024'e göre, Snapdragon 8 Gen 3'teki NNAPI delege, LLM modellerini 12 kat hızlandırır.

NNAPI sınırlamaları: farklı cihazlarda eşit olmayan destek. Eski cihazlar (Android 8.1) sınırlı bir sürücü setine sahiptir. Kirin'li Huawei, Google Services aracılığıyla NNAPI'yi desteklemez — GPU Delegate kullanın. Garantili uyumluluk için Google, GPU veya XNNPACK'a geri dönüşle birlikte NNAPI Delegate'i ilk seçenek olarak önerir.

kotlin
// CPU geri dönüşlü NNAPI Delegate
val nnApiOptions = NnApiDelegate.Options().apply {
    acceleratorName = null // null = otomatik seçim
    allowFp16 = true
    executionPreference = NnApiDelegate.ExecutionPreference.SUSTAINED_SPEED
}
val delegate = NnApiDelegate(nnApiOptions)
val interpreter = Interpreter(model, Interpreter.Options().apply {
    addDelegate(delegate)
    setNumThreads(4)
})

NNAPI Hızlandırıcı Adı — açık hızlandırıcı seçimi için bir parametre. null iletilirse NNAPI otomatik olarak seçer. Test için belirli bir tane belirtin: "qti", "google-edgetpu", "mediatek". Kullanılabilir hızlandırıcıların listesi NnApiDelegate.getAvailableAccelerators() aracılığıyla alınır. Üretimde, bir uyumluluk eşiğiyle otomatik seçim kullanın.

XNNPACK Delegate: SIMD ile CPU optimizasyonu

XNNPACK Delegate, SIMD talimatları (ARM NEON, SSE, AVX) aracılığıyla optimize edilmiş CPU yürütmesi için bir TensorFlow Lite delegeidir. XNNPACK GPU veya NPU gerektirmez — saf bir CPU delegeidir, ancak SIMD, operatör birleştirme, bellek önceden getirme ve kuantize edilmiş çıkarım (INT8) sayesinde 2–4 kat hızlanma sağlar. Özel NPU'su olmayan cihazlar veya garantili uyumluluk gerektiğinde idealdir.

XNNPACK, Google tarafından CPU için varsayılan TF Lite delege olarak geliştirilmiştir (varsayılan olarak TFLite Runtime'a dahildir). 90'dan fazla işlemi destekler — GPU veya NNAPI'den daha fazla. XNNPACK, kuantize edilmiş modeller (INT8, INT16) için özellikle etkilidir: işlemler float32 sürümünden 2–3 kat daha hızlı çalışır. Google kıyaslamalarına (2025) göre XNNPACK, INT8 MobileNetV2'yi temel CPU'ya göre 2,8 kat hızlandırır.

XNNPACK vs GPU: NPU'su olmayan cihazlarda XNNPACK, küçük toplu işler (1–4) için GPU Delegate'ten genellikle daha hızlıdır — GPU, CPU ve GPU arasında veri aktarımında ek yüke sahiptir. XNNPACK aynı CPU adres alanında çalışır — bellek kopyalama yoktur. 5 MB'a kadar olan modeller için XNNPACK GPU'dan daha hızlı olabilir. Büyük CNN modelleri için paralellik sayesinde GPU kazanır.

kotlin
// TFLite 2.18+'da varsayılan olarak etkin XNNPACK Delegate
// XnnpackDelegate aracılığıyla açık kullanım
val xnnpackOptions = XnnpackDelegate.Options().apply {
    numThreads = 4
    flags = XnnpackDelegate.Flags.USE_XNNPACK
}
val delegate = XnnpackDelegate(xnnpackOptions)
val interpreter = Interpreter(modelBuffer, Interpreter.Options().apply {
    addDelegate(delegate)
})

XNNPACK Bayrakları: USE_XNNPACK — delegeyi zorla etkinleştirir, FLUSH_TO_ZERO — hızlandırma için normalleştirilmemiş sayıları işler, ENABLE_XNNPACK_SHAPES — dinamik giriş boyutları. Maksimum uyumluluk için varsayılan seçenekleri kullanın. Eski cihazlarda hatalar oluşursa XNNPACK'i devre dışı bırakın — model CPU'da çalışmaya devam eder ancak daha yavaş olur.

Core ML ve Metal Delegate: iOS'ta hızlandırma

Core ML Delegate, Apple Core ML Framework'ü kullanan iOS için bir TensorFlow Lite delegeidir. Core ML, TF Lite modelini .mlmodel formatına dönüştürür ve Apple Neural Engine (ANE), GPU (Metal) veya CPU'da yürütür. Apple A17 Pro ve M3, Core ML'nin otomatik olarak kullandığı özel bir Neural Engine'e sahiptir. Core ML Delegate, modern iOS cihazlarında CPU'ya kıyasla çıkarımı 5–10 kat hızlandırır.

iOS'ta Core ML, flex delegate (Core ML için kullanılabilir işlemlerin dinamik delegasyonu) ve tam model dönüştürmeyi (tüm modelin .mlmodel'e dönüştürülmesi) destekler. Apple flex delegate'i önerir — önceden dönüştürme olmadan çalışma zamanında çalıştığı için daha hızlıdır. Core ML Delegate, float32, float16 ve kuantize edilmiş modelleri (INT8) destekler.

Metal Delegate, doğrudan Metal Performance Shaders ile çalışan daha düşük seviyeli bir delegeidir. Core ML belirli işlemleri desteklemediğinde Metal'i kullanın. Metal Delegate, GPU üzerinde maksimum kontrol sağlar ancak daha fazla kod gerektirir. Apple'a (WWDC 2024) göre, yerel Swift modelleri için Metal Delegate, dönüştürme ek yükü olmaması nedeniyle Core ML'den %15–20 daha hızlı olabilir.

swift
// TFLite Swift API aracılığıyla iOS'ta Core ML Delegate
import TensorFlowLite

let coreMLDelegate = CoreMLDelegate()
var options = InterpreterOptions()
options.addDelegate(coreMLDelegate)

let interpreter = try Interpreter(modelPath: modelPath, options: options)
try interpreter.invoke(at: 0)

Core ML ve Metal arasında seçim: üretim için Core ML, uç durumlar için Metal. Core ML, NE belleğini otomatik olarak yönetir, CPU geri dönüşünü (fallback) destekler ve manuel dönüştürme gerektirmez. Metal, tampon kontrolü sağlar ve özel işlemler için uygundur. IT Sectr projelerinde, tüm iOS modelleri için Core ML Delegate'i ve yalnızca gerçek zamanlı video analizi görevleri için Metal'i kullanıyoruz.

Projeniz için bir delege nasıl seçilir

TF Lite Delegate seçimi hedef platforma, modele ve gecikme gereksinimlerine bağlıdır. Evrensel olarak en iyi delege yoktur — her birinin güçlü ve zayıf yönleri vardır. En uygun strateji: hedef cihazda mevcut tüm delegeleri test edin ve minimum düzeyde hızlı olanı seçin — en hızlı olanı değil, minimum düzeyde yeterli olanı.

DelegePlatformHızlandırmaUyumluluk
GPUAndroid, iOS4–8x45 işlem
NNAPIAndroid 8.1+3–12x60+ işlem
XNNPACKAndroid, iOS2–4x90+ işlem
Core MLiOS 12+5–10x50+ işlem

Seçim önerileri: NPU'lu Android (Snapdragon 8 Gen 2+, Dimensity 9000+) için — NNAPI Delegate. NPU'suz Android için — XNNPACK Delegate (varsayılan). iOS için — Core ML Delegate. Platformlar arası projeler için stratejiyi kullanın: Android'de NNAPI, iOS'ta Core ML, geri dönüş olarak XNNPACK. GPU Delegate — NNAPI kullanılamadığında ve XNNPACK yeterince hızlı olmadığında.

Gecikme testi seçimde zorunlu bir adımdır. Minimum sıcaklıkta (soğuk cihaz) ve 5 dakika sürekli çalışmanın ardından (termal kısma) çıkarımı ölçün. GPU ve NNAPI ısındığında performansı düşürebilir. XNNPACK (CPU) daha az etkilenir. Cihazınızdaki tüm delegelerin otomatik testi için TensorFlow Lite Benchmark Tool'u kullanın.

kotlin
// Delege seçim stratejisi
fun selectDelegate(): TfLiteDelegate {
    return when {
        NnApiDelegate.getAvailableAccelerators()?.isNotEmpty == true ->
            NnApiDelegate()
        GpuDelegateFactory.isGpuDelegateAvailable() ->
            GpuDelegate()
        else -> XnnpackDelegate()
    }
}

Geri dönüş stratejisi — modeli istisnasız yükleyin: delege desteklenmiyorsa CPU'da çalıştırın. TensorFlow Lite, delege oluşturma hatasında IllegalArgumentException fırlatır. Delege oluşturmayı try-catch ile sarın ve hata durumunda modeli delege olmadan çalıştırın. Yavaş ama çalışan bir yapay zeka, kullanıcı için bir hatadan iyidir.

Sıkça Sorulan Sorular

TF Lite Delegate basitçe nedir?

TF Lite Delegate, mobil cihazdaki sinir ağları için bir hızlandırıcıdır. Modeli CPU'da yavaşça çalıştırmak yerine, delege hesaplamaları GPU'ya veya özel bir nöral çipe (NPU) gönderir. CPU'yu evrensel bir araç, delegeyi ise belirli görevler için özel bir makine olarak düşünün: aynı şeyi yapar ancak kat kat daha hızlı.

En hızlı TF Lite delege hangisidir?

En hızlı delege cihaza bağlıdır. Neural Engine (Apple A17 Pro, Snapdragon 8 Gen 3) olan cihazlarda — NNAPI (Android) veya Core ML (iOS), 10–12 kata kadar maksimum hızlandırma sağlar. GPU Delegate ikinci en hızlıdır. XNNPACK (CPU) delegeler arasında en yavaş olanıdır ancak en uyumlu olanıdır. NPU'su olmayan cihazlarda XNNPACK veya GPU en uygun olabilir.

TF Lite Delegate tüm işlemleri destekler mi?

Hayır, her delege sınırlı bir işlem kümesini destekler. GPU Delegate — 45 işlem, NNAPI — 60+, XNNPACK — 90+. Desteklenmeyen işlemler CPU'da çalışır (kısmi delegasyon). Özel işlemler (custom ops) için delege uygulanmaz. Kullanmadan önce getDelegateOpsCount ile uyumluluğu kontrol edin — düğümlerin %80'inden azı delege edilmişse başka bir delege seçin.

Android'de TF Lite Delegate nasıl kurulur?

build.gradle'e bağımlılık ekleyin: implementation 'org.tensorflow:tensorflow-lite-gpu-delegate:+' veya 'org.tensorflow:tensorflow-lite:x.x.x' (XNNPACK yerleşiktir). Bir delege oluşturun (GpuDelegate(), NnApiDelegate(), XnnpackDelegate()) ve Interpreter.Options.addDelegate()'e iletin. Yorumlayıcıyı çalıştırın — delege otomatik olarak uygulanır. Yürütmeden sonra delegeyi close() ile kapatın.

Aynı anda birden fazla delege kullanılabilir mi?

Evet, TF Lite birden çok delegeyi destekler — sırayla uygulanırlar. Yorumlayıcı, bir işlemi önce ilk delegeye, sonra ikinciye ve bu şekilde devam ederek delege etmeye çalışır. Hiçbir delege işlemi desteklemezse CPU'da çalışır. Bu, geri dönüş için kullanışlıdır: önce NNAPI, sonra GPU, sonra XNNPACK. Ekleme sırası önceliği etkiler.

Özet

  • TF Lite Delegate — mobil cihazlarda TensorFlow Lite modelleri için donanım hızlandırıcı
  • GPU Delegate — OpenGL ES (Android) veya Metal (iOS) ile hızlandırma, CPU'dan 4–8x daha hızlı
  • NNAPI Delegate — Android Neural Networks API ile, NPU/DSP/GPU kullanır, 3–12x
  • XNNPACK Delegate — SIMD ile CPU optimizasyonu, 2–4x, maksimum uyumluluk (90+ işlem)
  • Core ML Delegate — Neural Engine ve Metal ile iOS hızlandırma, 5–10x
  • Delege seçimi — hedef cihazda test edin, CPU geri dönüşü kullanın
  • Kısmi delegasyon — desteklenmeyen işlemler CPU'da otomatik olarak çalışır

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun