iOS के लिए LiteRT बनाएं

इस दस्तावेज़ में, LiteRT iOS लाइब्रेरी को खुद बनाने का तरीका बताया गया है. आम तौर पर, आपको LiteRT iOS लाइब्रेरी बनाने की ज़रूरत नहीं होती. अगर आपको इसका इस्तेमाल करना है, तो सबसे आसान तरीका है पहले से बने स्टेबल या नाइटली का इस्तेमाल करना LiteRT CocoaPods की रिलीज़. iOS देखें क्विकस्टार्ट देखें, ताकि आप iOS में इनका इस्तेमाल करने के बारे में ज़्यादा जानकारी पा सकें प्रोजेक्ट.

स्थानीय तौर पर बनाया जा रहा है

कुछ मामलों में, हो सकता है कि आप LiteRT के लोकल बिल्ड का इस्तेमाल करना चाहें, उदाहरण के लिए, जब आपको LiteRT में स्थानीय बदलाव करने हों और उनकी जांच करनी हो में बदलाव किए हैं या आप हमारे दिए गए डाइनैमिक वन. स्थानीय तौर पर LiteRT के लिए यूनिवर्सल iOS फ़्रेमवर्क बनाने के लिए, तो आपको इसे macOS मशीन पर Basel का इस्तेमाल करके बनाना होगा.

Xcode इंस्टॉल करें

अगर आपने पहले से ऐसा नहीं किया है, तो आपको Xcode 8 या उसके बाद के वर्शन और ऐसे ही अन्य टूल इंस्टॉल करने होंगे xcode-select का इस्तेमाल करके:

xcode-select --install

अगर यह एक नया इंस्टॉल है, तो आपको सभी के लिए लाइसेंस अनुबंध स्वीकार करना होगा निम्न आदेश वाले उपयोगकर्ता:

sudo xcodebuild -license accept

Basel इंस्टॉल करें

TensorFlow का मुख्य बिल्ड सिस्टम Baज़ल है. बेज़ेल को इस तरह इंस्टॉल करें: Basel की वेबसाइट पर निर्देश दिए गए हैं. अपनी सदस्यता के बारे में _TF_MIN_BAZEL_VERSION और _TF_MAX_BAZEL_VERSION के बीच का यह वर्शन है configure.py फ़ाइल, tensorflow डेटा स्टोर करने की जगह के रूट में मौजूद है.

Workspace और .baselrc को कॉन्फ़िगर करें

TensorFlow की रूट चेकआउट डायरेक्ट्री में ./configure स्क्रिप्ट चलाएं और "हां" में जवाब दें जब स्क्रिप्ट आपसे पूछती है कि क्या आपको iOS के साथ TensorFlow बनाना है सहायता.

iOS समर्थन के साथ Basel के सही तरीके से कॉन्फ़िगर हो जाने के बाद, आप TensorFlowLiteC फ़्रेमवर्क जिसमें ये निर्देश दिए गए हैं.

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

यह निर्देश इसके तहत TensorFlowLiteC_framework.zip फ़ाइल जनरेट करेगा आपकी TensorFlow रूट डायरेक्ट्री में bazel-bin/tensorflow/lite/ios/ डायरेक्ट्री. डिफ़ॉल्ट रूप से, जनरेट किए गए फ़्रेमवर्क में "फ़ैट" शामिल होता है बाइनरी, जिसमें आर्मv7 शामिल है, आर्म64, और x86_64 (लेकिन i386 नहीं). कब इस्तेमाल किए गए बिल्ड फ़्लैग की पूरी सूची देखने के लिए आप --config=ios_fat तय करते हैं, तो कृपया इसके 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 फ़्रेमवर्क को चुनिंदा तरीके से बनाना

चुनिंदा मॉडल का इस्तेमाल करके, सिर्फ़ मॉडल के सेट को टारगेट करने वाले छोटे फ़्रेमवर्क बनाए जा सकते हैं बिल्ड शामिल है, जो आपके मॉडल सेट में इस्तेमाल न होने वाली कार्रवाइयों को छोड़ देगा और सिर्फ़ मॉडल के दिए गए सेट को चलाने के लिए ज़रूरी ऑप कर्नेल. इसका निर्देश इस तरह का है:

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

ऊपर दिया गया निर्देश, स्टैटिक फ़्रेमवर्क जनरेट करेगा TensorFlow के लिए bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip लाइट बिल्ट-इन और कस्टम ऑपरेशन; और वैकल्पिक रूप से, स्टैटिक फ़्रेमवर्क जनरेट करता है. 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 एपीआई उपलब्ध कराता है.
  • TensorFlowLiteC: कॉमन बेस पॉड, जो LiteRT कोर को एम्बेड करता है रनटाइम को एक्सपोर्ट करता है और ऊपर दिए गए दो पॉड के लिए इस्तेमाल किए गए बेस C API की जानकारी देता है. इसका लक्ष्य नहीं होना चाहिए उपयोगकर्ताओं को सीधे तौर पर इसका इस्तेमाल करना चाहिए.

डेवलपर के तौर पर, आपको TensorFlowLiteSwift या आपके ऐप्लिकेशन की भाषा के आधार पर TensorFlowLiteObjC पॉड, लेकिन दोनों नहीं. LiteRT के लोकल बिल्ड का इस्तेमाल करने के तरीके अलग-अलग हैं, यह इस बात पर निर्भर करता है कि आपको कौनसा पार्ट बनाना है.

लोकल Swift या Objective-C एपीआई इस्तेमाल करना

अगर CocoaPods का इस्तेमाल किया जा रहा है और आपको सिर्फ़ LiteRT के Swift API या Objective-C एपीआई, यहां दिया गया तरीका अपनाएं.

  1. tensorflow के चेकआउट पेज पर, Swift या Objective-C एपीआई में बदलाव करें.

  2. TensorFlowLite(Swift|ObjC).podspec फ़ाइल खोलें और इस लाइन को अपडेट करें:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    इसे होना चाहिए:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    इससे यह पक्का होता है कि Swift या Objective-C एपीआई बनाया जा रहा है TensorFlowLiteC एपीआई के हर रात उपलब्ध होने वाले सबसे नए वर्शन के हिसाब से (पैसिफ़िक समय के हिसाब से हर रात 1 से 4 बजे के बीच बनाया जाता है) के लिए स्थायी नहीं माना जाता वर्शन देखें, जो आपके स्थानीय tensorflow चेकआउट की तुलना में पुराना हो सकता है. इसके अलावा, आपके पास खुद का TensorFlowLiteC और उस वर्शन का इस्तेमाल करें (लोकल LiteRT का इस्तेमाल करना देखें Core सेक्शन में बताया गया है).

  3. अपने iOS प्रोजेक्ट के Podfile में, डिपेंडेंसी को इस तरह बदलें आपकी tensorflow रूट डायरेक्ट्री के लोकल पाथ पर ले जाता है.
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है Swift के लिए:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Objective-C के लिए:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. अपने iOS प्रोजेक्ट की रूट डायरेक्ट्री से पॉड इंस्टॉलेशन अपडेट करें.
    $ pod update

  5. जनरेट किए गए फ़ाइल फ़ोल्डर (<project>.xcworkspace) को फिर से खोलें और अपने Xcode में मौजूद ऐप्लिकेशन खोलें.

लोकल 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 पॉड पर जाएं और Swift या Objective-C का इस्तेमाल करें पॉड को शेड्यूल किया जा सकता है.

बेज़ल डेवलपर्स

अगर मुख्य बिल्ड टूल के तौर पर Basel का इस्तेमाल किया जा रहा है, तो आपके पास आपकी BUILD फ़ाइल में, टारगेट पर TensorFlowLite निर्भरता.

Swift के लिए:

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

Objective-C के लिए:

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

ऐप्लिकेशन प्रोजेक्ट बनाने के बाद, LiteRT लाइब्रेरी में होने वाला कोई भी बदलाव उस सुविधा को अपने ऐप्लिकेशन में आसानी से इस्तेमाल कर सकते हैं.

Xcode प्रोजेक्ट की सेटिंग में सीधे बदलाव करें

LiteRT जोड़ने के लिए, CocoaPods या Basel का इस्तेमाल करने का सुझाव दिया जाता है निर्भर नहीं करता है. अगर आपको अब भी TensorFlowLiteC जोड़ना है फ़्रेमवर्क को मैन्युअल तौर पर जोड़ना होगा, तो आपको TensorFlowLiteC फ़्रेमवर्क को आपके ऐप्लिकेशन प्रोजेक्ट में एम्बेड किया गया फ़्रेमवर्क. अनज़िप करें TensorFlowLiteC_framework.zip को पाने के लिए ऊपर दिए गए बिल्ड से जनरेट किया गया TensorFlowLiteC.framework डायरेक्ट्री. यह डायरेक्ट्री असल फ़्रेमवर्क है जिसे Xcode समझ सकता है.

TensorFlowLiteC.framework तैयार करने के बाद, आपको सबसे पहले उसे जोड़ना होगा आपके ऐप्लिकेशन टारगेट में एम्बेड किए गए बाइनरी के तौर पर. यह यह आपके Xcode वर्शन के आधार पर अलग-अलग हो सकता है.

  • Xcode 11: 'General' पर जाएं प्रोजेक्ट संपादक के टैब पर क्लिक करके, और जोड़ें TensorFlowLiteC.framework के अंतर्गत 'Frameworks, Libraries, एम्बेड किया गया कॉन्टेंट' सेक्शन में जाएं.
  • Xcode 10 और इससे पहले के वर्शन: 'General' पर जाएं टैब पर जाकर, प्रोजेक्ट एडिटर के और 'एम्बेड किए गए' में TensorFlowLiteC.framework को जोड़ें बाइनरी. फ़्रेमवर्क अपने-आप 'लिंक किया गया' में भी जुड़ जाना चाहिए फ़्रेमवर्क और लाइब्रेरी सेक्शन में जाएं.

जब आप फ़्रेमवर्क को एम्बेड की गई बाइनरी के तौर पर जोड़ते हैं, तो Xcode 'फ़्रेमवर्क खोज पाथ' 'बिल्ड सेटिंग' में दी गई एंट्री पैरंट को शामिल करने के लिए, Tab दबाएं आपके फ़्रेमवर्क की डायरेक्ट्री. अगर ऐसा अपने-आप नहीं होता है, तो आपको को TensorFlowLiteC.framework की पैरंट डायरेक्ट्री को मैन्युअल तरीके से जोड़ना चाहिए डायरेक्ट्री.

ये दो सेटिंग पूरी हो जाने के बाद, आप LiteRT का C API, जिसे TensorFlowLiteC.framework/Headers डायरेक्ट्री.