بهترین شیوه های پیاده سازی درایور NNAPI

این صفحه بهترین روش‌ها را برای پیاده‌سازی درایورهای API شبکه‌های عصبی (NNAPI) توضیح می‌دهد تا امکان پذیرش گسترده NNAPI توسط توسعه‌دهندگان برنامه را فراهم کند.

زمان راه اندازی را کوتاه نگه دارید

اگر درایور شما وزن‌های یک مدل را در اولین استفاده تغییر می‌دهد، مطمئن شوید که درایور از حافظه پنهان کامپایل پشتیبانی می‌کند، که زمان استفاده از کامپایل را هنگام شروع برنامه کاهش می‌دهد. این مهم است زیرا اگر زمان راه‌اندازی بیش از حد طولانی باشد، ممکن است برنامه‌ها از شتاب سخت‌افزاری استفاده نکنند. به عنوان مثال، برخی از برنامه‌ها بیش از 100 مگابایت وزن دارند و تغییر آن در هر بار راه‌اندازی برنامه بیهوده است.

حداقل تأخیر را کاهش دهید

برای اطمینان از اینکه مدل ها از شتاب سخت افزاری استفاده می کنند، مهم است که حداقل تاخیر در درایورها را کاهش دهید. بسیاری از برنامه‌ها از مدل‌های کوچکی استفاده می‌کنند که چندین بار اجرا می‌شوند و اگر حداقل تأخیر برای اجرای یک بار کاری خیلی زیاد باشد، مثلاً چند میلی‌ثانیه، مدل‌ها ممکن است به جای استفاده از سخت‌افزار، بار کاری را روی CPU اجرا کنند که فقط یک یا دو میلی‌ثانیه طول می‌کشد. شتاب ها مراقب همگام سازی نخ های پرهزینه باشید.

از گروه NN HAL SchedTune استفاده کنید

از Android 11 یا بالاتر، AOSP شامل یک گروه اختصاصی NN HAL SchedTune است که به فرآیندهای NN HAL بین پردازشی اجازه می‌دهد از هسته‌های بزرگ استفاده کنند، مشابه اجرای همان فرآیند در cgroup top-app از پیش تعریف‌شده. استفاده از این گروه SchedTune باعث کاهش هزینه های اضافی درایور، به خصوص برای مدل های کوچک می شود.

برای استفاده از گروه SchedTune، خط زیر را به فایل init.rc فرآیند NN HAL اضافه کنید:

writepid /dev/stune/nnapi-hal/tasks