اگر تا به حال سعی کردهاید استنتاج هوش مصنوعی را بر روی سختافزارهای روزمره سرعت ببخشید و بین اجرای کند CPU و پیچیدگی GPU گیر کردهاید، ممکن است OpenVINO قطعه گمشده باشد. این ابزار که توسط اینتل ساخته شده است، مدلهای رایج یادگیری عمیق را به برنامههای سریع و قابل حمل تبدیل میکند که بر روی CPUها، GPUهای یکپارچه و حتی NPUها اجرا میشوند—بدون اینکه کل پشته خود را بازنویسی کنید.
در این راهنمای عملی و راهحلمحور، دقیقاً یاد خواهید گرفت که چگونه از OpenVINO استفاده کنید—از نصب تا تبدیل مدل، بهینهسازی و استقرار. ما رایجترین گردشهای کاری را پوشش میدهیم، کد نمونه را به اشتراک میگذاریم و نکات عملکردی مهم را برجسته میکنیم.
آنچه در یک نگاه یاد خواهید گرفت:
- نصب OpenVINO در چند دقیقه با pip
- تبدیل مدلها (خروجی ONNX/TF/PyTorch) با استفاده از Model Optimizer
- اجرای استنتاج با OpenVINO Runtime در Python
- بهینهسازی با کوانتیزاسیون و ابزارهای بنچمارک
- استقرار در CPU، iGPU و NPU با حداقل تغییرات کد
OpenVINO چیست و چرا از آن استفاده کنیم؟
OpenVINO یک جعبهابزار منبع باز برای بهینهسازی و استقرار مدلهای هوش مصنوعی در سختافزار اینتل و فراتر از آن است. این ابزار به ویژه برای استنتاج تولیدی زمانی که عملکرد قابل پیشبینی، تأخیر کم و قابلیت حمل را میخواهید—بدون نیاز به تنظیمات سنگین CUDA اگر به آن نیاز ندارید—بسیار قوی است. از فرمتهای مدل محبوب مانند ONNX پشتیبانی میکند و به خوبی با چارچوبهای رایج ادغام میشود.
مزایای کلیدی:
- سرعت: هستههای بهینهسازی شده و تبدیلهای گراف، استنتاج را بر روی CPUها و GPUها تسریع میکنند.
- قابلیت حمل: یک برنامه میتواند CPU، iGPU، NPU را با یک تغییر خطی در دستگاه هدف قرار دهد.
- کارایی: کوانتیزاسیون، فشردهسازی مدل و بهینهسازیهای زمان اجرا، تأخیر و حافظه را کاهش میدهند.
- سادگی: API تمیز Python و ابزارهای CLI آن را برای مبتدیان دوستانه میکند.
گام 1: نصب OpenVINO
برای اکثر کاربران، سریعترین راه از طریق pip است:
- اطمینان حاصل کنید که Python 3.9–3.12 نصب شده است (64 بیتی).
- یک محیط مجازی ایجاد و فعال کنید (توصیه میشود).
- نصب:
pip install -U openvino openvino-dev
- تایید:
python -c "import openvino; print(openvino.version)"
اگر منابع رسمی گام به گام را ترجیح میدهید یا میخواهید یادداشتهای خاص نسخه و پشتیبانی از پلتفرم را پیگیری کنید، با اسناد شروع به کار OpenVINO و مرکز اسناد فعلی شروع کنید. برای مرجع نصب سریع pip و سازگاری، صفحه PyPI را ببینید.
گام 2: مدل خود را آماده کنید (ONNX توصیه میشود)
OpenVINO با مدلهای IR (نمایش میانی) (.xml/.bin) بهترین عملکرد را دارد. اکثر کاربران ابتدا به ONNX صادر میکنند، سپس با استفاده از Model Optimizer به IR تبدیل میکنند.
مسیرهای محبوب:
- PyTorch: torch.onnx.export → ONNX → OpenVINO IR
- TensorFlow/Keras: SavedModel → ONNX (از طریق tf2onnx) → OpenVINO IR
- ONNX موجود: مستقیماً به OpenVINO IR تبدیل کنید
مثال سریع (PyTorch → ONNX):
- مدل خود را به ONNX در داخل Python صادر کنید:
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=17, do_constant_folding=True)
- ONNX را با onnx.checker.check_model اعتبارسنجی کنید یا یک بار در onnxruntime اجرا کنید.
گام 3: تبدیل به OpenVINO IR با Model Optimizer
Model Optimizer مدلهای چارچوب را به OpenVINO IR تبدیل میکند و بهینهسازیهای سطح گراف را اعمال میکند. پس از نصب openvino-dev، میتوانید اجرا کنید:
- mo --input_model model.onnx --output_dir ov_model
این مدل.xml و model.bin را تولید میکند.
پرچمهای مفید:
- --input_shape: اگر مدل شما پویا است، ابعاد ورودی را اجبار کنید.
- --mean_values/--scale_values: ورودیها را در طول پیش پردازش نرمال کنید.
- --compress_to_fp16: برای افزایش سرعت/حافظه، دقت و اندازه مدل را کاهش دهید.
نکته: اگر هدف شما استنتاج CPU با تأخیر کم است، FP16 اغلب تعادل عالی بین سرعت و دقت ایجاد میکند. یک IR FP32 پایه را برای آزمایش A/B نگه دارید.
گام 4: اجرای استنتاج با OpenVINO Runtime (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) میتواند اندازه مدل را کاهش داده و سرعت را با حداقل از دست دادن دقت افزایش دهد:
- از POT (ابزار بهینهسازی پس از آموزش) داخلی موجود در openvino-dev استفاده کنید.
- یک مجموعه داده کالیبراسیون کوچک شبیه به دادههای تولیدی خود ارائه دهید.
- یک INT8 IR صادر کرده و آن را بنچمارک کنید. اگر دقت کافی نیست، از دقت ترکیبی (INT8 + FP16) یا کوانتیزاسیون انتخابی استفاده کنید.
جریان کوانتیزاسیون رایج:
- نمونههای نماینده را جمع آوری کنید.
- پارامترهای کوانتیزاسیون POT را پیکربندی کنید (به ازای هر تانسور در مقابل هر کانال، متقارن در مقابل نامتقارن).
- کالیبراسیون و اعتبارسنجی را اجرا کنید.
- KPIها را مقایسه کنید: تأخیر، توان عملیاتی، دقت top-1/top-5 یا معیارهای خاص وظیفه.
گام 7: پیش پردازش را به روش صحیح انجام دهید
انتظارات ورودی/خروجی مدل اغلب متفاوت است. پیش پردازش خود را استاندارد کنید:
- تغییر اندازه/برش مرکزی به اندازه مورد انتظار (به عنوان مثال، 224×224)
- ترتیب کانال (RGB در مقابل BGR)
- نرمال سازی (میانگین/انحراف معیار)
- طرحبندی (NCHW در مقابل NHWC)
میتوانید مراحل پیش پردازش را با استفاده از PrePostProcessor API در OpenVINO Runtime در 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: مقیاس به ویدئو و پخش جریانی
برای تجزیه و تحلیل ویدئو، میتوانید استنتاج OpenVINO را با OpenCV یا GStreamer خط لوله کنید. از درخواستهای استنتاج ناهمزمان و پردازش دستهای برای بالا نگه داشتن FPS و پایین نگه داشتن تأخیر استفاده کنید.
نکات:
- از API ناهمزمان استفاده کنید: درخواستهای متعدد در حال پرواز، توان عملیاتی را در CPUها بهبود میبخشد.
- اگر مدل شما از اجرای برداری بهره میبرد، فریمها را دستهبندی کنید.
- نخها را پین کنید یا جریانها را برای تأخیر قابل پیشبینی در سیستمهای چند هستهای تنظیم کنید.
گام 9: به طور هوشمندانه در سراسر دستگاهها مستقر شوید
یکی از ابرقدرتهای OpenVINO، هدفگیری یکپارچه دستگاه است:
- CPU: پیش فرض قوی؛ به طور گسترده در دسترس است؛ عالی برای لبه و سرور.
- GPU (یکپارچه): شتاب خوب بدون GPU گسسته؛ کیفیت درایور مهم است.
- AUTO: اجازه دهید زمان اجرا انتخاب کند؛ عالی برای برنامههای قابل حمل.
- اجرای Hetero: لایهها را در سراسر دستگاهها در صورت سودمند بودن تقسیم کنید.
با AUTO برای قابلیت حمل شروع کنید. اگر به کنترل دقیقتری نیاز دارید، CPU در مقابل GPU را بنچمارک کنید و برای هر مدل تصمیم بگیرید.
مثالهای عملی بر اساس وظیفه
- تبدیل ONNX → IR؛ استفاده از FP16; دستگاه AUTO; استنتاج ناهمزمان.
- پیش پردازش: تغییر اندازه، برش مرکزی، نرمال سازی.
- اگر به توان عملیاتی >2× با کاهش دقت کم نیاز دارید، کوانتیزه کنید.
- اطمینان حاصل کنید که اشکال پویا مدیریت میشوند یا اندازه ورودی را ثابت کنید.
- تجزیه خروجیها: رمزگشایی جعبهها، اعمال NMS در سمت مشتری.
- برای استقرارهای لبه برای رسیدن به زمان واقعی در CPUها، از INT8 استفاده کنید.
- برای تصاویر بزرگ از کاشی کاری استفاده کنید.
- پس پردازش را با NumPy برداری بهینه کنید (argmax، نگاشت رنگ).
- در صورت وجود از بهینهسازیهای OpenVINO-text استفاده کنید.
- خطوط لوله توکنیزاسیون را کش کنید; INT8 را برای ترانسفورماتورها در نظر بگیرید.
- FP16 را هدف قرار دهید; حلقههای زمانبندی/استنتاج را بهینه کنید.
- پروفایل به شما کمک میکند—خطوط لوله انتشار چند مرحلهای هستند.
لیست بررسی آزمایش و اعتبارسنجی
- خروجیها را با خط پایه (PyTorch/TF/ONNXRuntime) برای یک مجموعه آزمایشی کوچک مقایسه کنید.
- تفاوتهای عددی را پس از تبدیل FP16/INT8 اعتبارسنجی کنید.
- تأخیر p50/p95 و توان عملیاتی را تحت بار مورد انتظار اندازهگیری کنید.
- تست استرس: اجرای طولانی برای گرفتن مشکلات حافظه یا نخ.
پاسخهای سریع عیبیابی
- خطاهای تبدیل با Model Optimizer:
- openvino-dev را بهروزرسانی کنید; opset جدیدتر را امتحان کنید; گراف ONNX را ساده کنید (onnxsim).
- --input_shape را ارائه دهید; پشتیبانی ورودی پویا را تأیید کنید.
- از FP16/INT8، API ناهمزمان استفاده کنید، نخها/جریانها را تنظیم کنید; benchmark_app را اجرا کنید.
- درایورها را بهروزرسانی کنید; device="AUTO" را امتحان کنید; اسناد را برای GPUهای پشتیبانی شده بررسی کنید.
منابع یادگیری و اسناد رسمی
- برای آموزشهای عملی، نوتبوکها و راهنماهای تنظیمات، از اینجا شروع کنید: OpenVINO Get Started
- پورتال اسناد کامل برای APIها، Model Optimizer، POT، نمونهها: OpenVINO Docs
- مرجع نصب Pip برای نصبهای سریع و سازگاری: PyPI openvino
- تجزیه و تحلیل پروفایل و عملکرد برای برنامههای OpenVINO: Intel VTune guide
به هر حال، اگر در حال نوشتن محتوای فنی، آموزشها یا دفترچههای راهنمای داخلی در مورد بهینهسازی و استقرار هستید، ابزارهایی مانند فضای کاری نوشتن Sider.AI میتواند به شما کمک کند کد، بنچمارکها و روایت را به سرعت به هم متصل کنید—مفید هنگام مستندسازی آزمایشهای پیچیده عملکرد OpenVINO یا مقایسههای چند دستگاهی. اقدامات بعدی قابل اجرا
- OpenVINO را با pip نصب کنید و benchmark_app را روی یک IR نمونه اجرا کنید.
- یک مدل ONNX شناخته شده (به عنوان مثال، ResNet50) را تبدیل کنید و دقت را اعتبارسنجی کنید.
- FP16 و سپس INT8 را با POT امتحان کنید; تأخیر و توان عملیاتی را اندازهگیری کنید.
- device_name را بین CPU، GPU و AUTO تغییر دهید; بهترین را برای سختافزار هدف خود انتخاب کنید.
- اگر نیاز به فشردن عملکرد اضافی دارید، با VTune پروفایل کنید.
نکات کلیدی
- OpenVINO استنتاج هوش مصنوعی را سریع، قابل حمل و آگاه از سختافزار میکند.
- تبدیل به IR به همراه پیش پردازش هوشمندانه، سرعت قابل اعتمادی را به همراه دارد.
- کوانتیزاسیون و اجرای ناهمزمان بهترین دوستان شما برای عملکرد در زمان واقعی هستند.
- انعطافپذیری دستگاه (CPU/iGPU/NPU/AUTO) به معنای یک کدبیس، اهداف زیاد است.
سوالات متداول
Q1:سادهترین راه برای نصب OpenVINO چیست؟
از یک محیط مجازی استفاده کنید و اجرا کنید: pip install -U openvino openvino-dev. با یک بررسی واردات سریع تأیید کنید و برای ویژگیهای خاص پلتفرم با اسناد رسمی Get Started مشورت کنید.
Q2:چگونه مدل خود را به OpenVINO IR تبدیل کنم؟
مدل خود را به ONNX صادر کنید، سپس Model Optimizer (mo) را برای تولید فایلهای .xml/.bin IR اجرا کنید. اشکال ورودی را ارائه دهید و FP16 را برای افزایش سرعت و حافظه در نظر بگیرید.
Q3:آیا OpenVINO میتواند بر روی CPU و GPU یکپارچه بدون تغییر کد اجرا شود؟
بله. مدل را با device_name="AUTO", "CPU" یا "GPU" کامپایل کنید. میتوانید دستگاهها را با یک پارامتر تغییر دهید در حالی که بقیه کد شما دست نخورده باقی میماند.
Q4:چگونه میتوانم استنتاج را با OpenVINO سرعت بخشم؟
از کوانتیزاسیون FP16 یا INT8، API استنتاج ناهمزمان و benchmark_app برای تنظیم نخها و جریانها استفاده کنید. با VTune برای تجزیه و تحلیل عمیقتر گلوگاه، پروفایل کنید.
Q5:آیا OpenVINO از NLP و مدلهای مولد پشتیبانی میکند؟
بله. از طیف وسیعی از مدلهای NLP و انتشار پشتیبانی میکند; از FP16 استفاده کنید و INT8 را برای ترانسفورماتورها در نظر بگیرید. دقت را پس از بهینهسازی اعتبارسنجی کنید و تأخیر را تحت بار اندازهگیری کنید.