Tài liệu này mô tả cách tự xây dựng thư viện LiteRT iOS. Thông thường, bạn không cần xây dựng cục bộ thư viện LiteRT iOS. Nếu bạn chỉ muốn sử dụng nó, cách dễ nhất là sử dụng định dạng ổn định được tạo sẵn hoặc chạy vào ban đêm bản phát hành LiteRT CocoaPods. Xem iOS bắt đầu nhanh để biết thêm chi tiết về cách sử dụng chúng trong iOS của bạn dự án.
Xây dựng cục bộ
Trong một số trường hợp, bạn có thể muốn sử dụng bản dựng LiteRT cục bộ để ví dụ: khi bạn muốn thực hiện các thay đổi cục bộ đối với LiteRT và thử nghiệm các thay đổi đó trong ứng dụng iOS của bạn hoặc bạn muốn sử dụng khung tĩnh so với linh động. Để tạo một khung iOS chung cho LiteRT cục bộ, bạn cần tạo ứng dụng bằng Bazel trên máy macOS.
Cài đặt Xcode
Bạn cần cài đặt Xcode 8 trở lên và các công cụ nếu chưa cài đặt
sử dụng xcode-select
:
xcode-select --install
Nếu đây là lượt cài đặt mới, bạn sẽ cần chấp nhận thoả thuận cấp phép cho tất cả người dùng bằng lệnh sau:
sudo xcodebuild -license accept
Cài đặt Bazel
Bazel là hệ thống xây dựng chính cho TensorFlow. Cài đặt Bazel theo
hướng dẫn trên trang web của Bazel. Hãy nhớ chọn một
phiên bản từ _TF_MIN_BAZEL_VERSION
đến _TF_MAX_BAZEL_VERSION
trong
Tệp configure.py
ở gốc của kho lưu trữ tensorflow
.
Định cấu hình WORKSPACE và .bazelrc
Chạy tập lệnh ./configure
trong thư mục thanh toán gốc của TensorFlow, và
trả lời "Có" khi tập lệnh hỏi bạn có muốn tạo TensorFlow bằng iOS không
của Google.
Xây dựng khung động TensorFlowLiteC (nên dùng)
Sau khi Bazel được định cấu hình đúng cách với tính năng hỗ trợ iOS, bạn có thể tạo
khung TensorFlowLiteC
bằng lệnh sau.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Lệnh này sẽ tạo tệp TensorFlowLiteC_framework.zip
trong
Thư mục bazel-bin/tensorflow/lite/ios/
trong thư mục gốc TensorFlow.
Theo mặc định, khung được tạo sẽ chứa thành phần "béo" tệp nhị phân, chứa armv7,
arm64 và x86_64 (nhưng không có i386). Cách xem danh sách đầy đủ các cờ bản dựng được dùng khi
bạn chỉ định --config=ios_fat
, vui lòng tham khảo phần cấu hình iOS trong
Tệp .bazelrc
.
Xây dựng khung tĩnh TensorFlowLiteC
Theo mặc định, chúng tôi chỉ phân phối khung linh động thông qua Cocoapods. Nếu bạn muốn
Để sử dụng khung tĩnh, bạn có thể tạo khung hình ảnh tĩnh TensorFlowLiteC
khung bằng lệnh sau:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
Lệnh này sẽ tạo một tệp có tên TensorFlowLiteC_static_framework.zip
thuộc thư mục bazel-bin/tensorflow/lite/ios/
thuộc thư mục gốc TensorFlow
thư mục. Khung tĩnh này có thể được sử dụng theo cách chính xác như
linh động.
Xây dựng các khung TFLite một cách có chọn lọc
Bạn có thể xây dựng các khung làm việc nhỏ hơn chỉ nhắm mục tiêu đến một tập hợp mô hình bằng cách sử dụng các phương pháp Bản dựng này sẽ bỏ qua các thao tác không được sử dụng trong tập hợp mô hình và chỉ bao gồm hạt nhân hoạt động cần thiết để chạy tập hợp mô hình đã cho. Lệnh này có dạng như sau:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Lệnh trên sẽ tạo khung tĩnh
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
cho TensorFlow
Hoạt động tuỳ chỉnh và tích hợp sẵn Lite; và tuỳ ý tạo khung tĩnh
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
nếu
các mô hình của bạn có chứa Chọn hoạt động TensorFlow. Xin lưu ý rằng cờ --target_archs
có thể được sử dụng để chỉ định cấu trúc triển khai của bạn.
Sử dụng trong ứng dụng của riêng bạn
Nhà phát triểncocoaPods
Có 3 CocoaPods cho LiteRT:
TensorFlowLiteSwift
: Cung cấp các API Swift cho LiteRT.TensorFlowLiteObjC
: Cung cấp các API Mục tiêu-C cho LiteRT.TensorFlowLiteC
: Nhóm cơ sở phổ biến, nhúng lõi LiteRT thời gian chạy và hiển thị các API C cơ sở được 2 nhóm ở trên sử dụng. Không dành cho được người dùng trực tiếp sử dụng.
Là nhà phát triển, bạn nên chọn TensorFlowLiteSwift
hoặc
TensorFlowLiteObjC
nhóm dựa trên ngôn ngữ mà ứng dụng của bạn được viết, nhưng
chứ không phải cả hai. Các bước chính xác để sử dụng bản dựng cục bộ của LiteRT sẽ khác nhau
tuỳ thuộc vào phần chính xác bạn muốn xây dựng.
Sử dụng API Swift hoặc Target-C cục bộ
Nếu bạn đang sử dụng CocoaPods và chỉ muốn thử nghiệm một số thay đổi cục bộ đối với API Swift hoặc API Target-C của LiteRT, hãy làm theo các bước tại đây.
Thực hiện thay đổi đối với API Swift hoặc GOAL-C trong quy trình thanh toán
tensorflow
.Mở tệp
TensorFlowLite(Swift|ObjC).podspec
và cập nhật dòng này:
s.dependency 'TensorFlowLiteC', "#{s.version}"
trở thành:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Việc này nhằm đảm bảo rằng bạn đang xây dựng các API Swift hoặc Target-C dựa trên phiên bản APITensorFlowLiteC
hoạt động hằng đêm mới nhất hiện có (được tạo mỗi đêm từ 1 đến 4 giờ sáng theo Giờ Thái Bình Dương) thay vì phiên bản này có thể đã lỗi thời so với quy trình thanh toán cục bộ của bạntensorflow
. Ngoài ra, bạn có thể chọn xuất bản phiên bảnTensorFlowLiteC
và sử dụng phiên bản đó (xem phần Sử dụng LiteRT cục bộ phần cốt lõi ở bên dưới).Trong
Podfile
của dự án iOS, hãy thay đổi phần phụ thuộc như sau thành trỏ đến đường dẫn cục bộ đến thư mục gốctensorflow
của bạn.
Đối với Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Đối với Đối tượng C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Cập nhật chế độ cài đặt nhóm từ thư mục gốc của dự án iOS.
$ pod update
Mở lại không gian làm việc đã tạo (
<project>.xcworkspace
) và thiết kế lại ứng dụng của bạn trong Xcode.
Sử dụng lõi LiteRT cục bộ
Bạn có thể thiết lập kho lưu trữ riêng thông số kỹ thuật của CocoaPods và xuất bản
TensorFlowLiteC
vào kho lưu trữ riêng tư của bạn. Bạn có thể sao chép podspec này
và sửa đổi một vài giá trị:
...
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'
...
Sau khi tạo tệp TensorFlowLiteC.podspec
của riêng mình, bạn có thể làm theo
hướng dẫn cách sử dụng CocoaPods riêng tư để sử dụng tính năng này trong
dự án của riêng bạn. Bạn cũng có thể sửa đổi TensorFlowLite(Swift|ObjC).podspec
thành
trỏ đến nhóm TensorFlowLiteC
tuỳ chỉnh và sử dụng Swift hoặc Mục tiêu-C
pod trong dự án ứng dụng của bạn.
Nhà phát triển Bazel
Nếu đang sử dụng Bazel làm công cụ xây dựng chính, bạn chỉ cần thêm
Phần phụ thuộc TensorFlowLite
với mục tiêu trong tệp BUILD
.
Đối với Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Đối với Mục tiêu-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Khi bạn tạo dự án ứng dụng, mọi thay đổi đối với thư viện LiteRT sẽ được chọn và tích hợp vào ứng dụng của bạn.
Sửa đổi trực tiếp các chế độ cài đặt dự án Xcode
Bạn nên sử dụng CocoaPods hoặc Bazel để thêm LiteRT
vào dự án của bạn. Nếu bạn vẫn muốn thêm TensorFlowLiteC
khung theo cách thủ công, bạn sẽ cần thêm khung TensorFlowLiteC
làm
khung được nhúng vào dự án ứng dụng của mình. Giải nén
TensorFlowLiteC_framework.zip
được tạo từ bản dựng ở trên để lấy giá trị
Thư mục TensorFlowLiteC.framework
. Thư mục này là khung thực tế
mà Xcode có thể hiểu được.
Sau khi chuẩn bị TensorFlowLiteC.framework
, trước tiên, bạn cần thêm thẻ này
dưới dạng tệp nhị phân được nhúng vào mục tiêu ứng dụng của bạn. Phần cài đặt dự án chính xác cho
quá trình này có thể khác nhau tuỳ thuộc vào phiên bản Xcode của bạn.
- Xcode 11: Chuyển đến trang 'Chung' tab của trình chỉnh sửa dự án cho mục tiêu ứng dụng của bạn,
rồi thêm
TensorFlowLiteC.framework
trong phần 'Frameworks, Libraries, and Nội dung được nhúng . - Xcode 10 trở xuống: Chuyển đến trang "Chung" trong trình chỉnh sửa dự án cho
mục tiêu ứng dụng và thêm
TensorFlowLiteC.framework
trong 'Được nhúng nhị phân'. Khung này cũng sẽ được tự động thêm vào trong mục "Đã liên kết" Khung và thư viện .
Khi bạn thêm khung này làm tệp nhị phân được nhúng, Xcode cũng sẽ cập nhật
"Đường dẫn tìm kiếm khung" mục nhập trong 'Cài đặt bản dựng' để bao gồm phần tử mẹ
của khung. Trong trường hợp điều này không tự động xảy ra, bạn
phải tự thêm thư mục mẹ của TensorFlowLiteC.framework
thư mục.
Sau khi hoàn tất hai chế độ cài đặt này, bạn có thể nhập và gọi hàm
C API của LiteRT, được xác định bởi các tệp tiêu đề trong
Thư mục TensorFlowLiteC.framework/Headers
.