LLM Inference API memungkinkan Anda menjalankan model bahasa besar (LLM) sepenuhnya di perangkat untuk aplikasi iOS, yang dapat Anda gunakan untuk melakukan berbagai tugas, seperti membuat teks, mengambil informasi dalam bentuk bahasa alami, dan meringkas dokumen. Tugas ini menyediakan dukungan bawaan untuk beberapa model bahasa besar text-to-text, sehingga Anda dapat menerapkan model AI generatif di perangkat terbaru ke aplikasi iOS Anda.
Untuk menambahkan LLM Inference API dengan cepat ke aplikasi iOS Anda, ikuti Panduan memulai. Untuk contoh dasar aplikasi iOS yang menjalankan LLM Inference API, lihat contoh aplikasi. Untuk pemahaman yang lebih mendalam tentang cara kerja LLM Inference API, lihat bagian opsi konfigurasi, konversi model, dan penyesuaian LoRA.
Anda dapat melihat cara kerja tugas ini dengan demo MediaPipe Studio. Untuk mengetahui informasi selengkapnya tentang kemampuan, model, dan opsi konfigurasi tugas ini, lihat Ringkasan.
Panduan memulai
Gunakan langkah-langkah berikut untuk menambahkan LLM Inference API ke aplikasi iOS Anda.
LLM Inference API menggunakan library MediaPipeTasksGenai, yang harus diinstal menggunakan CocoaPods. Library ini kompatibel dengan aplikasi Swift dan Objective-C
dan tidak memerlukan penyiapan khusus bahasa tambahan.
Untuk mengetahui petunjuk cara menginstal CocoaPods di macOS, lihat panduan penginstalan
CocoaPods.
Untuk mengetahui petunjuk cara membuat Podfile dengan pod yang diperlukan untuk aplikasi Anda, lihat Menggunakan
CocoaPods.
Menambahkan dependensi
Tambahkan pod MediaPipeTasksGenai di Podfile menggunakan kode berikut:
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
Jika aplikasi Anda menyertakan target pengujian unit, lihat Panduan Penyiapan untuk
iOS untuk informasi tambahan tentang penyiapan
Podfile Anda.
Mendownload model
Download Gemma-2 2B dalam format terkuantisasi 8-bit dari Kaggle Models. Untuk mengetahui informasi selengkapnya tentang model yang tersedia, lihat dokumentasi Model.
Tambahkan model ke direktori project Anda menggunakan Xcode. Untuk mengetahui petunjuk tentang cara menambahkan file ke project Xcode, lihat Mengelola file dan folder di project Xcode.
Melakukan Inisialisasi Tugas
Lakukan inisialisasi tugas dengan opsi konfigurasi dasar:
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)
Menjalankan Tugas
Gunakan metode generateResponse(inputText:) untuk menghasilkan respons teks. Tindakan ini akan menghasilkan satu respons yang dibuat.
let result = try LlmInference.generateResponse(inputText: inputPrompt)
Untuk melakukan streaming respons, gunakan metode generateResponseAsync(inputText:).
let resultStream = LlmInference.generateResponseAsync(inputText: inputPrompt)
do {
for try await partialResult in resultStream {
print("\(partialResult)")
}
print("Done")
}
catch {
print("Response error: '\(error)")
}
Contoh aplikasi
Aplikasi contoh adalah contoh aplikasi pembuatan teks dasar untuk iOS, yang menggunakan LLM Inference API. Anda dapat menggunakan aplikasi ini sebagai titik awal untuk aplikasi iOS Anda sendiri, atau merujuknya saat mengubah aplikasi yang ada. Contoh kode dihosting di GitHub.
Clone repositori git menggunakan perintah berikut:
git clone https://github.com/google-ai-edge/mediapipe-samples
Setelah membuat versi lokal kode contoh, Anda dapat mengimpor project ke iOS Studio dan menjalankan aplikasi. Untuk mengetahui informasi selengkapnya, lihat Panduan Penyiapan untuk iOS.
Opsi konfigurasi
Gunakan opsi konfigurasi berikut untuk menyiapkan aplikasi iOS:
| Nama Opsi | Deskripsi | Rentang Nilai | Nilai Default |
|---|---|---|---|
modelPath |
Jalur tempat model disimpan dalam direktori project. | PATH | T/A |
maxTokens |
Jumlah maksimum token (token input + token output) yang ditangani model. | Bilangan bulat | 512 |
topk |
Jumlah token yang dipertimbangkan model pada setiap langkah pembuatan. Membatasi prediksi ke k token dengan probabilitas tertinggi. | Bilangan bulat | 40 |
temperature |
Jumlah keacakan yang diperkenalkan selama pembuatan. Temperatur yang lebih tinggi menghasilkan teks yang lebih kreatif, sedangkan temperatur yang lebih rendah menghasilkan generasi yang lebih dapat diprediksi. | Float | 0,8 |
randomSeed |
Seed acak yang digunakan selama pembuatan teks. | Bilangan bulat | 0 |
loraPath |
Jalur absolut ke model LoRA secara lokal di perangkat. Catatan: opsi ini hanya kompatibel dengan model GPU. | PATH | T/A |
Konversi model
LLM Inference API kompatibel dengan jenis model berikut, beberapa di antaranya memerlukan konversi model. Gunakan tabel untuk mengidentifikasi metode langkah-langkah yang diperlukan untuk model Anda.
| Model | Metode konversi | Platform yang kompatibel | Jenis file |
|---|---|---|---|
| Gemma-3 1B | Tidak diperlukan konversi | Android, web | .task |
| Gemma 2B, Gemma 7B, Gemma-2 2B | Tidak diperlukan konversi | Android, iOS, web | .bin |
| Phi-2, StableLM, Falcon | Skrip konversi MediaPipe | Android, iOS, web | .bin |
| Semua model LLM PyTorch | Library Generatif Torch LiteRT | Android, iOS | .task |
Untuk mempelajari cara mengonversi model lain, lihat bagian Konversi Model.
Penyesuaian LoRA
LLM Inference API mendukung penyesuaian LoRA (Low-Rank Adaptation) menggunakan library PEFT (Parameter-Efficient Fine-Tuning). Penyesuaian LoRA menyesuaikan perilaku LLM melalui proses pelatihan yang hemat biaya, dengan membuat sekumpulan kecil bobot yang dapat dilatih berdasarkan data pelatihan baru, bukan melatih ulang seluruh model.
LLM Inference API mendukung penambahan bobot LoRA ke lapisan perhatian model
Gemma-2 2B, Gemma
2B, dan
Phi-2. Download model dalam format safetensors.
Model dasar harus dalam format safetensors untuk membuat bobot LoRA. Setelah pelatihan LoRA, Anda dapat mengonversi model ke format FlatBuffers
untuk dijalankan di MediaPipe.
Menyiapkan bobot LoRA
Gunakan panduan Metode LoRA dari PEFT untuk melatih model LoRA yang telah disesuaikan pada set data Anda sendiri.
LLM Inference API hanya mendukung LoRA pada lapisan perhatian, jadi hanya tentukan
lapisan perhatian di 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"],
)
Setelah dilatih pada set data yang telah disiapkan dan model disimpan, bobot model LoRA yang di-fine-tune tersedia di adapter_model.safetensors. File safetensors
adalah checkpoint LoRA yang digunakan selama konversi model.
Konversi model
Gunakan Paket Python MediaPipe untuk mengonversi bobot model ke format Flatbuffer. ConversionConfig menentukan opsi model dasar beserta opsi LoRA tambahan.
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)
Konverter akan menghasilkan dua file Flatbuffer, satu untuk model dasar dan satu lagi untuk model LoRA.
Inferensi model LoRA
iOS mendukung LoRA statis selama inisialisasi. Untuk memuat model LoRA, tentukan jalur model LoRA serta LLM dasar.
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)
Untuk menjalankan inferensi LLM dengan LoRA, gunakan metode generateResponse() atau generateResponseAsync() yang sama seperti model dasar.