LiteRT.js adalah runtime WebAI berperforma tinggi Google, yang menargetkan aplikasi Web produksi. Runtime WebAI ini adalah kelanjutan dari stack LiteRT, yang memastikan dukungan multi-framework dan menyatukan runtime inti kami di semua platform.
LiteRT.js mendukung fitur inti berikut:
- Inferensi yang diakselerasi hardware dalam browser: Jalankan model dengan performa CPU yang luar biasa, yang diakselerasi oleh XNNPack yang dipetakan ke WebAssembly (Wasm) ringan. Untuk penskalaan GPU dan hardware khusus (seperti NPU), LiteRT.js secara native menampilkan API WebGPU dan API WebNN yang baru muncul, sehingga memungkinkan pengoptimalan spesifik per platform yang lebih terperinci.
- Kompatibilitas multi-framework: Sederhanakan semantik pengembangan dengan mengompilasi dari Framework ML pilihan Anda secara native: PyTorch, JAX, atau TensorFlow.
- Melakukan iterasi pada pipeline yang ada: Integrasi langsung dengan arsitektur TensorFlow.js yang ada dengan mengurai Tensor TensorFlow.js yang didukung secara native sebagai input dan output batas langsung.
Penginstalan
Instal paket @litertjs/core dari npm:
npm install @litertjs/core
File Wasm berada di node_modules/@litertjs/core/wasm/. Untuk
memudahkan, salin dan sajikan seluruh folder wasm/. Kemudian, impor paket
dan muat file Wasm:
import {loadLiteRt} from '@litertjs/core';
// Load the LiteRT.js Wasm files from a CDN.
await loadLiteRt('https://cdn.jsdelivr.net/npm/@litertjs/core/wasm/')
// Alternatively, host them from your server.
// They are located in node_modules/@litertjs/core/wasm/
await loadLiteRt(`your/path/to/wasm/`);
Konversi model
LiteRT.js menggunakan format .tflite yang sama dengan ekosistem LiteRT lainnya, dan mendukung model yang ada di Kaggle dan Huggingface. Jika
Anda memiliki model PyTorch baru, Anda harus mengonversinya.
Mengonversi Model PyTorch ke LiteRT
Untuk mengonversi model PyTorch ke LiteRT, gunakan litert-torch converter.
import litert_torch
# Load your torch model. We're using resnet for this example.
resnet18 = torchvision.models.resnet18(torchvision.models.ResNet18_Weights.IMAGENET1K_V1)
sample_inputs = (torch.randn(1, 3, 224, 224),)
# Convert the model to LiteRT.
edge_model = litert_torch.convert(resnet18.eval(), sample_inputs)
# Export the model.
edge_model.export('resnet.tflite')
Menjalankan Model yang Dikonversi
Setelah mengonversi model ke file .tflite, Anda dapat menjalankannya di browser.
import {loadAndCompile} from '@litertjs/core';
// Load the model hosted from your server. This makes an http(s) request.
const model = await loadAndCompile('/path/to/model.tflite', {
accelerator: 'webgpu',
// Can select from 'webnn', 'webgpu', & 'wasm'.
// Additionally, you can pass an array of accelerators e.g. ['webnn', 'wasm']
// if you would like to fallback to CPU execution,
// Note that ONLY cpu fallback is supported for now
// (i.e. specifying ['webnn', 'webgpu']) will lead to compilation errors
});
// The model can also be loaded from a Uint8Array if you want to fetch it yourself.
// Create image input data
const image = new Float32Array(224 * 224 * 3).fill(0);
const inputTensor = new Tensor(image, /* shape */ [1, 3, 224, 224]);
// Run the model
const outputs = await model.run(inputTensor);
// You can also use `await model.run([inputTensor]);`
// or `await model.run({'input_tensor_name': inputTensor});`
// Clean up and get outputs
inputTensor.delete();
const output = outputs[0];
const outputData = await output.data();
output.delete();
Mengintegrasikan ke dalam pipeline TensorFlow.js yang ada
Anda harus mempertimbangkan untuk mengintegrasikan LiteRT.js ke dalam pipeline TensorFlow.js Anda karena alasan berikut:
- Performa GPU & Hardware yang Luar Biasa: Model LiteRT.js memanfaatkan akselerasi WebGPU untuk performa yang dioptimalkan di seluruh arsitektur browser. Dengan dukungan untuk WebGPU dan WebNN mendatang, LiteRT.js menawarkan akselerasi hardware yang fleksibel di berbagai perangkat edge.
- Jalur Konversi Model yang Lebih Mudah: Jalur konversi LiteRT.js langsung dari PyTorch ke LiteRT. Jalur konversi PyTorch ke TensorFlow.js jauh lebih rumit, sehingga Anda harus melakukan konversi dari PyTorch -> ONNX -> TensorFlow -> TensorFlow.js.
- Alat proses debug: Jalur konversi LiteRT.js dilengkapi dengan alat proses debug.
LiteRT.js dirancang untuk berfungsi dalam pipeline TensorFlow.js, dan kompatibel dengan pra-pemrosesan dan pasca-pemrosesan TensorFlow.js, sehingga satu-satunya hal yang perlu Anda migrasikan adalah model itu sendiri.
Integrasikan LiteRT.js ke dalam pipeline TensorFlow.js dengan langkah-langkah berikut:
- Konversikan model TensorFlow, JAX, atau PyTorch asli Anda ke
.tflite. Untuk mengetahui detailnya, lihat bagian konversi model. - Instal paket NPM
@litertjs/coredan@litertjs/tfjs-interop. - Impor dan gunakan backend WebGPU TensorFlow.js. Hal ini diperlukan agar LiteRT.js dapat beroperasi dengan TensorFlow.js.
- Ganti pemuatan model TensorFlow.js dengan pemuatan model LiteRT.js.
- Ganti TensorFlow.js
model.predict(inputs) ataumodel.execute(inputs) denganrunWithTfjsTensors(liteRtModel, inputs).runWithTfjsTensorsmengambil tensor input yang sama dengan yang digunakan model TensorFlow.js dan menghasilkan tensor TensorFlow.js. - Uji apakah pipeline model memberikan hasil yang Anda harapkan.
Menggunakan LiteRT.js dengan runWithTfjsTensors juga mungkin memerlukan perubahan berikut pada input model:
- Mengatur ulang input: Bergantung pada cara konverter mengurutkan input dan output model, Anda mungkin perlu mengubah urutannya saat meneruskannya.
- Transposisi input: Ada kemungkinan juga bahwa konverter mengubah tata letak input dan output model dibandingkan dengan yang digunakan TensorFlow.js. Anda mungkin perlu mentransposisikan input agar sesuai dengan model dan juga output sehingga sesuai dengan pipeline lainnya.
- Mengganti nama input: Jika Anda menggunakan input bernama, nama tersebut mungkin juga telah berubah.
Anda bisa mendapatkan informasi selengkapnya tentang input dan output model dengan
model.getInputDetails() dan model.getOutputDetails().