Udhëzues LLM Inference për iOS

API-ja LLM Inference ju lejon të ekzekutoni modele të mëdha gjuhësore (LLM) plotësisht në pajisje për aplikacionet iOS, të cilat mund t'i përdorni për të kryer një gamë të gjerë detyrash, të tilla si gjenerimi i tekstit, marrja e informacionit në formë gjuhe natyrore dhe përmbledhja e dokumenteve. Detyra ofron mbështetje të integruar për shumë modele të mëdha gjuhësore tekst-në-tekst, kështu që ju mund të aplikoni modelet më të fundit gjeneruese të IA-së në pajisje në aplikacionet tuaja iOS.

Për të shtuar shpejt API-në LLM Inference në aplikacionin tuaj iOS, ndiqni Udhëzimin e Fillimit të Shpejtë . Për një shembull bazë të një aplikacioni iOS që ekzekuton API-në LLM Inference, shihni aplikacionin shembull . Për një kuptim më të thellë se si funksionon API-ja LLM Inference, referojuni seksioneve opsionet e konfigurimit , konvertimi i modelit dhe akordimi i LoRA-s .

Mund ta shihni këtë detyrë në veprim me demonstrimin e MediaPipe Studio . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Nisje e shpejtë

Ndiqni hapat e mëposhtëm për të shtuar API-në LLM Inference në aplikacionin tuaj iOS. API-ja LLM Inference përdor bibliotekën MediaPipeTasksGenai , e cila duhet të instalohet duke përdorur CocoaPods. Biblioteka është e pajtueshme me aplikacionet Swift dhe Objective-C dhe nuk kërkon ndonjë konfigurim shtesë specifik për gjuhën.

Për udhëzime se si të instaloni CocoaPods në macOS, referojuni udhëzuesit të instalimit të CocoaPods . Për udhëzime se si të krijoni një Podfile me pod-et e nevojshme për aplikacionin tuaj, referojuni Përdorimi i CocoaPods .

Shto varësi

Shtoni pod-in MediaPipeTasksGenaiPodfile duke përdorur kodin e mëposhtëm:

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

Nëse aplikacioni juaj përfshin objektiva testimi njësie, referojuni Udhëzuesit të Konfigurimit për iOS për informacion shtesë mbi konfigurimin e Podfile tuaj.

Shkarkoni një model

Shkarkoni Gemma-2 2B në një format të kuantizuar 8-bitësh nga Kaggle Models . Për më shumë informacion mbi modelet e disponueshme, shihni dokumentacionin e Modeleve .

Shtoni modelin në direktorinë e projektit tuaj duke përdorur Xcode. Për udhëzime se si të shtoni skedarë në projektin tuaj Xcode, referojuni Menaxhimit të skedarëve dhe dosjeve në projektin tuaj Xcode .

Inicializoni Detyrën

Inicializoni detyrën me opsionet bazë të konfigurimit:

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)

Ekzekutoni Detyrën

Përdorni metodën generateResponse(inputText:) për të gjeneruar një përgjigje me tekst. Kjo prodhon një përgjigje të vetme të gjeneruar.

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

Për të transmetuar përgjigjen, përdorni metodën generateResponseAsync(inputText:) .

let resultStream =  LlmInference.generateResponseAsync(inputText: inputPrompt)

do {
  for try await partialResult in resultStream {
    print("\(partialResult)")
  }
  print("Done")
}
catch {
  print("Response error: '\(error)")
}

Aplikim shembull

Aplikacioni shembull është një shembull i një aplikacioni bazë për gjenerimin e tekstit për iOS, duke përdorur API-në LLM Inference. Mund ta përdorni aplikacionin si pikënisje për aplikacionin tuaj iOS ose t'i referoheni atij kur modifikoni një aplikacion ekzistues. Kodi shembullor është i vendosur në GitHub .

Klononi repozitorin git duke përdorur komandën e mëposhtme:

git clone https://github.com/google-ai-edge/mediapipe-samples

Pasi të krijoni një version lokal të kodit shembull, mund ta importoni projektin në iOS Studio dhe ta ekzekutoni aplikacionin. Për më shumë informacion, shihni Udhëzuesin e Konfigurimit për iOS .

Opsionet e konfigurimit

Përdorni opsionet e mëposhtme të konfigurimit për të konfiguruar një aplikacion iOS:

Emri i opsionit Përshkrimi Diapazoni i Vlerave Vlera e parazgjedhur
modelPath Shtegu për në vendin ku ruhet modeli brenda direktorisë së projektit. SHTEG N/A
maxTokens Numri maksimal i tokenëve (tokenët hyrës + tokenët dalës) që trajton modeli. Numër i plotë 512
topk Numri i tokenëve që modeli merr në konsideratë në çdo hap të gjenerimit. Kufizon parashikimet në k tokenët më të mundshëm. Numër i plotë 40
temperature Sasia e rastësisë së futur gjatë gjenerimit. Një temperaturë më e lartë rezulton në më shumë kreativitet në tekstin e gjeneruar, ndërsa një temperaturë më e ulët prodhon gjenerim më të parashikueshëm. Noton 0.8
randomSeed Farërat e rastësishme të përdorura gjatë gjenerimit të tekstit. Numër i plotë 0
loraPath Shtegu absolut për në modelin LoRA lokalisht në pajisje. Shënim: kjo është e pajtueshme vetëm me modelet GPU. SHTEG N/A

Konvertimi i modelit

API-ja LLM Inference është e pajtueshme me llojet e mëposhtme të modeleve, disa prej të cilave kërkojnë konvertim modeli. Përdorni tabelën për të identifikuar metodën e hapave të kërkuar për modelin tuaj.

Modele Metoda e konvertimit Platformat e pajtueshme Lloji i skedarit
Gemma-3 1B Nuk kërkohet konvertim Android, ueb .detyrë
Gemma 2B, Gemma 7B, Gemma-2 2B Nuk kërkohet konvertim Android, iOS, ueb .bin
Phi-2, StableLM, Falcon Skripti i konvertimit të MediaPipe Android, iOS, ueb .bin
Të gjitha modelet PyTorch LLM Biblioteka gjeneruese LiteRT Torch Android, iOS .detyrë

Për të mësuar se si mund të konvertoni modele të tjera, shihni seksionin Konvertimi i Modelit .

Përshtatje e LoRA-s

API-ja e Inferencës LLM mbështet akordimin LoRA (Përshtatje me Rang të Ulët) duke përdorur bibliotekën PEFT (Akordim i Fine-Efiktiv i Parametrave). Akordimi LoRA personalizon sjelljen e LLM-ve përmes një procesi trajnimi me kosto efektive, duke krijuar një grup të vogël peshash të trajnueshme bazuar në të dhëna të reja trajnimi në vend që të ritrajnojë të gjithë modelin.

API-ja LLM Inference mbështet shtimin e peshave LoRA në shtresat e vëmendjes së modeleve Gemma-2 2B , Gemma 2B dhe Phi-2 . Shkarkoni modelin në formatin safetensors .

Modeli bazë duhet të jetë në formatin safetensors për të krijuar pesha LoRA. Pas trajnimit LoRA, mund t'i konvertoni modelet në formatin FlatBuffers për t'u ekzekutuar në MediaPipe.

Përgatitni peshat LoRA

Përdorni udhëzuesin e Metodave LoRA nga PEFT për të trajnuar një model LoRA të përshtatur imët në të dhënat tuaja.

API-ja LLM Inference mbështet LoRA vetëm në shtresat e vëmendjes, prandaj specifikoni vetëm shtresat e vëmendjes në LoraConfig :

# 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"],
)

Pas trajnimit në të dhënat e përgatitura dhe ruajtjes së modelit, peshat e modelit LoRA të rregulluara me imtësi janë të disponueshme në adapter_model.safetensors . Skedari safetensors është pika e kontrollit LoRA e përdorur gjatë konvertimit të modelit.

Konvertimi i modelit

Përdorni paketën MediaPipe Python për të konvertuar peshat e modelit në formatin Flatbuffer. ConversionConfig specifikon opsionet e modelit bazë së bashku me opsionet shtesë LoRA.

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)

Konvertuesi do të prodhojë dy skedarë Flatbuffer, një për modelin bazë dhe një tjetër për modelin LoRA.

Përfundimi i modelit LoRA

iOS mbështet LoRA statike gjatë inicializimit. Për të ngarkuar një model LoRA, specifikoni shtegun e modelit LoRA si dhe LLM-në bazë.

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)

Për të ekzekutuar inferencën LLM me LoRA, përdorni të njëjtat metoda generateResponse() ose generateResponseAsync() si modeli bazë.