LLM Tahmini API'si, Android uygulamaları için büyük dil modellerini (LLM'ler) tamamen cihaz üzerinde çalıştırmanıza olanak tanır. Bu modelleri metin oluşturma, bilgileri doğal dil biçiminde alma ve belgeleri özetleme gibi çeşitli görevleri gerçekleştirmek için kullanabilirsiniz. Görev, birden fazla metinden metne büyük dil modeli için yerleşik destek sağlar. Böylece, en yeni cihaz üzerinde üretken yapay zeka modellerini Android uygulamalarınıza uygulayabilirsiniz.
LLM Tahmini API'yi Android uygulamanıza hızlıca eklemek için Hızlı Başlangıç bölümünü inceleyin. LLM Tahmini API'sini çalıştıran bir Android uygulamasının temel örneği için örnek uygulamaya bakın. LLM Inference API'nin işleyiş şekli hakkında daha ayrıntılı bilgi edinmek için yapılandırma seçenekleri, model dönüştürme ve LoRA ayarlama bölümlerine bakın.
Bu görevi MediaPipe Studio demosunda görebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel bakış bölümüne bakın.
Hızlı başlangıç kılavuzu
LLM Tahmini API'sini Android uygulamanıza eklemek için aşağıdaki adımları uygulayın. LLM Inference API, Pixel 8 ve Samsung S23 veya sonraki modeller gibi üst düzey Android cihazlar için optimize edilmiştir ve cihaz emülatörlerini güvenilir bir şekilde desteklemez.
Bağımlılıklar ekleme
LLM Inference API, com.google.mediapipe:tasks-genai
kitaplığını kullanır. Aşağıdaki bağımlılığı Android uygulamanızın build.gradle
dosyasına ekleyin:
dependencies {
implementation 'com.google.mediapipe:tasks-genai:0.10.24'
}
Model indirme
Gemma-3 1B'yi HuggingFace'tan 4 bitlik kesirli biçimde indirin. Mevcut modeller hakkında daha fazla bilgi için Modeller dokümanları bölümüne bakın.
output_path klasörünün içeriğini Android cihaza aktarın.
$ adb shell rm -r /data/local/tmp/llm/ # Remove any previously loaded models
$ adb shell mkdir -p /data/local/tmp/llm/
$ adb push output_path /data/local/tmp/llm/model_version.task
Görevi başlatma
Görevi temel yapılandırma seçenekleriyle başlatın:
// Set the configuration options for the LLM Inference task
val taskOptions = LlmInferenceOptions.builder()
.setModelPath('/data/local/tmp/llm/model_version.task')
.setMaxTopK(64)
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, taskOptions)
Görevi çalıştırma
Metin yanıtı oluşturmak için generateResponse()
yöntemini kullanın. Bu işlem tek bir yanıt oluşturur.
val result = llmInference.generateResponse(inputPrompt)
logger.atInfo().log("result: $result")
Yanıtı aktarmak için generateResponseAsync()
yöntemini kullanın.
val options = LlmInference.LlmInferenceOptions.builder()
...
.setResultListener { partialResult, done ->
logger.atInfo().log("partial result: $partialResult")
}
.build()
llmInference.generateResponseAsync(inputPrompt)
Örnek uygulama
LLM çıkarım API'lerinin kullanımını görmek ve cihaz üzerinde kapsamlı bir üretken yapay zeka özelliği yelpazesini keşfetmek için Google Yapay Zeka Edge Gallery uygulamasına göz atın.
Google AI Edge Gallery, geliştiriciler için etkileşimli bir oyun alanı işlevi gören açık kaynak bir Android uygulamasıdır. Şunları gösterir:
- Aşağıdakiler dahil olmak üzere çeşitli görevler için LLM Inference API'yi kullanmaya yönelik pratik örnekler:
- Resim sor: Bir resim yükleyin ve resimle ilgili sorular sorun. Açıklamalar alın, sorunları çözün veya nesneleri tanımlayın.
- İstem Laboratuvarı: Tek dönüşlü LLM kullanım alanlarını keşfetmek için özetleme, yeniden yazma, kod oluşturma veya serbest biçimli istemler kullanma.
- Yapay zeka sohbeti: Çok dönüşlü görüşmeler yapın.
- Hugging Face LiteRT Topluluğu'ndan ve resmi Google sürümlerinden (ör. Gemma 3N) çeşitli LiteRT optimize edilmiş modelleri keşfetme, indirme ve deneme olanağı.
- Farklı modeller için gerçek zamanlı cihaz üzerinde performans karşılaştırmaları (ilk jetona kadar geçen süre, kod çözme hızı vb.).
- Kendi özel
.task
modellerinizi içe aktarma ve test etme.
Bu uygulama, LLM Inference API'nin pratik uygulamasını ve cihaz üzerinde üretken yapay zekanın potansiyelini anlamanıza yardımcı olacak bir kaynaktır. Kaynak kodunu inceleyin ve uygulamayı Google AI Edge Gallery GitHub deposundan indirin.
Yapılandırma seçenekleri
Android uygulaması oluşturmak için aşağıdaki yapılandırma seçeneklerini kullanın:
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan değer |
---|---|---|---|
modelPath |
Modelin proje dizininde depolandığı yolunu belirtir. | PATH | Yok |
maxTokens |
Modelin işlediği maksimum jeton sayısı (giriş jetonları + çıkış jetonları). | Tamsayı | 512 |
topK |
Modelin, oluşturma işleminin her adımında dikkate aldığı jeton sayısı. Tahminleri, en olası k jetonla sınırlandırır. | Tamsayı | 40 |
temperature |
Oluşturma sırasında uygulanan rastgelelik miktarı. Sıcaklık yükseldikçe oluşturulan metinde daha fazla yaratıcılık elde edilir. Sıcaklık düştükçe ise daha tahmin edilebilir bir metin oluşturulur. | Kayan | 0,8 |
randomSeed |
Metin oluşturma sırasında kullanılan rastgele tohum. | Tamsayı | 0 |
loraPath |
Cihazdaki LoRA modelinin mutlak yolu. Not: Bu özellik yalnızca GPU modelleriyle uyumludur. | PATH | Yok |
resultListener |
Sonuç dinleyicisini, sonuçları eşzamansız olarak alacak şekilde ayarlar. Yalnızca asynkron oluşturma yöntemi kullanılırken geçerlidir. | Yok | Yok |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | Yok | Yok |
Çok modlu istem
LLM Inference API Android API'leri, metin ve resim girişlerini kabul eden modellerle çoklu formatlı istemleri destekler. Çoklu mod etkinleştirildiğinde kullanıcılar istemlerine resim ve metin kombinasyonu ekleyebilir. LLM ise metin yanıtı sağlar.
Başlamak için Gemma 3n'in MediaPipe uyumlu bir varyantını kullanın:
- Gemma-3n E2B: Gemma-3n ailesinin 2B modeli.
- Gemma-3n E4B: Gemma-3n ailesinin 4B modeli.
Daha fazla bilgi için Gemma-3n belgelerine bakın.
Bir istemde resim sağlamak için giriş resimlerini veya karelerini LLM Inference API'ye iletmeden önce com.google.mediapipe.framework.image.MPImage
nesnesine dönüştürün:
import com.google.mediapipe.framework.image.BitmapImageBuilder
import com.google.mediapipe.framework.image.MPImage
// Convert the input Bitmap object to an MPImage object to run inference
val mpImage = BitmapImageBuilder(image).build()
LLM Inference API için görüntü desteğini etkinleştirmek üzere Grafik seçenekleri içinde EnableVisionModality
yapılandırma seçeneğini true
olarak ayarlayın:
LlmInferenceSession.LlmInferenceSessionOptions sessionOptions =
LlmInferenceSession.LlmInferenceSessionOptions.builder()
...
.setGraphOptions(GraphOptions.builder().setEnableVisionModality(true).build())
.build();
Gemma-3n, oturum başına en fazla bir resim kabul eder. Bu nedenle MaxNumImages
değerini 1 olarak ayarlayın.
LlmInferenceOptions options = LlmInferenceOptions.builder()
...
.setMaxNumImages(1)
.build();
Aşağıda, görüntü ve metin girişlerini işlemek için ayarlanmış LLM Tahmini API'sinin örnek bir uygulaması verilmiştir:
MPImage image = getImageFromAsset(BURGER_IMAGE);
LlmInferenceSession.LlmInferenceSessionOptions sessionOptions =
LlmInferenceSession.LlmInferenceSessionOptions.builder()
.setTopK(10)
.setTemperature(0.4f)
.setGraphOptions(GraphOptions.builder().setEnableVisionModality(true).build())
.build();
try (LlmInference llmInference =
LlmInference.createFromOptions(ApplicationProvider.getApplicationContext(), options);
LlmInferenceSession session =
LlmInferenceSession.createFromOptions(llmInference, sessionOptions)) {
session.addQueryChunk("Describe the objects in the image.");
session.addImage(image);
String result = session.generateResponse();
}
LoRA özelleştirmesi
LLM Tahmini API'si, PEFT (Parametre Verimli İnce Ayar) kitaplığını kullanarak LoRA (Düşük Sıralı Uyum) ayarını destekler. LoRA ayarlama, LLM'lerin davranışını uygun maliyetli bir eğitim süreciyle özelleştirir. Bu süreçte, modelin tamamını yeniden eğitmek yerine yeni eğitim verilerine dayalı küçük bir eğitilebilir ağırlık grubu oluşturulur.
LLM Tahmini API'si, Gemma-2 2B, Gemma 2B ve Phi-2 modellerinin dikkat katmanlarına LoRA ağırlıkları eklemeyi destekler. Modeli safetensors
biçiminde indirin.
LoRA ağırlıkları oluşturmak için temel model safetensors
biçiminde olmalıdır. LoRA eğitimi sonrasında, modelleri MediaPipe'te çalıştırmak için FlatBuffers biçimine dönüştürebilirsiniz.
LoRA ağırlıklarını hazırlama
Kendi veri kümenizde hassas ayarlanmış bir LoRA modeli eğitmek için PEFT'nin LoRA Yöntemleri kılavuzunu kullanın.
LLM Inference API, yalnızca dikkat katmanlarında LoRA'yı destekler. Bu nedenle, LoraConfig
içinde yalnızca dikkat katmanlarını belirtin:
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
Hazırlanan veri kümesinde eğitim yapıldıktan ve model kaydedildikten sonra hassas ayarlanmış LoRA model ağırlıkları adapter_model.safetensors
içinde kullanılabilir. safetensors
dosyası, model dönüşümü sırasında kullanılan LoRA kontrol noktasıdır.
Model dönüşümü
Model ağırlıklarını Flatbuffer biçimine dönüştürmek için MediaPipe Python Paketi'ni kullanın. ConversionConfig
, temel model seçeneklerinin yanı sıra ek LoRA seçeneklerini belirtir.
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_FILE,
)
converter.convert_checkpoint(config)
Dönüştürücü, biri temel model, diğeri LoRA modeli için olmak üzere iki Flatbuffer dosyası oluşturur.
LoRA model çıkarım
Android, başlatma sırasında statik LoRA'yı destekler. Bir LoRA modeli yüklemek için temel LLM'nin yanı sıra LoRA model yolunu da belirtin.
// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath(BASE_MODEL_PATH)
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath(LORA_MODEL_PATH)
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
LoRA ile LLM çıkarımlarını çalıştırmak için temel modeldekiyle aynı generateResponse()
veya generateResponseAsync()
yöntemlerini kullanın.