kamilwu commented on a change in pull request #11075: [BEAM-9421] Website section that describes getting predictions using AI Platform Prediciton URL: https://github.com/apache/beam/pull/11075#discussion_r392972669
########## File path: website/src/documentation/patterns/ai-platform.md ########## @@ -0,0 +1,87 @@ +--- +layout: section +title: "AI Platform integration patterns" +section_menu: section-menu/documentation.html +permalink: /documentation/patterns/ai-platform/ +--- +<!-- +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> + +# AI Platform integration patterns + +This page describes common patterns in pipelines with Google AI Platform transforms. + +<nav class="language-switcher"> + <strong>Adapt for:</strong> + <ul> + <li data-type="language-java">Java SDK</li> + <li data-type="language-py" class="active">Python SDK</li> + </ul> +</nav> + +## Getting predictions + +This section shows how to use a cloud-hosted machine learning model to make predictions about new data using Google Cloud AI Platform Prediction within Beam's pipeline. + +[tfx_bsl](https://github.com/tensorflow/tfx-bsl) is a library that provides `RunInference` Beam's PTransform. `RunInference` is a PTransform able to perform two types of inference. One of them can use a service endpoint. When using a service endpoint, the transform takes a PCollection of type `tf.train.Example` and, for each element, sends a request to Google Cloud AI Platform Prediction service. The transform produces a PCollection of type `PredictLog` which contains predictions. + +Before getting started, deploy a machine learning model to the cloud. The cloud service manages the infrastructure needed to handle prediction requests in both efficient and scalable way. Only Tensorflow models are supported. For more information, see [Exporting a SavedModel for prediction](https://cloud.google.com/ai-platform/prediction/docs/exporting-savedmodel-for-prediction). + +Once a machine learning model is deployed, prepare a list of instances to get predictions for. + +Here is an example of a pipeline that reads input instances from the file, converts JSON objects to `tf.train.Example` objects and sends data to the service. The content of a file can look like this: + +``` +{"input": "the quick brown"} +{"input": "la bruja le"} +``` + +The example creates `tf.train.BytesList` instances, thus it expects byte-like strings as input, but other data types, like `tf.train.FloatList` and `tf.train.Int64List`, are also supported by the transform. To send binary data, make sure that the name of an input ends in `_bytes`. + +Here is the code: + +{:.language-java} +```java +// Getting predictions is not yet available for Java. [BEAM-9501] +``` + +{:.language-py} +```py +import json + +import apache_beam as beam + +import tensorflow as tf +from tfx_bsl.beam.run_inference import RunInference +from tfx_bsl.proto import model_spec_pb2 + +def convert_json_to_tf_example(json_obj): + dict_ = json.loads(json_obj) + for name, text in dict_.items(): + value = tf.train.Feature(bytes_list=tf.train.BytesList( + value=[text.encode('utf-8')])) + feature = {name: value} + return tf.train.Example(features=tf.train.Features(feature=feature)) + +with beam.Pipeline() as p: + _ = (p + | beam.io.ReadFromText('gs://my-bucket/samples.json') + | beam.Map(convert_json_to_tf_example) + | RunInference( Review comment: Yes. The transform uses this client library: https://github.com/googleapis/google-api-python-client. > is there a plan to support gRPC in the future? As far as I know, there is no such plan at the moment ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services