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:
- LiteRT modelleri için tarayıcı içi destek: WebAssembly (Wasm) üzerinde XNNPack aracılığıyla hızlandırılan ve WebGPU API'si kullanılarak GPU'da sınıfının en iyisi performansla modeller çalıştırın.
- Çoklu çerçeve uyumluluğu: Tercih ettiğiniz makine öğrenimi çerçevesini (PyTorch, Jax veya TensorFlow) kullanın.
- Mevcut işlem hatlarını temel alma: Giriş ve çıkış olarak TensorFlow.js tensörlerini destekleyerek mevcut TensorFlow.js işlem hatlarıyla entegre olun.
Kurulum
@litertjs/core
paketini npm'den yükleyin:
npm install @litertjs/core
Wasm dosyaları node_modules/@litertjs/core/wasm/
konumunda bulunur.
Kolaylık sağlaması 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;
// Host LiteRT's Wasm files on your server.
await loadLiteRt(`your/path/to/wasm/`);
Model dönüştürme
LiteRT.js, Android ve iOS ile 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 ai-edge-torch converter'ı kullanın.
import ai_edge_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 = ai_edge_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 çalıştırabilirsiniz.
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', // or 'wasm' for XNNPack CPU inference
});
// 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 =
await new Tensor(image, /* shape */ [1, 3, 224, 224]).moveTo('webgpu');
// Run the model
const outputs = model(inputTensor);
// You can also use model([inputTensor])
// or model({'input_tensor_name': inputTensor})
// Clean up and get outputs
inputTensor.delete();
const outputTensorCpu = await outputs[0].moveTo('wasm');
const outputData = outputTensorCpu.toTypedArray();
outputTensorCpu.delete();
Mevcut TensorFlow.js işlem hatlarına entegre etme
Aşağıdaki nedenlerden dolayı LiteRT.js'yi TensorFlow.js işlem hatlarınıza entegre etmeniz önerilir:
- Sınıfının en iyisi WebGPU performansı: LiteRT.js WebGPU'da çalışan dönüştürülmüş modeller, tarayıcı performansı için optimize edilmiştir ve özellikle Chromium tabanlı tarayıcılarda hızlıdır.
- 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 şeklinde ilerlemenizi 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 işleme öncesi ve işleme sonrası 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/core
ve@litertjs/tfjs-interop
NPM 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şleri ve çıkışları hakkında daha fazla bilgi edinebilirsiniz.