LLM Inference API, büyük dil modellerini (LLM) tamamen cihaz üzerinde çalıştırmanızı sağlar iOS uygulamaları için kullanabileceğiniz, bu API'yi kullanarak 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.
Bu görevi MediaPipe Studio ile demo'ya gidin. Ö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
MediaPipe Tasks örnek kodu, LLM Inference API'nin temel bir uygulamasıdır uygulamasını indirin. Uygulamayı kendi iOS uygulamanız için başlangıç noktası olarak kullanabilirsiniz veya bu bilgilere referansta bulunmanızı öneririz. LLM Inference API örnek kodu: barındırıldığı yer: 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/ios/
Örnek kodun yerel sürümünü oluşturduktan sonra, MediaPipe görev kitaplığı, Xcode kullanarak projeyi açın ve uygulamayı çalıştırın. Örneğin, iOS için Kurulum Kılavuzu'na bakın.
Kurulum
Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili LLM Inference API'yi kullanmak için kod projeleri. platform sürümü de dahil olmak üzere MediaPipe görevlerini kullanmaya yönelik geliştirme ortamı iOS için kurulum kılavuzuna bakın.
Bağımlılıklar
LLM Inference API, yüklenmesi gereken MediaPipeTasksGenai
kitaplığını kullanır
CocoaPods kullanıyor. Kitaplık hem Swift hem de Objective-C uygulamalarıyla uyumludur.
ve dile özel ek kurulum gerektirmez.
CocoaPods'u macOS'e yükleme talimatları için bkz. CocoaPods
kurulum kılavuzuna başvurun.
Uygulamanız için gerekli kapsülleri içeren bir Podfile
oluşturma talimatlarına
için
CocoaPods'da bulabilirsiniz.
MediaPipeTasksGenai
kapsülünü, aşağıdaki kodu kullanarak Podfile
içine ekleyin:
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
Uygulamanız birim test hedefleri içeriyorsa
iOS'i kurma hakkında daha fazla bilgi edinin.
Podfile
cihazınız.
Model
MediaPipe LLM Inference API görevi, uyumlu ve eğitilmiş bir model gerektirir karar veriyorum. Mevcut eğitilmiş modeller hakkında daha fazla bilgi için LLM Inference API, göreve genel bakışın Modeller bölümünü inceleyin.
Model indirme
Bir model indirin ve Xcode'u kullanarak bu modeli proje dizininize ekleyin. Örneğin, Xcode projenize dosya ekleme hakkındaki talimatlar için Dosyaları yönetme Xcode'daki diğer klasörler inceleyebilirsiniz.
Gemma 2B'yi indirin 'nı inceleyin.
iOS uygulamaları oluştururken aşağıdaki varyantlardan birini kullanın:
- gemma-2b-it-cpu-int4: CPU uyumluluğuna sahip Gemma 4 bit modeli.
- gemma-2b-it-gpu-int4: GPU uyumluluğuna sahip Gemma 4 bit modeli.
- AI Edge Torch, iOS bellek gereksinimlerine uyan modeller eşleştirdi.
Diğer modeller hakkında daha fazla bilgi için görevlere genel bakış sayfasını inceleyin. Modeller bölümünü inceleyin.
Görevi oluşturma
Başlatıcılarından birini çağırarak LLM Inference API görevini oluşturabilirsiniz. İlgili içeriği oluşturmak için kullanılan
LlmInference(options:)
başlatıcı, yapılandırma seçeneklerinin değerlerini ayarlar.
Özelleştirilmiş yapılandırmayla başlatılan bir LLM Inference API'ye ihtiyacınız yoksa
seçeneklerini görmek isterseniz LlmInference(modelPath:)
başlatıcıyı kullanarak
Varsayılan seçeneklere sahip LLM Inference API. Yapılandırma hakkında daha fazla bilgi için
Yapılandırmaya Genel Bakış bölümüne göz atın.
Aşağıdaki kod, bu görevin nasıl oluşturulacağını ve yapılandırılacağını gösterir.
import MediaPipeTasksGenai
let modelPath = Bundle.main.path(forResource: "model",
ofType: "bin")
let options = LlmInferenceOptions()
options.baseOptions.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
let LlmInference = try LlmInference(options: options)
Yapılandırma seçenekleri
Bu görev, iOS uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:
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 |
Verileri hazırlama
LLM Inference API, metin verileriyle çalışır. Görev, veri girişini işler ön işleme dahil edilir.
Tüm ön işlemler, generateResponse(inputText:)
işlevi içinde gerçekleştirilir.
Giriş metninin önceden ek bir ön işleme tabi tutulmasına gerek yoktur.
let inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday."
Görevi çalıştırma
LLM Inference API'yi çalıştırmak için generateResponse(inputText:)
yöntemini kullanın. İlgili içeriği oluşturmak için kullanılan
LLM Inference API, giriş metni için olası kategorileri döndürür.
let result = try LlmInference.generateResponse(inputText: inputPrompt)
Yanıtı akış şeklinde sunmak için generateResponseAsync(inputText:)
yöntemini kullanın.
let resultStream = LlmInference.generateResponseAsync(inputText: inputPrompt)
do {
for try await partialResult in resultStream {
print("\(partialResult)")
}
print("Done")
}
catch {
print("Response error: '\(error)")
}
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.
iOS 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.import MediaPipeTasksGenai
let modelPath = Bundle.main.path(forResource: "model",
ofType: "bin")
let loraPath= Bundle.main.path(forResource: "lora_model",
ofType: "bin")
let options = LlmInferenceOptions()
options.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
options.loraPath = loraPath
let LlmInference = try LlmInference(options: options)
LoRA ile LLM çıkarımı çalıştırmak için temel modelle aynı generateResponse()
veya generateResponseAsync()
yöntemlerini kullanın.