本文說明如何自行建構 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 時
聯絡。
建構 TensorFlowLiteC 動態架構 (建議)
在 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。並非目的 方便使用者直接使用
開發人員應選擇 TensorFlowLiteSwift
或
TensorFlowLiteObjC
Pod 是以編寫應用程式語言為依據,但
兩者只能擇一LiteRT 本機版本的確切使用步驟有所不同
視您想建構的確切部分而定
使用本機 Swift 或 Objective-C API
如果你使用 CocoaPods,而且只想測試 LiteRT 的 Swift API 或 Objective-C API 請按照這裡的步驟操作
在
tensorflow
結帳頁面中變更 Swift 或 Objective-C API。開啟
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 核心一節)。在 iOS 專案的
Podfile
中,按照下列方式變更依附元件: 指向tensorflow
根目錄的本機路徑。
Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
從 iOS 專案根目錄更新 Pod 安裝項目。
$ pod update
重新開啟產生的工作區 (
<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
目錄內。