NNAPI 드라이버 구현 권장사항

이 페이지에서는 앱 개발자가 Neural Networks API(NNAPI)를 광범위하게 채택할 수 있도록 NNAPI 드라이버를 구현하는 방법에 관한 권장사항을 설명합니다.

시작 시간을 짧게 유지하기

처음 사용 시 드라이버가 모델의 가중치를 변환하는 경우 드라이버가 컴파일 캐싱을 지원하는지 확인합니다. 이를 지원하면 앱이 시작할 때 컴파일에 사용되는 시간이 줄어듭니다. 이 사항이 중요한 이유는 시작 시간이 너무 긴 경우 앱에서 하드웨어 가속을 사용하지 않을 수 있기 때문입니다. 예를 들어 일부 앱의 가중치가 100MB를 초과하는 경우 앱이 실행될 때마다 가중치를 변환하는 것은 낭비입니다.

최소 지연 시간 줄이기

모델에서 하드웨어 가속을 사용하도록 하려면 드라이버의 최소 지연 시간을 줄이는 것이 중요합니다. 대다수 앱이 여러 번 실행되는 소형 모델을 사용합니다. 워크로드 실행에 필요한 최소 지연 시간이 너무 길다면(예: 수 밀리초) 모델은 하드웨어 가속을 사용하는 대신 CPU에서 워크로드를 실행할 수 있습니다. 이 경우 소요 시간이 1밀리초 또는 2밀리초에 불과합니다. 비용이 많이 드는 스레드 동기화에 주의하세요.

NN HAL SchedTune 그룹 사용하기

Android 11 이상부터 AOSP에는 프로세스 간 NN HAL 프로세스에서 빅 코어를 사용할 수 있는 전용 NN HAL SchedTune 그룹(사전 정의된 top-app cgroup 내의 동일 프로세스 구현과 유사함)이 포함됩니다. 이 SchedTune 그룹을 사용하면 특히 소형 모델의 드라이버 오버헤드가 줄어듭니다.

SchedTune 그룹을 사용하려면 NN HAL 프로세스의 init.rc 파일에 다음 행을 추가하세요.

writepid /dev/stune/nnapi-hal/tasks