ONNX چیست؟ معرفی قالب ONNX و کاربرد آن در استقرار مدل‌های هوش مصنوعی

معرفی

ONNX مخفف Open Neural Network Exchange است و یک استاندارد باز برای نمایش مدل‌های یادگیری ماشین به شمار می‌رود. این استاندارد ساختار مدل را با گراف محاسباتی، انواع داده، عملگرها و پارامترهای مدل توصیف می‌کند تا مدل بتواند خارج از محیطی که در آن ساخته یا آموزش داده شده است نیز در ابزارهای سازگار استفاده شود.

برای نمونه، ممکن است یک مدل تشخیص شیء را با PyTorch آموزش دهید، آن را به قالب ONNX تبدیل کنید و سپس با ONNX Runtime در یک سرویس Python، برنامه C++‎ یا دستگاه لبه اجرا کنید. این روش می‌تواند وابستگی محیط اجرا به چارچوب آموزش را کمتر کند و برای استقرار مدل انعطاف بیشتری ایجاد کند.

بااین‌حال، تبدیل مدل به ONNX به معنی سازگاری کامل آن با هر موتور اجرا نیست. باید بررسی کنید عملگرهای مدل، نسخه مجموعه عملگرها (opset)، نوع داده‌ها و ابعاد پویا در ابزار مقصد پشتیبانی می‌شوند یا نه. بخش‌هایی مانند پیش‌پردازش و پس‌پردازش نیز ممکن است خارج از فایل ONNX پیاده‌سازی شده باشند و به‌صورت جداگانه بررسی شوند.

ONNX خود فریم‌ورک آموزش، ابزار مستقل تبدیل مدل یا موتور استنتاج نیست. چارچوب یا ابزار مبدأ مدل را به ONNX تبدیل می‌کند و موتورهایی مانند ONNX Runtime فایل حاصل را اجرا می‌کنند.

برای مهندس یادگیری ماشین، مهندس هوش مصنوعی و مهندس بینایی ماشین، ONNX بیشتر زمانی اهمیت پیدا می‌کند که مدل باید از محیط آموزش جدا و در سرویس، نرم‌افزار، دستگاه لبه یا زیرساخت دیگری اجرا شود.

مسیر عملی برای ارزیابی تبدیل

۱. مدل و محیط مقصد را مشخص کنید.

ابتدا ورودی و خروجی مدل، چارچوب مبدأ و موتور اجرایی مقصد را مشخص کنید. پیش از تبدیل نیز بررسی کنید موتور مقصد از مدل و نوع عملگرهای موردنیاز پشتیبانی می‌کند.

۲. نسخه مجموعه عملگرها را بررسی کنید.

نسخه‌ای را انتخاب کنید که هم ابزار تبدیل مبدأ و هم موتور مقصد از آن پشتیبانی کنند. انتخاب جدیدترین نسخه همیشه برای همه محیط‌های استقرار مناسب نیست.

۳. مدل را به ONNX تبدیل کنید.

از امکانات رسمی چارچوب یا ابزار تبدیل سازگار استفاده کنید. برای مثال، PyTorch امکان خروجی‌گرفتن مدل به ONNX را فراهم می‌کند.

۴. ساختار مدل تبدیل‌شده را بررسی کنید.

ورودی‌ها، خروجی‌ها، نوع داده، ابعاد تنسورها و عملگرهای مدل را بررسی کنید و مطمئن شوید مدل بدون خطای ساختاری توسط ابزار مقصد بارگذاری می‌شود.

۵. خروجی دو مدل را مقایسه کنید.

چند ورودی ثابت را در مدل اصلی و مدل ONNX اجرا کنید. شکل خروجی، نوع داده و اختلاف عددی نتایج را مقایسه کنید.

۶. مدل را روی محیط واقعی ارزیابی کنید.

پس از اطمینان از صحت خروجی، معیارهایی مانند تأخیر، توان عملیاتی و مصرف حافظه را روی سخت‌افزار مقصد اندازه‌گیری کنید. تبدیل موفق به ONNX به‌تنهایی تضمین نمی‌کند که مدل سریع‌تر اجرا شود.

اگر بعضی عملگرها پشتیبانی نمی‌شوند یا موتور مقصد امکانات اختصاصی مناسبی برای مدل شما دارد، ممکن است استفاده مستقیم از قالب یا ابزار بومی همان محیط انتخاب ساده‌تر یا کاراتری باشد.

این ابزار را با نام‌های دیگری نیز می‌شناسند:

  • او‌ان‌ان‌ایکس
  • فرمت ONNX
  • Open Neural Network Exchange

ویژگی‌های کلیدی

برای آشنایی بهتر با این ابزار، توجه به موارد زیر می‌تواند مفید باشد.

  • قالب باز برای نمایش مدل

    ONNX ساختاری مشترک برای نمایش مدل‌های یادگیری ماشین فراهم می‌کند تا مدل در ابزارها و موتورهای سازگار قابل استفاده باشد.

  • تعریف گراف محاسباتی و عملگرها

    ساختار محاسبات مدل، انواع داده و مجموعه‌ای از عملگرهای استاندارد در ONNX تعریف می‌شوند تا ابزار مقصد بتواند مدل را تفسیر کند.

  • جداسازی آموزش از محیط اجرا

    مدل می‌تواند در یک چارچوب آموزش داده شود و پس از تبدیل، در محیط دیگری اجرا شود؛ البته به شرط پشتیبانی ابزار مقصد از ساختار مدل.

  • سازگاری با ONNX Runtime

    مدل‌های ONNX را می‌توان با ONNX Runtime روی محیط‌ها و سخت‌افزارهای مختلف اجرا کرد و در صورت پشتیبانی از شتاب‌دهنده‌های سخت‌افزاری بهره گرفت.

  • کاربرد در مدل‌های مختلف یادگیری ماشین

    ONNX فقط به بینایی ماشین محدود نیست و برای نمایش مدل‌های یادگیری عمیق و برخی مدل‌های یادگیری ماشین در حوزه‌های مختلف استفاده می‌شود.

  • نسخه‌بندی مجموعه عملگرها

    ONNX عملگرهای خود را در مجموعه‌های نسخه‌بندی‌شده تعریف می‌کند. هنگام تبدیل و استقرار باید نسخه‌ای انتخاب شود که با ابزار مبدأ و موتور مقصد سازگار باشد.

کاربردها

در ادامه، مهم‌ترین موارد این بخش به تفکیک معرفی شده‌اند.

  • استقرار مدل PyTorch در سرویس تولید

    مدلی را که با PyTorch ساخته شده است به ONNX تبدیل کنید و در صورت سازگاری، آن را با ONNX Runtime یا موتور دیگری در سرویس اجرا کنید.

  • اجرای مدل بینایی ماشین در نرم‌افزار C++

    مدل آموزش‌دیده را به ONNX تبدیل کنید و با یک موتور سازگار در برنامه C++‎ اجرا کنید تا برای استنتاج به محیط Python وابسته نباشد.

  • ارزیابی موتورهای مختلف استنتاج

    یک مدل ONNX را در موتورهای سازگار اجرا و تأخیر، توان عملیاتی، مصرف حافظه و سازگاری عملگرها را روی سخت‌افزار مقصد مقایسه کنید.

  • انتقال مدل به دستگاه لبه

    مدل را برای اجرا روی دستگاه لبه آماده کنید و بررسی کنید موتور مقصد، نوع داده‌ها، عملگرها و محدودیت‌های سخت‌افزاری مدل را پشتیبانی می‌کند.

  • بازبینی سازگاری پیش از استقرار

    پیش از انتشار مدل، ورودی و خروجی، نسخه مجموعه عملگرها، ابعاد پویا و اختلاف عددی خروجی مدل اصلی و نسخه ONNX را بررسی کنید.

پرسش‌های رایج درباره ONNX

در این بخش، به تعدادی از پرسش‌های رایج درباره این ابزار پاسخ داده شده است.

آیا ONNX جایگزین PyTorch یا TensorFlow است؟

خیر. PyTorch و TensorFlow برای ساخت و آموزش مدل استفاده می‌شوند. ONNX قالبی برای نمایش و انتقال مدل است و می‌تواند میان محیط آموزش و موتور استنتاج قرار بگیرد.

آیا هر مدل PyTorch یا TensorFlow بدون مشکل به ONNX تبدیل می‌شود؟

خیر. نتیجه به عملگرهای استفاده‌شده، امکانات ابزار تبدیل، نسخه مجموعه عملگرها، ابعاد ورودی و پشتیبانی موتور مقصد بستگی دارد. همیشه مدل تبدیل‌شده را با ورودی واقعی آزمایش کنید.

ONNX Runtime چیست؟

ONNX Runtime یک موتور اجرای چندسکویی برای مدل‌های ONNX است. این ابزار می‌تواند مدل را روی سخت‌افزارهای مختلف اجرا کند و از ارائه‌دهنده‌های اجرای مختلف برای استفاده از CPU، GPU و برخی شتاب‌دهنده‌ها بهره بگیرد.

برای شروع کار با ONNX چه پیش‌نیازی دارم؟

بهتر است با مدل‌های یادگیری ماشین، ورودی و خروجی تنسوری و چارچوبی که مدل در آن ساخته شده است آشنا باشید. برای استقرار نیز باید محیط و سخت‌افزار مقصد را بشناسید.

آیا استفاده از ONNX همیشه اجرای مدل را سریع‌تر می‌کند؟

خیر. سرعت به مدل، موتور اجرا، سخت‌افزار، تنظیمات و نوع عملگرها بستگی دارد. ممکن است ONNX Runtime یا موتور مقصد بهینه‌سازی‌های مؤثری انجام دهد، اما نتیجه باید با اندازه‌گیری واقعی مشخص شود.

چه زمانی فرمت بومی یا موتور دیگری را به ONNX ترجیح دهم؟

اگر مدل از عملگرهایی استفاده می‌کند که در مسیر ONNX پشتیبانی نمی‌شوند، تبدیل باعث پیچیدگی اضافی می‌شود یا محیط مقصد برای قالب و موتور بومی خود بهینه‌سازی بهتری دارد، استفاده مستقیم از ابزار همان محیط می‌تواند مناسب‌تر باشد.

آموزش‌های مرتبط در فرادرس

منابع پیشنهادی

برچسب‌ها و کلیدواژه‌ها