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 MediaPipeTasksGenai në Podfile 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ë.