Menjalankan model bahasa besar (LLM) yang kuat secara langsung di perangkat pengguna akan membuka kemampuan yang bisa secara signifikan meningkatkan pengalaman produk. Ketersediaan offline membuatnya selalu tersedia setiap saat, sementara efisiensi biaya (tidak ada biaya per panggilan API) membuatnya praktis untuk tugas-tugas berfrekuensi tinggi, seperti meringkas atau mengoreksi teks.
Namun, menerapkan model berskala Gigabyte ini di berbagai hardware edge sekaligus mencapai kecepatan latensi time-to-first-token (TTFT) di bawah satu detik dan kualitas output yang dibutuhkan merupakan tantangan teknis yang besar. Kami telah membahasnya dalam LiteRT-LM.
Hari ini, kami sangat senang bisa menawarkan developer akses langsung ke LiteRT-LM, framework inferensi siap produksi yang telah mendukung beberapa deployment terluas Gemini Nano di berbagai produk Google hingga saat ini. Mesin yang telah teruji ini memungkinkan Gemini Nano dan Gemma di perangkat pada produk, seperti Chrome, Chromebook Plus, dan Pixel Watch, serta model terbuka lainnya melalui MediaPipe LLM Inference API.
Anda sudah bisa memanfaatkan API tingkat tinggi, seperti MediaPipe LLM Inference API, API AI Bawaan Chrome, dan Android AICore untuk menjalankan LLM di perangkat, tetapi sekarang, untuk pertama kalinya, kami menyediakan antarmuka C++ dasar (dalam pratinjau) engine LiteRT-LM kami. Akses tingkat rendah ini memungkinkan Anda membangun pipeline AI khusus berkinerja tinggi yang disesuaikan untuk aplikasi Anda sendiri, membuka teknologi engine yang telah terbukti dan performa yang dioptimalkan pada platform pilihan Anda. Manfaatkan API kami untuk mulai membangun aplikasi berbasis LLM Anda hari ini untuk merasakan pengalaman performa yang dioptimalkan ini.
Secara khusus, LiteRT-LM memberikan kemampuan:
LiteRT-LM adalah framework inferensi yang telah teruji secara produksi yang dirancang untuk menjalankan model bahasa besar, seperti Gemini Nano, Gemma, dengan performa tinggi di berbagai perangkat edge. Pada intinya, LiteRT-LM adalah project open-source sepenuhnya yang menyediakan API yang mudah diintegrasikan dan seperangkat modul yang dapat digunakan kembali. Ini memungkinkan developer membangun pipeline LLM khusus yang disesuaikan secara cermat untuk kebutuhan fitur produk mereka.
Untuk memahami kegunaan LiteRT-LM, ada baiknya kita melihat seluruh stack Google AI Edge, dari tingkat abstraksi yang paling rendah hingga yang paling tinggi:
Struktur berlapis ini memberi Anda fleksibilitas untuk bekerja pada lapisan abstraksi yang paling sesuai dengan kebutuhan project Anda, sementara LiteRT-LM menyediakan kekuatan inti dan adaptabilitas bagi developer yang mencoba menerapkan model bahasa besar (LLM) dalam skala besar secara langsung di perangkat pengguna.
Sorotan utama LiteRT-LM meliputi:
Kami mendemonstrasikan keserbagunaan ini dengan dua studi kasus yang menyoroti deployment-nya dalam skala besar—meliputi browser Chrome, Chromebook, dan Pixel Watch terbaru—untuk menjangkau ratusan juta perangkat.
LLM modern berskala Gigabyte menghadirkan tantangan deployment yang unik. Tidak seperti model machine learning konvensional, yang biasanya berukuran megabyte, ukuran LLM yang sangat besar membuatnya tidak praktis untuk menerapkan beberapa model parameter multi-miliar terspesialisasi—misalnya, satu model untuk meringkas dan satu model lagi untuk melakukan chat—untuk mendukung berbagai fitur di perangkat edge yang sama.
Untuk mengatasi hal ini, LiteRT-LM dirancang untuk memungkinkan beberapa fitur berbagi satu model dasar, menggunakan LoRA yang ringan untuk kustomisasi khusus fitur. Hal ini dimungkinkan berkat pola arsitektural yang jelas yang memisahkan sumber daya bersama yang berat dari aspek interaksi pengguna yang dapat dikonfigurasi dan bersifat stateful. Pemisahan ini dicapai melalui dua class inti, yaitu Engine dan Session:
Arsitektur ini didukung oleh pengoptimalan utama yang memungkinkan peralihan tugas yang efisien dan rendah jejak memori1:
Session
merangkum “konteks” lengkapnya—termasuk KV-cache Transformer, LoRA weight..dll. Mirip dengan OS, saat beralih di antara tugas, LiteRT-LM menyimpan status Session's
yang keluar dan memulihkan yang masuk. Hal ini memastikan LLM yang dibagikan selalu memiliki status yang benar untuk tugas aktif.Session
. Hal ini secara efektif menyimpan status KV-cache yang dikomputasi pada titik tertentu, sehingga memungkinkan beberapa tugas baru bercabang dari status tersebut dan menghemat komputasi secara signifikan.Session
yang dikloning tidak langsung menyalin KV-cache tetapi membuat referensi ke buffer asli. Salinan yang sebenarnya hanya dilakukan ketika Session
akan menimpa data baru yang bertentangan dengan isi Session lain. Desain ini membuat kloning berjalan sangat cepat (<10ms) dan meminimalkan jejak memori dengan menggunakan kembali buffer kv-cache.Bersama-sama, kemampuan arsitektur dan pengoptimalan ini merupakan kunci keberhasilan memproduksi berbagai fitur LLM berkinerja tinggi di perangkat pada Chrome dan Chromebook Plus.
Selain mengelola tugas bersamaan, penskalaan model ML di SKU perangkat yang terfragmentasi menghadirkan rintangan teknis besar yang kedua. Setiap SoC memiliki komponen dan kemampuan yang berbeda (di CPU, GPU, dan NPU), sehingga membutuhkan pengoptimalan khusus untuk menjalankan inferensi model dengan performa tinggi. LiteRT-LM memanfaatkan LiteRT sebagai runtime tingkat rendah untuk delegasi backend, memungkinkannya diskalakan secara efisien di berbagai akselerator hardware. Selain itu, LiteRT-LM memperoleh kompatibilitas platform yang luas melalui desain inti yang mengabstraksikan komponen khusus platform (seperti deskriptor file dan mmap), menyediakan implementasi native jika diperlukan.
1Perhatikan bahwa sebagian pengoptimalan yang disebutkan tidak disertakan dalam pratinjau awal ini, tetapi secara bertahap akan dirilis pada versi mendatang.
Menerapkan LLM di perangkat dengan sumber daya yang sangat terbatas, seperti Pixel Watch, menghadirkan tantangan yang sama sekali berbeda. Pada platform ini, prioritas bergeser dari mendukung beberapa fitur dengan model bersama menjadi menerapkan satu fitur khusus dengan ukuran biner dan jejak memori sekecil mungkin.
Di sinilah desain modular LiteRT-LM menjadi sangat penting. Meskipun arsitektur Engine/Session kami sangat kuat untuk mengelola deployment multi-tugas yang kompleks, jejak binernya tidak cukup kecil untuk memenuhi persyaratan ketat perangkat wearable.
Sebaliknya, framework ini memungkinkan developer membangun pipeline khusus secara langsung dari komponen intinya. Untuk Pixel Watch, kami memilih modul minimum yang diperlukan—seperti eksekutor, tokenizer, dan sampler—serta menyusun pipeline khusus. Pendekatan ini memungkinkan kami meminimalkan ukuran biner dan penggunaan memori untuk memenuhi batasan sumber daya perangkat, seperti yang ditunjukkan pada gambar di bawah ini.
Studi kasus ini menunjukkan fleksibilitas LiteRT-LM. Komponen modularnya memberdayakan developer untuk membuat deployment LLM yang secara khusus disesuaikan dengan sumber daya spesifik dan persyaratan fitur dari setiap perangkat target, mulai dari smartphone yang kuat hingga perangkat wearable yang terbatas kemampuannya.
Mulailah dan hadirkan AI generatif yang kuat dan efisien di perangkat kepada pengguna Anda.
#include "YOUR_INCLUDE_DIRECTORY/engine.h"
// ...
// 1. Define model assets and engine settings.
auto model_assets = ModelAssets::Create(model_path);
CHECK_OK(model_assets);
auto engine_settings = EngineSettings::CreateDefault(
model_assets, litert::lm::Backend::CPU);
// 2. Create the main Engine object.
absl::StatusOr<std::unique_ptr<Engine>> engine = Engine::CreateEngine(engine_settings);
CHECK_OK(engine);
// 3. Create a Session for a new conversation.
auto session_config = SessionConfig::CreateDefault();
absl::StatusOr<std::unique_ptr<Engine::Session>> session = (*engine)->CreateSession(session_config);
CHECK_OK(session);
// 4. Generate content using the high-level API.
absl::StatusOr<Responses> responses = (*session)->GenerateContent(
{InputText("What is the tallest building in the world?")});
CHECK_OK(responses);
// 5. Print the response.
std::cout << *responses << std::endl;
Kami ingin menyampaikan ucapan terima kasih khusus kepada kontributor utama kami atas kerja keras mereka pada project ini: Advait Jain, Austin Sullivan, Clark Duvall, Haoliang Zhang, Ho Ko, Howard Yang, Marissa Ikonomidis, Mohammadreza Heydary, Ronghui Zhu, Tyler Mullen, Umberto Ravaioli, Weiyi Wang, Xu Chen, Youchuan Hu
Kami juga mengucapkan terima kasih atas kontribusi yang signifikan dari anggota tim berikut ini: Agi Sferro, Chi Yo Tsai, David Massoud, Dillon Sharlet, Frank Barchard, Grant Jensen, Ivan Grishchenko, Jae Yoo, Jim Pollock, Majid Dadashi, Quentin Khan, Raman Sarokin, Ricky Liang, Tenghui Zhu, Terry (Woncheol) Heo, Yi-Chun Kuo, Yishuang Pang
Upaya ini dapat terwujud berkat bimbingan dan dukungan dari pimpinan kami: Cormac Brick, Etienne Noël, Juhyun Lee, Lu Wang, Matthias Grundmann, dan Sachin Kotwani.