建構 iOS 適用的 LiteRT

本文說明如何自行建構 LiteRT iOS 程式庫。 一般來說,您不需要在本機建構 LiteRT iOS 程式庫。如果發生以下情況: 只想使用容器時,最簡單的方法是使用預先建構的穩定版或夜間版本 LiteRT CocoaPods 的最新版本請參閱 iOS 快速入門導覽課程,進一步瞭解如何在 iOS 中使用這類技術 Google Cloud 的 Resource Manager 工具 經特別設計,能以程式輔助方式協助您管理專案

在本機建構

在某些情況下,您可能會想使用 LiteRT 的本機版本,例如: 假設您想對 LiteRT 進行本機變更 或是想使用我們提供的靜態架構變更 動態事件如要在本機建立 LiteRT 通用的 iOS 架構, 您必須在 macOS 機器上使用 Bazel 進行建構

安裝 Xcode

如果您尚未安裝 Xcode 8 以上版本,請先安裝 使用 xcode-select

xcode-select --install

如要安裝新的安裝項目,您必須接受 以及使用下列指令:

sudo xcodebuild -license accept

安裝 Bazel

Bazel 是 TensorFlow 的主要建構系統。請根據應用程式的 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 檔案: bazel-bin/tensorflow/lite/ios/ 目錄。 根據預設,產生的架構會包含「脂肪」包括 armv7 arm64 和 x86_64 (但沒有 i386)。如要查看 如果指定 --config=ios_fat,請參閱 SDK 中的「iOS 設定」一節, .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/ 目錄中 目錄。這種靜態架構的使用方式 動態事件

選擇性建構 TFLite 架構

您可以使用選擇性操作來建立小型的架構,僅鎖定一組模型 會略過模型集中未使用的作業,僅包含 執行指定模型組合所需的 Ops 核心。這個指令如下所示:

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 Ops」請注意,--target_archs 旗標 即可指定您的部署架構

用於自己的應用程式

CocoaPods 開發人員

LiteRT 有三個 CocoaPods:

  • TensorFlowLiteSwift:提供適用於 LiteRT 的 Swift API。
  • TensorFlowLiteObjC:提供適用於 LiteRT 的 Objective-C API。
  • TensorFlowLiteC:嵌入 LiteRT 核心的常見基本 Pod 執行階段,並公開上述兩個 Pod 使用的基本 C API。並非目的 方便使用者直接使用

開發人員應選擇 TensorFlowLiteSwiftTensorFlowLiteObjC Pod 是以編寫應用程式語言為依據,但 兩者只能擇一LiteRT 本機版本的確切使用步驟有所不同 視您想建構的確切部分而定

使用本機 Swift 或 Objective-C API

如果你使用 CocoaPods,而且只想測試 LiteRT 的 Swift APIObjective-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:
    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 開發應用程式

Bazel 開發人員

如果將 Bazel 做為主要建構工具使用 BUILD 檔案中目標的 TensorFlowLite 依附元件。

Swift:

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

針對 Objective-C:

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

建構應用程式專案時,如果您對 LiteRT 程式庫有任何變更, 並融入應用程式中

直接修改 Xcode 專案設定

強烈建議您使用 CocoaPods 或 Bazel 來新增 LiteRT 依附元件如果仍想新增TensorFlowLiteC 您必須手動新增 TensorFlowLiteC 架構做為 將架構嵌入應用程式專案解壓縮 上述版本產生的 TensorFlowLiteC_framework.zip,藉此取得 TensorFlowLiteC.framework 目錄內。這個目錄是實際的架構 Xcode 能夠辨識

準備好 TensorFlowLiteC.framework 後,請先新增 做為應用程式目標的嵌入式二進位檔案確切專案設定部分 這可能會因 Xcode 版本而異。

  • Xcode 11:前往 [一般]進入應用程式目標的專案編輯器分頁 並將 TensorFlowLiteC.framework 新增至 [Frameworks、Library 嵌入的內容專區。
  • Xcode 10 以下版本:前往 [一般]找到專案的專案編輯器分頁 並將 TensorFlowLiteC.framework 新增至 [內嵌] Binaries」。系統也會在「已連結」下方自動新增架構 架構與程式庫專區。

當您將架構新增為內嵌二進位時,Xcode 也會更新 架構搜尋路徑「Build Settings」之下的項目按 Tab 鍵納入 管理架構如果系統並未自動執行這項作業, 應手動新增 TensorFlowLiteC.framework 的父項目錄 目錄。

完成這兩項設定後,您應該就能匯入並呼叫 LiteRT 的 C API,由下方的標頭檔案定義 TensorFlowLiteC.framework/Headers 目錄內。