iOS için LLM Çıkarım rehberi

LLM Inference API, iOS uygulamaları için büyük dil modellerini (LLM) tamamen cihaz üzerinde çalıştırmanızı sağlar. Bu modelleri metin oluşturma, doğal dil biçiminde bilgi alma ve dokümanları ö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 sunar. Böylece, cihazdaki en yeni üretken yapay zeka modellerini iOS uygulamalarınıza uygulayabilirsiniz.

Bu görevi MediaPipe Studio demosu ile çalışırken görebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış'a bakın.

Kod örneği

MediaPipe Tasks örnek kodu, iOS için LLM Inference API uygulamasının temel bir uygulamasıdır. Uygulamayı kendi iOS uygulamanız için başlangıç noktası olarak kullanabilir veya mevcut bir uygulamayı değiştirirken başvuruda bulunabilirsiniz. LLM Inference API örnek kodu GitHub'da barındırılır.

Kodu indirme

Aşağıdaki talimatlar, git komut satırı aracını kullanarak örnek kodun yerel bir kopyasını nasıl oluşturacağınızı göstermektedir.

Örnek kodu indirmek için:

  1. Aşağıdaki komutu kullanarak git deposunu klonlayın:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. İsteğe bağlı olarak, yalnızca LLM Inference API örnek uygulamasına ait dosyalara sahip olmak için git örneğinizi az ödeme yöntemini kullanacak şekilde yapılandırın:

    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ığını yükleyebilir, Xcode kullanarak projeyi açabilir ve uygulamayı çalıştırabilirsiniz. Talimatlar için iOS için Kurulum Kılavuzu'na bakın.

Kurulum

Bu bölümde, LLM Inference API kullanmak için geliştirme ortamınızı ve kod projelerinizi kurmanın temel adımları açıklanmaktadır. Platform sürümü gereksinimleri de dahil olmak üzere, MediaPipe görevlerini kullanmak amacıyla geliştirme ortamınızı ayarlama hakkında genel bilgiler için iOS için kurulum kılavuzuna bakın.

Bağımlılıklar

LLM Inference API, CocoaPods kullanılarak yüklenmesi gereken MediaPipeTasksGenai kitaplığını kullanır. Kitaplık hem Swift hem de Objective-C uygulamalarıyla uyumludur ve dile özgü ek kurulum gerektirmez.

CocoaPods'u macOS'e yükleme talimatları için CocoaPods yükleme kılavuzuna bakın. Uygulamanız için gerekli kapsüllerle Podfile oluşturma talimatları için CocoaPods'u kullanma bölümüne bakın.

Aşağıdaki kodu kullanarak MediaPipeTasksGenai kapsülünü Podfile içine ekleyin:

target 'MyLlmInferenceApp' do
  use_frameworks!
  pod 'MediaPipeTasksGenAI'
  pod 'MediaPipeTasksGenAIC'
end

Uygulamanız birim test hedefleri içeriyorsa Podfile cihazınızın kurulumuyla ilgili ek bilgiler için iOS için Kurulum Kılavuzu'na bakın.

Model

MediaPipe LLM Inference API görevi, bu görevle uyumlu olan eğitilmiş bir model gerektirir. LLM Inference API için eğitilmiş modeller hakkında daha fazla bilgi almak isterseniz göreve genel bakış Modeller bölümüne bakın.

Model indirme

Bir model indirin ve Xcode kullanarak proje dizininize ekleyin. Xcode projenize dosya eklemeyle ilgili talimatlar için Xcode projenizde dosya ve klasörleri yönetme bölümüne bakın.

Gemma 2B'yi indirin

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.
  • iOS bellek gereksinimlerine uyan AI Edge Torch eşlenmiş modelleri.

Diğer modeller hakkında daha fazla bilgi için göreve genel bakış Modeller bölümüne bakın.

Görevi oluşturma

LLM Inference API görevini, başlatıcılarından birini çağırarak oluşturabilirsiniz. LlmInference(options:) başlatıcı, yapılandırma seçeneklerinin değerlerini ayarlar.

Özelleştirilmiş yapılandırma seçenekleriyle başlatılan bir LLM Inference API'ye ihtiyacınız yoksa varsayılan seçeneklerle bir LLM Inference API oluşturmak için LlmInference(modelPath:) başlatıcısını kullanabilirsiniz. Yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış bölümüne bakı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. 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 simge ile sınırlar. topk ayarlarken randomSeed için de bir değer belirlemeniz gerekir. Tamsayı 40
temperature Oluşturma sırasında sunulan rastgelelik miktarı. Sıcaklık ne kadar yüksek olursa üretilen metin daha fazla yaratıcılık gerektirir, düşük sıcaklık ise daha tahmin edilebilir üretim sağlar. temperature ayarlarken randomSeed için de bir değer belirlemeniz gerekir. Kayan 0,8
randomSeed Metin oluşturma sırasında kullanılan rastgele çekirdek. Tamsayı 0
loraPath Cihazda yerel olarak LoRA modeline giden mutlak yol. Not: Bu yalnızca GPU modelleriyle uyumludur. PATH Yok

Verileri hazırlama

LLM Inference API, metin verileriyle çalışır. Görev, tokenizasyon ve tensör ön işlemesi dahil olmak üzere veri girişi ön işlemesini yürütür.

Tüm ön işlemeler, generateResponse(inputText:) işlevi içinde gerçekleştirilir. Giriş metninin önceden işlenmesine 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. LLM Inference API, giriş metni için olası kategorileri döndürür.

let result = try LlmInference.generateResponse(inputText: inputPrompt)

Yanıtı canlı yayınlamak 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 yanıt metnini içeren bir LlmInferenceResult döndürür.

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 modeli özelleştirme

Mediapipe LLM çıkarım API'si, büyük dil modelleri için Düşük Sıralama Uyarlaması'nı (LoRA) destekleyecek şekilde yapılandırılabilir. Geliştiriciler, ince ayarlı LoRA modelleri kullanan uygun maliyetli bir eğitim süreciyle LLM'lerin davranışını özelleştirebilir.

LLM Inference API'nin LoRA desteği, yalnızca dikkat katmanları için geçerli olan LoRA ağırlıkları ile GPU arka ucu için Gemma-2B ve Phi-2 modellerinde kullanılabilir. Bu ilk uygulama, gelecekteki geliştirmeler için deneysel bir API işlevi görmektedir. Gelecek güncellemelerde daha fazla model ve çeşitli katman türlerini desteklemesi planlanmaktadır.

LoRA modelleri hazırlama

Desteklenen model türleri (Gemma-2B veya Phi-2) ile kendi veri kümenizde hassas ayarlar yapılmış bir LoRA modeli eğitmek için HuggingFace talimatlarını uygulayın. Gemma-2B ve Phi-2 modellerinin her ikisi de HuggingFace'te koruyucu biçimde mevcuttur. LLM Inference API yalnızca dikkat katmanlarında LoRA'yı desteklediğinden, sadece aşağıdaki gibi LoraConfig oluştururken 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 için HuggingFace'te LLM Inference API'ye uyan, herkesin erişebileceği ve hassas ayarları yapılmış LoRA modelleri mevcuttur. Ö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ümesiyle ilgili eğitim verip modeli kaydettikten sonra, hassas ayarlar yapılmış LoRA model 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 Paketini kullanarak model ağırlıklarını TensorFlow Lite Flatbuffer ürününe dönüştürmeniz gerekir. ConversionConfig alanında temel model seçeneklerinin yanı sıra ek LoRA seçenekleri de belirtilmelidir. API yalnızca GPU ile LoRA çıkarımını desteklediğinden 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, diğeri LoRA modeli için olmak üzere iki TFLite düz arabellek dosyası oluşturur.

LoRA modeli çıkarımı

Web, Android ve iOS LLM Inference API, LoRA modeli çıkarımını destekleyecek şekilde güncellendi. Web, çalışma zamanında 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. Bir LoRA modelini yüklemek için kullanıcılar temel LLM'nin yanı sıra LoRA model yolunu da 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.