LLM Inference API, Android uygulamaları için büyük dil modellerini (LLM'ler) tamamen cihaz üzerinde çalıştırmanıza olanak tanır. Bu API'yi kullanarak metin oluşturma, doğal dil biçiminde bilgi alma ve belgeleri özetleme gibi çok çeşitli görevleri gerçekleştirebilirsiniz. Görev, metinden metne büyük dil modelleri için yerleşik destek sunar. Böylece, cihaz üzerinde çalışan en yeni üretken yapay zeka modellerini Android uygulamalarınıza uygulayabilirsiniz.
LLM Inference API'yi Android uygulamanıza hızlıca eklemek için Hızlı Başlangıç kılavuzunu uygulayın. LLM Inference API'yi ç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örevin nasıl çalıştığını 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 Inference API'yi 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ık ekleme
LLM Inference API, com.google.mediapipe:tasks-genai
kitaplığını kullanır. Android uygulamanızın build.gradle
dosyasına şu bağımlılığı ekleyin:
dependencies {
implementation 'com.google.mediapipe:tasks-genai:0.10.27'
}
Model indirme
Gemma-3 1B'yi Hugging Face'ten 4 bitlik nicemlenmiş biçimde indirin. Kullanılabilir modeller hakkında daha fazla bilgi için Modeller dokümanlarına 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 oluşturulmuş yanıt üretir.
val result = llmInference.generateResponse(inputPrompt)
logger.atInfo().log("result: $result")
Yanıtı akış halinde görüntülemek 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 Inference API'lerinin nasıl çalıştığını görmek ve cihaz üzerinde üretken yapay zeka özelliklerinin kapsamlı bir yelpazesini keşfetmek için Google AI Edge Gallery uygulamasını inceleyin.
Google AI Edge Gallery, geliştiriciler için etkileşimli bir deneme alanı olarak hizmet veren açık kaynaklı bir Android uygulamasıdır. Bu kartta şunlar gösterilir:
- Aşağıdakiler de dahil olmak üzere çeşitli görevler için LLM Inference API'yi kullanmayla ilgili pratik örnekler:
- Resme Sor: Bir resim yükleyip resimle ilgili sorular sorun. Açıklama alma, sorun çözme veya nesne tanımlama
- İ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 adımlı sohbetlere katılın.
- Hugging Face LiteRT Community'deki ve resmi Google yayınlarındaki (ör. Gemma 3N) çeşitli LiteRT için optimize edilmiş modelleri keşfetme, indirme ve deneme olanağı.
- Farklı modeller için cihaz üzerinde gerçek zamanlı performans karşılaştırmaları (ilk jeton süresi, kod çözme hızı vb.)
- Kendi özel
.litertlm
veya.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 anlamak için 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ığı yerin yolu. | 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ırlar. | Tamsayı | 40 |
temperature |
Oluşturma sırasında eklenen rastgelelik miktarı. Sıcaklık yükseldikçe oluşturulan metin daha yaratıcı olur. 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 başlangıç değeri. | Tamsayı | 0 |
loraPath |
LoRA modelinin cihazdaki yerel mutlak yolu. Not: Bu yalnızca GPU modelleriyle uyumludur. | PATH | Yok |
resultListener |
Sonuçları eşzamansız olarak almak için sonuç dinleyicisini ayarlar. Yalnızca eşzamansız oluşturma yöntemi kullanılırken geçerlidir. | Yok | Yok |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | Yok | Yok |
Çok formatlı istemler
LLM Inference API Android API'leri, metin, resim ve ses girişlerini kabul eden modellerle çok formatlı istem oluşturmayı destekler. Çok formatlılık etkinleştirildiğinde kullanıcılar istemlerine resim ve metin ya da ses ve metin kombinasyonu ekleyebilir.LLM daha sonra metin yanıtı verir.
Başlamak için Gemma 3n'nin MediaPipe ile uyumlu bir varyantını kullanın:
- Gemma-3n E2B: Gemma-3n ailesinin etkili bir 2B modeli.
- Gemma-3n E4B: Gemma-3n ailesinin etkili bir 4B modeli.
Daha fazla bilgi için Gemma-3n belgelerine bakın.
LLM Inference API için görüntü veya ses girişini etkinleştirmek üzere aşağıdaki adımları uygulayın.
Resim girişi
Bir istemde resim sağlamak için giriş resimlerini veya karelerini LLM Inference API'ye aktarmadan ö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'de görme desteğini etkinleştirmek için grafik seçeneklerinde EnableVisionModality
yapılandırma seçeneğini true
olarak ayarlayın:
LlmInferenceSession.LlmInferenceSessionOptions sessionOptions =
LlmInferenceSession.LlmInferenceSessionOptions.builder()
...
.setGraphOptions(GraphOptions.builder().setEnableVisionModality(true).build())
.build();
Oturum başına maksimum 10 resim ayarlayın.
LlmInferenceOptions options = LlmInferenceOptions.builder()
...
.setMaxNumImages(10)
.build();
Aşağıda, LLM Inference API'nin görme ve metin girişlerini işleyecek şekilde ayarlanmasına dair örnek bir uygulama 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();
}
Ses girişi
LlmInferenceOptions'ta ses desteğini etkinleştirme
val inferenceOptions = LlmInference.LlmInferenceOptions.builder()
...
.setAudioModelOptions(AudioModelOptions.builder().build())
.build()
sessionOptions'ta ses desteğini etkinleştirin.
val sessionOptions = LlmInferenceSessionOptions.builder()
...
.setGraphOptions(GraphOptions.builder().setEnableAudioModality(true).build())
.build()
Çıkarım sırasında ses verileri gönderme. Not: Ses, .wav olarak biçimlendirilmiş mono kanal olmalıdır.
val audioData: ByteArray = ...
inferenceEngine.llmInferenceSession.addAudio(audioData)
Aşağıda, ses ve metin girişlerini işlemek üzere ayarlanmış LLM Inference API'nin örnek bir uygulaması verilmiştir:
val audioData: ByteArray = ...
val inferenceOptions = LlmInference.LlmInferenceOptions.builder()
...
.setAudioModelOptions(AudioModelOptions.builder().build())
.build()
val sessionOptions = LlmInferenceSessionOptions.builder()
...
.setGraphOptions(GraphOptions.builder().setEnableAudioModality(true).build())
.build()
LlmInference.createFromOptions(context, inferenceOptions).use { llmInference ->
LlmInferenceSession.createFromOptions(llmInference, sessionOptions).use { session ->
session.addQueryChunk("Transcribe the following speech segment:")
session.addAudio(audioData)
val result = session.generateResponse()
}
}
LoRA özelleştirme
LLM Inference API, PEFT (Parameter-Efficient Fine-Tuning) kitaplığı kullanılarak LoRA (Low-Rank Adaptation) ince ayarını destekler. LoRA ayarlama, LLM'lerin davranışını uygun maliyetli bir eğitim süreciyle özelleştirir. Bu süreçte, modelin tamamı yeniden eğitilmek yerine yeni eğitim verilerine dayalı olarak eğitilebilir ağırlıklardan oluşan küçük bir küme oluşturulur.
LLM Inference API, Gemma-2 2B, Gemma 2B ve Phi-2 modellerinin dikkat katmanlarına LoRA ağırlıkları eklenmesini destekler. Modeli safetensors
biçiminde indirin.
LoRA ağırlıkları oluşturmak için temel model safetensors
biçiminde olmalıdır. LoRA eğitiminden sonra, 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 ince ayarlı bir LoRA modeli eğitmek için PEFT'in 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ümesi üzerinde eğitim yapılıp model kaydedildikten sonra, ince ayar yapılmış LoRA model ağırlıkları adapter_model.safetensors
içinde kullanılabilir. safetensors
dosyası, model dönüştürme sırasında kullanılan LoRA kontrol noktasıdır.
Model dönüştürme
Model ağırlıklarını Flatbuffer biçimine dönüştürmek için MediaPipe Python paketini kullanın. ConversionConfig
, ek LoRA seçenekleriyle birlikte temel model 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 için, diğeri ise LoRA modeli için olmak üzere iki Flatbuffer dosyası oluşturur.
LoRA modeli çıkarımı
Android, başlatma sırasında statik LoRA'yı destekler. LoRA modeli yüklemek için LoRA modeli yolunu ve temel LLM'yi 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ımı çalıştırmak için temel modelle aynı generateResponse()
veya generateResponseAsync()
yöntemlerini kullanın.