LLM Inference API memungkinkan Anda menjalankan model bahasa besar (LLM) sepenuhnya di perangkat untuk aplikasi iOS, yang dapat digunakan untuk melakukan berbagai tugas, seperti membuat teks, mengambil informasi dalam bentuk natural language, dan meringkas dokumen. Tugas ini memberikan dukungan bawaan untuk beberapa model bahasa besar text-to-text, sehingga Anda dapat menerapkan model AI generatif terbaru di perangkat ke aplikasi iOS Anda.
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.
Contoh kode
Kode contoh Tugas MediaPipe adalah implementasi dasar aplikasi LLM Inference API untuk iOS. Anda dapat menggunakan aplikasi sebagai titik awal untuk aplikasi iOS Anda sendiri, atau merujuknya saat memodifikasi aplikasi yang sudah ada. Kode contoh LLM Inference API dihosting di GitHub.
Mendownload kode
Petunjuk berikut menunjukkan cara membuat salinan lokal dari kode contoh menggunakan alat command line git.
Untuk mendownload kode contoh:
Clone repositori git menggunakan perintah berikut:
git clone https://github.com/google-ai-edge/mediapipe-samples
Secara opsional, konfigurasikan instance git untuk menggunakan checkout sparse, sehingga Anda hanya memiliki file untuk aplikasi contoh LLM Inference API:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/llm_inference/ios/
Setelah membuat versi lokal kode contoh, Anda dapat menginstal library tugas MediaPipe, membuka project menggunakan Xcode, dan menjalankan aplikasi. Untuk mengetahui petunjuknya, lihat Panduan Penyiapan untuk iOS.
Penyiapan
Bagian ini menjelaskan langkah-langkah utama untuk menyiapkan lingkungan pengembangan dan membuat kode project agar dapat menggunakan LLM Inference API. Guna mengetahui informasi umum tentang cara menyiapkan lingkungan pengembangan untuk menggunakan tugas MediaPipe, termasuk persyaratan versi platform, lihat Panduan penyiapan untuk iOS.
Dependensi
LLM Inference API menggunakan library MediaPipeTasksGenai
, yang harus diinstal
menggunakan CocoaPods. Library ini kompatibel dengan aplikasi Swift dan Objective-C, serta tidak memerlukan penyiapan khusus bahasa tambahan apa pun.
Untuk mengetahui petunjuk cara menginstal CocoaPods di macOS, lihat panduan penginstalan CocoaPods.
Untuk petunjuk cara membuat Podfile
dengan pod yang diperlukan untuk aplikasi Anda, lihat Menggunakan CocoaPods.
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 mengetahui informasi tambahan tentang
penyiapan Podfile
.
Model
Tugas MediaPipe LLM Inference API memerlukan model terlatih yang kompatibel dengan tugas ini. Untuk mengetahui informasi selengkapnya tentang model terlatih yang tersedia untuk LLM Inference API, lihat bagian Model ringkasan tugas.
Download model
Download model dan tambahkan ke direktori project Anda menggunakan Xcode. Untuk mengetahui petunjuk cara menambahkan file ke project Xcode, baca artikel Mengelola file dan folder di project Xcode Anda.
Saat membuat aplikasi iOS, gunakan salah satu varian berikut:
- gemma-2b-it-cpu-int4: Model 4-bit Gemma dengan kompatibilitas CPU.
- gemma-2b-it-gpu-int4: Model 4-bit Gemma dengan kompatibilitas GPU.
- Model yang dipetakan Edge Torch AI yang sesuai dengan persyaratan memori iOS.
Untuk mengetahui informasi selengkapnya tentang model lain, lihat ringkasan tugas bagian Model.
Membuat tugas
Anda dapat membuat tugas LLM Inference API dengan memanggil salah satu penginisialisasinya. Penginisialisasi
LlmInference(options:)
menetapkan nilai untuk opsi konfigurasi.
Jika tidak memerlukan LLM Inference API yang diinisialisasi dengan opsi konfigurasi
yang disesuaikan, Anda dapat menggunakan penginisialisasi LlmInference(modelPath:)
untuk membuat
LLM Inference API dengan opsi default. Untuk mengetahui informasi selengkapnya tentang opsi
konfigurasi, lihat Ringkasan Konfigurasi.
Kode berikut menunjukkan cara membangun dan mengonfigurasi tugas ini.
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)
Opsi konfigurasi
Tugas ini memiliki opsi konfigurasi berikut untuk aplikasi iOS:
Nama Opsi | Deskripsi | Rentang Nilai | Nilai Default |
---|---|---|---|
modelPath |
Jalur ke 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 token k teratas yang paling mungkin. Saat menetapkan
topk , Anda juga harus menetapkan nilai untuk
randomSeed . |
Bilangan bulat | 40 |
temperature |
Jumlah keacakan yang diperkenalkan selama pembuatan. Suhu yang lebih tinggi menghasilkan lebih banyak kreativitas pada teks yang dihasilkan, sedangkan suhu yang lebih rendah menghasilkan pembuatan teks yang lebih dapat diprediksi. Saat menetapkan
temperature , Anda juga harus menetapkan nilai untuk
randomSeed . |
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: ini hanya kompatibel dengan model GPU. | PATH | T/A |
Menyiapkan data
LLM Inference API berfungsi dengan data teks. Tugas ini menangani pra-pemrosesan input data, termasuk tokenisasi dan pra-pemrosesan tensor.
Semua pra-pemrosesan ditangani dalam fungsi generateResponse(inputText:)
.
Tidak perlu pemrosesan teks input tambahan terlebih dahulu.
let inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday."
Menjalankan tugas
Untuk menjalankan LLM Inference API, gunakan metode generateResponse(inputText:)
. LLM
Inference API menampilkan kemungkinan kategori untuk teks input.
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)")
}
Menangani dan menampilkan hasil
LLM Inference API menampilkan LlmInferenceResult
, yang menyertakan teks
respons yang dihasilkan.
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]
Penyesuaian model LoRA
API inferensi LLM Mediapipe dapat dikonfigurasi untuk mendukung Adaptasi Rendah (LoRA) untuk model bahasa besar. Dengan menggunakan model LoRA yang disesuaikan, developer dapat menyesuaikan perilaku LLM melalui proses pelatihan yang hemat biaya.
Dukungan LoRA dari LLM Inference API berfungsi untuk model Gemma-2B dan Phi-2 untuk backend GPU, dengan bobot LoRA yang hanya berlaku untuk lapisan atensi. Implementasi awal ini berfungsi sebagai API eksperimental untuk pengembangan mendatang dengan rencana untuk mendukung lebih banyak model dan berbagai jenis lapisan dalam update mendatang.
Mempersiapkan model LoRA
Ikuti petunjuk di HuggingFace untuk melatih model LoRA yang telah disesuaikan dengan baik di set data Anda dengan jenis model yang didukung, Gemma-2B atau Phi-2. Model Gemma-2B dan Phi-2 tersedia di HuggingFace dalam format safetensors. Karena LLM Inference API hanya mendukung LoRA pada lapisan atensi, hanya tentukan lapisan atensi saat membuat LoraConfig
seperti berikut:
# 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"],
)
Untuk pengujian, ada model LoRA yang ditingkatkan dan dapat diakses secara publik yang sesuai dengan LLM Inference API yang tersedia di HuggingFace. Misalnya, monsterapi/gemma-2b-lora-maths-orca-200k untuk Gemma-2B dan lole25/phi-2-sft-ultrachat-lora untuk Phi-2.
Setelah melatih set data yang sudah disiapkan dan menyimpan model, Anda akan mendapatkan file adapter_model.safetensors
yang berisi bobot model LoRA yang telah disesuaikan. File safetensors adalah checkpoint LoRA yang digunakan dalam konversi model.
Sebagai langkah berikutnya, Anda perlu mengonversi bobot model menjadi TensorFlow Lite Flatbuffer menggunakan Paket MediaPipe Python. ConversionConfig
harus menentukan opsi model dasar serta opsi LoRA tambahan. Perhatikan bahwa karena API hanya mendukung inferensi LoRA dengan GPU, backend harus ditetapkan ke 'gpu'
.
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)
Konverter akan menghasilkan dua file flatbuffer TFLite, satu untuk model dasar dan satu lagi untuk model LoRA.
Inferensi model LoRA
LLM Inference API Web, Android, dan iOS diupdate untuk mendukung inferensi model LoRA. Web mendukung LoRA dinamis, yang dapat mengalihkan berbagai model LoRA selama runtime. Android dan iOS mendukung LoRA statis, yang menggunakan bobot LoRA yang sama selama masa aktif tugas.
iOS mendukung LoRA statis selama inisialisasi. Untuk memuat model LoRA, pengguna menentukan 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 dengan model dasar.