LLM Inference API memungkinkan Anda menjalankan model bahasa besar (LLM) sepenuhnya di browser untuk aplikasi web, 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 teks ke teks, sehingga Anda dapat menerapkan model AI generatif terbaru di perangkat ke aplikasi web Anda.
Tugas ini mendukung varian Gemma berikut: Gemma-3 1B, Gemma-2 2B, Gemma 2B, dan Gemma 7B. Gemma adalah sekumpulan model terbuka yang ringan dan canggih, dibangun dari riset dan teknologi yang sama dengan yang digunakan untuk membuat model Gemini. Model ini juga mendukung model eksternal berikut: Phi-2, Falcon-RW-1B, dan StableLM-3B.
Anda dapat melihat cara kerja tugas ini dengan demo MediaPipe Studio. Untuk informasi selengkapnya tentang kemampuan, model, dan opsi konfigurasi tugas ini, lihat Ringkasan.
Contoh kode
Contoh aplikasi untuk LLM Inference API memberikan implementasi dasar tugas ini dalam JavaScript untuk referensi Anda. Anda dapat menggunakan aplikasi contoh ini untuk memulai pembuatan aplikasi pembuatan teks Anda sendiri.
Anda dapat mengakses aplikasi contoh LLM Inference API di GitHub.
Penyiapan
Bagian ini menjelaskan langkah-langkah utama untuk menyiapkan lingkungan pengembangan dan project kode Anda secara khusus untuk menggunakan LLM Inference API. Untuk informasi umum tentang menyiapkan lingkungan pengembangan untuk menggunakan Tugas MediaPipe, termasuk persyaratan versi platform, lihat Panduan penyiapan untuk Web.
Kompatibilitas browser
LLM Inference API memerlukan browser web dengan kompatibilitas WebGPU. Untuk daftar lengkap browser yang kompatibel, lihat kompatibilitas browser GPU.
Paket JavaScript
Kode LLM Inference API tersedia melalui paket
@mediapipe/tasks-genai
. Anda dapat menemukan dan mendownload library ini dari link yang disediakan di
Panduan penyiapan platform.
Instal paket yang diperlukan untuk staging lokal:
npm install @mediapipe/tasks-genai
Untuk men-deploy ke server, gunakan layanan jaringan penayangan konten (CDN) seperti jsDelivr untuk menambahkan kode langsung ke halaman HTML Anda:
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/genai_bundle.cjs"
crossorigin="anonymous"></script>
</head>
Model
MediaPipe LLM Inference API memerlukan model terlatih yang kompatibel dengan tugas ini. Untuk aplikasi web, model harus kompatibel dengan GPU.
Untuk informasi selengkapnya tentang model terlatih yang tersedia untuk LLM Inference API, lihat bagian Model ringkasan tugas.
Mendownload model
Sebelum melakukan inisialisasi LLM Inference API, download salah satu model yang didukung dan simpan file dalam direktori project Anda. Sebaiknya gunakan Gemma-2 2B, yang tersedia di Model Kaggle.
Anda juga dapat mendownload salah satu model lain yang didukung:
- Gemma 2B: Bagian dari sekumpulan model open source yang ringan dan canggih, yang dibuat dari riset dan teknologi yang sama dengan yang digunakan untuk membuat model Gemini. Sangat cocok untuk berbagai tugas pembuatan teks, termasuk menjawab pertanyaan, peringkasan, dan pemikiran.
- Gemma-3 1B: Model terbaru dalam rangkaian model open source Gemma yang ringan dan canggih, yang dibuat dari riset dan teknologi yang sama dengan yang digunakan untuk membuat model Gemini. Model ini berisi 1 miliar parameter dan bobot terbuka. Varian 1B adalah model yang paling ringan dalam keluarga Gemma, sehingga ideal untuk banyak kasus penggunaan di perangkat. Lihat bagian ringkasan model untuk memahami persyaratan konfigurasi model tertentu sebelum menggunakan model ini.
- Phi-2: model Transformer parameter 2,7 miliar, paling cocok untuk format Pertanyaan-Jawab, chat, dan kode.
- Falcon-RW-1B: Model khusus decoder kausal dengan 1 miliar parameter yang dilatih pada 350 miliar token RefinedWeb.
- StableLM-3B: Model bahasa khusus dekoder dengan 3 miliar parameter yang dilatih sebelumnya pada 1 triliun token dari berbagai set data bahasa Inggris dan kode.
Untuk mengetahui informasi selengkapnya tentang model yang tersedia, lihat bagian Model ringkasan tugas.
Mengonversi model ke format MediaPipe
LLM Inference API kompatibel dengan jenis model berikut, beberapa di antaranya memerlukan konversi model. Gunakan tabel untuk mengidentifikasi metode 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 AI Edge Torch | Android, iOS | .task |
Untuk mempelajari cara mengonversi model lain, lihat bagian Konversi Model.
Menambahkan model ke direktori project
Simpan model dalam direktori project Anda:
<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin
Tentukan jalur model dengan parameter modelAssetPath
objek baseOptions
:
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}
Membuat tugas
Gunakan salah satu fungsi createFrom...()
LLM Inference API untuk menyiapkan tugas untuk menjalankan inferensi. Anda dapat menggunakan fungsi createFromModelPath()
dengan
jalur relatif atau absolut ke file model yang dilatih. Contoh kode menggunakan
fungsi createFromOptions()
. Untuk informasi selengkapnya tentang opsi konfigurasi
yang tersedia, lihat Opsi konfigurasi.
Kode berikut menunjukkan cara mem-build dan mengonfigurasi tugas ini:
const genai = await FilesetResolver.forGenAiTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
llmInference = await LlmInference.createFromOptions(genai, {
baseOptions: {
modelAssetPath: '/assets/gemma-2b-it-gpu-int4.bin'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
Opsi konfigurasi
Tugas ini memiliki opsi konfigurasi berikut untuk aplikasi Web dan JavaScript:
Nama Opsi | Deskripsi | Rentang Nilai | Nilai Default |
---|---|---|---|
modelPath |
Jalur ke tempat model disimpan dalam direktori project. | JALUR | 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 dengan probabilitas tertinggi k. | Bilangan Bulat | 40 |
temperature |
Jumlah keacakan yang diperkenalkan selama pembuatan. Temperatur yang lebih tinggi akan menghasilkan lebih banyak kreativitas dalam teks yang dihasilkan, sedangkan temperatur yang lebih rendah akan menghasilkan generasi yang lebih dapat diprediksi. | Float | 0,8 |
randomSeed |
Seed acak yang digunakan selama pembuatan teks. | Bilangan Bulat | 0 |
loraRanks |
Peringkat LoRA yang akan digunakan oleh model LoRA selama runtime. Catatan: opsi ini hanya kompatibel dengan model GPU. | Array bilangan bulat | T/A |
Menyiapkan data
LLM Inference API menerima data teks (string
). Tugas ini menangani pra-pemrosesan input data, termasuk tokenisasi dan pra-pemrosesan tensor.
Semua prapemrosesan ditangani dalam fungsi generateResponse()
. Tidak
perlu prapemrosesan tambahan pada teks input.
const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";
Menjalankan tugas
LLM Inference API menggunakan fungsi generateResponse()
untuk memicu inferensi.
Untuk klasifikasi teks, ini berarti menampilkan kemungkinan kategori untuk
teks input.
Kode berikut menunjukkan cara menjalankan pemrosesan dengan model tugas.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
Untuk melakukan streaming respons, gunakan hal berikut:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
Menangani dan menampilkan hasil
LLM Inference API menampilkan string, 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 Rangking 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 semua varian Gemma dan model Phi-2 untuk backend GPU, dengan bobot LoRA yang hanya berlaku untuk lapisan perhatian. Implementasi awal ini berfungsi sebagai API eksperimental untuk pengembangan mendatang dengan rencana untuk mendukung lebih banyak model dan berbagai jenis lapisan dalam update mendatang.
Menyiapkan model LoRA
Ikuti petunjuk di
HuggingFace
untuk melatih model LoRA yang telah disesuaikan di set data Anda sendiri dengan jenis model yang didukung,
Gemma atau Phi-2. Model Gemma-2 2B, Gemma
2B, dan
Phi-2 tersedia di
HuggingFace dalam format safetensors. Karena LLM Inference API hanya mendukung
LoRA pada lapisan perhatian, hanya tentukan lapisan perhatian saat membuat
LoraConfig
sebagai berikut:
# 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"],
)
Untuk pengujian, ada model LoRA yang disesuaikan 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 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 Flatbuffer
TensorFlow Lite menggunakan Paket Python MediaPipe. ConversionConfig
harus menentukan opsi model dasar serta opsi LoRA tambahan. Perhatikan bahwa karena API hanya mendukung inferensi LoRA dengan GPU, backend harus disetel 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
Web, Android, dan iOS LLM Inference API diupdate untuk mendukung inferensi model LoRA.
Web mendukung LoRA dinamis selama runtime. Artinya, pengguna mendeklarasikan peringkat LoRA yang akan digunakan selama inisialisasi, dan dapat menukar berbagai model LoRA selama runtime.const genai = await FilesetResolver.forGenAiTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
const llmInference = await LlmInference.createFromOptions(genai, {
// options for the base model
...
// LoRA ranks to be used by the LoRA models during runtime
loraRanks: [4, 8, 16]
});
Selama runtime, setelah model dasar diinisialisasi, muat model LoRA yang akan digunakan. Selain itu, picu model LoRA dengan meneruskan referensi model LoRA saat menghasilkan respons LLM.
// Load several LoRA models. The returned LoRA model reference is used to specify
// which LoRA model to be used for inference.
loraModelRank4 = await llmInference.loadLoraModel(loraModelRank4Url);
loraModelRank8 = await llmInference.loadLoraModel(loraModelRank8Url);
// Specify LoRA model to be used during inference
llmInference.generateResponse(
inputPrompt,
loraModelRank4,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});