성능 권장사항

모바일 및 삽입된 기기는 컴퓨팅 리소스가 제한되어 있으므로 애플리케이션 리소스를 효율적으로 유지하는 것이 중요합니다. TensorFlow Lite 모델 성능을 개선하는 데 사용할 수 있는 권장사항과 전략 목록을 정리했습니다.

작업에 가장 적합한 모델 선택

작업에 따라 모델 복잡성과 크기 사이에서 절충해야 합니다. 작업에 높은 정확성이 필요한 경우 크고 복잡한 모델이 필요할 수 있습니다. 정밀도가 덜 필요한 작업의 경우 더 작은 모델을 사용하는 것이 좋습니다. 더 작은 모델은 디스크 공간과 메모리를 덜 사용할 뿐만 아니라 일반적으로 더 빠르고 에너지 효율적이기 때문입니다. 예를 들어 아래 그래프는 몇 가지 일반적인 이미지 분류 모델의 정확도와 지연 시간의 균형을 보여줍니다.

모델 크기 대 정확도 그래프

정확도 대 지연 시간 그래프

휴대기기에 최적화된 모델의 한 예는 모바일 비전 애플리케이션에 최적화된 MobileNets입니다. Kaggle 모델에는 휴대기기 및 에지 기기에 맞게 특별히 최적화된 여러 모델이 나열되어 있습니다.

전이 학습을 사용하여 자체 데이터 세트에서 나열된 모델을 다시 학습시킬 수 있습니다.

모델 프로파일링

작업에 적합한 후보 모델을 선택한 후에는 모델을 프로파일링하고 벤치마킹하는 것이 좋습니다. LiteRT 벤치마킹 도구에는 연산자별 프로파일링 통계를 보여주는 프로파일러가 내장되어 있습니다. 이를 통해 성능 병목 현상과 계산 시간을 지배하는 연산자를 파악할 수 있습니다.

LiteRT 추적을 사용하여 표준 Android 시스템 추적을 통해 Android 애플리케이션에서 모델을 프로파일링하고 GUI 기반 프로파일링 도구를 사용하여 시간별로 연산자 호출을 시각화할 수도 있습니다.

그래프에서 연산자 프로파일링 및 최적화

특정 연산자가 모델에 자주 표시되고 프로파일링을 기반으로 해당 연산자가 가장 많은 시간을 소비하는 것으로 확인되면 해당 연산자를 최적화하는 방법을 살펴볼 수 있습니다. TensorFlow Lite에는 대부분의 연산자에 최적화된 버전이 있으므로 이러한 시나리오는 드물어야 합니다. 하지만 연산자가 실행되는 제약 조건을 알고 있다면 더 빠른 버전의 맞춤 연산을 작성할 수 있습니다. 맞춤 연산자 가이드를 확인하세요.

모델 최적화

모델 최적화는 모바일 기기에 배포할 수 있도록 일반적으로 더 빠르고 에너지 효율성이 높은 더 작은 모델을 만드는 것을 목표로 합니다. LiteRT는 양자화와 같은 여러 최적화 기법을 지원합니다.

자세한 내용은 모델 최적화 문서를 참고하세요.

스레드 수 조정

LiteRT는 여러 연산자에 대해 멀티 스레드 커널을 지원합니다. 스레드 수를 늘리고 연산자 실행 속도를 높일 수 있습니다. 하지만 스레드 수를 늘리면 모델에서 더 많은 리소스와 전력을 사용합니다.

일부 애플리케이션의 경우 에너지 효율보다 지연 시간이 더 중요할 수 있습니다. 인터프리터 스레드 수를 설정하여 스레드 수를 늘릴 수 있습니다. 하지만 다중 스레드 실행은 동시에 실행되는 다른 항목에 따라 성능 변동이 증가하는 비용이 발생합니다. 특히 모바일 앱의 경우에 그렇습니다. 예를 들어 격리된 테스트에서는 단일 스레드에 비해 2배의 속도 향상을 보일 수 있지만 다른 앱이 동시에 실행되면 단일 스레드보다 성능이 저하될 수 있습니다.

중복 사본 삭제

애플리케이션이 신중하게 설계되지 않으면 모델에 입력을 제공하고 모델에서 출력을 읽을 때 중복된 사본이 있을 수 있습니다. 중복된 사본은 삭제하세요. Java와 같은 상위 수준 API를 사용하는 경우 성능 주의사항에 관한 문서를 주의 깊게 확인하세요. 예를 들어 ByteBuffers입력으로 사용되면 Java API가 훨씬 빠릅니다.

플랫폼별 도구로 애플리케이션 프로파일링

Android 프로파일러Instruments와 같은 플랫폼별 도구는 앱을 디버깅하는 데 사용할 수 있는 풍부한 프로파일링 정보를 제공합니다. 모델에 성능 버그가 있는 것이 아니라 모델과 상호작용하는 애플리케이션 코드에 성능 버그가 있는 경우도 있습니다. 플랫폼별 프로파일링 도구와 플랫폼의 권장사항을 숙지해야 합니다.

모델이 기기에서 사용할 수 있는 하드웨어 가속기를 사용하는 것이 좋은지 평가

LiteRT는 GPU, DSP, 신경 가속기와 같은 더 빠른 하드웨어로 모델을 가속화하는 새로운 방법을 추가했습니다. 일반적으로 이러한 액셀러레이터는 인터프리터 실행의 일부를 인계하는 delegate 하위 모듈을 통해 노출됩니다. LiteRT는 다음을 통해 대리자를 사용할 수 있습니다.

  • GPU 위임은 각각 OpenGL/OpenCL 및 Metal을 사용하여 Android와 iOS에서 사용할 수 있습니다. 사용해 보려면 GPU 대리자를 참고하세요.
  • 표준이 아닌 하드웨어에 액세스할 수 있는 경우 자체 위임을 만들 수 있습니다. 자세한 내용은 LiteRT 대리자를 참고하세요.

일부 액셀러레이터는 다양한 유형의 모델에 더 적합합니다. 일부 위임자는 부동 소수점 모델 또는 특정 방식으로 최적화된 모델만 지원합니다. 각 대리자를 벤치마킹하여 애플리케이션에 적합한지 확인하는 것이 중요합니다. 예를 들어 모델이 매우 작은 경우 모델을 GPU에 위임하는 것이 가치가 없을 수 있습니다. 반대로 가속기는 산술 강도가 높은 대규모 모델에 적합합니다.