Google I/O는 끝입니다! TensorFlow 세션 확인하기 세션 보기

Tensorflow Lite Core ML 대리자

TensorFlow Lite Core ML 대리자를 사용하면 Core ML 프레임워크에서 TensorFlow Lite 모델을 실행할 수 있으므로 iOS 기기에서 모델 추론이 더 빨라집니다.

참고: Core ML 대리자는 Core ML 버전 2 이상을 지원합니다.

지원되는 iOS 버전 및 기기

  • iOS 12 and later. In the older iOS versions, Core ML delegate will automatically fallback to CPU.
  • By default, Core ML delegate will only be enabled on devices with A12 SoC and later (iPhone Xs and later) to use Neural Engine for faster inference. If you want to use Core ML delegate also on the older devices, please see best practices

지원되는 모델

Core ML 대리자는 현재 float(FP32 및 FP16) 모델을 지원합니다.

Trying the Core ML delegate on your own model

The Core ML delegate is already included in nightly release of TensorFlow lite CocoaPods. To use Core ML delegate, change your TensorFlow lite pod to include subspec CoreML in your Podfile.

target 'YourProjectName'
  pod 'TensorFlowLiteSwift/CoreML', '~> 2.4.0'  # Or TensorFlowLiteObjC/CoreML

또는

# Particularily useful when you also want to include 'Metal' subspec.
target 'YourProjectName'
  pod 'TensorFlowLiteSwift', '~> 2.4.0', :subspecs => ['CoreML']

Swift

    let coreMLDelegate = CoreMLDelegate()
    var interpreter: Interpreter
</div>
<pre data-md-type="block_code" data-md-language=""><code>GL_CODE_5</code>

모범 사례

Neural Engine이 없는 기기에서 Core ML 대리자 사용하기

By default, Core ML delegate will only be created if the device has Neural Engine, and will return null if the delegate is not created. If you want to run Core ML delegate on other environments (for example, simulator), pass .all as an option while creating delegate in Swift. On C++ (and Objective-C), you can pass TfLiteCoreMlDelegateAllDevices. Following example shows how to do this:

Swift

var options = CoreMLDelegate.Options()
options.enabledDevices = .all
let coreMLDelegate = CoreMLDelegate(options: options)!
let interpreter = try Interpreter(modelPath: modelPath,
                                  delegates: [coreMLDelegate])

Objective-C

    TFLCoreMLDelegateOptions* coreMLOptions = [[TFLCoreMLDelegateOptions alloc] init];
    coreMLOptions.enabledDevices = TFLCoreMLDelegateEnabledDevicesAll;
    TFLCoreMLDelegate* coreMLDelegate = [[TFLCoreMLDelegate alloc]
                                          initWithOptions:coreMLOptions];
</div>
<pre data-md-type="block_code" data-md-language=""><code>GL_CODE_9</code>

Metal(GPU) 대리자를 폴백으로 사용하기

Core ML 대리자가 생성되지 않은 경우에도 여전히 Metal 대리자를 사용하여 성능 이점을 얻을 수 있습니다. 다음 예에서는 이를 수행하는 방법을 보여줍니다.

Swift

    var delegate = CoreMLDelegate()
    if delegate == nil {
      delegate = MetalDelegate()  // Add Metal delegate options if necessary.
    }
</div>
<pre data-md-type="block_code" data-md-language=""><code>GL_CODE_10</code>

The delegate creation logic reads device's machine id (e.g. iPhone11,1) to determine its Neural Engine availability. See the code for more detail. Alternatively, you can implement your own set of denylist devices using other libraries such as DeviceKit.

이전 Core ML 버전 사용하기

iOS 13은 Core ML 3을 지원하지만 Core ML 2 모델 사양으로 변환하면 모델이 더 잘 동작할 수 있습니다. 대상 변환 버전은 기본적으로 최신 버전으로 설정되어 있지만 대리자 옵션에서 coreMLVersion(Swift에서는 C API의 coreml_version)을 이전 버전으로 설정하여 변경할 수 있습니다.

지원되는 연산

Core ML 대리자는 다음 연산을 지원합니다.

  • Add

    • 특정 형상만 브로드캐스팅할 수 있습니다. Core ML 텐서 레이아웃에서 다음 텐서 형상을 브로드캐스팅할 수 있습니다. [B, C, H, W], [B, C, 1, 1], [B, 1, H, W], [B, 1, 1, 1] .
  • AveragePool2D
  • Concat

    • 채널 축을 따라 연결해야 합니다.
  • Conv2D

    • 가중치와 바이어스는 일정해야 합니다.
  • DepthwiseConv2D

    • 가중치와 바이어스는 일정해야 합니다.
  • FullyConnected(일명 Dense 또는 InnerProduct)

    • 가중치와 바이어스(있는 경우)는 일정해야 합니다.
    • 단일 배치 케이스만 지원합니다. 입력 차원은 마지막 차원을 제외하고 1이어야 합니다.
  • Hardswish
  • Logistic(일명 Sigmoid)
  • MaxPool2D
  • MirrorPad

    • REFLECT 모드의 4D 입력만 지원됩니다. 패딩은 일정해야 하며 H 및 W 차원에만 허용됩니다.
  • Mul

    • 특정 형상만 브로드캐스팅할 수 있습니다. Core ML 텐서 레이아웃에서 다음 텐서 형상을 브로드캐스팅할 수 있습니다. [B, C, H, W], [B, C, 1, 1], [B, 1, H, W], [B, 1, 1, 1].
  • Pad 및 PadV2

    • 4D 입력만 지원됩니다. 패딩은 일정해야 하며 H 및 W 차원에만 허용됩니다.
  • Relu
  • ReluN1To1
  • Relu6
  • Reshape

    • 대상 Core ML 버전이 2인 경우에만 지원되고 Core ML 3을 대상으로 하는 경우 지원되지 않습니다.
  • ResizeBilinear
  • SoftMax
  • Tanh
  • TransposeConv

    • 가중치는 일정해야 합니다.

피드백

문제가 발생한 경우 재현하는 데 필요한 모든 세부 정보가 포함된 GitHub 문제를 생성하십시오.

자주하는 질문

  • 그래프에 지원되지 않는 연산이 포함된 경우 CoreML 대리자가 CPU로 폴백을 지원합니까?

  • CoreML 대리자는 iOS 시뮬레이터에서 동작합니까?

    • 예. 라이브러리에는 x86 및 x86_64 대상이 포함되어 있으므로 시뮬레이터에서 실행할 수 있지만 CPU에 비해 성능이 향상되지는 않습니다.
  • TensorFlow Lite 및 CoreML 대리자는 MacOS를 지원하나요?

    • TensorFlow Lite는 iOS에서만 테스트되고 MacOS에서는 테스트되지 않습니다.
  • 사용자 정의 TF Lite 연산이 지원되나요?

    • No, CoreML delegate does not support custom ops and they will fallback to CPU.

API