ユニバーサル文節エンコーダー・モデルで文字列形式の入力データを使用#
モデルのダウンロード#
この実験では、Kaggle の TensorFlow モデルを使用します。
mkdir -p universal-sentence-encoder-multilingual/1/
curl -L -o universal-sentence-encoder-multilingual/1/3.tar.gz https://www.kaggle.com/api/v1/models/google/universal-sentence-encoder/tensorFlow2/multilingual/2/download
tar -xzf universal-sentence-encoder-multilingual/1/3.tar.gz -C universal-sentence-encoder-multilingual/1/
rm universal-sentence-encoder-multilingual/1/3.tar.gz
chmod -R 755 universal-sentence-encoder-multilingual
tree universal-sentence-encoder-multilingual/
universal-sentence-encoder-multilingual/
└── 1
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
OpenVINO トークナイザー・ライブラリーを使用#
モデル universal-sentence-encoder-multilingual には、OpenVINO カスタム拡張でサポートされる SentencepieceTokenizer が含まれています。これはモデルレイヤーを実行する動的ライブラリーであり、サポートされている OpenVINO 操作の元のセットを拡張します。
イメージ openvino/model_server:2023.3
以降には、CPU 拡張機能を備えたすぐに使用できる OpenVINO モデルサーバーが含まれています。
コンテナ内でモデルサーバーを起動#
次のコマンドを使用してサービスを開始します:
docker run -d --name ovms -p 9000:9000 -p 8000:8000 -v $(pwd)/universal-sentence-encoder-multilingual:/model openvino/model_server:latest --model_name usem --model_path /model --cpu_extension /ovms/lib/libopenvino_tokenizers.so --plugin_config '{"NUM_STREAMS": 1}' --port 9000 --rest_port 8000
コンテナのログをチェックして、正常に開始されたことを確認します:
docker logs ovms
文字列データを推論要求として送信#
OpenVINO モデルサーバーは、文字列の形式で入力を受け入れることができます。以下は、tensorflow_serving_api
Python ライブラリーに基づくコードの一部です:
data = np.array(["string1", "string1", "string_n"])
predict_request = predict_pb2.PredictRequest()
predict_request.model_spec.name = "my_model"
predict_request.inputs["input_name"].CopyFrom(make_tensor_proto(data))
predict_response = prediction_service_stub.Predict(predict_request, 10.0)
リポジトリーをクローンします:
git clone https://github.com/openvinotoolkit/model_server
基本的なクライアント実行は次のとおりです:
pip install --upgrade pip
pip install -r model_server/demos/universal-sentence-encoder/requirements.txt
python model_server/demos/universal-sentence-encoder/send_strings.py --grpc_port 9000 --string "I enjoy taking long walks along the beach with my dog."
processing time 6.931 ms.
Output shape (1, 512)
Output subset [-0.00552395 0.00599533 -0.01480555 0.01098945 -0.09355522 -0.08445048 -0.02802683 -0.05219319 -0.0675998 0.03127321 -0.03223499 -0.01282092 0.06131846 0.02626886 -0.00983501 0.00298059 0.00141201 0.03229365 0.06957124 0.01543707]
同じことを、REST API インターフェイスや単純な curl
コマンドでも実現できます:
curl -X POST http://localhost:8000/v1/models/usem:predict \
-H 'Content-Type: application/json' \
-d '{"instances": ["dog", "Puppies are nice.", "I enjoy taking long walks along the beach with my dog."]}'
TFS と結果を比較する#
同じクライアント・コードを使用して、要求を TensorFlow サービス・コンポーネントに送信できます。API には完全な互換性があります。
TFS コンテナの開始:
docker run -it -p 8500:8500 -p 9500:9500 -v $(pwd)/universal-sentence-encoder-multilingual:/models/usem -e MODEL_NAME=usem tensorflow/serving --port=9500 --rest_api_port=8500
クライアントの実行
python model_server/demos/universal-sentence-encoder/send_strings.py --grpc_port 9500 --input_name inputs --output_name outputs --string "I enjoy taking long walks along the beach with my dog."
processing time 12.167000000000002 ms.
Output shape (1, 512)
Output subset [-0.00552387 0.00599531 -0.0148055 0.01098951 -0.09355522 -0.08445048 -0.02802679 -0.05219323 -0.06759984 0.03127313 -0.03223493 -0.01282088 0.06131843 0.02626882 -0.00983502 0.00298053 0.00141208 0.03229369 0.06957125 0.01543701]
注: このモデルはキャッシュをサポートしていないため、
--cache_dir
と同時に使用しないでください。