LiteRT.js হলো গুগলের একটি উচ্চ কর্মক্ষমতা সম্পন্ন ওয়েবএআই রানটাইম, যা প্রোডাকশন ওয়েব অ্যাপ্লিকেশনকে লক্ষ্য করে তৈরি। এটি LiteRT স্ট্যাকের একটি ধারাবাহিক সংস্করণ, যা একাধিক ফ্রেমওয়ার্ক সমর্থন নিশ্চিত করে এবং সকল প্ল্যাটফর্মে আমাদের মূল রানটাইমকে একীভূত করে।
LiteRT.js নিম্নলিখিত মূল বৈশিষ্ট্যগুলি সমর্থন করে:
- ব্রাউজারের মধ্যেই হার্ডওয়্যার-ত্বরিত ইনফারেন্স : লাইটওয়েট ওয়েবঅ্যাসেম্বলি (Wasm)-তে ম্যাপ করা XNNPack দ্বারা ত্বরান্বিত হয়ে অসাধারণ সিপিইউ পারফরম্যান্সে মডেল চালান। জিপিইউ এবং ডেডিকেটেড হার্ডওয়্যার স্কেলিং (যেমন এনপিইউ)-এর জন্য, LiteRT.js নেটিভভাবে WebGPU API এবং উদীয়মান WebNN API উভয়কেই উপলব্ধ করে, যা সূক্ষ্ম প্ল্যাটফর্ম-নির্দিষ্ট অপ্টিমাইজেশনকে সক্ষম করে।
- একাধিক ফ্রেমওয়ার্কের সাথে সামঞ্জস্যপূর্ণ : আপনার পছন্দের এমএল ফ্রেমওয়ার্ক (যেমন পাইটর্চ, জেএএক্স বা টেনসরফ্লো) থেকে সরাসরি কম্পাইল করে ডেভেলপমেন্ট প্রক্রিয়াকে আরও সহজ করুন।
- বিদ্যমান পাইপলাইনগুলিতে পুনরাবৃত্তি করুন : নেটিভভাবে সমর্থিত TensorFlow.js টেনসরগুলিকে সরাসরি বাউন্ডারি ইনপুট এবং আউটপুট হিসাবে পার্স করার মাধ্যমে বিদ্যমান TensorFlow.js আর্কিটেকচারগুলির সাথে আউট-দ্য-বক্স ইন্টিগ্রেশন।
ইনস্টলেশন
npm থেকে @litertjs/core প্যাকেজটি ইনস্টল করুন:
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, LiteRT ইকোসিস্টেমের বাকি অংশগুলোর মতোই .tflite ফরম্যাট ব্যবহার করে এবং এটি 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 পাইপলাইনে একীভূত করুন
নিম্নলিখিত কারণগুলোর জন্য আপনার TensorFlow.js পাইপলাইনে LiteRT.js অন্তর্ভুক্ত করার কথা বিবেচনা করা উচিত:
- অসাধারণ GPU ও হার্ডওয়্যার পারফরম্যান্স : LiteRT.js মডেলগুলো বিভিন্ন ব্রাউজার আর্কিটেকচারে সর্বোত্তম পারফরম্যান্সের জন্য WebGPU অ্যাক্সিলারেশন ব্যবহার করে। WebGPU এবং আসন্ন WebNN-এর সমর্থনের মাধ্যমে LiteRT.js বিভিন্ন এজ ডিভাইসে নমনীয় হার্ডওয়্যার অ্যাক্সিলারেশন প্রদান করে।
- সহজতর মডেল রূপান্তর পথ : LiteRT.js রূপান্তর পথটি সরাসরি PyTorch থেকে LiteRT-এ যায়। PyTorch থেকে TensorFlow.js রূপান্তর পথটি উল্লেখযোগ্যভাবে বেশি জটিল, যার জন্য আপনাকে PyTorch -> ONNX -> TensorFlow -> TensorFlow.js এই ক্রমে যেতে হয়।
- ডিবাগিং টুলস : 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) ব্যবহার করুন।runWithTfjsTensorsTensorFlow.js মডেলগুলোর ব্যবহৃত ইনপুট টেনসরগুলোই গ্রহণ করে এবং TensorFlow.js টেনসর আউটপুট হিসেবে প্রদান করে। - মডেল পাইপলাইনটি আপনার প্রত্যাশিত ফলাফল দিচ্ছে কিনা তা পরীক্ষা করুন।
runWithTfjsTensors এর সাথে LiteRT.js ব্যবহার করার জন্য মডেল ইনপুটগুলিতে নিম্নলিখিত পরিবর্তনগুলিরও প্রয়োজন হতে পারে:
- ইনপুটগুলির পুনর্বিন্যাস : কনভার্টারটি মডেলের ইনপুট এবং আউটপুটগুলিকে যেভাবে সাজিয়েছে, তার উপর নির্ভর করে, সেগুলি ইনপুট করার সময় আপনাকে তাদের ক্রম পরিবর্তন করতে হতে পারে।
- ইনপুট ট্রান্সপোজ করুন : এমনও হতে পারে যে, কনভার্টারটি TensorFlow.js-এর ব্যবহৃত লেআউটের তুলনায় মডেলের ইনপুট এবং আউটপুটের লেআউট পরিবর্তন করে দিয়েছে। মডেলের সাথে মেলানোর জন্য আপনাকে আপনার ইনপুটগুলো এবং পাইপলাইনের বাকি অংশের সাথে মেলানোর জন্য আউটপুটগুলো ট্রান্সপোজ করতে হতে পারে।
- ইনপুটগুলির নাম পরিবর্তন করুন : আপনি যদি নামযুক্ত ইনপুট ব্যবহার করেন, তাহলে নামগুলিও পরিবর্তিত হয়ে থাকতে পারে।
আপনি model.getInputDetails() এবং model.getOutputDetails() ব্যবহার করে মডেলের ইনপুট এবং আউটপুট সম্পর্কে আরও তথ্য পেতে পারেন।