iOS 用 LiteRT をビルドする

このドキュメントでは、LiteRT iOS ライブラリを独自にビルドする方法について説明します。 通常、LiteRT iOS ライブラリをローカルでビルドする必要はありません。もし 最も簡単な方法は、ビルド済みの安定版または LiteRT CocoaPods のリリースです。詳しくは、iOS クイックスタートをご覧ください。 できます。

ローカルでのビルド

ローカルビルドを使用して次の目的のために LiteRT 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 スクリプトを実行します。 回答: 「はい」TensorFlow を iOS でビルドするかどうかを尋ねられたとき サポート。

Bazel が iOS サポートとともに適切に設定されたら、 TensorFlowLiteC フレームワークを次のコマンドに置き換えます。

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

このコマンドにより、TensorFlowLiteC_framework.zip ファイルが以下の場所に生成されます。 bazel-bin/tensorflow/lite/ios/ ディレクトリに配置します。 デフォルトでは、生成されるフレームワークには「fat」というARMv7 を含むバイナリ、 arm64、x86_64(ただし i386 は対象外)。ビルドフラグの完全なリストについては、 --config=ios_fat を指定する場合は、 .bazelrc ファイル

TensorFlowLiteC の静的フレームワークを構築する

デフォルトでは、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/ ディレクトリにある されます。この静的フレームワークは、Terraform の あります。

TFLite フレームワークを選択的にビルドする

選択的モデルを使用すれば、特定のモデルのみを対象とする小規模なフレームワークを構築できます。 これにより、モデルセット内の未使用のオペレーションがスキップされ、モデルセット内の 必要な op カーネル。コマンドは次のとおりです。

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

上記のコマンドにより、静的フレームワークが生成されます。 bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip(TensorFlow 用) Lite の組み込みオペレーションとカスタム オペレーション必要に応じて、静的フレームワークを 次の場合は bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip モデルに Select TensorFlow オペレーションが 含まれていることを確認しますなお、--target_archs フラグは デプロイ アーキテクチャを指定できます。

独自のアプリケーションで使用する

CocoaPods デベロッパー

LiteRT には 3 つの CocoaPods があります。

  • TensorFlowLiteSwift: LiteRT 用の Swift API を提供します。
  • TensorFlowLiteObjC: LiteRT 用の Objective-C API を提供します。
  • TensorFlowLiteC: LiteRT コアを埋め込む共通のベース Pod 上記の 2 つの Pod で使用されるベース C API を公開します。対象外 ユーザーが直接使用できます。

デベロッパーは、TensorFlowLiteSwift または TensorFlowLiteObjC Pod は、アプリが記述されている言語に基づきますが、 両方ではありません。LiteRT のローカルビルドを使用するための正確な手順は異なります。 どの部分を構築するかによります

ローカルの Swift API または Objective-C API の使用

CocoaPods を使用していて、ローカル環境での変更だけをテストする場合は、 LiteRT の Swift API または Objective-C API こちらの手順に沿って対応してください。

  1. tensorflow チェックアウトで Swift API または Objective-C API に変更を加えます。

  2. TensorFlowLite(Swift|ObjC).podspec ファイルを開き、
    の行を更新します。
    s.dependency 'TensorFlowLiteC', "#{s.version}" 変更後:

    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly" 回 これは、確実に Swift API または Objective-C API をビルドするためです。 TensorFlowLiteC API の最新のナイトリー バージョンとの比較 (毎晩午前 1 ~ 4 時(太平洋時間)の間に作成)であり、 バージョンです。ローカルの tensorflow ご購入手続きと比較すると古くなっている可能性があります。 または、独自のバージョンの公開 TensorFlowLiteC を使用し、そのバージョンを使用します(ローカル LiteRT の使用をご覧ください)。 コアセクションを参照)。

  3. iOS プロジェクトの Podfile で、次のように依存関係を変更します。 tensorflow ルート ディレクトリへのローカルパスを指します。
    Swift の場合:

    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>' Objective-C の場合:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. iOS プロジェクトのルート ディレクトリから Pod のインストールを更新します。
    $ pod update

  5. 生成されたワークスペース(<project>.xcworkspace)を再度開いて、 ダウンロードします。

ローカル LiteRT コアの使用

限定公開の 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 Pod を指定して、Swift または Objective-C を使用する Pod に追加します。

Bazel デベロッパー

Bazel をメインのビルドツールとして使用する場合は、コマンドを BUILD ファイル内のターゲットへの TensorFlowLite 依存関係。

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 を [Frameworks, Libraries, and 埋め込みコンテンツ。
  • Xcode 10 以下: [全般] に移動しますそのプロジェクトのプロジェクト エディタの [Embedded] の下に TensorFlowLiteC.framework を追加します。 Binaries」です。フレームワークは [リンク済み] の下にも自動的に追加されます。 フレームワークとライブラリ。

フレームワークを埋め込みバイナリとして追加すると、Xcode によって 'フレームワーク検索パス'エントリを [Build Settings] の下にタブに追加 ディレクトリにあります。自動的に行われない場合は TensorFlowLiteC.framework の親ディレクトリを手動で追加する必要があります。 されます。

これら 2 つの設定が完了すると、 LiteRT の C API。 TensorFlowLiteC.framework/Headers ディレクトリ。