LLM Inference API, büyük dil modellerini (LLM) tamamen cihaz üzerinde çalıştırmanızı sağlar Android uygulamaları için geçerlidir. Bu uygulamaları, çok çeşitli görevleri, metin oluşturma, doğal dilde bilgi alma ve en iyi uygulamaları paylaşacağım. Görev, birden fazla kullanıcı için Metinden metne dönüştürülebilir büyük dil modelleri sayesinde cihazdaki en yeni özellikleri uygulayabilirsiniz üretken yapay zeka modellerini kullanabilirsiniz.
Görev, Gemma'yı destekler. 2B'nin bir parçası olan aynı araştırmadan oluşturulan son teknoloji ürünü açık modeller ailesi Gemini modellerini oluşturmak için kullanılan teknoloji ve teknolojiler. Ayrıca aşağıdaki harici modelleri de destekler: Phi-2 Falcon-RW-1B ve StableLM-3B, AI Edge üzerinden dışa aktarılan tüm modellerle birlikte.
Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.
Kod örneği
Bu kılavuzda, Android için temel bir metin oluşturma uygulaması örneği ele alınmaktadır. Siz uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya mevcut bir uygulamada değişiklik yaparken. Örnek kod, GitHub'a gidin.
Kodu indirme
Aşağıdaki talimatlarda, örneğin yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir kodu oluşturmak için git komut satırı aracını kullanın.
Örnek kodu indirmek için:
- Aşağıdaki komutu kullanarak git deposunu klonlayın:
git clone https://github.com/google-ai-edge/mediapipe-samples
- İsteğe bağlı olarak, git örneğinizi seyrek ödeme yöntemini kullanacak şekilde yapılandırın. Böylece,
yalnızca LLM Inference API örnek uygulamasının dosyaları:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/llm_inference/android
Örnek kodun yerel sürümünü oluşturduktan sonra projeyi içe aktarabilirsiniz. Android Studio'ya gidip uygulamayı çalıştırın. Talimatlar için bkz. Android.
Kurulum
Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili özel olarak LLM Inference API'yi kullanmak için kod projeleri. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı platform sürümü gereksinimleri hakkında daha fazla bilgi için Android.
Bağımlılıklar
LLM Inference API, com.google.mediapipe:tasks-genai
kitaplığını kullanır. Bunu ekle
bağımlılığı:build.gradle
dependencies {
implementation 'com.google.mediapipe:tasks-genai:0.10.14'
}
Model
MediaPipe LLM Inference API, aşağıdaki özelliklere sahip eğitilmiş bir metin-metin dil modeli gerektirir: bu görevle uyumludur. Bir modeli indirdikten sonra, gerekli olan ve modeli Android cihaza aktarır. Model kullanıyorsanız kullanmak için modeli Gemma ile uyumlu bir biçime dönüştürmeniz gerekir. MediaPipe'i seçin.
LLM Inference API için eğitilmiş mevcut modeller hakkında daha fazla bilgi için göreve Modeller bölümüne genel bakış.
Model indirme
LLM Inference API'yi başlatmadan önce desteklenen modellerden birini indirin ve dosyayı proje dizininizde depolayın:
- Gemma 2B: oluşturmak için kullanılan araştırma ve teknolojinin Gemini modelleri Pek çok farklı türde metin oluşturma görevleri (soru cevaplama, özetleme ve e-posta gibi) muhakeme.
- Phi-2: 2,7 milyar parametre Soru-Cevap, sohbet ve kod için en uygun dönüştürücü modeli biçimindedir.
- Falcon-RW-1B: 1 milyar 350 milyarlık jetonlarla eğitilen yalnızca parametre nedensel kod çözücü modeli RefinedWeb.
- StableLM-3B: 3 1 trilyon kez önceden eğitilmiş bir milyar parametre yalnızca kod çözücü dil modeli jetonları arasında yer alır.
Alternatif olarak, AI Edge Troch anahtar kelimesi.
Kaggle'da bulabileceğiniz Gemma 2B'yi kullanmanızı öneririz. Modeller LLM Inference API ile uyumlu bir biçimde olmalıdır. Şunu kullanıyorsanız: başka bir LLM olarak değiştirirseniz modeli bir LLM'ye dönüştürmeniz MediaPipe uyumlu bir biçim. Gemma 2B hakkında daha fazla bilgi için bkz. Gemma bakın. Daha fazla bilgi için görmek istiyorsanız, göreve genel bakış Modeller bölümüne bakın.
Modeli MediaPipe biçimine dönüştür
Yerel model dönüştürme
Harici bir LLM (Phi-2, Falcon veya StableLM) ya da Kaggle olmayan bir LLM kullanıyorsanız sürümünü yüklemek istiyorsanız dönüşüm komut dosyalarımızı kullanarak modeli uyumlu bir şekilde çalışır.
Model dönüştürme işlemi için MediaPipe PyPI paketi gerekir. Dönüşüm
komut dosyası, 0.10.11
tarihinden sonraki tüm MediaPipe paketlerinde kullanılabilir.
Bağımlılıkları aşağıdakilerle yükleyip içe aktarın:
$ python3 -m pip install mediapipe
Modeli dönüştürmek için genai.converter
kitaplığını kullanın:
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
input_ckpt=INPUT_CKPT,
ckpt_format=CKPT_FORMAT,
model_type=MODEL_TYPE,
backend=BACKEND,
output_dir=OUTPUT_DIR,
combine_file_only=False,
vocab_model_file=VOCAB_MODEL_FILE,
output_tflite_file=OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
LoRA modelini dönüştürmek için ConversionConfig
, temel modeli belirtmelidir
hem de ek LoRA seçenekleri yer alıyor. Yalnızca API'nin yalnızca
GPU ile LoRA çıkarımını destekliyorsa arka uç 'gpu'
olarak ayarlanmalıdır.
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_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Dönüştürücü, biri temel model için olmak üzere iki TFLite sabit arabellek dosyası çıktısı verir diğeri ise LoRA modeli içindir.
Parametre | Açıklama | Kabul Edilen Değerler |
---|---|---|
input_ckpt |
model.safetensors veya pytorch.bin dosyasının yolu. Bazı durumlarda model güvenli tensor biçiminin birden fazla dosyaya bölündüğünü (ör. model-00001-of-00003.safetensors , model-00001-of-00003.safetensors . model*.safetensors gibi bir dosya kalıbı belirtebilirsiniz. |
YOL |
ckpt_format |
Model dosyasının biçimi. | {"safetensors", "pytorch"} |
model_type |
Dönüştürülen LLM. | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend |
Modeli çalıştırmak için kullanılan işlemci (yetki verilmiş kullanıcı). | {"cpu", "gpu"} |
output_dir |
Katman başına ağırlık dosyalarını barındıran çıkış dizininin yolu. | YOL |
output_tflite_file |
Çıkış dosyasının yolu. Örneğin, "model_cpu.bin" veya "model_gpu.bin" ekleyin. Bu dosya yalnızca LLM Inference API ile uyumludur ve genel bir "tflite" dosyası olarak kullanılamaz. | YOL |
vocab_model_file |
tokenizer.json ve
tokenizer_config.json dosya. Gemma için, fare imlecini tek tokenizer.model dosyasının üzerine getirin. |
YOL |
lora_ckpt |
LoRA adaptör ağırlığını depolayan güvenlitensörlerin LoRA ckpt dosyasının yolu. | YOL |
lora_rank |
LoRA ckpt rütbesini temsil eden bir tam sayı Lora ağırlıklarını dönüştürmek için gereklidir. Sağlanmazsa dönüştürücü, herhangi bir LoRA ağırlığı olmadığını varsayar. Not: Yalnızca GPU arka ucu, LoRA'yı destekler. | Tamsayı |
lora_output_tflite_file |
LoRA ağırlıkları için çıkış tflite dosya adı. | YOL |
AI Edge modeli dönüştürme
AI Edge üzerinden TFLite modeliyle eşlenmiş bir LLM kullanıyorsanız komut dosyasını kullanarak Görev Paketi oluşturun. Paketleme sürecinde ek meta veriler (ör. Tokenizer Parametreleri) gerekiyor uçtan uca çıkarım yapmak için de kullanılabilir.
Model paketleme işlemi MediaPipe PyPI paketi gerektirir. Dönüşüm
komut dosyası, 0.10.14
tarihinden sonraki tüm MediaPipe paketlerinde kullanılabilir.
Bağımlılıkları aşağıdakilerle yükleyip içe aktarın:
$ python3 -m pip install mediapipe
Modeli gruplandırmak için genai.bundler
kitaplığını kullanın:
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
Parametre | Açıklama | Kabul Edilen Değerler |
---|---|---|
tflite_model |
AI Edge'in dışa aktarılan TFLite modelinin yolu. | YOL |
tokenizer_model |
SentencePiece jeton oluşturucu modelinin yolu. | YOL |
start_token |
Modele özel başlangıç jetonu. Başlangıç jetonu sağlayan token oluşturucu modeli. | Dize |
stop_tokens |
Modele özel durdurma jetonları. Durdurma jetonları sağlayan token oluşturucu modeli. | LİSTE[STRING] |
output_filename |
Çıkış görev paketi dosyasının adı. | YOL |
Modeli cihaza aktar
output_path klasörünün içeriğini Android'e aktar olanak tanır.
$ 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.bin
Görevi oluşturma
MediaPipe LLM Inference API, createFromOptions()
işlevini kullanarak
görevi görebilir. createFromOptions()
işlevi, yapılandırma için değerleri kabul eder
seçenekleri vardır. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma
seçenekleri bulabilirsiniz.
Aşağıdaki kod, temel yapılandırma seçeneklerini kullanarak görevi başlatır:
// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPATH('/data/local/.../')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
Yapılandırma seçenekleri
Android uygulaması kurmak 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ığı yol. | YOL | Yok |
maxTokens |
Modelin işlediği maksimum jeton sayısı (giriş jetonları + çıkış jetonları). | Tamsayı | 512 |
topK |
Modelin, oluşturma sürecinin 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 sunulan rastgelelik miktarı. Daha yüksek oluşturulan metinde daha fazla yaratıcılığa yol açar. Ancak, daha düşük sıcaklıklarda üretim daha tahmin edilebilir hale gelir. | Kayan | 0,8 |
randomSeed |
Metin oluşturma sırasında kullanılan rastgele başlangıç noktası. | Tamsayı | 0 |
loraPath |
Cihazdaki LoRA modelinin yerel olarak mutlak yolu. Not: Bu yalnızca GPU modelleriyle uyumludur. | YOL | Yok |
resultListener |
Sonuç işleyiciyi, sonuçları eşzamansız olarak alacak şekilde 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 |
Verileri hazırlama
LLM Inference API aşağıdaki girişleri kabul eder:
- prompt (dize): Bir soru veya istem.
val inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday."
Görevi çalıştırma
Girişe metin yanıtı oluşturmak için generateResponse()
yöntemini kullanın
önceki bölümde (inputPrompt
) belirtilen metin. Bu durumda,
oluşturulmuş yanıt.
val result = llmInference.generateResponse(inputPrompt)
logger.atInfo().log("result: $result")
Yanıtı akış şeklinde sunmak 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)
Sonuçları işleme ve görüntüleme
LLM Inference API, oluşturulan LlmInferenceResult
yanıt metni.
Here's a draft you can use:
Subject: Lunch on Saturday Reminder
Hi Brett,
Just a quick reminder about our lunch plans this Saturday at noon.
Let me know if that still works for you.
Looking forward to it!
Best,
[Your Name]
LoRA modelini özelleştirme
Mediapipe LLM çıkarım API'si, Düşük Dereceli Uyarlama'yı (LoRA) destekleyecek şekilde yapılandırılabilir büyük dil modelleri için. Geliştiriciler, ince ayar yapılmış LoRA modellerinden yararlanarak uygun maliyetli bir eğitim süreci ile LLM'lerin davranışını özelleştirmek.
LLM Inference API için LoRA desteği, Gemma-2B ve Phi-2 modellerinde GPU arka ucu (LoRA ağırlıkları yalnızca dikkat katmanları için geçerlidir). Bu ilk uygulama gelecekteki geliştirmeler için deneysel bir API işlevi görür yakında daha fazla model ve çeşitli katman türlerini desteklemeyi planlıyoruz güncellemelerine göz atın.
LoRA modellerini hazırlama
Desteklenen model türleri (Gemma-2B veya Phi-2) ile kendi veri kümenizde hassas ayarlanmış bir LoRA modeli eğitmek için HuggingFace talimatlarını uygulayın. Gemma-2B ve Phi-2 modellerinin her ikisi de HuggingFace'te güvenli tensor biçiminde kullanılabilir. LLM Inference API yalnızca dikkat katmanlarında LoRA'yı desteklediğinden, LoraConfig
öğesini aşağıdaki gibi oluştururken yalnızca dikkat katmanlarını belirtin:
# For Gemma-2B
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"],
)
Test amacıyla HuggingFace'te LLM Inference API'ye uyan ve herkesin erişebileceği, ince ayar yapılmış LoRA modelleri vardır. Örneğin, Gemma-2B için monsterapi/gemma-2b-lora-maths-orca-200k ve Phi-2 için lole25/phi-2-sft-ultrachat-lora.
Hazırlanan veri kümesi üzerinde eğitim alıp modeli kaydettikten sonra, ince ayar yapılmış LoRA modeli ağırlıklarını içeren bir adapter_model.safetensors
dosyası elde ediyorsunuz. Safetensors dosyası, model dönüştürme işleminde kullanılan LoRA kontrol noktasıdır.
Sonraki adım olarak, MediaPipe Python Paketi'ni kullanarak model ağırlıklarını bir TensorFlow Lite Flatbuffer'a dönüştürmeniz gerekir. ConversionConfig
, temel model seçeneklerini ve ek LoRA seçeneklerini belirtmelidir. API yalnızca GPU ile LoRA çıkarımını desteklediğinden arka ucun 'gpu'
olarak ayarlanması gerekir.
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_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Dönüştürücü, biri temel model için olmak üzere iki TFLite sabit arabellek dosyası çıktısı verir diğeri ise LoRA modeli içindir.
LoRA modeli çıkarımı
Web, Android ve iOS LLM Inference API, LoRA model çıkarımını destekleyecek şekilde güncellendi. Web, çalışma zamanı boyunca farklı LoRA modellerini değiştirebilen dinamik LoRA'yı destekler. Android ve iOS, görevin ömrü boyunca aynı LoRA ağırlıklarını kullanan statik LoRA'yı destekler.
Android, başlatma sırasında statik LoRA'yı destekler. LoRA modeli yüklemek için kullanıcılar hem LoRA model yolunu hem de temel LLM'yi belirtir.// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath('<path to base model>')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath('<path to LoRA model>')
.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.