LiteRT.js คือรันไทม์ WebAI ประสิทธิภาพสูงของ Google ซึ่งมุ่งเป้าไปที่เว็บแอปพลิเคชันที่ใช้งานจริง โดยเป็นส่วนขยายของสแต็ก LiteRT ซึ่งช่วยให้มั่นใจได้ถึงการรองรับ เฟรมเวิร์กหลายรายการและรวมรันไทม์หลักของเราไว้ในแพตฟอร์มทั้งหมด
LiteRT.js รองรับฟีเจอร์หลักต่อไปนี้
- การอนุมานที่เร่งด้วยฮาร์ดแวร์ในเบราว์เซอร์: เรียกใช้โมเดลด้วยประสิทธิภาพ CPU ที่ยอดเยี่ยม ซึ่งเร่งความเร็วด้วย XNNPack ที่แมปกับ WebAssembly (Wasm) แบบน้ำหนักเบา สำหรับ GPU และการปรับขนาดฮาร์ดแวร์เฉพาะ (เช่น NPU) LiteRT.js จะแสดงทั้ง WebGPU API และ WebNN API ที่กำลังมาแรง โดยกำเนิด ซึ่งช่วยให้การเพิ่มประสิทธิภาพเฉพาะแพลตฟอร์มมีความละเอียดมากขึ้น
- ความเข้ากันได้กับเฟรมเวิร์กหลายรายการ: ปรับปรุงความหมายของการพัฒนาให้มีประสิทธิภาพมากขึ้นด้วยการคอมไพล์จากเฟรมเวิร์ก ML ที่คุณต้องการโดยกำเนิด ได้แก่ PyTorch, JAX หรือ TensorFlow
- ทำซ้ำในไปป์ไลน์ที่มีอยู่: การผสานรวมกับสถาปัตยกรรม TensorFlow.js ที่มีอยู่โดยไม่ต้องกำหนดค่าเพิ่มเติมด้วยการแยกวิเคราะห์ Tensor TensorFlow.js ที่รองรับโดยกำเนิด เป็นอินพุตและเอาต์พุตขอบเขตโดยตรง
การติดตั้ง
ติดตั้งแพ็กเกจ @litertjs/core จาก npm โดยใช้คำสั่งต่อไปนี้
npm install @litertjs/core
ไฟล์ Wasm จะอยู่ใน node_modules/@litertjs/core/wasm/ คัดลอกและแสดงโฟลเดอร์ wasm/ ทั้งหมดเพื่อความสะดวก จากนั้นนำเข้าแพ็กเกจและโหลดไฟล์ 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/`);
การแปลงโมเดล
LiteRT.js ใช้รูปแบบ .tflite เดียวกันกับระบบนิเวศ LiteRT อื่นๆ
และรองรับโมเดลที่มีอยู่ใน
Kaggle และ
Huggingface หากคุณมีโมเดล PyTorch ใหม่ คุณจะต้องแปลงโมเดลดังกล่าว
แปลงโมเดล PyTorch เป็น LiteRT
หากต้องการแปลงโมเดล PyTorch เป็น LiteRT ให้ใช้ตัวแปลง litert-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')
เรียกใช้โมเดลที่แปลงแล้ว
หลังจากแปลงโมเดลเป็นไฟล์ .tflite แล้ว คุณจะดำเนินการในเบราว์เซอร์ได้
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();
ผสานรวมกับไปป์ไลน์ TensorFlow.js ที่มีอยู่
คุณควรพิจารณาผสานรวม LiteRT.js เข้ากับ TensorFlow.js ด้วยเหตุผลต่อไปนี้
- ประสิทธิภาพ GPU และฮาร์ดแวร์ที่ยอดเยี่ยม: โมเดล LiteRT.js ใช้ประโยชน์จากการเร่งความเร็ว WebGPU เพื่อประสิทธิภาพที่เพิ่มประสิทธิภาพในสถาปัตยกรรมเบราว์เซอร์ LiteRT.js รองรับ WebGPU และ WebNN ที่กำลังจะมาถึง จึงมีการเร่งความเร็วฮาร์ดแวร์ที่ยืดหยุ่นในอุปกรณ์ Edge ที่หลากหลาย
- เส้นทาง Conversion โมเดลที่ง่ายขึ้น: เส้นทาง Conversion LiteRT.js จะไป จาก PyTorch ไปยัง LiteRT โดยตรง เส้นทางการแปลงจาก PyTorch เป็น TensorFlow.js มีความซับซ้อนมากกว่ามาก โดยคุณจะต้องไปจาก PyTorch -> ONNX -> TensorFlow -> TensorFlow.js
- เครื่องมือแก้ไขข้อบกพร่อง: เส้นทาง Conversion ของ LiteRT.js มาพร้อมกับ เครื่องมือแก้ไขข้อบกพร่อง
LiteRT.js ได้รับการออกแบบมาให้ทำงานภายในไปป์ไลน์ TensorFlow.js และเข้ากันได้กับการประมวลผลล่วงหน้าและภายหลังการประมวลผลของ TensorFlow.js ดังนั้นสิ่งเดียวที่คุณต้องย้ายข้อมูลคือตัวโมเดลเอง
ผสานรวม LiteRT.js เข้ากับไปป์ไลน์ TensorFlow.js โดยทำตามขั้นตอนต่อไปนี้
- แปลงโมเดล TensorFlow, JAX หรือ PyTorch เดิมเป็น
.tfliteดูรายละเอียดได้ที่ส่วนการแปลง โมเดล - ติดตั้งแพ็กเกจ
@litertjs/coreและ@litertjs/tfjs-interopNPM - นำเข้าและใช้แบ็กเอนด์ TensorFlow.js WebGPU ซึ่งจำเป็นเพื่อให้ LiteRT.js ทำงานร่วมกับ TensorFlow.js ได้
- แทนที่ การโหลดโมเดล TensorFlow.js ด้วย การโหลด โมเดล LiteRT.js
- แทนที่ TensorFlow.js
model.predict(inputs) หรือmodel.execute(inputs) ด้วยrunWithTfjsTensors(liteRtModel, inputs)runWithTfjsTensorsจะใช้ Tensor อินพุตเดียวกันกับที่โมเดล TensorFlow.js ใช้และแสดงผล Tensor TensorFlow.js - ทดสอบว่าไปป์ไลน์โมเดลแสดงผลลัพธ์ตามที่คุณคาดไว้
การใช้ LiteRT.js กับ runWithTfjsTensors อาจต้องมีการเปลี่ยนแปลงอินพุตของโมเดลต่อไปนี้ด้วย
- จัดลำดับอินพุตใหม่: คุณอาจต้องเปลี่ยนลำดับอินพุตเมื่อส่งอินพุตเข้าไป ทั้งนี้ขึ้นอยู่กับวิธีที่ตัวแปลงจัดลำดับอินพุตและเอาต์พุตของโมเดล
- สลับอินพุต: ตัวแปลงอาจเปลี่ยนเลย์เอาต์ของอินพุตและเอาต์พุตของโมเดลเมื่อเทียบกับสิ่งที่ TensorFlow.js ใช้ คุณอาจต้อง สลับอินพุตเพื่อให้ ตรงกับโมเดลและเอาต์พุตเพื่อให้ตรงกับไปป์ไลน์ที่เหลือ
- เปลี่ยนชื่ออินพุต: หากคุณใช้ชื่ออินพุต ชื่ออาจมีการเปลี่ยนแปลงด้วย
คุณดูข้อมูลเพิ่มเติมเกี่ยวกับอินพุตและเอาต์พุตของโมเดลได้ด้วย model.getInputDetails() และ model.getOutputDetails()