LiteRT.js, Google'ın yüksek performanslı WebAI çalışma zamanıdır ve üretim Web uygulamalarını hedefler. LiteRT yığınının devamı niteliğindedir. Çoklu çerçeve desteği sağlar ve temel çalışma zamanımızı tüm platformlarda birleştirir.
LiteRT.js aşağıdaki temel özellikleri destekler:
- Tarayıcıda donanım hızlandırmalı çıkarım: Hafif WebAssembly (Wasm) ile eşlenen XNNPack tarafından hızlandırılan, olağanüstü CPU performansına sahip modeller çalıştırın. GPU ve özel donanım ölçeklendirme (ör. NPU'lar) için LiteRT.js, hem WebGPU API'sini hem de ayrıntılı platforma özel optimizasyonu sağlayan yeni WebNN API'sini yerel olarak kullanır.
- Çoklu çerçeve uyumluluğu: Tercih ettiğiniz makine öğrenimi çerçevesinden (PyTorch, JAX veya TensorFlow) derleme yaparak geliştirme semantiğini kolaylaştırın.
- Mevcut ardışık düzenlerde yineleme yapın: Doğrudan sınır girişleri ve çıkışları olarak yerel olarak desteklenen TensorFlow.js tensörlerini ayrıştırarak mevcut TensorFlow.js mimarileriyle kullanıma hazır entegrasyon.
Kurulum
@litertjs/core paketini npm'den yükleyin:
npm install @litertjs/core
Wasm dosyaları node_modules/@litertjs/core/wasm/ konumunda bulunur. Kolaylık sağlamak için wasm/ klasörünün tamamını kopyalayıp yayınlayın. Ardından, paketi içe aktarın
ve Wasm dosyalarını yükleyin:
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/`);
Model dönüştürme
LiteRT.js, LiteRT ekosisteminin geri kalanıyla aynı .tflite biçimini kullanır ve Kaggle ile Huggingface'teki mevcut modelleri destekler. Yeni bir PyTorch modeliniz varsa bunu dönüştürmeniz gerekir.
PyTorch modelini LiteRT'ye dönüştürme
PyTorch modelini LiteRT'ye dönüştürmek için litert-torch converter'ı kullanın.
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')
Dönüştürülmüş Modeli Çalıştırma
Modeli .tflite dosyasına dönüştürdükten sonra tarayıcıda uygulayabilirsiniz.
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();
Mevcut TensorFlow.js işlem hatlarına entegrasyon
Aşağıdaki nedenlerden dolayı LiteRT.js'yi TensorFlow.js işlem hatlarınıza entegre etmeniz önerilir:
- Olağanüstü GPU ve Donanım Performansı: LiteRT.js modelleri, tarayıcı mimarilerinde optimize edilmiş performans için WebGPU hızlandırmadan yararlanır. WebGPU ve yakında kullanıma sunulacak olan WebNN desteğiyle LiteRT.js, çeşitli uç cihazlarda esnek donanım hızlandırma olanağı sunar.
- Daha Kolay Model Dönüşüm Yolu: LiteRT.js dönüşüm yolu doğrudan PyTorch'tan LiteRT'ye gider. PyTorch'tan TensorFlow.js'ye dönüşüm yolu çok daha karmaşıktır ve PyTorch -> ONNX -> TensorFlow -> TensorFlow.js adımlarını uygulamanızı gerektirir.
- Hata ayıklama araçları: LiteRT.js dönüşüm yolu, hata ayıklama araçlarıyla birlikte gelir.
LiteRT.js, TensorFlow.js işlem hatlarında çalışacak şekilde tasarlanmıştır ve TensorFlow.js ön ve son işleme ile uyumludur. Bu nedenle, taşımanız gereken tek şey modelin kendisidir.
Aşağıdaki adımları uygulayarak LiteRT.js'yi TensorFlow.js işlem hatlarına entegre edin:
- Orijinal TensorFlow, JAX veya PyTorch modelinizi
.tflite'ya dönüştürün. Ayrıntılı bilgi için model dönüşümü bölümüne bakın. @litertjs/coreve@litertjs/tfjs-interopNPM paketlerini yükleyin.- TensorFlow.js WebGPU arka ucunu içe aktarın ve kullanın. Bu, LiteRT.js'nin TensorFlow.js ile birlikte çalışması için gereklidir.
- TensorFlow.js modelini yükleme ifadesini LiteRT.js modelini yükleme ile değiştirin.
- TensorFlow.js
model.predict(girişler) veyamodel.execute(girişler) yerinerunWithTfjsTensors(liteRtModel, girişler) kullanın.runWithTfjsTensors, TensorFlow.js modellerinin kullandığı giriş tensörlerini alır ve TensorFlow.js tensörlerini çıkarır. - Model işlem hattının beklediğiniz sonuçları verdiğini test edin.
LiteRT.js'yi runWithTfjsTensors ile kullanmak için model girişlerinde aşağıdaki değişikliklerin yapılması da gerekebilir:
- Girişleri yeniden sıralama: Dönüştürücünün modelin girişlerini ve çıkışlarını nasıl sıraladığına bağlı olarak, bunları iletirken sıralarını değiştirmeniz gerekebilir.
- Girişleri transpoze etme: Dönüştürücünün, TensorFlow.js'nin kullandığına kıyasla modelin giriş ve çıkışlarının düzenini değiştirmiş olması da mümkündür. Girişlerinizi modele, çıkışlarınızı da işlem hattının geri kalanına uyacak şekilde transpoze etmeniz gerekebilir.
- Girişleri yeniden adlandırma: Adlandırılmış girişler kullanıyorsanız adlar da değişmiş olabilir.
model.getInputDetails() ve model.getOutputDetails() ile modelin giriş ve çıkışları hakkında daha fazla bilgi edinebilirsiniz.