اگر آپ نے کبھی روزمرہ کے ہارڈ ویئر پر AI انفرنس کو تیز کرنے کی کوشش کی ہے اور آپ کو سست CPU رن اور GPU کی پیچیدگی کے درمیان پھنسے ہوئے محسوس کیا ہے، تو OpenVINO وہ گمشدہ ٹکڑا ہو سکتا ہے۔ انٹیل کی جانب سے تیار کردہ، یہ عام ڈیپ لرننگ ماڈلز کو تیز رفتار، پورٹیبل ایپلی کیشنز میں تبدیل کرتا ہے جو CPUs، انٹیگریٹڈ GPUs، اور یہاں تک کہ NPUs پر چلتی ہیں—آپ کے پورے اسٹیک کو دوبارہ لکھے بغیر۔
اس عملی، حل پر مبنی گائیڈ میں، آپ بالکل سیکھیں گے کہ OpenVINO کو کیسے استعمال کیا جائے—تنصیب سے لے کر ماڈل کی تبدیلی، آپٹیمائزیشن، اور تعیناتی تک۔ ہم سب سے عام ورک فلوز کا احاطہ کریں گے، مثال کے طور پر کوڈ شیئر کریں گے، اور ان پرفارمنس ٹپس کو نمایاں کریں گے جو اہمیت رکھتی ہیں۔
ایک نظر میں آپ کیا سیکھیں گے:
- pip کے ذریعے منٹوں میں OpenVINO انسٹال کریں۔
- ماڈل آپٹیمائزر کا استعمال کرتے ہوئے ماڈلز کو تبدیل کریں (ONNX/TF/PyTorch ایکسپورٹ)۔
- Python میں OpenVINO رن ٹائم کے ساتھ انفرنس چلائیں۔
- کوانٹائزیشن اور بینچ مارکنگ ٹولز کے ساتھ آپٹیمائز کریں۔
- کم سے کم کوڈ تبدیلیوں کے ساتھ CPU، iGPU، اور NPU پر تعینات کریں۔
OpenVINO کیا ہے اور اسے کیوں استعمال کریں؟
OpenVINO انٹیل ہارڈ ویئر اور اس سے آگے AI ماڈلز کو آپٹیمائز اور تعینات کرنے کے لیے ایک اوپن سورس ٹول کٹ ہے۔ یہ خاص طور پر پروڈکشن انفرنس کے لیے مضبوط ہے جب آپ متوقع کارکردگی، کم لیٹنسی، اور پورٹیبلٹی چاہتے ہیں—اگر آپ کو اس کی ضرورت نہیں ہے تو CUDA سیٹ اپ کی ضرورت نہیں ہے۔ یہ ONNX جیسے مشہور ماڈل فارمیٹس کو سپورٹ کرتا ہے اور عام فریم ورکس کے ساتھ با آسانی انٹیگریٹ کرتا ہے۔
اہم فوائد:
- رفتار: آپٹیمائزڈ کرنلز اور گراف ٹرانسفارمیشن CPUs اور GPUs پر انفرنس کو تیز کرتے ہیں۔
- پورٹیبلٹی: ایک ہی ایپ ایک لائن ڈیوائس تبدیلی کے ساتھ CPU، iGPU، NPU کو نشانہ بنا سکتی ہے۔
- افادیت: کوانٹائزیشن، ماڈل کمپریشن، اور رن ٹائم آپٹیمائزیشنز لیٹنسی اور میموری کو کم کرتے ہیں۔
- سادگی: صاف Python API اور CLI ٹولز اسے ابتدائی افراد کے لیے دوستانہ بناتے ہیں۔
مرحلہ 1: OpenVINO انسٹال کریں
زیادہ تر صارفین کے لیے، سب سے تیز طریقہ pip کے ذریعے ہے:
- یقینی بنائیں کہ Python 3.9–3.12 انسٹال ہے (64-bit)۔
- ایک ورچوئل ماحول بنائیں اور ایکٹیویٹ کریں (تجویز کردہ)۔
- انسٹال کریں:
pip install -U openvino openvino-dev
- تصدیق کریں:
python -c "import openvino; print(openvino.version)"
اگر آپ آفیشل مرحلہ وار وسائل کو ترجیح دیتے ہیں یا ورژن سے متعلق نوٹس اور پلیٹ فارم سپورٹ کو ٹریک کرنا چاہتے ہیں، تو OpenVINO Get Started دستاویزات اور موجودہ دستاویزات مرکز سے آغاز کریں۔ فوری pip انسٹالیشن حوالہ اور مطابقت کے لیے، PyPI صفحہ دیکھیں۔
مرحلہ 2: اپنا ماڈل تیار کریں (ONNX تجویز کردہ)
OpenVINO IR (Intermediate Representation) ماڈلز (.xml/.bin) کے ساتھ بہترین چلتا ہے۔ زیادہ تر صارفین پہلے ONNX میں ایکسپورٹ کرتے ہیں، پھر ماڈل آپٹیمائزر کا استعمال کرتے ہوئے IR میں تبدیل کرتے ہیں۔
مقبول راستے:
- PyTorch: torch.onnx.export → ONNX → OpenVINO IR
- TensorFlow/Keras: SavedModel → ONNX (tf2onnx کے ذریعے) → OpenVINO IR
- موجودہ ONNX: براہ راست OpenVINO IR میں تبدیل کریں۔
فوری مثال (PyTorch → ONNX):
- Python کے اندر اپنے ماڈل کو ONNX میں ایکسپورٹ کریں:
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=17, do_constant_folding=True)
- onnx.checker.check_model کے ساتھ ONNX کی توثیق کریں یا اسے onnxruntime میں ایک بار چلائیں۔
مرحلہ 3: ماڈل آپٹیمائزر کے ساتھ OpenVINO IR میں تبدیل کریں
ماڈل آپٹیمائزر فریم ورک ماڈلز کو OpenVINO IR میں تبدیل کرتا ہے اور گراف لیول آپٹیمائزیشنز لاگو کرتا ہے۔ openvino-dev انسٹال کرنے کے بعد، آپ چلا سکتے ہیں:
- mo --input_model model.onnx --output_dir ov_model
یہ model.xml اور model.bin تیار کرتا ہے۔
مفید فلیگز:
- --input_shape: اگر آپ کا ماڈل ڈائنامک ہے تو ان پٹ ڈائمینشنز کو مجبور کریں۔
- --mean_values/--scale_values: پری پروسیسنگ کے دوران ان پٹس کو نارملائز کریں۔
- --compress_to_fp16: رفتار/میموری کے حصول کے لیے درستگی اور ماڈل سائز کو کم کریں۔
ٹپ: اگر آپ کم لیٹنسی CPU انفرنس کو نشانہ بنا رہے ہیں، تو FP16 اکثر رفتار اور درستگی کا بہترین توازن پیدا کرتا ہے۔ A/B ٹیسٹنگ کے لیے ایک بیس لائن FP32 IR رکھیں۔
مرحلہ 4: OpenVINO رن ٹائم (Python) کے ساتھ انفرنس چلائیں
کور رن ٹائم ورک فلو سیدھا ہے۔
مثال (تصویری درجہ بندی):
from openvino.runtime import Core
import numpy as np
import cv2
core = Core
model = core.read_model("ov_model/model.xml")
compiled_model = core.compile_model(model, device_name="CPU") # options: "CPU", "GPU", "AUTO", "NPU" (where supported)
input_layer = compiled_model.inputs۔ اگر آپ CPU ہاٹ اسپاٹس اور تھریڈ یوٹیلائزیشن کو پروفائل کرنا چاہتے ہیں، تو Intel VTune Profiler کے پاس خاص طور پر OpenVINO ایپس کے لیے ایک نسخہ موجود ہے۔
مرحلہ 6: کوانٹائزیشن (INT8) کے ساتھ آپٹیمائز کریں
پوسٹ ٹریننگ کوانٹائزیشن (PTQ) کم سے کم درستگی کے نقصان کے ساتھ ماڈل سائز کو کم اور رفتار کو بڑھا سکتا ہے:
- openvino-dev کے ساتھ شامل بلٹ ان POT (پوسٹ ٹریننگ آپٹیمائزیشن ٹول) استعمال کریں۔
- اپنے پروڈکشن ڈیٹا سے ملتا جلتا ایک چھوٹا سا کیلیبریشن ڈیٹا سیٹ فراہم کریں۔
- ایک INT8 IR ایکسپورٹ کریں اور اس کی بینچ مارکنگ کریں۔ اگر درستگی ناکافی ہے، تو مخلوط درستگی (INT8 + FP16) یا سلیکٹیو کوانٹائزیشن آزمائیں۔
عام کوانٹائزیشن فلو:
- POT کوانٹائزیشن پیرامیٹرز کو ترتیب دیں (فی ٹینسر بمقابلہ فی چینل، سمیٹرک بمقابلہ اسیمٹرک)۔
- کیلیبریشن اور ویلیڈیشن چلائیں۔
- KPIs کا موازنہ کریں: لیٹنسی، تھرو پٹ، ٹاپ 1/ٹاپ 5 درستگی یا ٹاسک سے متعلقہ میٹرکس۔
مرحلہ 7: پری پروسیسنگ کو صحیح طریقے سے ہینڈل کریں
ماڈل I/O کی توقعات اکثر مختلف ہوتی ہیں۔ اپنی پری پروسیسنگ کو معیاری بنائیں:
- متوقع سائز میں ریسائز/سینٹر-کراپ کریں (مثال کے طور پر، 224×224)
- چینل آرڈر (RGB بمقابلہ BGR)
- لے آؤٹ (NCHW بمقابلہ NHWC)
آپ OpenVINO رن ٹائم میں پری پوسٹ پروسیسر API کا استعمال کرتے ہوئے پری پروسیسنگ کے مراحل کو IR میں ایمبیڈ کر سکتے ہیں تاکہ آپ کا ایپ کوڈ صاف اور پورٹیبل رہے۔
مثال کے طور پر سنیپٹ:
from openvino.runtime import Core, Layout, Type
from openvino.preprocess import PrePostProcessor
core = Core
model = core.read_model("ov_model/model.xml")
ppp = PrePostProcessor(model)
ppp.input.tensor.set_layout(Layout("NHWC"))
ppp.input.preprocess.convert_element_type(Type.f32)
ppp.output.tensor
model = ppp.build
compiled_model = core.compile_model(model, "AUTO")
مرحلہ 8: ویڈیو اور اسٹریمنگ تک اسکیل کریں
ویڈیو اینالیٹکس کے لیے، آپ OpenCV یا GStreamer کے ساتھ OpenVINO انفرنس کو پائپ لائن کر سکتے ہیں۔ FPS کو زیادہ اور لیٹنسی کو کم رکھنے کے لیے اسینکرونس انفرنس کی درخواستیں اور بیجڈ پروسیسنگ استعمال کریں۔
ٹپس:
- اسینک API استعمال کریں: متعدد ان فلائٹ درخواستیں CPUs پر تھرو پٹ کو بہتر بناتی ہیں۔
- اگر آپ کے ماڈل کو ویکٹرائزڈ ایگزیکیوشن سے فائدہ ہوتا ہے تو فریمز کو بیچ کریں۔
- ملٹی کور سسٹم پر متوقع لیٹنسی کے لیے تھریڈز کو پن کریں یا اسٹریمز کو ایڈجسٹ کریں۔
مرحلہ 9: آلات میں سمارٹ طریقے سے تعینات کریں
OpenVINO کی سپر پاورز میں سے ایک بغیر کسی رکاوٹ کے ڈیوائس ٹارگٹنگ ہے:
- CPU: مضبوط ڈیفالٹ؛ وسیع پیمانے پر دستیاب؛ ایج اور سرور کے لیے بہترین۔
- GPU (انٹیگریٹڈ): ڈسکریٹ GPU کے بغیر اچھی ایکسلریشن؛ ڈرائیور کوالٹی اہمیت رکھتی ہے۔
- AUTO: رن ٹائم کو منتخب کرنے دیں؛ پورٹیبل ایپس کے لیے بہترین۔
- ہیٹرو ایگزیکیوشن: تہوں کو آلات میں تقسیم کریں جہاں فائدہ مند ہو۔
پورٹیبلٹی کے لیے AUTO سے شروعات کریں۔ اگر آپ کو سخت کنٹرول کی ضرورت ہے، تو CPU بمقابلہ GPU کی بینچ مارکنگ کریں اور فی ماڈل فیصلہ کریں۔
ٹاسک کے لحاظ سے عملی مثالیں