TensorFlow 服務 - AWS 深度學習 AMIs

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

TensorFlow 服務

TensorFlow Serving 是適用於機器學習模型的彈性、高效能服務系統。

tensorflow-serving-api 已預先安裝 Deep Learning AMI with Conda!您會找到範例指令碼,以在 中訓練、匯出和提供MNIST模型~/examples/tensorflow-serving/

若要執行任何這些範例,請先AMI使用 Conda 連線至您的深度學習並啟用 TensorFlow 環境。

$ source activate tensorflow2_p310

現在,將目錄變更到服務範例指令碼資料夾。

$ cd ~/examples/tensorflow-serving/

提供預先訓練的 Inception 模型

以下是您可以嘗試以提供像是 Inception 之不同模型的範例。一般而言,您需要一個可用的模型和用戶端指令碼才能下載至您的 DLAMI。

使用 Inception 模型提供及測試推論
  1. 下載模型。

    $ curl -O https://s3-us-west-2.amazonaws.com/tf-test-models/INCEPTION.zip
  2. Untar 模型。

    $ unzip INCEPTION.zip
  3. 下載哈士奇的圖片。

    $ curl -O https://upload.wikimedia.org/wikipedia/commons/b/b5/Siberian_Husky_bi-eyed_Flickr.jpg
  4. 啟動伺服器。請注意,若為 Amazon Linux,您必須將用於 model_base_path 的目錄從 /home/ubuntu 變更為 /home/ec2-user

    $ tensorflow_model_server --model_name=INCEPTION --model_base_path=/home/ubuntu/examples/tensorflow-serving/INCEPTION/INCEPTION --port=9000
  5. 在前景中執行伺服器時,您需要啟動另一個終端機工作階段才能繼續。開啟新的終端機,並使用 TensorFlow 啟用 source activate tensorflow2_p310。然後,使用您慣用的文字編輯器來建立具有下列內容的指令碼。將其命名為 inception_client.py。此指令碼會以影像檔案名稱做為參數,並從預先訓練的模型取得預測結果。

    from __future__ import print_function import grpc import tensorflow as tf import argparse from tensorflow_serving.apis import predict_pb2 from tensorflow_serving.apis import prediction_service_pb2_grpc parser = argparse.ArgumentParser( description='TF Serving Test', formatter_class=argparse.ArgumentDefaultsHelpFormatter ) parser.add_argument('--server_address', default='localhost:9000', help='Tenforflow Model Server Address') parser.add_argument('--image', default='Siberian_Husky_bi-eyed_Flickr.jpg', help='Path to the image') args = parser.parse_args() def main(): channel = grpc.insecure_channel(args.server_address) stub = prediction_service_pb2_grpc.PredictionServiceStub(channel) # Send request with open(args.image, 'rb') as f: # See prediction_service.proto for gRPC request/response details. request = predict_pb2.PredictRequest() request.model_spec.name = 'INCEPTION' request.model_spec.signature_name = 'predict_images' input_name = 'images' input_shape = [1] input_data = f.read() request.inputs[input_name].CopyFrom( tf.make_tensor_proto(input_data, shape=input_shape)) result = stub.Predict(request, 10.0) # 10 secs timeout print(result) print("Inception Client Passed") if __name__ == '__main__': main()
  6. 現在執行此指令碼,將伺服器位置和連接埠以及哈士奇相片的檔案名稱當做參數傳遞。

    $ python3 inception_client.py --server=localhost:9000 --image Siberian_Husky_bi-eyed_Flickr.jpg

訓練及服務MNIST模型

在本教學課程中,我們將匯出模型,然後在 tensorflow_model_server 應用程式中提供其服務。最後,您可以使用範例用戶端指令碼來測試模型伺服器。

執行將訓練和匯出MNIST模型的指令碼。做為指令碼的唯一引數,您需要提供資料夾位置供其用來儲存模型。現在我們可以將它放在 mnist_model 中。指令碼會為您建立資料夾。

$ python mnist_saved_model.py /tmp/mnist_model

請耐心等待,因為指令碼可能需要一些時間才能提供輸出。當訓練完成且模型最後匯出時,您應該會看到下列項目:

Done training! Exporting trained model to mnist_model/1 Done exporting!

下一個步驟是執行 tensorflow_model_server 以便提供匯出的模型做為服務。

$ tensorflow_model_server --port=9000 --model_name=mnist --model_base_path=/tmp/mnist_model

提供用戶端指令碼給您測試伺服器。

若要測試,您需要開啟新的終端機視窗。

$ python mnist_client.py --num_tests=1000 --server=localhost:9000

更多功能和範例

如果您有興趣進一步了解 TensorFlow Serving,請參閱TensorFlow 網站

您也可以搭配 Amazon Elastic Inference 使用 TensorFlow Serving。如需詳細資訊,請參閱如何搭配 TensorFlow Serving 使用彈性推論的指南。