با شروع از Android 11، NNAPI شامل دو عملیات جریان کنترلی، IF
و WHILE
است که مدلهای دیگر را به عنوان آرگومان میگیرد و آنها را به صورت شرطی ( IF
) یا مکرر ( WHILE
) اجرا میکند. این امکان ساخت مدلهایی را فراهم میکند که عملیاتهای مختلف را بر اساس مقادیر ورودی اجرا میکنند یا عملیاتها را چندین بار بدون بازکردن اجرا میکنند. این برای موارد استفاده مانند RNN پویا و seq2seq مهم است.
در NN HAL 1.3، مدل چندین زیرگراف، از جمله زیرگراف اصلی که برای مشخص کردن ورودیها و خروجیهای یک اجرا استفاده میشود، در خود جای داده است. یک زیرگراف می تواند با استفاده از عملوندهایی از نوع SUBGRAPH
به زیرگراف های دیگر ارجاع دهد. چارچوب تنها در صورتی میتواند عملیات جریان کنترلی را به یک شتابدهنده ارسال کند که شتابدهنده از تمام عملیاتهای موجود در همه زیرگرافهای ارجاعشده توسط آن عملیات جریان کنترلی پشتیبانی کند.
رابط های HAL
در NN HAL 1.3، تعاریف مربوط به جریان کنترلی در types.hal
هستند.
-
IF
وWHILE
نوع عملیات است - نوع عملوند
SUBGRAPH
و طول عمر عملوندSUBGRAPH
مربوطه - ساختار
Model
که شامل زیرگراف اصلی و فهرستی از زیرگراف های ارجاع شده است - ساختار
Capabilities
که حاویifPerformance
وwhilePerformance
است
IDevice.hal
حاوی IDevice
است که متد آن getSupportedOperations_1_3()
باید با IF
و WHILE
متفاوت از سایر عملیات رفتار کند.
IPreparedModel.hal
حاوی IPreparedModel
است که متدهای آن execute_1_3()
, executeSynchronously_1_3()
و executeFenced()
یک آرگومان اختیاری loopTimeoutDuration
می گیرند.
پیاده سازی درایور
برای اجرای عملکرد نمونه ، به CpuExecutor::executeIfOperation
و CpuExecutor::executeWhileOperation
مراجعه کنید. برای منطق اعتبار سنجی نمونه ، به validateIfOperation()
و validateWhileOperation()
مراجعه کنید.
توجه داشته باشید که پشتیبانی از عملیات محاسباتی و مقایسه در عملوندهای TENSOR_INT32
شکل 1
بسیار مهم است، زیرا می توان از آنها به عنوان شمارنده حلقه استفاده کرد. به طور مشابه، عملیات تولید عملوندهای TENSOR_BOOL8
شکل 1
باید با شرایط IF
و WHILE
استفاده شوند.
زمان اجرای حلقه WHILE به پایان می رسد
برای جلوگیری IPreparedModel::executeSynchronously_1_3()
حلقههای بینهایت، اگر یک حلقه WHILE
بیشتر از مقدار loopTimeoutDuration
طول بکشد IPreparedModel::executeFenced()
اجرا باید متوقف شود IPreparedModel::execute_1_3()
در صورت حذف).
اعتبار سنجی
تست های جریان کنترل بخشی از مجموعه تست های CTS و VTS هستند. برای اطلاعات بیشتر، اعتبارسنجی را ببینید.
، با شروع از Android 11، NNAPI شامل دو عملیات جریان کنترلی، IF
و WHILE
است که مدلهای دیگر را به عنوان آرگومان میگیرد و آنها را به صورت شرطی ( IF
) یا مکرر ( WHILE
) اجرا میکند. این امکان ساخت مدلهایی را فراهم میکند که عملیاتهای مختلف را بر اساس مقادیر ورودی اجرا میکنند یا عملیاتها را چندین بار بدون بازکردن اجرا میکنند. این برای موارد استفاده مانند RNN پویا و seq2seq مهم است.
در NN HAL 1.3، مدل چندین زیرگراف، از جمله زیرگراف اصلی که برای مشخص کردن ورودیها و خروجیهای یک اجرا استفاده میشود، در خود جای داده است. یک زیرگراف می تواند با استفاده از عملوندهایی از نوع SUBGRAPH
به زیرگراف های دیگر ارجاع دهد. چارچوب تنها در صورتی میتواند عملیات جریان کنترلی را به یک شتابدهنده ارسال کند که شتابدهنده از تمام عملیاتهای موجود در همه زیرگرافهای ارجاعشده توسط آن عملیات جریان کنترلی پشتیبانی کند.
رابط های HAL
در NN HAL 1.3، تعاریف مربوط به جریان کنترلی در types.hal
هستند.
- انواع عملیات
IF
وWHILE
- نوع عملوند
SUBGRAPH
و طول عمر عملوندSUBGRAPH
مربوطه - ساختار
Model
که شامل زیرگراف اصلی و فهرستی از زیرگراف های ارجاع شده است - ساختار
Capabilities
که حاویifPerformance
وwhilePerformance
است
IDevice.hal
حاوی IDevice
است که متد آن getSupportedOperations_1_3()
باید با IF
و WHILE
متفاوت از سایر عملیات رفتار کند.
IPreparedModel.hal
حاوی IPreparedModel
است که متدهای آن execute_1_3()
, executeSynchronously_1_3()
و executeFenced()
یک آرگومان اختیاری loopTimeoutDuration
می گیرند.
پیاده سازی درایور
برای اجرای نمونه عملیات، CpuExecutor::executeIfOperation
و CpuExecutor::executeWhileOperation
ببینید. برای نمونه منطق اعتبار سنجی عملیات، به validateIfOperation()
و validateWhileOperation()
مراجعه کنید.
توجه داشته باشید که پشتیبانی از عملیات محاسباتی و مقایسه در عملوندهای TENSOR_INT32
شکل 1
بسیار مهم است، زیرا می توان از آنها به عنوان شمارنده حلقه استفاده کرد. به طور مشابه، عملیات تولید عملوندهای TENSOR_BOOL8
شکل 1
باید با شرایط IF
و WHILE
استفاده شوند.
زمان اجرای حلقه WHILE به پایان می رسد
برای جلوگیری IPreparedModel::executeSynchronously_1_3()
حلقههای بینهایت، اگر یک حلقه WHILE
بیشتر از مقدار loopTimeoutDuration
طول بکشد IPreparedModel::executeFenced()
اجرا باید متوقف شود IPreparedModel::execute_1_3()
در صورت حذف).
اعتبار سنجی
تست های جریان کنترل بخشی از مجموعه تست های CTS و VTS هستند. برای اطلاعات بیشتر، اعتبارسنجی را ببینید.