LiteRT.js është koha e ekzekutimit WebAI me performancë të lartë e Google, që synon aplikacionet web të prodhimit. Është një vazhdim i paketës LiteRT, duke siguruar mbështetje për shumë korniza dhe duke unifikuar kohën tonë të ekzekutimit bazë në të gjitha platformat.
LiteRT.js mbështet karakteristikat kryesore të mëposhtme:
- Përfundim i përshpejtuar nga hardueri në shfletues : Ekzekutoni modele me performancë të jashtëzakonshme të CPU-së, të përshpejtuara nga XNNPack i lidhur me WebAssembly të lehtë (Wasm). Për shkallëzimin e GPU-së dhe harduerit të dedikuar (siç janë NPU-të), LiteRT.js shfaq në mënyrë native si API- në WebGPU ashtu edhe API-në e re WebNN , duke fuqizuar optimizimin e detajuar specifik të platformës.
- Pajtueshmëria me shumë korniza : Përmirësoni semantikën e zhvillimit duke e kompiluar nga Korniza juaj e preferuar ML në mënyrë native: PyTorch, JAX ose TensorFlow.
- Iteroni në tubacionet ekzistuese : Integrim i gatshëm me arkitekturat ekzistuese TensorFlow.js duke analizuar Tensorët TensorFlow.js të mbështetur në mënyrë native si hyrje dhe dalje të drejtpërdrejta kufitare.
Instalimi
Instaloni paketën @litertjs/core nga npm:
npm install @litertjs/core
Skedarët Wasm ndodhen në node_modules/@litertjs/core/wasm/ . Për lehtësi, kopjoni dhe shfaqni të gjithë dosjen wasm/ . Pastaj, importoni paketën dhe ngarkoni skedarët 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/`);
Konvertimi i modelit
LiteRT.js përdor të njëjtin format .tflite si pjesa tjetër e ekosistemit LiteRT dhe mbështet modelet ekzistuese në Kaggle dhe Huggingface . Nëse keni një model të ri PyTorch, do t'ju duhet ta konvertoni atë.
Konvertoni një model PyTorch në LiteRT
Për të konvertuar një model PyTorch në LiteRT, përdorni konvertuesin littert-torch .
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')
Ekzekutoni modelin e konvertuar
Pasi ta keni konvertuar modelin në një skedar .tflite , mund ta ekzekutoni atë në shfletues.
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();
Integro në kanalet ekzistuese të TensorFlow.js
Duhet të merrni në konsideratë integrimin e LiteRT.js në kanalet tuaja TensorFlow.js për arsyet e mëposhtme:
- Performancë e Jashtëzakonshme e GPU-së dhe Hardware-it : Modelet LiteRT.js shfrytëzojnë përshpejtimin e WebGPU-së për performancë të optimizuar në të gjitha arkitekturat e shfletuesit. Me mbështetje për WebGPU-në dhe WebNN-në e ardhshme, LiteRT.js ofron përshpejtim fleksibël të harduerit në një sërë pajisjesh edge.
- Shtegu më i lehtë i konvertimit të modelit : Shtegu i konvertimit nga LiteRT.js shkon direkt nga PyTorch në LiteRT. Shtegu i konvertimit nga PyTorch në TensorFlow.js është dukshëm më i ndërlikuar, duke kërkuar që ju të shkoni nga PyTorch -> ONNX -> TensorFlow -> TensorFlow.js.
- Mjete për korrigjimin e gabimeve : Shtegu i konvertimit LiteRT.js vjen me mjete për korrigjimin e gabimeve .
LiteRT.js është projektuar për të funksionuar brenda tubacioneve TensorFlow.js dhe është i pajtueshëm me përpunimin paraprak dhe pas përpunimit të TensorFlow.js, kështu që e vetmja gjë që ju nevojitet për të migruar është vetë modeli.
Integroni LiteRT.js në tubacionet TensorFlow.js me hapat e mëposhtëm:
- Konvertoni modelin tuaj origjinal TensorFlow, JAX ose PyTorch në
.tflite. Për detaje, shihni seksionin e konvertimit të modelit . - Instaloni paketat
@litertjs/coredhe@litertjs/tfjs-interopNPM. - Importoni dhe përdorni backend-in WebGPU të TensorFlow.js . Kjo është e nevojshme që LiteRT.js të ndërveprojë me TensorFlow.js.
- Zëvendësoni ngarkimin e modelit TensorFlow.js me ngarkimin e modelit LiteRT.js .
- Zëvendësoni
model.predict(inputs) osemodel.execute(inputs) të TensorFlow.js merunWithTfjsTensors(liteRtModel, inputs).runWithTfjsTensorsmerr të njëjtët tensorë hyrës që përdorin modelet TensorFlow.js dhe nxjerr në pah tensorët TensorFlow.js. - Testoni që tubacioni i modelit të japë rezultatet që prisni.
Përdorimi i LiteRT.js me runWithTfjsTensors mund të kërkojë gjithashtu ndryshimet e mëposhtme në të dhënat hyrëse të modelit:
- Rirenditja e hyrjeve : Në varësi të mënyrës se si konvertuesi i ka renditur hyrjet dhe daljet e modelit, mund t'ju duhet të ndryshoni rendin e tyre ndërsa i kaloni ato.
- Transpozimi i të dhënave hyrëse : Është gjithashtu e mundur që konvertuesi të ketë ndryshuar paraqitjen e të dhënave hyrëse dhe dalëse të modelit krahasuar me atë që përdor TensorFlow.js. Mund t'ju duhet të transpozoni të dhënat hyrëse që të përputhen me modelin dhe të dhënat dalëse që të përputhen me pjesën tjetër të tubacionit.
- Riemërto hyrjet : Nëse po përdorni hyrje të emërtuara, edhe emrat mund të kenë ndryshuar.
Mund të merrni më shumë informacion në lidhje me të dhënat hyrëse dhe dalëse të modelit me model.getInputDetails() dhe model.getOutputDetails() .