Android için LiteRT

LiteRT, Android uygulamalarınızda TensorFlow, PyTorch ve JAX modellerini çalıştırmanıza olanak tanır. LiteRT sistemi, donanım hızlandırma seçenekleri de dahil olmak üzere Android'de modelleri hızlı ve verimli bir şekilde çalıştırmak için önceden oluşturulmuş ve özelleştirilebilir yürütme ortamları sağlar.

Örneğin, LiteRT kullanan Android uygulamaları için LiteRT örnekleri deposuna bakın.

Makine öğrenimi modelleri

LiteRT, daha küçük, taşınabilir ve daha verimli bir makine öğrenimi modeli biçimine dönüştürülen TensorFlow, PyTorch ve JAX modellerini kullanır. Android'de LiteRT ile önceden oluşturulmuş modelleri kullanabilir veya kendi modellerinizi oluşturup bunları LiteRT biçimine dönüştürebilirsiniz.

Bu sayfada, önceden oluşturulmuş makine öğrenimi modellerinin kullanımı ele alınmakta olup modellerin oluşturulması, eğitilmesi, test edilmesi veya dönüştürülmesi açıklanmamaktadır. Modeller sayfasında LiteRT için makine öğrenimi modellerini seçme, değiştirme, oluşturma ve dönüştürme hakkında daha fazla bilgi edinin.

Android'de modelleri çalıştırma

Bir Android uygulamasında çalışan LiteRT modeli, verileri alır, işler ve modelin mantığına göre bir tahmin oluşturur. LiteRT modelinin çalıştırılması için özel bir çalışma zamanı ortamı gerekir ve modele aktarılan veriler, tensör adı verilen belirli bir veri biçiminde olmalıdır. Bir model, verileri işlediğinde (çıkarım çalıştırma olarak bilinir) yeni tensörler olarak tahmin sonuçları oluşturur ve bunları Android uygulamasına iletir. Böylece uygulama, sonuçları kullanıcıya gösterme veya ek iş mantığı yürütme gibi işlemler gerçekleştirebilir.

Android uygulamalarında LiteRT modelleri için işlevsel yürütme akışı

Şekil 1. Android uygulamalarındaki LiteRT modelleri için işlevsel yürütme akışı.

İşlevsel tasarım düzeyinde, Android uygulamanızın LiteRT modelini çalıştırmak için aşağıdaki öğelere ihtiyacı vardır:

  • Modeli yürütmek için LiteRT çalışma zamanı ortamı
  • Verileri tensörlere dönüştürmek için model giriş işleyici
  • Çıkış sonucu tensörlerini almak ve bunları tahmin sonuçları olarak yorumlamak için model çıkışı işleyici

Aşağıdaki bölümlerde, LiteRT kitaplıkları ve araçlarının bu işlevsel öğeleri nasıl sağladığı açıklanmaktadır.

LiteRT ile uygulama geliştirme

Bu bölümde, Android uygulamanızda LiteRT'yi uygulamak için önerilen ve en yaygın yöntem açıklanmaktadır. En çok çalışma zamanı ortamı ve geliştirme kitaplıkları bölümlerine dikkat etmeniz gerekir. Özel bir model geliştirdiyseniz Gelişmiş geliştirme yolları bölümünü inceleyin.

Çalışma zamanı ortamı seçenekleri

Android uygulamanızda modelleri yürütmek için bir çalışma zamanı ortamını etkinleştirmenin çeşitli yolları vardır. Tercih edilen seçenekler şunlardır:

Genel olarak, Google Play Hizmetleri tarafından sağlanan çalışma zamanı ortamını kullanmanız gerekir. Bu ortam, dinamik olarak yüklendiği için standart ortama kıyasla daha az yer kaplar ve uygulamanızın boyutunu küçültür. Google Play Hizmetleri, LiteRT çalışma zamanının en yeni ve kararlı sürümünü de otomatik olarak kullanır. Bu sayede zaman içinde ek özellikler ve daha iyi performans elde edersiniz. Uygulamanızı Google Play Hizmetleri'nin bulunmadığı cihazlarda sunuyorsanız veya ML çalışma zamanı ortamınızı yakından yönetmeniz gerekiyorsa standart LiteRT çalışma zamanını kullanmanız gerekir. Bu seçenek, uygulamanıza ek kodlar ekleyerek uygulamanızın indirme boyutunu artırma karşılığında uygulamanızdaki makine öğrenimi çalışma zamanı üzerinde daha fazla kontrol sahibi olmanızı sağlar.

LiteRT geliştirme kitaplıklarını uygulama geliştirme ortamınıza ekleyerek bu çalışma zamanı ortamlarına Android uygulamanızda erişebilirsiniz. Uygulamanızda standart çalışma zamanı ortamlarını kullanma hakkında bilgi edinmek için sonraki bölüme bakın.

Kütüphaneler

Çevirmen API'sine Google Play Hizmetleri'ni kullanarak erişebilirsiniz. Android uygulamanızda LiteRT çekirdek ve destek kitaplıklarını kullanabilirsiniz. LiteRT kitaplıklarını ve çalışma zamanı ortamlarını kullanmayla ilgili programlama ayrıntıları için Android için geliştirme araçları başlıklı makaleyi inceleyin.

Modelleri edinme

Bir modeli Android uygulamasında çalıştırmak için LiteRT biçimli bir model gerekir. Hazır modelleri kullanabilir veya bir model oluşturup Lite biçimine dönüştürebilirsiniz. Android uygulamanız için modeller edinme hakkında daha fazla bilgi edinmek istiyorsanız LiteRT Modeller sayfasına bakın.

Giriş verilerini işleme

Bir makine öğrenimi modeline ilettiğiniz tüm veriler, belirli bir veri yapısına sahip bir tensör olmalıdır. Bu yapıya genellikle tensörün şekli denir. Verileri bir modelle işlemek için uygulama kodunuzun, verileri kendi biçiminden (ör. görüntü, metin veya ses verileri) modeliniz için gerekli şekle sahip bir tensöre dönüştürmesi gerekir.

Çıkarım çalıştırma

Tahmin sonucu oluşturmak için verilerin bir model aracılığıyla işlenmesine çıkarım çalıştırma adı verilir. Android uygulamasında çıkarım çalıştırmak için LiteRT çalışma zamanı ortamı, model ve giriş verileri gerekir.

Bir modelin belirli bir cihazda çıkarım oluşturma hızı; işlenen verilerin boyutuna, modelin karmaşıklığına ve bellek ile CPU gibi mevcut bilgi işlem kaynaklarına ya da hızlandırıcılar adı verilen özel işlemcilere bağlıdır. Makine öğrenimi modelleri, grafik işleme birimleri (GPU'lar) ve tensör işleme birimleri (TPU'lar) gibi bu özel işlemcilerde delegeler adı verilen LiteRT donanım sürücüleri kullanılarak daha hızlı çalışabilir. Temsilciler ve model işlemenin donanım hızlandırması hakkında daha fazla bilgi için Donanım hızlandırmaya genel bakış başlıklı makaleyi inceleyin.

Çıkış sonuçlarını işleme

Modeller, tahmin sonuçlarını tensör olarak oluşturur. Bu tensörler, Android uygulamanız tarafından işlem yapılarak veya kullanıcıya sonuç gösterilerek işlenmelidir. Model çıkışı sonuçları, bir resim sınıflandırması için tek bir sonuca karşılık gelen bir sayı (0 = köpek, 1 = kedi, 2 = kuş) kadar basit olabileceği gibi, bir resimdeki sınıflandırılmış birden fazla nesne için birden fazla sınırlayıcı kutu gibi çok daha karmaşık sonuçlar da olabilir. Bu sonuçlarda, tahmin güveni derecelendirmeleri 0 ile 1 arasındadır.

Gelişmiş geliştirme yolları

Daha gelişmiş ve özelleştirilmiş LiteRT modellerini kullanırken yukarıda açıklananlardan daha gelişmiş geliştirme yaklaşımları kullanmanız gerekebilir. Aşağıdaki bölümlerde, modelleri yürütmeye ve Android uygulamalarında LiteRT için geliştirmeye yönelik gelişmiş teknikler açıklanmaktadır.

Gelişmiş çalışma zamanı ortamları

LiteRT için standart çalışma zamanı ve Google Play Hizmetleri çalışma zamanı ortamlarına ek olarak, Android uygulamanızla kullanabileceğiniz ek çalışma zamanı ortamları da vardır. Bu ortamların en olası kullanım alanı, LiteRT için standart çalışma zamanı ortamı tarafından desteklenmeyen makine öğrenimi işlemlerini kullanan bir makine öğrenimi modeliniz olmasıdır.

LiteRT esnek çalışma zamanı, modeliniz için gereken belirli operatörleri eklemenize olanak tanır. Modelinizi çalıştırmak için gelişmiş bir seçenek olarak, TensorFlow makine öğrenimi modelinizi çalıştırmak için gereken operatörleri ve diğer işlevleri içerecek şekilde Android için LiteRT'yi oluşturabilirsiniz. Daha fazla bilgi için Android için LiteRT'yi oluşturma başlıklı makaleyi inceleyin.

C ve C++ API'leri

LiteRT, C ve C++ kullanarak modelleri çalıştırmak için bir API de sağlar. Uygulamanız Android NDK'yı kullanıyorsa bu API'yi kullanmayı düşünebilirsiniz. Birden fazla platform arasında kod paylaşmak istiyorsanız bu API'yi kullanmayı da düşünebilirsiniz. Bu geliştirme seçeneği hakkında daha fazla bilgi için Geliştirme araçları sayfasını inceleyin.

Sunucu tabanlı model yürütme

Genel olarak, kullanıcılarınız için daha düşük gecikme süresinden ve gelişmiş veri gizliliğinden yararlanmak amacıyla uygulamanızdaki modelleri bir Android cihazda çalıştırmanız gerekir. Ancak, bir modeli cihaz dışında, bulut sunucusunda çalıştırmanın daha iyi bir çözüm olabileceği durumlar vardır. Örneğin, kullanıcılarınızın Android cihazlarına kolayca sığacak boyuta sıkıştırılamayan veya bu cihazlarda makul bir performansla çalıştırılamayan büyük bir modeliniz varsa. Bu yaklaşım, modelin çok çeşitli cihazlarda tutarlı performans göstermesi sizin için en önemli öncelikse tercih ettiğiniz çözüm olabilir.

Google Cloud, yapay zeka modellerini çalıştırmak için eksiksiz bir hizmet paketi sunar. Daha fazla bilgi için Google Cloud'un Yapay zeka ve makine öğrenimi ürünleri sayfasına bakın.

Özel model geliştirme ve optimizasyon

Daha gelişmiş geliştirme yolları, özel makine öğrenimi modelleri geliştirmeyi ve bu modelleri Android cihazlarda kullanılmak üzere optimize etmeyi içerebilir. Özel modeller oluşturmayı planlıyorsanız bellek ve işlem maliyetlerini azaltmak için modellere nicemleme teknikleri uyguladığınızdan emin olun. LiteRT ile kullanılmak üzere yüksek performanslı modeller oluşturma hakkında daha fazla bilgi için Modeller bölümündeki Performansla ilgili en iyi uygulamalar başlıklı makaleyi inceleyin.

Desteklenen Android Sürümleri

LiteRT Sürümü Durum Minimum SDK düzeyi Minimum NDK sürümü (kullanılıyorsa) Yayın Tarihi
v1.2.0 ⚠️ Desteği sonlandırıldı 21 (Android 5 Lollipop) r26a 2025-03-13
v1.3.0 ⚠️ Desteği sonlandırıldı 21 (Android 5 Lollipop) r26a 2025-05-19
v1.4.0 ⚠️ Desteği sonlandırıldı 26 (Android 8 Oreo) r26a 2025-06-25
v1.4.1 ✅ Etkin 21 (Android 5 Lollipop) r26a 2025-11-07
v2.0.3 ✅ Etkin 26 (Android 8 Oreo) r26a 2025-11-08
v2.1.0 Forthcoming 23 (Android 6 Marshmallow) r26a Henüz yayınlanmadı

Önemli: En yeni özellikler ve güvenlik güncellemeleriyle uyumluluğu sağlamak için bağımlılıklarınızı güncel tutun.

Compiled Model API ve Interpreter API karşılaştırması

  • Compiled Model API: Birleştirilmiş arabellek birlikte çalışabilirliği ve asenkron işlem hatlarıyla hızlandırıcı öncelikli, AOT/JIT derlenmiş yürütme.
  • Interpreter API: Mevcut TensorFlow Lite tarzı kodlarla geriye dönük olarak uyumludur.

Çalışma zamanında API'lerden birini seçebilirsiniz. Yeni performans ve hızlandırıcı özelliklerin çoğu, Derlenmiş Model API'sinde yer alır.

Örnek uygulamalar için şunlara bakın:

Ortak ve CPU

Çalışma zamanı özelliği Interpreter API Compiled Model API
Profil oluşturma
Hata bildirici
G/Ç arabellek birlikte çalışabilirliği (TensorBuffer/Environment) --
Anahtar teslimi hızlandırıcı seçimi --
Sync exec
Özel işlem
XNNPACK yapılandırması
Dinamik şekil

GPU

Çalışma zamanı özelliği Interpreter API Compiled Model API
Sync exec
Bellek önbelleğe alma
CPU yedeklemesi
Eş zamansız yürütme --
Kopyasız arabellek (AHWB/GLBuffer/Texture) --
MLD OpenCL arka ucu
MLD WebGPU arka ucu (yeni) --
MLD Metal desteği (yeni) --

NPU

Çalışma zamanı özelliği Interpreter API Compiled Model API
Sync exec
Eş zamansız yürütme (Pixel) --
CPU yedeklemesi
GPU yedeklemesi --
Sıfır arabellek kopyalama (AHWB) --
QC/MTK AOT --
Pixel AOT --
QC/MTK/Pixel JIT --

Hızlı başlangıç kılavuzu (Compiled Model API)

Derlenmiş Model API ile çıkarım çalıştırmak için aşağıdaki temel adımlar gerekir:

  1. Uyumlu bir model yükleyin.
  2. Giriş ve çıkış tensör arabelleklerini ayırın.
  3. Derlenmiş modeli çağırın.
  4. Çıkarımları bir çıkış arabelleğine okuyun.

Aşağıdaki kod snippet'lerinde, Kotlin ve C++'ta tüm sürecin temel bir uygulaması gösterilmektedir.

C++

// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto model, Model::CreateFromFile("mymodel.tflite"));
LITERT_ASSIGN_OR_RETURN(auto env, Environment::Create({}));
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorCpu));

// Preallocate input/output buffers
LITERT_ASSIGN_OR_RETURN(auto input_buffers, compiled_model.CreateInputBuffers());
LITERT_ASSIGN_OR_RETURN(auto output_buffers, compiled_model.CreateOutputBuffers());

// Fill the first input
float input_values[] = { /* your data */ };
input_buffers[0].Write<float>(absl::MakeConstSpan(input_values, /*size*/));

// Invoke
compiled_model.Run(input_buffers, output_buffers);

// Read the output
std::vector<float> data(output_data_size);
output_buffers[0].Read<float>(absl::MakeSpan(data));

Kotlin

// Load model and initialize runtime
val  model =
    CompiledModel.create(
        context.assets,
        "mymodel.tflite",
        CompiledModel.Options(Accelerator.CPU)
    )

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

// Invoke
model.run(inputBuffers, outputBuffers)

// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

Daha fazla bilgi için Kotlin'i kullanmaya başlama ve C++'ı kullanmaya başlama kılavuzlarına bakın.

Temel özellikler (Compiled Model API)

  • Hazır hızlandırıcı seçimi ve eşzamansızlık: Oluşturma sırasında CPU/GPU/NPU'yu seçin ve temsilci bağlantısı olmadan eşzamansız olarak çalıştırın.
  • Birleştirilmiş sıfır kopyalı arabellekler: Ön/son işleme ve çıkarım arasında AHWB/GL/OpenCL/WebGPU/Metal arabelleklerini paylaşın.
  • Üretkenliğe hazır işleme hızı: Bellek önbelleğe alma ve GPU/NPU yedekleriyle büyük modeller için optimize edilmiştir.

Interpreter API, mevcut TensorFlow Lite kod tabanları için uyumluluk yolu olmaya devam eder. Kararlı temsilci davranışına veya klasik yorumlayıcıyı bekleyen üçüncü taraf sarmalayıcılara ihtiyacınız olduğunda bu API'yi kullanın.

Girişim Hızlandırıcılar

  • CPU (varsayılan): XNNPACK optimize edilmiş, dinamik şekiller desteklenir.
  • GPU: Bugün OpenCL arka ucu; WebGPU ve Metal arka uçları, Derlenmiş Model API'si aracılığıyla kullanılabilir.
  • NPU: AOT/JIT için Qualcomm AI Engine Direct ve MediaTek NeuroPilot desteklenir. Pixel AOT kullanılabilir. Apple/Intel NPU desteği planlanmaktadır.

Ne zaman API seçmelisiniz?

  • GPU/NPU'ya en hızlı şekilde ulaşmak, sıfır kopyalı arabellekler veya eşzamansız yürütme kullanmak istediğinizde Compiled Model API'yi kullanın.
  • Mevcut TensorFlow Lite kodu, araçları veya temsilcileriyle maksimum uyumluluğa ihtiyacınız olduğunda Interpreter API'yi kullanın.