iOS용 LiteRT 빌드

이 문서에서는 LiteRT iOS 라이브러리를 직접 빌드하는 방법을 설명합니다. 일반적으로 LiteRT iOS 라이브러리를 로컬에서 빌드할 필요는 없습니다. 만약 가장 쉬운 방법은 미리 빌드된 안정화 또는 Nightly를 사용하는 것입니다. 지원합니다. iOS를 참조하세요. iOS에서 이 기능을 사용하는 방법에 대한 자세한 내용은 빠른 시작을 참조하세요. 살펴보겠습니다

로컬에서 빌드

경우에 따라, 예를 들어 LiteRT 로컬 변경사항을 적용하고 이를 테스트하려는 경우 제공한 것보다 정적 프레임워크를 사용하고 싶은 경우 있습니다. LiteRT용 범용 iOS 프레임워크를 로컬에서 만들려면 macOS 머신에서 Bazel을 사용하여 빌드해야 합니다.

Xcode 설치

Xcode 8 이상과 도구를 아직 설치하지 않은 경우 설치해야 합니다. xcode-select 사용:

xcode-select --install

새로 설치하는 경우 모든 앱에 대해 사용자에게 다음 명령어를 사용하세요

sudo xcodebuild -license accept

Bazel 설치

Bazel은 TensorFlow의 기본 빌드 시스템입니다. 다음에 따라 Bazel을 설치합니다. Bazel 웹사이트의 안내를 따르세요. 올바른 이메일 주소 버전 _TF_MIN_BAZEL_VERSION~_TF_MAX_BAZEL_VERSION tensorflow 저장소의 루트에 있는 configure.py 파일

WORKSPACE 및 .bazelrc 구성

루트 TensorFlow 결제 디렉터리에서 ./configure 스크립트를 실행합니다. '예'라고 응답 iOS로 TensorFlow를 빌드할지 묻는 스크립트가 표시될 때 도움이 될 수 있습니다

Bazel이 iOS 지원으로 올바르게 구성되면 TensorFlowLiteC 프레임워크를 실행할 수 있습니다.

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

이 명령어는 다음 위치에 TensorFlowLiteC_framework.zip 파일을 생성합니다. TensorFlow 루트 디렉터리에 있는 bazel-bin/tensorflow/lite/ios/ 디렉터리 생성된 프레임워크에는 기본적으로 'fat' 바이너리(armv7 포함), arm64 및 x86_64 (i386은 제외) 빌드 플래그의 전체 목록 보기 --config=ios_fat를 지정하는 경우 .bazelrc 파일.

TensorFlowLiteC 정적 프레임워크 빌드

기본적으로 Google에서는 Cocoapods를 통해서만 동적 프레임워크를 배포합니다. 원하는 경우 대신 정적 프레임워크를 사용하려면 TensorFlowLiteC 정적 프레임워크를 빌드할 수 있습니다. 다음 명령어로 프레임워크를 실행합니다.

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_static_framework

이 명령어는 TensorFlowLiteC_static_framework.zip라는 파일을 생성합니다. TensorFlow 루트의 bazel-bin/tensorflow/lite/ios/ 디렉터리 아래 디렉터리 이 정적 프레임워크는 있습니다.

TFLite 프레임워크를 선택적으로 빌드

선택적 모델을 사용하여 모델 집합만을 대상으로 하는 더 작은 프레임워크를 빌드할 수 있습니다. 빌드는 모델 세트에서 사용되지 않는 작업을 건너뛰고 특정 모델 세트를 실행하는 데 필요한 연산 커널에 해당합니다. 명령어는 다음과 같습니다.

bash tensorflow/lite/ios/build_frameworks.sh \
  --input_models=model1.tflite,model2.tflite \
  --target_archs=x86_64,armv7,arm64

위의 명령어는 정적 프레임워크를 생성하며 TensorFlow용 bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip 라이트 기본 제공 및 커스텀 작업 선택적으로 정적 프레임워크를 생성하여 조건: bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip 모델에 TensorFlow 선택 작업이 포함됩니다. --target_archs 플래그는 배포 아키텍처를 지정하는 데 사용할 수 있습니다.

자체 애플리케이션에서 사용

CocoaPods 개발자

LiteRT용 CocoaPods에는 세 가지가 있습니다.

  • TensorFlowLiteSwift: LiteRT용 Swift API를 제공합니다.
  • TensorFlowLiteObjC: LiteRT용 Objective-C API를 제공합니다.
  • TensorFlowLiteC: LiteRT 코어가 삽입되는 공통 기본 포드입니다. 위의 두 포드에서 사용하는 기본 C API를 노출합니다. 용도가 아님 사용자가 직접 사용할 수 있습니다.

개발자는 TensorFlowLiteSwift 또는 TensorFlowLiteObjC 포드는 앱이 작성된 언어에 따라 다르지만 둘 다 아닙니다 LiteRT의 로컬 빌드를 사용하는 정확한 단계는 다릅니다. 정확히 어떤 부분을 빌드할지에 따라 다릅니다.

로컬 Swift 또는 Objective-C API 사용

CocoaPods를 사용하고 있고 코드의 일부 로컬 변경사항만 테스트하려는 경우 LiteRT의 Swift API 또는 Objective-C API 다음 단계를 따르세요.

  1. tensorflow 결제에서 Swift 또는 Objective-C API를 변경합니다.

  2. TensorFlowLite(Swift|ObjC).podspec 파일을 열고 다음 줄을 업데이트합니다.

    s.dependency 'TensorFlowLiteC', "#{s.version}" 설정값:

    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly" 이는 Swift 또는 Objective-C API를 빌드하고 있는지 확인하기 위함입니다. TensorFlowLiteC API의 최신 야간 버전 기준 (태평양 표준시 기준 매일 밤 1~4시에 빌드됨) 버전의 로컬 tensorflow 결제와 비교했을 때 오래되었을 수 있습니다. 아니면 자체 버전의 콘텐츠를 게시하도록 선택할 수도 있습니다. TensorFlowLiteC하고 해당 버전을 사용합니다 (로컬 LiteRT 사용 참조). 코어 섹션 참조).

  3. iOS 프로젝트의 Podfile에서 다음과 같이 종속 항목을 변경합니다. tensorflow 루트 디렉터리의 로컬 경로를 가리킵니다.
    Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Objective-C:
    <ph type="x-smartling-placeholder">pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'</ph>

  4. iOS 프로젝트 루트 디렉터리에서 포드 설치를 업데이트합니다.
    $ pod update

  5. 생성된 작업공간 (<project>.xcworkspace)을 다시 열고 사용할 수 있습니다.

로컬 LiteRT Core 사용

비공개 CocoaPods 사양 저장소를 설정하고 TensorFlowLiteC 프레임워크를 비공개 저장소에 추가합니다. 이 podspec을 파일을 열고 몇 가지 값을 수정합니다.

  ...
  s.version      = <your_desired_version_tag>
  ...
  # Note the `///`, two from the `file://` and one from the `/path`.
  s.source       = { :http => "file:///path/to/TensorFlowLiteC_framework.zip" }
  ...
  s.vendored_frameworks = 'TensorFlowLiteC.framework'
  ...

TensorFlowLiteC.podspec 파일을 직접 만든 후에는 비공개 CocoaPods 사용 지침을 사용하여 프로젝트에 사용할 수 있습니다 TensorFlowLite(Swift|ObjC).podspec를 수정하여 맞춤 TensorFlowLiteC 포드를 가리키고 Swift 또는 Objective-C를 사용합니다. 포드에 추가합니다

Bazel 개발자

Bazel을 기본 빌드 도구로 사용하는 경우 TensorFlowLite 종속 항목을 BUILD 파일의 타겟에 추가합니다.

Swift:

swift_library(
  deps = [
      "//tensorflow/lite/swift:TensorFlowLite",
  ],
)

Objective-C:

objc_library(
  deps = [
      "//tensorflow/lite/objc:TensorFlowLite",
  ],
)

앱 프로젝트를 빌드할 때 LiteRT 라이브러리를 변경하면 앱에 내장되어 있습니다

Xcode 프로젝트 설정 직접 수정

LiteRT를 추가할 때는 CocoaPods 또는 Bazel을 사용하는 것이 좋습니다. 할 수 있습니다. 여전히 TensorFlowLiteC 계정을 추가하려는 경우 TensorFlowLiteC 프레임워크를 애플리케이션 프로젝트에 임베디드 프레임워크를 추가합니다. 파일 압축 풀기 위의 빌드에서 생성된 TensorFlowLiteC_framework.zip를 사용하여 TensorFlowLiteC.framework 디렉터리 이 디렉터리는 Xcode가 이해할 수 있습니다

TensorFlowLiteC.framework가 준비되었으면 먼저 추가해야 합니다. 임베디드 바이너리로 만듭니다. 자세한 프로젝트 설정 섹션은 Xcode 버전에 따라 다를 수 있습니다.

  • Xcode 11: '일반'으로 이동 앱 타겟의 프로젝트 편집기 탭에서 '프레임워크, 라이브러리 및 라이브러리' 아래에 TensorFlowLiteC.framework 삽입된 콘텐츠 섹션으로 이동합니다.
  • Xcode 10 이하: '일반'으로 이동합니다. 프로젝트 편집기의 탭에서 앱 타겟을 만들고 '삽입됨' 아래에 TensorFlowLiteC.framework을 바이너리'. 또한 프레임워크는 '연결됨' 아래에 자동으로 추가되어야 합니다. 프레임워크 및 라이브러리 섹션으로 이동합니다.

프레임워크를 삽입된 바이너리로 추가하면 Xcode가 '프레임워크 검색 경로' 'Build Settings'(빌드 설정) 아래 항목을 선택합니다. Tab 키를 눌러 상위 항목 디렉터리에 있습니다 자동으로 발생하지 않는 경우에는 TensorFlowLiteC.framework의 상위 디렉터리를 수동으로 추가해야 합니다. 디렉터리

이 두 가지 설정이 완료되면 LiteRT의 C API는 TensorFlowLiteC.framework/Headers 디렉터리에 있습니다.