Ndërtoni LiteRT për iOS

Ky dokument përshkruan se si të ndërtoni vetë bibliotekën LiteRT iOS. Normalisht, nuk keni nevojë të ndërtoni lokalisht bibliotekën LiteRT iOS. Nëse thjesht dëshironi ta përdorni, mënyra më e lehtë është të përdorni versionet e para-ndërtuara të qëndrueshme ose të natës të LiteRT CocoaPods. Shikoni fillimin e shpejtë të iOS për më shumë detaje se si t'i përdorni ato në projektet tuaja iOS.

Ndërtimi në vend

Në disa raste, mund të dëshironi të përdorni një ndërtim lokal të LiteRT, për shembull kur dëshironi të bëni ndryshime lokale në LiteRT dhe t'i testoni ato ndryshime në aplikacionin tuaj iOS ose preferoni të përdorni kornizën statike në krahasim me atë dinamike të ofruar. Për të krijuar një kornizë universale iOS për LiteRT në nivel lokal, duhet ta ndërtoni atë duke përdorur Bazel në një makinë macOS.

Instaloni Xcode

Nëse nuk e keni bërë tashmë, do t'ju duhet të instaloni Xcode 8 ose më vonë dhe mjetet duke përdorur xcode-select :

xcode-select --install

Nëse ky është një instalim i ri, do t'ju duhet të pranoni marrëveshjen e licencës për të gjithë përdoruesit me komandën e mëposhtme:

sudo xcodebuild -license accept

Instaloni Bazel

Bazel është sistemi kryesor i ndërtimit për TensorFlow. Instaloni Bazel sipas udhëzimeve në faqen e internetit të Bazel . Sigurohuni që të zgjidhni një version midis _TF_MIN_BAZEL_VERSION dhe _TF_MAX_BAZEL_VERSIONskedarin configure.py në rrënjën e depove tensorflow .

Konfiguro WORKSPACE dhe .bazelrc

Ekzekutoni skriptin ./configure në direktorinë rrënjësore të blerjes së TensorFlow dhe përgjigjuni "Po" kur skripti ju pyet nëse dëshironi të ndërtoni TensorFlow me mbështetje për iOS.

Pasi Bazel të konfigurohet siç duhet me mbështetjen e iOS, mund të ndërtoni kornizën TensorFlowLiteC me komandën e mëposhtme.

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

Kjo komandë do të gjenerojë skedarin TensorFlowLiteC_framework.zip nën drejtorinë bazel-bin/tensorflow/lite/ios/ nën drejtorinë tuaj rrënjësore TensorFlow. Si parazgjedhje, korniza e gjeneruar përmban një binar "fat", që përmban armv7, arm64 dhe x86_64 (por jo i386). Për të parë listën e plotë të flamujve të ndërtimit të përdorur kur specifikoni --config=ios_fat , ju lutemi referojuni seksionit të konfigurimeve të iOS në skedarin .bazelrc .

Ndërtoni kornizën statike TensorFlowLiteC

Si parazgjedhje, ne shpërndajmë kornizën dinamike vetëm përmes Cocoapods. Nëse dëshironi të përdorni kornizën statike në vend të kësaj, mund të ndërtoni kornizën statike TensorFlowLiteC me komandën e mëposhtme:

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

Komanda do të gjenerojë një skedar të quajtur TensorFlowLiteC_static_framework.zip nën drejtorinë bazel-bin/tensorflow/lite/ios/ nën drejtorinë tuaj rrënjësore TensorFlow. Ky kuadër statik mund të përdoret saktësisht në të njëjtën mënyrë si ai dinamik.

Ndërtoni në mënyrë selektive korniza TFLite

Ju mund të ndërtoni korniza më të vogla që synojnë vetëm një grup modelesh duke përdorur një ndërtim selektiv, i cili do të kapërcejë operacionet e papërdorura në grupin tuaj të modeleve dhe do të përfshijë vetëm kernelët e nevojshëm për ekzekutimin e grupit të caktuar të modeleve. Komanda është si më poshtë:

bash tensorflow/lite/ios/build_frameworks.sh \
  --input_models=model1.tflite,model2.tflite \
  --target_archs=x86_64,armv7,arm64

Komanda e mësipërme do të gjenerojë kornizën statike bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip për funksionet e integruara dhe të personalizuara të TensorFlow Lite; dhe opsionalisht, gjeneron kornizën statike bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip nëse modelet tuaja përmbajnë Ops Select TensorFlow. Vini re se flamuri --target_archs mund të përdoret për të specifikuar arkitekturat tuaja të vendosjes.

Përdoreni në aplikacionin tuaj

Zhvilluesit e CocoaPods

Ekzistojnë tre CocoaPods për LiteRT:

  • TensorFlowLiteSwift : Ofron API-të Swift për LiteRT.
  • TensorFlowLiteObjC : Ofron API-të Objective-C për LiteRT.
  • TensorFlowLiteC : Baza e përbashkët e podit, e cila ngulit kohën e funksionimit bazë LiteRT dhe ekspozon API-të bazë C të përdorura nga dy podet e mësipërme. Nuk është menduar të përdoret drejtpërdrejt nga përdoruesit.

Si zhvillues, duhet të zgjidhni ose TensorFlowLiteSwift ose TensorFlowLiteObjC pod bazuar në gjuhën në të cilën është shkruar aplikacioni juaj, por jo të dyja. Hapat e saktë për përdorimin e ndërtimeve lokale të LiteRT ndryshojnë, në varësi të asaj pjese të saktë që dëshironi të ndërtoni.

Përdorimi i API-ve lokale Swift ose Objective-C

Nëse jeni duke përdorur CocoaPods dhe dëshironi të provoni vetëm disa ndryshime lokale në API-të Swift të LiteRT ose API-të Objective-C , ndiqni hapat këtu.

  1. Bëni ndryshime në API-të Swift ose Objective-C në arkën tuaj tensorflow .

  2. Hapni skedarin TensorFlowLite(Swift|ObjC).podspec dhe përditësoni këtë rresht:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    të jetë:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Kjo është për t'u siguruar që po ndërtoni API-të tuaja Swift ose Objective-C kundër versionit më të fundit të disponueshëm për natë të API-ve TensorFlowLiteC (të ndërtuara çdo natë midis orës 1-4 të mëngjesit të kohës së Paqësorit) në vend të versionit të qëndrueshëm, i cili mund të jetë i vjetëruar në krahasim me arkëtimin tuaj lokal tensorflow . Përndryshe, ju mund të zgjidhni të publikoni versionin tuaj të TensorFlowLiteC dhe të përdorni atë version (shihni Përdorimi i seksionit bazë lokal të LiteRT më poshtë).

  3. Podfile të projektit tuaj iOS, ndryshoni varësinë si më poshtë për të treguar shtegun lokal në direktorinë tuaj rrënjësore tensorflow .
    Për Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Për objektivin-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Përditësoni instalimin e pod nga direktoria kryesore e projektit tuaj iOS.
    $ pod update

  5. Rihapni hapësirën e krijuar të punës ( <project>.xcworkspace ) dhe rindërtoni aplikacionin tuaj brenda Xcode.

Duke përdorur bërthamën lokale LiteRT

Mund të konfiguroni një depo private të specifikave të CocoaPods dhe të publikoni kornizën tuaj të personalizuar TensorFlowLiteC në depon tuaj private. Ju mund ta kopjoni këtë skedar podspec dhe të modifikoni disa vlera:

  ...
  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'
  ...

Pasi të krijoni skedarin tuaj TensorFlowLiteC.podspec , mund të ndiqni udhëzimet për përdorimin e CocoaPods private për ta përdorur atë në projektin tuaj. Ju gjithashtu mund të modifikoni TensorFlowLite(Swift|ObjC).podspec për të treguar në podin tuaj të personalizuar TensorFlowLiteC dhe të përdorni ose Swift ose Objective-C pod në projektin tuaj të aplikacionit.

Zhvilluesit e Bazel

Nëse po përdorni Bazel si mjetin kryesor të ndërtimit, thjesht mund të shtoni varësinë TensorFlowLite në objektivin tuaj në skedarin tuaj BUILD .

Për Swift:

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

Për objektivin-C:

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

Kur ndërtoni projektin tuaj të aplikacionit, çdo ndryshim në bibliotekën LiteRT do të merret dhe do të futet në aplikacionin tuaj.

Ndryshoni drejtpërdrejt cilësimet e projektit Xcode

Rekomandohet shumë të përdorni CocoaPods ose Bazel për të shtuar varësinë LiteRT në projektin tuaj. Nëse ende dëshironi të shtoni manualisht kornizën TensorFlowLiteC , do t'ju duhet të shtoni kornizën TensorFlowLiteC si një kornizë të integruar në projektin tuaj të aplikacionit. Shkëputni TensorFlowLiteC_framework.zip të krijuar nga ndërtimi i mësipërm për të marrë direktorinë TensorFlowLiteC.framework . Kjo direktori është korniza aktuale të cilën Xcode mund ta kuptojë.

Pasi të keni përgatitur TensorFlowLiteC.framework , fillimisht duhet ta shtoni atë si një binar të integruar në objektivin e aplikacionit tuaj. Seksioni i saktë i cilësimeve të projektit për këtë mund të ndryshojë në varësi të versionit tuaj Xcode.

  • Xcode 11: Shkoni te skeda "Të përgjithshme" të redaktuesit të projektit për objektivin e aplikacionit tuaj dhe shtoni TensorFlowLiteC.framework nën seksionin "Kornizat, bibliotekat dhe përmbajtjet e integruara".
  • Xcode 10 dhe më poshtë: Shkoni te skeda 'Të përgjithshme' të redaktuesit të projektit për objektivin e aplikacionit tuaj dhe shtoni kornizën TensorFlowLiteC.framework nën 'Binarët e integruar'. Korniza duhet gjithashtu të shtohet automatikisht nën seksionin "Kornizat e lidhura dhe bibliotekat".

Kur shtoni kornizën si një binar të integruar, Xcode do të përditësonte gjithashtu hyrjen "Shtigjet e kërkimit të kornizës" nën skedën "Cilësimet e ndërtimit" për të përfshirë drejtorinë mëmë të kornizës suaj. Në rast se kjo nuk ndodh automatikisht, duhet të shtoni manualisht drejtorinë prind të drejtorisë TensorFlowLiteC.framework .

Pasi të kryhen këto dy cilësime, duhet të jeni në gjendje të importoni dhe telefononi API-në C të LiteRT, të përcaktuar nga skedarët e kokës nën drejtorinë TensorFlowLiteC.framework/Headers .