Tham dự Hội nghị chuyên đề Women in ML vào ngày 7 tháng 12 Đăng ký ngay

Build TensorFlow Lite cho iOS

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Tài liệu này mô tả cách tạo thư viện TensorFlow Lite iOS của riêng bạn. Thông thường, bạn không cần phải xây dựng cục bộ thư viện TensorFlow Lite iOS. Nếu bạn chỉ muốn sử dụng nó, cách dễ nhất là sử dụng các bản phát hành ổn định hoặc hàng đêm của TensorFlow Lite CocoaPods được tạo sẵn. Xem phần Khởi động nhanh iOS để biết thêm chi tiết về cách sử dụng chúng trong các dự án iOS của bạn.

Xây dựng tại địa phương

Trong một số trường hợp, bạn có thể muốn sử dụng bản dựng cục bộ của TensorFlow Lite, chẳng hạn như khi bạn muốn thực hiện các thay đổi cục bộ đối với TensorFlow Lite và kiểm tra những thay đổi đó trong ứng dụng iOS của mình hoặc bạn thích sử dụng khuôn khổ tĩnh hơn khung động được cung cấp của chúng tôi. Để tạo một khung iOS phổ biến cho TensorFlow Lite cục bộ, bạn cần phải xây dựng nó bằng Bazel trên máy macOS.

Cài đặt Xcode

Nếu bạn chưa cài đặt, bạn sẽ cần cài đặt Xcode 8 trở lên và các công cụ sử dụng xcode-select :

xcode-select --install

Nếu đây là bản cài đặt mới, bạn cần chấp nhận thỏa 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 Bazel . Đảm bảo chọn phiên bản giữa _TF_MIN_BAZEL_VERSION_TF_MAX_BAZEL_VERSION trong configure.py config.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 kiểm tra TensorFlow gốc và trả lời "Có" khi tập lệnh hỏi bạn có muốn xây dựng TensorFlow với hỗ trợ iOS hay không.

Khi Bazel được định cấu hình đúng cách với sự hỗ trợ của iOS, bạn có thể xây dựng 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 của bạn. Theo mặc định, khuôn khổ được tạo chứa tệp nhị phân "béo", chứa armv7, arm64 và x86_64 (nhưng không có i386). Để xem danh sách đầy đủ các cờ xây dựng được sử 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 động qua Cocoapods. Nếu bạn muốn sử dụng khung công tác tĩnh thay thế, bạn có thể xây dựng khung công tác tĩnh TensorFlowLiteC bằng lệnh sau:

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

Lệnh sẽ tạo một tệp có tên TensorFlowLiteC_static_framework.zip trong thư mục bazel-bin/tensorflow/lite/ios/ trong thư mục gốc TensorFlow của bạn. Khung tĩnh này có thể được sử dụng theo cách giống hệt như khung động.

Xây dựng có chọn lọc các khuôn khổ TFLite

Bạn có thể xây dựng các khuôn khổ nhỏ hơn chỉ nhắm mục tiêu một tập hợp các mô hình bằng cách sử dụng xây dựng có chọn lọc, sẽ bỏ qua các hoạt động không sử dụng trong tập mô hình của bạn và chỉ bao gồm các hạt nhân op cần thiết để chạy tập hợp các mô hình nhất định. Lệnh 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 các hoạt động tùy chỉnh và cài sẵn TensorFlow Lite; và tùy chọn, 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ọn hoạt động TensorFlow. Lưu ý rằng cờ --target_archs có thể được sử dụng để chỉ định kiến ​​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ển CocoaPods

Có ba CocoaPods cho TensorFlow Lite:

  • TensorFlowLiteSwift : Cung cấp các API Swift cho TensorFlow Lite.
  • TensorFlowLiteObjC : Cung cấp các API Objective-C cho TensorFlow Lite.
  • TensorFlowLiteC : Nhóm cơ sở chung, nhúng thời gian chạy lõi TensorFlow Lite và hiển thị các API C cơ sở được sử dụng bởi hai nhóm trên. Không có nghĩa là để được sử dụng trực tiếp bởi người dùng.

Là nhà phát triển, bạn nên chọn nhóm TensorFlowLiteSwift hoặc TensorFlowLiteObjC dựa trên ngôn ngữ mà ứng dụng của bạn được viết, chứ không phải cả hai. Các bước chính xác để sử dụng các bản dựng cục bộ của TensorFlow Lite khác nhau, tùy thuộc vào phần chính xác bạn muốn xây dựng.

Sử dụng các API cục bộ Swift hoặc Objective-C

Nếu bạn đang sử dụng CocoaPods và chỉ muốn kiểm tra một số thay đổi cục bộ đối với API Swift hoặc API Objective-C của TensorFlow Lite, hãy làm theo các bước tại đây.

  1. Thực hiện các thay đổi đối với các API Swift hoặc Objective-C trong quá trình kiểm tra tensorflow của bạn.

  2. Mở tệp TensorFlowLite(Swift|ObjC).podspec và cập nhật dòng này:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    được:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Điều này là để đảm bảo rằng bạn đang xây dựng các API Swift hoặc Objective-C của mình dựa trên phiên bản mới nhất có sẵn hàng đêm của các API TensorFlowLiteC (được xây dựng hàng đêm từ 1-4 giờ sáng theo Giờ Thái Bình Dương) chứ không phải là phiên bản ổn định, có thể đã lỗi thời so với tensorflow cục bộ của bạn Thủ tục thanh toán. Ngoài ra, bạn có thể chọn xuất bản phiên bản TensorFlowLiteC của riêng mình và sử dụng phiên bản đó (xem phần Sử dụng cốt lõi TensorFlow Lite cục bộ bên dưới).

  3. Trong Podfile của dự án iOS của bạn, thay đổi phần phụ thuộc như sau để trỏ đến đường dẫn cục bộ đến thư mục gốc tensorflow của bạn.
    Đối với Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Đối với Objective-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Cập nhật cài đặt pod của bạn từ thư mục gốc của dự án iOS của bạn.
    $ pod update

  5. Mở lại không gian làm việc đã tạo ( <project>.xcworkspace ) và xây dựng lại ứng dụng của bạn trong Xcode.

Sử dụng lõi TensorFlow Lite cục bộ

Bạn có thể thiết lập kho lưu trữ thông số kỹ thuật CocoaPods riêng tư và xuất bản khung TensorFlowLiteC tùy chỉnh của bạn lên kho lưu trữ riêng tư của bạn. Bạn có thể sao chép tệ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 bạn, bạn có thể làm theo hướng dẫn về cách sử dụng CocoaPods riêng tư để sử dụng nó trong dự án của riêng bạn. Bạn cũng có thể sửa đổi TensorFlowLite(Swift|ObjC).podspec để trỏ đến nhóm TensorFlowLiteC tùy chỉnh của mình và sử dụng Swift hoặc Objective-C pod trong dự án ứng dụng của bạn.

Nhà phát triển Bazel

Nếu bạn đang sử dụng Bazel làm công cụ xây dựng chính, bạn có thể chỉ cần thêm phần phụ thuộc TensorFlowLite vào mục tiêu trong tệp BUILD của mình.

Đối với Swift:

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

Đối với Objective-C:

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

Khi bạn xây dựng dự án ứng dụng của mình, mọi thay đổi đối với thư viện TensorFlow Lite sẽ được chọn và tích hợp vào ứng dụng của bạn.

Sửa đổi cài đặt dự án Xcode trực tiếp

Bạn nên sử dụng CocoaPods hoặc Bazel để thêm phần phụ thuộc vào TensorFlow Lite vào dự án của bạn. Nếu bạn vẫn muốn thêm khung TensorFlowLiteC theo cách thủ công, bạn sẽ cần thêm khung TensorFlowLiteC làm khung 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 thư mục TensorFlowLiteC.framework . Thư mục này là khung thực tế mà Xcode có thể hiểu được.

Khi bạn đã chuẩn bị xong TensorFlowLiteC.framework , trước tiên, bạn cần thêm nó dưới dạng tệp nhị phân nhúng vào mục tiêu ứng dụng của mình. Phần cài đặt dự án chính xác cho điều này có thể khác nhau tùy thuộc vào phiên bản Xcode của bạn.

  • Xcode 11: Chuyển đến tab 'Chung' của trình chỉnh sửa dự án cho mục tiêu ứng dụng của bạn và thêm TensorFlowLiteC.framework trong phần 'Khung, Thư viện và Nội dung Nhúng'.
  • Xcode 10 trở xuống: Chuyển đến tab 'Chung' của trình chỉnh sửa dự án cho mục tiêu ứng dụng của bạn và thêm khung TensorFlowLiteC.framework . trong 'Hội thảo nhúng'. Khung cũng sẽ được thêm tự động trong phần 'Khung và Thư viện được Liên kết'.

Khi bạn thêm khung công tác dưới dạng nhị phân nhúng, Xcode cũng sẽ cập nhật mục nhập 'Đường dẫn tìm kiếm khung công tác' trong tab 'Cài đặt bản dựng' để bao gồm thư mục mẹ của khung công tác của bạn. Trong trường hợp điều này không tự động xảy ra, bạn nên thêm thủ công thư mục mẹ của thư mục TensorFlowLiteC.framework .

Sau khi hoàn tất hai cài đặt này, bạn sẽ có thể nhập và gọi API C của TensorFlow Lite, được xác định bởi các tệp tiêu đề trong thư mục TensorFlowLiteC.framework/Headers .