TensorFlow Lite와 TensorFlow 연산자 호환성

모델에서 사용하는 머신러닝 (ML) 연산자는 TensorFlow 모델을 TensorFlow Lite 형식으로 변환하는 프로세스에 영향을 줄 수 있습니다. TensorFlow Lite 변환기는 일반 추론 모델에 사용되는 제한된 수의 TensorFlow 작업을 지원하므로 일부 모델만 직접 변환할 수 없습니다. 변환기 도구를 사용하면 추가 연산자를 포함할 수 있지만 이 방법으로 모델을 변환하려면 모델을 실행하는 데 사용하는 TensorFlow Lite 런타임 환경도 수정해야 하므로 Google Play 서비스와 같은 표준 런타임 배포 옵션을 사용하는 기능이 제한될 수 있습니다.

TensorFlow Lite 변환기는 직접 지원되는 연산자와 호환되도록 모델 구조를 분석하고 최적화를 적용하도록 설계되었습니다. 예를 들어 모델의 ML 연산자에 따라 변환기는 TensorFlow Lite 연산자에 매핑하기 위해 이러한 연산자를 삭제하거나 융합할 수 있습니다.

지원되는 작업이어도 성능상의 이유로 특정 사용 패턴이 예상되는 경우가 있습니다. TensorFlow Lite와 함께 사용할 수 있는 TensorFlow 모델을 빌드하는 방법을 이해하는 가장 좋은 방법은 작업이 변환 및 최적화되는 방식과 이 프로세스에 따른 제한사항을 신중하게 고려하는 것입니다.

지원되는 연산자

TensorFlow Lite 기본 제공 연산자는 TensorFlow Core 라이브러리에 포함된 연산자의 하위 집합입니다. TensorFlow 모델은 복합 연산자 또는 사용자가 정의한 새 연산자 형태로 커스텀 연산자를 포함할 수도 있습니다. 아래 다이어그램은 이러한 연산자 간의 관계를 보여줍니다.

TensorFlow 연산자

변환 프로세스에서는 이러한 ML 모델 연산자 범위 중 3가지 유형의 모델을 지원합니다.

  1. TensorFlow Lite 기본 제공 연산자만 있는 모델입니다. (권장)
  2. 기본 제공 연산자와 일부 TensorFlow Core 연산자를 포함하는 모델
  3. 기본 제공 연산자, TensorFlow Core 연산자 또는 커스텀 연산자가 포함된 모델

TensorFlow Lite에서 기본적으로 지원하는 작업만 모델에 포함된 경우 변환하기 위해 추가 플래그가 필요하지 않습니다. 이 유형의 모델은 원활하게 변환되고 기본 TensorFlow Lite 런타임을 사용하여 최적화 및 실행하기가 더 쉬우므로 이 경로를 사용하는 것이 좋습니다. 또한 Google Play 서비스와 같은 더 많은 모델 배포 옵션도 있습니다. TensorFlow Lite 변환기 가이드를 시작할 수 있습니다. 기본 제공 연산자 목록은 TensorFlow Lite 작업 페이지를 참조하세요.

핵심 라이브러리에서 특정 TensorFlow 작업을 포함해야 하는 경우 변환 시 이를 지정하고 런타임에 해당 작업이 포함되도록 해야 합니다. 자세한 단계는 TensorFlow 연산자 선택 주제를 참조하세요.

가능하면 변환된 모델에 커스텀 연산자를 포함하는 마지막 옵션을 사용하지 마세요. 커스텀 연산자는 여러 기본 TensorFlow 핵심 연산자를 결합하거나 완전히 새로운 연산자를 정의하여 만든 연산자입니다. 커스텀 연산자가 변환되면 기본 제공되는 TensorFlow Lite 라이브러리 외부에서 종속 항목을 발생시켜 전체 모델의 크기를 늘릴 수 있습니다. 맞춤 오퍼레이션이 휴대기기 또는 기기 배포를 위해 특별히 만들어지지 않은 경우 리소스가 제한된 기기에 배포하면 서버 환경에 비해 성능이 저하될 수 있습니다. 마지막으로 특정 TensorFlow 핵심 연산자를 포함하는 것과 마찬가지로 커스텀 연산자를 사용하려면 Google Play 서비스와 같은 표준 런타임 서비스를 활용하지 못하도록 제한하는 모델 런타임 환경을 수정해야 합니다.

지원 유형

대부분의 TensorFlow Lite 작업은 부동 소수점 (float32) 추론과 양자화 (uint8, int8) 추론을 모두 타겟팅하지만 아직 tf.float16 및 문자열과 같은 다른 유형에는 많은 연산이 포함되지 않습니다.

다른 버전의 연산을 사용하는 것 외에도 부동 소수점 모델과 양자화 모델 간의 또 다른 차이점은 변환 방식입니다. 양자화 변환에는 텐서에 대한 동적 범위 정보가 필요합니다. 이를 위해서는 모델 학습, 보정 데이터 세트를 통해 범위 정보 가져오기 또는 '즉시' 범위 추정 수행 중에 '모조 양자화'가 필요합니다. 자세한 내용은 양자화를 참고하세요.

간단한 전환, 지속적인 접기 및 융합

여러 TensorFlow 작업은 TensorFlow Lite에서 처리할 수 있으며 이에 직접 상응하는 작업이 없더라도 처리할 수 있습니다. 단순히 그래프에서 삭제 (tf.identity)하거나 텐서로 대체하거나(tf.placeholder) 더 복잡한 작업 (tf.nn.bias_add)으로 합성할 수 있는 작업이 여기에 해당합니다. 지원되는 작업 중 일부는 이러한 프로세스 중 하나를 통해 삭제될 수도 있습니다.

다음은 일반적으로 그래프에서 삭제되는 TensorFlow 작업의 일부 목록입니다.

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

실험용 작업

다음과 같은 TensorFlow Lite 작업이 있지만 커스텀 모델에는 사용할 수 없습니다.

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF