মান অনুমান করার জন্য একটি iOS অ্যাপ তৈরি করুন

1. আপনি শুরু করার আগে

এই কোডল্যাবে, আপনি REST এবং gRPC-এর সাথে TensorFlow সার্ভিং ব্যবহার করে একটি iOS অ্যাপ থেকে কীভাবে রিগ্রেশন ইনফারেন্স চালাতে হয় তা শিখবেন।

পূর্বশর্ত

  • সুইফটের সাথে আইওএস ডেভেলপমেন্টের প্রাথমিক জ্ঞান
  • টেনসরফ্লো সহ মেশিন লার্নিং এর প্রাথমিক জ্ঞান, যেমন প্রশিক্ষণ এবং স্থাপনা
  • Colaboratory এর প্রাথমিক জ্ঞান
  • টার্মিনাল, পাইথন এবং ডকার সম্পর্কে প্রাথমিক জ্ঞান

আপনি কি শিখবেন

  • TensorFlow-এর সাহায্যে কীভাবে রিগ্রেশন মডেলকে প্রশিক্ষণ দেওয়া যায়।
  • কিভাবে একটি সাধারণ iOS অ্যাপ তৈরি করা যায় এবং TensorFlow সার্ভিং (REST এবং gRPC) এর মাধ্যমে প্রশিক্ষিত মডেলের সাথে ভবিষ্যদ্বাণী করা যায়।
  • কিভাবে UI এ ফলাফল প্রদর্শন করবেন।

আপনি কি প্রয়োজন হবে

2. সেট আপ করুন

এই কোডল্যাবের জন্য কোড ডাউনলোড করতে:

  1. এই কোডল্যাবের জন্য GitHub সংগ্রহস্থলে নেভিগেট করুন।
  2. এই কোডল্যাবের জন্য সমস্ত কোড ডাউনলোড করতে কোড > জিপ ডাউনলোড করুন ক্লিক করুন।

a72f2bb4caa9a96.png

  1. আপনার প্রয়োজনীয় সমস্ত সংস্থান সহ একটি codelabs রুট ফোল্ডার আনপ্যাক করতে ডাউনলোড করা জিপ ফাইলটি আনজিপ করুন।

এই কোডল্যাবের জন্য, আপনার শুধুমাত্র সংগ্রহস্থলের TFServing/RegressioniOS সাবডিরেক্টরিতে ফাইলগুলির প্রয়োজন, যেখানে দুটি ফোল্ডার রয়েছে:

  • starter ফোল্ডারে স্টার্টার কোড থাকে যা আপনি এই কোডল্যাবের জন্য তৈরি করেন।
  • finished ফোল্ডারে সমাপ্ত নমুনা অ্যাপ্লিকেশনের জন্য সম্পূর্ণ কোড রয়েছে।

3. প্রকল্পের জন্য নির্ভরতা ডাউনলোড করুন

প্রয়োজনীয় পড ডাউনলোড করুন

  • starter/iOS ফোল্ডারে, চালান:
pod install

Cocoapods সমস্ত প্রয়োজনীয় লাইব্রেরি ইনস্টল করবে এবং একটি নতুন regression.xcworkspace ফাইল তৈরি করবে।

4. স্টার্টার অ্যাপ চালান

  • Xcode খুলতে regression.xcworkspace ফাইলটিতে ডাবল ক্লিক করুন।

অ্যাপটি চালান এবং অন্বেষণ করুন

  1. আইফোন 13-এর মতো যেকোনো আইফোনে ডিভাইসের লক্ষ্য পরিবর্তন করুন।

a57198a4f21f970.png

  1. ক্লিক cacc15c5638260ed.png 'রান' , এবং তারপরে প্রকল্পটি কম্পাইল করার জন্য Xcode পর্যন্ত অপেক্ষা করুন এবং সিমুলেটরে স্টার্টার অ্যাপ শুরু করুন।

UI বেশ সোজা। একটি পাঠ্য বাক্স রয়েছে যেখানে আপনি একটি নম্বর টাইপ করতে পারেন, যা REST বা gRPC সহ TensorFlow সার্ভিং ব্যাকএন্ডে পাঠানো হয়। ব্যাকএন্ড ইনপুট মানের উপর রিগ্রেশন সঞ্চালন করে এবং ক্লায়েন্ট অ্যাপে পূর্বাভাসিত মান ফেরত দেয়, যা আবার UI-তে ফলাফল প্রদর্শন করে।

d2976072474ce0b1.png

আপনি যদি একটি নম্বর ইনপুট করেন এবং Infer এ ক্লিক করেন, তাহলে কিছুই হবে না কারণ অ্যাপটি এখনও ব্যাকএন্ডের সাথে যোগাযোগ করতে পারে না।

5. TensorFlow এর সাথে একটি সাধারণ রিগ্রেশন মডেল প্রশিক্ষিত করুন

রিগ্রেশন হল সবচেয়ে সাধারণ এমএল কাজগুলির মধ্যে একটি। এর লক্ষ্য হল ইনপুটের উপর ভিত্তি করে একটি একক ক্রমাগত পরিমাণের ভবিষ্যদ্বাণী করা। উদাহরণস্বরূপ, আজকের আবহাওয়ার উপর ভিত্তি করে, আগামীকাল সর্বোচ্চ তাপমাত্রার পূর্বাভাস দিন।

একটি রিগ্রেশন মডেল প্রশিক্ষণ

  1. আপনার ব্রাউজারে এই লিঙ্কটি খুলুন।

Colab পাইথন নোটবুক লোড করে।

  1. পাইথন নোটবুকে, TensorFlow এবং NumPy লাইব্রেরিগুলি আমদানি করুন এবং তারপরে ইনপুট হিসাবে xs এবং লেবেল হিসাবে ys সহ ছয় জোড়া প্রশিক্ষণ ডেটা তৈরি করুন৷

আপনি যদি এই ডেটা পয়েন্টগুলিকে একটি গ্রাফে প্লট করেন তবে এগুলি আসলে একটি সরল রেখায় থাকে কারণ সেগুলি y = 2 x -1 সমীকরণ থেকে তৈরি হয়৷

56d05252cfc9df9d.png

  1. x ইনপুটের উপর ভিত্তি করে y মানের পূর্বাভাস দিতে একটি সাধারণ দ্বি-স্তর নিউরাল নেটওয়ার্ক তৈরি করতে Keras API ব্যবহার করুন এবং তারপরে মডেলটি কম্পাইল করুন এবং ফিট করুন।
xs = np.array([-1.0,  0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

model = tf.keras.Sequential([
   tf.keras.layers.Dense(units=10, input_shape=[1]),
   tf.keras.layers.Dense(units=1),
   ])

model.compile(optimizer='sgd',
             loss='mean_squared_error')

history = model.fit(xs, ys, epochs=500, verbose=0)

print("Finished training the model")

print(model.predict([10.0]))

মডেলটি প্রশিক্ষিত হতে কয়েক সেকেন্ড সময় নেয় এবং আপনি দেখতে পাচ্ছেন 10 ইনপুটের ভবিষ্যদ্বাণীকৃত মান হল 18.999996 , যা স্থল সত্য 2 * 10 -1 = 19 হওয়ার কারণে একটি সুন্দর ভবিষ্যদ্বাণী।

  1. মডেল রপ্তানি করুন:
model_dir = './regression/'
version = 123
export_path = os.path.join(model_dir, str(version))
model.save(export_path, save_format="tf")
print('\nexport_path = {}'.format(export_path))
!ls -l {export_path}
  1. রপ্তানি করা SavedModelটিকে একটি একক regression.zip ফাইলে জিপ করুন:
!zip -r regression.zip ./regression
  1. নোটবুক চালানোর জন্য নেভিগেশন মেনুতে রানটাইম > রান সব ক্লিক করুন এবং তারপর রান শেষ হওয়ার জন্য অপেক্ষা করুন।
  2. ক্লিক c55600d42359f901.png ফাইল এবং তারপর regression.zip ফাইল ডাউনলোড করুন।

bceda15d86571583.png

6. টেনসরফ্লো সার্ভিং সহ একটি রিগ্রেশন মডেল স্থাপন করুন

  • TensorFlow সার্ভিং এর সাথে মডেলটি স্থাপন করতে, ডাউনলোড regression.zip ফাইলটিকে একটি ডিকম্প্রেশন টুল, যেমন 7-জিপ দিয়ে আনকম্প্রেস করুন।

ফোল্ডার গঠন এই ছবির মত দেখতে হবে:

7faeb4f03af39646.png

আপনি regression ফোল্ডারটিকে SavedModel ফোল্ডার হিসাবে উল্লেখ করতে পারেন। 123 একটি উদাহরণ সংস্করণ নম্বর। আপনি যদি চান, আপনি অন্য নম্বর চয়ন করতে পারেন.

TensorFlow পরিবেশন শুরু করুন

  • আপনার টার্মিনালে, ডকারের সাথে টেনসরফ্লো সার্ভিং শুরু করুন, তবে আপনার কম্পিউটারে regression ফোল্ডারের পরম পাথ দিয়ে PATH/TO/SAVEDMODEL স্থানধারকটিকে প্রতিস্থাপন করুন।
docker pull tensorflow/serving

docker run -it --rm -p 8500:8500 -p 8501:8501 -v "PATH/TO/SAVEDMODEL:/models/regression" -e MODEL_NAME=regression tensorflow/serving

ডকার স্বয়ংক্রিয়ভাবে টেনসরফ্লো সার্ভিং ইমেজটি প্রথমে ডাউনলোড করে, যা এক মিনিট সময় নেয়। এর পরে, টেনসরফ্লো পরিবেশন শুরু করা উচিত। লগটি এই কোড স্নিপেটের মতো হওয়া উচিত:

2022-02-25 06:01:12.513231: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:206] Restoring SavedModel bundle.
2022-02-25 06:01:12.585012: I external/org_tensorflow/tensorflow/core/platform/profile_utils/cpu_utils.cc:114] CPU Frequency: 3000000000 Hz
2022-02-25 06:01:13.395083: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:190] Running initialization op on SavedModel bundle at path: /models/ssd_mobilenet_v2_2/123
2022-02-25 06:01:13.837562: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:277] SavedModel load for tags { serve }; Status: success: OK. Took 1928700 microseconds.
2022-02-25 06:01:13.877848: I tensorflow_serving/servables/tensorflow/saved_model_warmup_util.cc:59] No warmup data file found at /models/ssd_mobilenet_v2_2/123/assets.extra/tf_serving_warmup_requests
2022-02-25 06:01:13.929844: I tensorflow_serving/core/loader_harness.cc:87] Successfully loaded servable version {name: regression version: 123}
2022-02-25 06:01:13.985848: I tensorflow_serving/model_servers/server_core.cc:486] Finished adding/updating models
2022-02-25 06:01:13.985987: I tensorflow_serving/model_servers/server.cc:367] Profiler service is enabled
2022-02-25 06:01:13.988994: I tensorflow_serving/model_servers/server.cc:393] Running gRPC ModelServer at 0.0.0.0:8500 ...
[warn] getaddrinfo: address family for nodename not supported
2022-02-25 06:01:14.033872: I tensorflow_serving/model_servers/server.cc:414] Exporting HTTP/REST API at:localhost:8501 ...
[evhttp_server.cc : 245] NET_LOG: Entering the event loop ...

7. REST এর মাধ্যমে TensorFlow সার্ভিং এর সাথে iOS অ্যাপ সংযুক্ত করুন

ব্যাকএন্ড এখন প্রস্তুত, তাই আপনি ভবিষ্যদ্বাণী করতে টেনসরফ্লো সার্ভিং-এ ক্লায়েন্টের অনুরোধ পাঠাতে পারেন। TensorFlow সার্ভিং-এ অনুরোধ পাঠানোর দুটি উপায় আছে:

  • বিশ্রাম
  • gRPC

অনুরোধ পাঠান এবং REST এর সাথে প্রতিক্রিয়া পান

তিনটি সহজ পদক্ষেপ আছে:

  1. REST অনুরোধ তৈরি করুন।
  2. TensorFlow সার্ভিং-এ REST অনুরোধ পাঠান।
  3. REST প্রতিক্রিয়া থেকে পূর্বাভাসিত ফলাফল বের করুন এবং UI রেন্ডার করুন।

আপনি iOS/regression/ViewController.swift ফাইলে এই পদক্ষেপগুলি অর্জন করুন৷

REST অনুরোধ তৈরি করুন

  1. এই মুহূর্তে, doInference() ফাংশন TensorFlow Serving-এ REST অনুরোধ পাঠায় না। একটি REST অনুরোধ তৈরি করতে আপনাকে এই REST শাখাটি বাস্তবায়ন করতে হবে:
if (connectionMode[picker.selectedRow(inComponent: 0)] == "REST") {
    print("Using REST")
    // TODO: Add code to send a REST request to TensorFlow Serving.
    
}

TensorFlow সার্ভিং একটি POST অনুরোধ আশা করে যাতে একটি একক মান রয়েছে, তাই আপনাকে JSON-এ ইনপুট মান এম্বেড করতে হবে, যা অনুরোধের পেলোড।

  1. REST শাখায় এই কোড যোগ করুন:
//Create the REST request.
let json: [String: Any] = ["signature_name" : "serving_default", "instances" : [[value]]]

let jsonData = try? JSONSerialization.data(withJSONObject: json)

let url = URL(string: "http://localhost:8501/v1/models/regression:predict")!
var request = URLRequest(url: url)
request.httpMethod = "POST"

// Insert JSON data into the request.
request.httpBody = jsonData

TensorFlow সার্ভিং-এ REST অনুরোধ পাঠান

  • REST শাখায় কোডের পরে অবিলম্বে এই কোডটি যোগ করুন:
// Send the REST request.
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else {
        print(error?.localizedDescription ?? "No data")
        return
    }
    
    // TODO: Add code to process the response.
}

task.resume()

TensorFlow সার্ভিং থেকে REST প্রতিক্রিয়া প্রক্রিয়া করুন

  • TODO: Add code to process the response. মন্তব্য:
// Process the REST response.
let results: RESTResults = try! JSONDecoder().decode(RESTResults.self, from: data)
DispatchQueue.main.async{
    self.txtOutput.text = String(results.predictions[0][0])
}

এখন পোস্টপ্রসেসিং ফাংশন প্রতিক্রিয়া থেকে পূর্বাভাসিত মান বের করে এবং ফলাফলটি UI-তে প্রদর্শন করে।

চালাও এটা

  1. ক্লিক cacc15c5638260ed.png 'চালান' এবং তারপরে সিমুলেটরে অ্যাপ চালু করার জন্য Xcode পর্যন্ত অপেক্ষা করুন।
  2. পাঠ্য বাক্সে একটি নম্বর লিখুন এবং তারপরে ইনফার ক্লিক করুন।

এখন আপনি UI এ একটি পূর্বাভাসিত মান দেখতে পাচ্ছেন।

df9bcb9aa21bb30e.png

8. GRPC-এর মাধ্যমে TensorFlow সার্ভিংয়ের সাথে iOS অ্যাপ সংযুক্ত করুন

REST ছাড়াও, TensorFlow সার্ভিং এছাড়াও gRPC সমর্থন করে।

b6f4449c2c850b0e.png

gRPC হল একটি আধুনিক, ওপেন সোর্স, হাই-পারফরম্যান্স রিমোট প্রসিডিউর কল (RPC) ফ্রেমওয়ার্ক যা যেকোনো পরিবেশে চলতে পারে। এটি লোড ব্যালেন্সিং, ট্রেসিং, হেলথ চেকিং এবং প্রমাণীকরণের জন্য প্লাগেবল সাপোর্ট সহ ডেটা সেন্টারে এবং জুড়ে পরিষেবাগুলিকে দক্ষতার সাথে সংযুক্ত করতে পারে। এটা দেখা গেছে যে জিআরপিসি অনুশীলনে REST এর চেয়ে বেশি কার্যকরী।

অনুরোধ পাঠান এবং gRPC এর সাথে প্রতিক্রিয়া পান

চারটি সহজ ধাপ রয়েছে:

  1. ঐচ্ছিক: gRPC ক্লায়েন্ট স্টাব কোড তৈরি করুন।
  2. জিআরপিসি অনুরোধ তৈরি করুন।
  3. টেনসরফ্লো সার্ভিং-এ gRPC অনুরোধ পাঠান।
  4. gRPC প্রতিক্রিয়া থেকে পূর্বাভাসিত ফলাফল বের করুন এবং UI রেন্ডার করুন।

আপনি iOS/regression/ViewController.swift ফাইলে এই পদক্ষেপগুলি অর্জন করুন৷

ঐচ্ছিক: gRPC ক্লায়েন্ট স্টাব কোড তৈরি করুন

TensorFlow সার্ভিংয়ের সাথে gRPC ব্যবহার করতে, আপনাকে gRPC ওয়ার্কফ্লো অনুসরণ করতে হবে। বিস্তারিত সম্পর্কে আরও জানতে, gRPC ডকুমেন্টেশন দেখুন।

a9d0e5cb543467b4.png

TensorFlow সার্ভিং এবং TensorFlow আপনার জন্য .proto ফাইলগুলিকে সংজ্ঞায়িত করে৷ TensorFlow এবং TensorFlow সার্ভিং 2.8 অনুযায়ী, এই .proto ফাইলগুলি প্রয়োজন:

tensorflow/core/example/example.proto
tensorflow/core/example/feature.proto
tensorflow/core/protobuf/struct.proto
tensorflow/core/protobuf/saved_object_graph.proto
tensorflow/core/protobuf/saver.proto
tensorflow/core/protobuf/trackable_object_graph.proto
tensorflow/core/protobuf/meta_graph.proto
tensorflow/core/framework/node_def.proto
tensorflow/core/framework/attr_value.proto
tensorflow/core/framework/function.proto
tensorflow/core/framework/types.proto
tensorflow/core/framework/tensor_shape.proto
tensorflow/core/framework/full_type.proto
tensorflow/core/framework/versions.proto
tensorflow/core/framework/op_def.proto
tensorflow/core/framework/graph.proto
tensorflow/core/framework/tensor.proto
tensorflow/core/framework/resource_handle.proto
tensorflow/core/framework/variable.proto

tensorflow_serving/apis/inference.proto
tensorflow_serving/apis/classification.proto
tensorflow_serving/apis/predict.proto
tensorflow_serving/apis/regression.proto
tensorflow_serving/apis/get_model_metadata.proto
tensorflow_serving/apis/input.proto
tensorflow_serving/apis/prediction_service.proto
tensorflow_serving/apis/model.proto

gRPC ক্লায়েন্ট স্টাব কোড তৈরি করতে:

  1. আপনার টার্মিনালে, starter/src/proto/ ফোল্ডারে নেভিগেট করুন এবং তারপর স্টাব তৈরি করুন:
bash generate_grpc_stub_swift.sh

Starter starter/src/proto/generated/import ফোল্ডারে বেশ কিছু .swift ফাইল তৈরি হয়।

  1. যদি সেগুলি এখনও আপনার প্রকল্পে অনুলিপি করা না হয়, তাহলে সমস্ত জেনারেট করা .swift ফাইলগুলিকে Xcode-এ আপনার প্রকল্পে টেনে আনুন৷

9e65705cf6be7aac.png

জিআরপিসি অনুরোধ তৈরি করুন

REST অনুরোধের মতো, আপনি gRPC শাখায় gRPC অনুরোধ তৈরি করেন।

if (connectionMode[picker.selectedRow(inComponent: 0)] == "REST") {
    
}
else {
    print("Using gRPC")
    // TODO: add code to send a gRPC request to TF Serving
    
}
  • gRPC অনুরোধ তৈরি করতে, এই কোডটি gRPC শাখায় যোগ করুন:
//Create the gRPC request.
let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let channel = ClientConnection.insecure(group: group).connect(host: "localhost", port: 8500)
let stub = Tensorflow_Serving_PredictionServiceClient(channel: channel)

var modelSpec = Tensorflow_Serving_ModelSpec()
modelSpec.name = "regression"
modelSpec.signatureName = "serving_default"

// Prepare the input tensor.
var batchDim = Tensorflow_TensorShapeProto.Dim()
batchDim.size = 1
var inputDim = Tensorflow_TensorShapeProto.Dim()
inputDim.size = 1
var inputTensorShape = Tensorflow_TensorShapeProto()
inputTensorShape.dim = [batchDim, inputDim]
var inputTensor = Tensorflow_TensorProto()
inputTensor.dtype = Tensorflow_DataType.dtFloat
inputTensor.tensorShape = inputTensorShape
inputTensor.floatVal = [Float(value)]

var request = Tensorflow_Serving_PredictRequest()
request.modelSpec = modelSpec
request.inputs = ["dense_input" : inputTensor]

let callOptions = CallOptions(timeLimit: .timeout(.seconds(15)))

টেনসরফ্লো সার্ভিং-এ gRPC অনুরোধ পাঠান

  • পূর্ববর্তী কোড স্নিপেটে কোডের পরে অবিলম্বে gRPC শাখায় এই কোডটি যোগ করুন:
// Send the gRPC request.
let call = stub.predict(request, callOptions: callOptions)

TensorFlow সার্ভিং থেকে gRPC প্রতিক্রিয়া প্রক্রিয়া করুন

  • পূর্ববর্তী কোড স্নিপেটে কোডের পরে অবিলম্বে এই কোড যোগ করুন:
// Process the response.
call.response.whenSuccess { response in
    let result = response.outputs["dense_1"]?.floatVal[0]
    DispatchQueue.main.async{
        self.txtOutput.text = String(describing: result!)
    }
}
call.response.whenFailure { error in
    print("Call failed with error\n\(error)")
}

এখন পোস্টপ্রসেসিং ফাংশন প্রতিক্রিয়া থেকে পূর্বাভাসিত মান বের করে এবং ফলাফলটি UI-তে প্রদর্শন করে।

চালাও এটা

  1. ক্লিক cacc15c5638260ed.png নেভিগেশন মেনুতে 'রান' করুন এবং তারপরে সিমুলেটরে অ্যাপটি চালু করার জন্য Xcode পর্যন্ত অপেক্ষা করুন।
  2. পাঠ্য বাক্সে একটি নম্বর লিখুন এবং তারপরে ইনফার ক্লিক করুন।

এখন আপনি UI এ একটি পূর্বাভাসিত মান দেখতে পাচ্ছেন।

9. অভিনন্দন

আপনি আপনার অ্যাপে রিগ্রেশন ক্ষমতা যোগ করতে TensorFlow সার্ভিং ব্যবহার করেছেন!

আরও জানুন