نحوه بهینه سازی و استقرار مدل های ONNX با استفاده از TensorRT

Summarize this content to 400 words in Persian Lang
وارد شدن
بهینه سازی عملکرد یک عامل مهم در هنگام استقرار مدل های یادگیری عمیق است. TensorRT NVIDIA این بهینهسازیها و صرفهجویی در حافظه را فعال میکند و به ویژه به توسعه برنامههای بلادرنگ از طریق بهبود سرعت استنتاج و استفاده کارآمد از حافظه کمک میکند. در اینجا، ما فرآیند تبدیل مدل ONNX، فرمت استاندارد مدل یادگیری عمیق، به فایل موتور TensorRT را پوشش خواهیم داد.دلایل زیادی برای تبدیل فایلهای ONNX به موتور TensorRT وجود دارد. اول، عملکرد استنتاج را می توان از طریق فناوری های مختلف بهینه سازی TensorRT (تبدیل دقیق، بهینه سازی حافظه و غیره) به حداکثر رساند. دوم، هنگام توزیع مدلهای تبدیل شده به فایلهای موتور TensorRT، با به حداکثر رساندن منابع سختافزار GPU، میتوان از آنها به سرعت و کارآمد استفاده کرد.همچنین نحوه تبدیل مدلهای ONNX به دقتهای مختلف (FP32، FP16، INT8) را با استفاده از ابزار خط فرمان TensorRT، trtexec، خلاصه خواهیم کرد.
trtexec معرفی و محل نصب
trtexec یک ابزار خط فرمان ارائه شده توسط TensorRT است که به کاربران اجازه می دهد مدل های ONNX را به راحتی به فایل های موتور TensorRT تبدیل کنند. trtexec نه تنها می تواند فایل های موتور را برای مدل های ONNX ایجاد کند، بلکه می تواند تست های عملکرد استنتاج و بهینه سازی حافظه را نیز انجام دهد. تنظیمات مختلف دقیق و دسته ای را می توان تنظیم کرد و عملکرد را نیز می توان مقایسه کرد.به طور معمول، trtexec در پوشه /usr/tensorrt/bin/ قرار دارد که مسیری است که TensorRT در آن نصب شده است. اگر مسیر به متغیرهای محیط اضافه نشود، راحت است ~/.bashrc را به صورت زیر تنظیم کنید و امکان اجرای فوری دستور trtexec را در ترمینال فراهم کنید.
export PATH=$PATH:/usr/src/tensorrt/bin
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
روش اصلی تبدیل و گزینه ها توضیح داده شده است
هنگام تبدیل یک فایل ONNX به یک فایل موتور TensorRT، اساساً به FP32 (32 بیتی ممیز شناور) دقیق تبدیل می شود.
trtexec –onnx=model.onnx –saveEngine=model.engine –explicitBatch
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
–onnx: مسیر فایل مدل ONNX را برای تبدیل مشخص می کند. این گزینه مورد نیاز است.
–saveEngine: مسیر ذخیره فایل موتور TensorRT تبدیل شده را مشخص می کند.
–explicitBatch: TensorRT را تنظیم می کند تا به صراحت از اندازه دسته استفاده کند.
توضیحات تبدیل و کالیبراسیون دقیق INT8
دقت INT8 در برنامه هایی که نیاز به عملکرد بالا دارند مفید است زیرا به طور قابل توجهی مصرف حافظه و زمان استنتاج را در مقایسه با FP32 کاهش می دهد. با این حال، یک فایل کالیبراسیون برای تبدیل مدل به دقت INT8 مورد نیاز است. فایلهای کالیبراسیون حاوی اطلاعات آماری برای یک مجموعه داده خاص هستند که به TensorRT اجازه میدهد تا دقت مدل را هنگام تغییر از دقت 32 بیتی به 8 بیتی حفظ کند.اگر فایل کالیبراسیون با نام cal.bin ذخیره شده است، می توانید با دستور زیر یک فایل موتور دقیق INT8 ایجاد کنید.
trtexec –onnx=model.onnx –saveEngine=model_int8.engine –explicitBatch –int8 –calib=cal.bin
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
–int8: تبدیل مدل را با استفاده از دقت INT8 مشخص می کند.
–calib: فایل کالیبراسیون مورد نیاز برای تبدیل INT8 را مشخص می کند. بدون فایل کالیبراسیون، ممکن است دقت کاهش یابد.
تبدیل FP16 و گزینه های اضافی توضیح داده شده است
دقت FP16 (میز شناور 16 بیتی) از حافظه کمتری نسبت به FP32 استفاده می کند و می تواند دقت بالاتری نسبت به INT8 ارائه دهد، اما کندتر است. تبدیل FP16 به ویژه در پردازندههای گرافیکی مدرن مؤثر است و میتوان بدون هیچ فایل کالیبراسیون اضافی از آن استفاده کرد.
trtexec –onnx=model.onnx –saveEngine=model_fp16.engine –explicitBatch –fp16
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
–fp16: تبدیل را با دقت FP16 انجام دهید. این گزینه به سخت افزار (GPU) نیاز دارد که از FP16 پشتیبانی کند.
گزینه ها و تنظیمات اضافی
trtexec گزینه های اضافی دارد که می توان از آنها برای بهینه سازی عملکرد استفاده کرد.
–workspace: حداکثر فضای حافظه مورد استفاده در هنگام ایجاد فایل های موتور را مشخص می کند. برای مثال، اگر –workspace=1024 را مشخص کنید، می توانید از 1 گیگابایت حافظه استفاده کنید.
–verbose: هنگام ایجاد یک موتور و انجام استنتاج برای تسهیل اشکال زدایی، گزارش های دقیق را خروجی می کند.
تست و اعتبار سنجی پس از تبدیل
برای بررسی عملکرد فایل موتور تبدیل شده، می توانید از trtexec برای تست سرعت استنتاج و استفاده از حافظه استفاده کنید.
trtexec –loadEngine=model_int8.engine –verbose
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
دستور بالا با بارگیری فایل model_int8.engine عملکرد را تأیید می کند و گزارش های دقیق را می توان از طریق گزینه –verbose بررسی کرد.
تمام کردن
در این مقاله نحوه تبدیل مدل ONNX به فایل موتور TensorRT با استفاده از trtexec و تنظیمات و گزینه های مورد نیاز در فرآیند تبدیل دقیق FP32، FP16 و INT8 را معرفی کردیم. با استفاده از TensorRT، می توانید یک محیط استنتاج با کارایی بالا بسازید و به توسعه برنامه های بلادرنگ کمک کنید.
وارد شدن
بهینه سازی عملکرد یک عامل مهم در هنگام استقرار مدل های یادگیری عمیق است. TensorRT NVIDIA این بهینهسازیها و صرفهجویی در حافظه را فعال میکند و به ویژه به توسعه برنامههای بلادرنگ از طریق بهبود سرعت استنتاج و استفاده کارآمد از حافظه کمک میکند. در اینجا، ما فرآیند تبدیل مدل ONNX، فرمت استاندارد مدل یادگیری عمیق، به فایل موتور TensorRT را پوشش خواهیم داد.
دلایل زیادی برای تبدیل فایلهای ONNX به موتور TensorRT وجود دارد. اول، عملکرد استنتاج را می توان از طریق فناوری های مختلف بهینه سازی TensorRT (تبدیل دقیق، بهینه سازی حافظه و غیره) به حداکثر رساند. دوم، هنگام توزیع مدلهای تبدیل شده به فایلهای موتور TensorRT، با به حداکثر رساندن منابع سختافزار GPU، میتوان از آنها به سرعت و کارآمد استفاده کرد.
همچنین نحوه تبدیل مدلهای ONNX به دقتهای مختلف (FP32، FP16، INT8) را با استفاده از ابزار خط فرمان TensorRT، trtexec، خلاصه خواهیم کرد.
trtexec معرفی و محل نصب
trtexec یک ابزار خط فرمان ارائه شده توسط TensorRT است که به کاربران اجازه می دهد مدل های ONNX را به راحتی به فایل های موتور TensorRT تبدیل کنند. trtexec نه تنها می تواند فایل های موتور را برای مدل های ONNX ایجاد کند، بلکه می تواند تست های عملکرد استنتاج و بهینه سازی حافظه را نیز انجام دهد. تنظیمات مختلف دقیق و دسته ای را می توان تنظیم کرد و عملکرد را نیز می توان مقایسه کرد.
به طور معمول، trtexec در پوشه /usr/tensorrt/bin/ قرار دارد که مسیری است که TensorRT در آن نصب شده است. اگر مسیر به متغیرهای محیط اضافه نشود، راحت است ~/.bashrc را به صورت زیر تنظیم کنید و امکان اجرای فوری دستور trtexec را در ترمینال فراهم کنید.
export PATH=$PATH:/usr/src/tensorrt/bin
روش اصلی تبدیل و گزینه ها توضیح داده شده است
هنگام تبدیل یک فایل ONNX به یک فایل موتور TensorRT، اساساً به FP32 (32 بیتی ممیز شناور) دقیق تبدیل می شود.
trtexec --onnx=model.onnx --saveEngine=model.engine --explicitBatch
- –onnx: مسیر فایل مدل ONNX را برای تبدیل مشخص می کند. این گزینه مورد نیاز است.
- –saveEngine: مسیر ذخیره فایل موتور TensorRT تبدیل شده را مشخص می کند.
- –explicitBatch: TensorRT را تنظیم می کند تا به صراحت از اندازه دسته استفاده کند.
توضیحات تبدیل و کالیبراسیون دقیق INT8
دقت INT8 در برنامه هایی که نیاز به عملکرد بالا دارند مفید است زیرا به طور قابل توجهی مصرف حافظه و زمان استنتاج را در مقایسه با FP32 کاهش می دهد. با این حال، یک فایل کالیبراسیون برای تبدیل مدل به دقت INT8 مورد نیاز است. فایلهای کالیبراسیون حاوی اطلاعات آماری برای یک مجموعه داده خاص هستند که به TensorRT اجازه میدهد تا دقت مدل را هنگام تغییر از دقت 32 بیتی به 8 بیتی حفظ کند.
اگر فایل کالیبراسیون با نام cal.bin ذخیره شده است، می توانید با دستور زیر یک فایل موتور دقیق INT8 ایجاد کنید.
trtexec --onnx=model.onnx --saveEngine=model_int8.engine --explicitBatch --int8 --calib=cal.bin
- –int8: تبدیل مدل را با استفاده از دقت INT8 مشخص می کند.
- –calib: فایل کالیبراسیون مورد نیاز برای تبدیل INT8 را مشخص می کند. بدون فایل کالیبراسیون، ممکن است دقت کاهش یابد.
تبدیل FP16 و گزینه های اضافی توضیح داده شده است
دقت FP16 (میز شناور 16 بیتی) از حافظه کمتری نسبت به FP32 استفاده می کند و می تواند دقت بالاتری نسبت به INT8 ارائه دهد، اما کندتر است. تبدیل FP16 به ویژه در پردازندههای گرافیکی مدرن مؤثر است و میتوان بدون هیچ فایل کالیبراسیون اضافی از آن استفاده کرد.
trtexec --onnx=model.onnx --saveEngine=model_fp16.engine --explicitBatch --fp16
- –fp16: تبدیل را با دقت FP16 انجام دهید. این گزینه به سخت افزار (GPU) نیاز دارد که از FP16 پشتیبانی کند.
گزینه ها و تنظیمات اضافی
trtexec گزینه های اضافی دارد که می توان از آنها برای بهینه سازی عملکرد استفاده کرد.
- –workspace: حداکثر فضای حافظه مورد استفاده در هنگام ایجاد فایل های موتور را مشخص می کند. برای مثال، اگر –workspace=1024 را مشخص کنید، می توانید از 1 گیگابایت حافظه استفاده کنید.
- –verbose: هنگام ایجاد یک موتور و انجام استنتاج برای تسهیل اشکال زدایی، گزارش های دقیق را خروجی می کند.
تست و اعتبار سنجی پس از تبدیل
برای بررسی عملکرد فایل موتور تبدیل شده، می توانید از trtexec برای تست سرعت استنتاج و استفاده از حافظه استفاده کنید.
trtexec --loadEngine=model_int8.engine --verbose
دستور بالا با بارگیری فایل model_int8.engine عملکرد را تأیید می کند و گزارش های دقیق را می توان از طریق گزینه –verbose بررسی کرد.
تمام کردن
در این مقاله نحوه تبدیل مدل ONNX به فایل موتور TensorRT با استفاده از trtexec و تنظیمات و گزینه های مورد نیاز در فرآیند تبدیل دقیق FP32، FP16 و INT8 را معرفی کردیم. با استفاده از TensorRT، می توانید یک محیط استنتاج با کارایی بالا بسازید و به توسعه برنامه های بلادرنگ کمک کنید.