LiteRT.js është koha e ekzekutimit në WebAI me performancë të lartë të Google, duke synuar aplikacionet e prodhimit në ueb. Është një vazhdim i grupit LiteRT, duke siguruar mbështetje me shumë korniza dhe duke unifikuar kohën tonë bazë në të gjitha platformat.
LiteRT.js mbështet veçoritë kryesore të mëposhtme:
- Mbështetje në shfletues për modelet LiteRT : Ekzekutoni modele me performancën më të mirë në klasë në CPU, të përshpejtuar nëpërmjet XNNPack në WebAssembly (Wasm) dhe GPU duke përdorur API- në WebGPU .
- Përputhshmëria me shumë korniza : Përdorni kornizën tuaj të preferuar ML: PyTorch, Jax ose TensorFlow.
- Ndërtoni mbi tubacionet ekzistuese : Integrohuni me tubacionet ekzistuese TensorFlow.js duke mbështetur TensorFlow.js Tensor si hyrje dhe dalje.
Instalimi
Instaloni paketën @litertjs/core
nga npm:
npm install @litertjs/core
Skedarët Wasm janë të vendosura në node_modules/@litertjs/core/wasm/
. Për lehtësi, kopjoni dhe shërbejeni të gjithë dosjen wasm/
. Më pas, importoni paketën dhe ngarkoni skedarët Wasm:
import {loadLiteRt} from '@litertjs/core;
// Host LiteRT's Wasm files on your server.
await loadLiteRt(`your/path/to/wasm/`);
Konvertimi i modelit
LiteRT.js përdor të njëjtin format .tflite
si Android dhe iOS, 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ë kthyer një model PyTorch në LiteRT, përdorni konvertuesin ai-edge-torch .
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')
Ekzekutoni modelin e konvertuar
Pas konvertimit të modelit 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', // 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();
Integrohu në tubacionet ekzistuese TensorFlow.js
Ju duhet të konsideroni integrimin e LiteRT.js në tubacionet tuaja TensorFlow.js për arsyet e mëposhtme:
- Performanca më e mirë në klasë e WebGPU-së : Modelet e konvertuara që funksionojnë në LiteRT.js WebGPU janë optimizuar për performancën e shfletuesit dhe janë veçanërisht të shpejta në shfletuesit e bazuar në Chromium.
- Rruga më e lehtë e konvertimit të modelit : Rruga e konvertimit të LiteRT.js shkon drejtpërdrejt nga PyTorch në LiteRT. Rruga e konvertimit të PyTorch në TensorFlow.js është dukshëm më e ndërlikuar, duke kërkuar që të shkoni nga PyTorch -> ONNX -> TensorFlow -> TensorFlow.js.
- Mjetet e korrigjimit : Rruga e konvertimit të LiteRT.js vjen me mjete korrigjimi .
LiteRT.js është krijuar për të funksionuar brenda tubacioneve TensorFlow.js dhe është në përputhje me përpunimin para dhe pas TensorFlow.js, kështu që e vetmja gjë që duhet të migroni ë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/core
dhe@litertjs/tfjs-interop
NPM. - Importoni dhe përdorni bazën mbështetëse të TensorFlow.js WebGPU . Kjo kërkohet 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
TensorFlow.js (inputet) osemodel.execute
(hyrjet) merunWithTfjsTensors
(liteRtModel, hyrje).runWithTfjsTensors
merr të njëjtat tensorë hyrës që përdorin modelet TensorFlow.js dhe nxjerr tensorë TensorFlow.js. - Provoni që tubacioni i modelit të nxjerrë rezultatet që prisni.
Përdorimi i LiteRT.js me runWithTfjsTensors
mund të kërkojë gjithashtu ndryshimet e mëposhtme në hyrjet e modelit:
- Renditni përsëri hyrjet : Në varësi të mënyrës se si konvertuesi i ka porositur hyrjet dhe daljet e modelit, mund t'ju duhet të ndryshoni renditjen e tyre ndërsa i kaloni.
- Transpozoni hyrjet : Është gjithashtu e mundur që konverteri të ndryshojë paraqitjen e hyrjeve dhe daljeve të modelit në krahasim me atë që përdor TensorFlow.js. Mund t'ju duhet të transpozoni hyrjet tuaja për t'u përshtatur me modelin dhe rezultatet që të përputhen me pjesën tjetër të tubacionit.
- Riemërtoni hyrjet : Nëse jeni duke përdorur hyrje me emër, emrat mund të kenë ndryshuar gjithashtu.
Mund të merrni më shumë informacion rreth hyrjeve dhe daljeve të modelit me model.getInputDetails()
dhe model.getOutputDetails()
.