Dokumen ini menjelaskan cara mem-build library iOS LiteRT sendiri. Biasanya, Anda tidak perlu membangun library iOS LiteRT secara lokal. Jika Anda hanya ingin menggunakannya, cara termudah adalah menggunakan rilis LiteRT CocoaPods. Lihat iOS panduan memulai untuk mengetahui detail lebih lanjut tentang cara menggunakannya di iOS project secara terprogram.
Membangun secara lokal
Dalam beberapa kasus, Anda mungkin ingin menggunakan {i>build<i} lokal LiteRT, untuk contoh saat Anda ingin membuat perubahan lokal pada LiteRT dan mengujinya perubahan di aplikasi iOS atau Anda lebih suka menggunakan kerangka kerja statis dinamis. Untuk membuat kerangka kerja iOS universal untuk LiteRT secara lokal, Anda harus membuatnya menggunakan Bazel di komputer macOS.
Menginstal Xcode
Anda perlu menginstal Xcode 8 atau yang lebih baru dan alat jika belum melakukannya
menggunakan xcode-select
:
xcode-select --install
Jika ini adalah penginstalan baru, Anda harus menyetujui perjanjian lisensi untuk semua dengan perintah berikut:
sudo xcodebuild -license accept
Instal Bazel
Bazel adalah sistem build utama untuk TensorFlow. Instal Bazel sesuai dengan
petunjuk di situs Bazel. Pastikan untuk memilih
versi antara _TF_MIN_BAZEL_VERSION
dan _TF_MAX_BAZEL_VERSION
di
File configure.py
di root repositori tensorflow
.
Mengonfigurasi WORKSPACE dan .bazelrc
Jalankan skrip ./configure
di direktori checkout TensorFlow root, dan
jawab "Ya" saat skrip menanyakan apakah Anda ingin membangun TensorFlow dengan iOS
dukungan teknis IT.
Membangun framework dinamis TensorFlowLiteC (direkomendasikan)
Setelah Bazel dikonfigurasikan dengan benar pada dukungan iOS, Anda dapat membuat
Framework TensorFlowLiteC
dengan perintah berikut.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Perintah ini akan menghasilkan file TensorFlowLiteC_framework.zip
di bagian
bazel-bin/tensorflow/lite/ios/
pada direktori utama TensorFlow.
Secara default, framework yang dihasilkan berisi "fat" biner, yang berisi armv7,
arm64, dan x86_64 (tetapi tidak ada i386). Untuk melihat daftar lengkap flag build yang digunakan saat
yang Anda tentukan --config=ios_fat
, lihat bagian konfigurasi iOS di
File .bazelrc
.
Membangun framework statis TensorFlowLiteC
Secara default, kami hanya mendistribusikan framework dinamis melalui Cocoapods. Jika Anda ingin
untuk menggunakan framework statis, Anda dapat membangun TensorFlowLiteC
dengan perintah berikut:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
Perintah akan menghasilkan file bernama TensorFlowLiteC_static_framework.zip
pada direktori bazel-bin/tensorflow/lite/ios/
pada root TensorFlow
saat ini. Kerangka kerja statis ini dapat digunakan
dengan cara yang sama persis dengan
dinamis.
Membangun framework TFLite secara selektif
Anda dapat membangun framework kecil yang hanya menargetkan sekumpulan model menggunakan yang akan melewati operasi yang tidak digunakan dalam set model Anda dan hanya menyertakan kernel operasi yang diperlukan untuk menjalankan kumpulan model yang diberikan. Perintahnya adalah sebagai berikut:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Perintah di atas akan menghasilkan framework statis
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
untuk TensorFlow
Operasi kustom dan bawaan Lite; dan secara opsional, membuat kerangka kerja statis
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
jika
model Anda berisi operasi Select TensorFlow. Perhatikan bahwa flag --target_archs
dapat digunakan untuk menentukan arsitektur deployment Anda.
Gunakan di aplikasi Anda sendiri
Developer CocoaPods
Ada tiga CocoaPods untuk LiteRT:
TensorFlowLiteSwift
: Menyediakan Swift API untuk LiteRT.TensorFlowLiteObjC
: Menyediakan Objective-C API untuk LiteRT.TensorFlowLiteC
: Pod dasar umum, yang menyematkan LiteRT core dan mengekspos API C dasar yang digunakan oleh kedua pod di atas. Tidak dimaksudkan untuk digunakan langsung oleh pengguna.
Sebagai developer, Anda harus memilih TensorFlowLiteSwift
atau
Pod TensorFlowLiteObjC
berdasarkan bahasa yang digunakan untuk menulis aplikasi Anda, tetapi
bukan keduanya. Langkah-langkah yang tepat untuk menggunakan build lokal LiteRT berbeda,
tergantung pada bagian mana yang
pasti ingin Anda bangun.
Menggunakan API Swift atau Objective-C lokal
Jika Anda menggunakan CocoaPods, dan hanya ingin menguji beberapa perubahan lokal pada Swift API atau Objective-C API LiteRT, ikuti langkah-langkah di sini.
Lakukan perubahan pada Swift atau Objective-C API di checkout
tensorflow
Anda.Buka file
TensorFlowLite(Swift|ObjC).podspec
, dan perbarui baris ini:
s.dependency 'TensorFlowLiteC', "#{s.version}"
menjadi:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Hal ini untuk memastikan bahwa Anda membangun Swift atau Objective-C API terhadapTensorFlowLiteC
API versi malam terbaru yang tersedia (dibuat setiap malam antara pukul 01.00-04.00 Waktu Pasifik) dan bukan di gedung stabil yang mungkin sudah tidak berlaku dibandingkan dengan checkouttensorflow
lokal Anda. Atau, Anda dapat memilih untuk menerbitkan versiTensorFlowLiteC
dan gunakan versi tersebut (lihat Menggunakan LiteRT lokal inti di bawah).Di
Podfile
project iOS Anda, ubah dependensi seperti berikut menjadi arahkan ke jalur lokal ke direktori {i>root <i}tensorflow
Anda.
Untuk Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Untuk Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Update penginstalan pod dari direktori utama project iOS Anda.
$ pod update
Buka kembali ruang kerja yang dihasilkan (
<project>.xcworkspace
) dan buat ulang aplikasi dalam Xcode.
Menggunakan LiteRT core lokal
Anda dapat menyiapkan repositori spesifikasi CocoaPods pribadi dan memublikasikan
TensorFlowLiteC
ke repo pribadi Anda. Anda dapat menyalin podspec ini
dan ubah beberapa nilai:
...
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'
...
Setelah membuat file TensorFlowLiteC.podspec
sendiri, Anda dapat mengikuti
petunjuk tentang cara menggunakan CocoaPods pribadi untuk menggunakannya di
project Anda sendiri. Anda juga dapat mengubah TensorFlowLite(Swift|ObjC).podspec
untuk
arahkan ke pod TensorFlowLiteC
kustom Anda dan gunakan Swift atau Objective-C
dalam project aplikasi Anda.
Developer Bazel
Jika menggunakan Bazel sebagai alat build utama, Anda cukup menambahkan
Dependensi TensorFlowLite
ke target Anda di file BUILD
.
Untuk Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Untuk Objective-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Ketika Anda membangun project aplikasi, setiap perubahan pada library LiteRT akan digunakan dan diintegrasikan ke dalam aplikasi Anda.
Mengubah setelan project Xcode secara langsung
Sebaiknya gunakan CocoaPods atau Bazel untuk menambahkan LiteRT
dependensi ke dalam project Anda. Jika Anda masih ingin menambahkan TensorFlowLiteC
secara manual, Anda harus menambahkan framework TensorFlowLiteC
sebagai
yang disematkan ke proyek aplikasi Anda. Ekstrak
TensorFlowLiteC_framework.zip
yang dibuat dari build di atas untuk mendapatkan
Direktori TensorFlowLiteC.framework
. Direktori ini adalah kerangka kerja
yang sebenarnya
yang dapat dipahami Xcode.
Setelah menyiapkan TensorFlowLiteC.framework
, Anda harus menambahkannya terlebih dahulu
sebagai biner tersemat ke target aplikasi Anda. Bagian setelan project yang tepat untuk
ini mungkin berbeda tergantung
pada versi Xcode Anda.
- Xcode 11: Buka bagian 'General' tab editor proyek untuk target aplikasi Anda,
dan tambahkan
TensorFlowLiteC.framework
di bagian 'Frameworks, Libraries, dan Konten yang Disematkan' bagian. - Xcode 10 dan yang lebih lama: Buka bagian 'General' tab pada editor proyek untuk
target aplikasi, lalu tambahkan
TensorFlowLiteC.framework
di bagian 'Disematkan Biner. Kerangka kerja tersebut juga akan ditambahkan secara otomatis di bagian 'Linked Framework dan Library bagian.
Saat Anda menambahkan kerangka kerja sebagai biner tersemat, Xcode juga akan memperbarui
'Jalur Penelusuran Framework' pada 'Build Settings' untuk menyertakan induk
dari framework Anda. Jika hal ini tidak terjadi secara otomatis, Anda
harus menambahkan direktori induk TensorFlowLiteC.framework
secara manual
saat ini.
Setelah kedua pengaturan ini selesai, Anda seharusnya dapat mengimpor dan memanggil
C API LiteRT, yang ditentukan oleh file header di bawah
Direktori TensorFlowLiteC.framework/Headers
.