├── README.md ├── notebooks ├── onnx-conversion.ipynb ├── custom-onnx-deployment.ipynb └── resnet-export.ipynb └── LICENSE /README.md: -------------------------------------------------------------------------------- 1 | # ccd-ahm-2022 2 | Contains my code and deck for [Cloud Community Days Ahmedabad 2022](https://gdg.community.dev/events/details/google-gdg-cloud-ahmedabad-presents-google-cloud-community-day-2022/): **Fantastic ML Deployments and How to Do Them with Vertex AI**. 3 | 4 | ## Prerequisites 5 | 6 | The notebooks provided in this repository use _paid_ Google Cloud Platform (GCP) services: 7 | 8 | * [Vertex AI Workbench](https://www.youtube.com/watch?v=_Q1Nf-rgSiE) 9 | * [Google Cloud Storage (GCS)](https://cloud.google.com/storage) 10 | * [Vertex AI Prediction](https://cloud.google.com/vertex-ai/docs/predictions/getting-predictions) 11 | * [Google Container Registry (GCR)](https://cloud.google.com/container-registry) 12 | 13 | So, I assume you already have a billing-enabled GCP Project and you can: 14 | 15 | * spin up Vertex AI Workbench instances 16 | * create buckets on GCS 17 | * push Docker images to GCR 18 | 19 | ## Notebooks 20 | 21 | The notebooks are in `notebooks` directory. Below is a brief description of each notebook: 22 | 23 | * `resnet-export.ipynb` shows how to export a TensorFlow model (image recognition) compatible with 24 | off-the-shelf Vertex AI deployment. The deployment part will be covered via the Vertex AI GUI console. 25 | * `onnx-conversion.ipynb` shows how to optimized the TensorFlow model with ONNX and compares the latency 26 | of the both the models (TensorFlow and ONNX). 27 | * `custom-onnx-deployment.ipynb` shows how to deploy the ONNX model to Vertex AI using custom prediction 28 | routes. 29 | 30 | ## Slides 31 | 32 | [Link](https://bit.ly/ccd-ahm-deck) 33 | 34 | ## Acknowledgements 35 | 36 | Thanks to the ML Developer Programs team at Google for providing GCP credit support. 37 | -------------------------------------------------------------------------------- /notebooks/onnx-conversion.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "429f6242-c892-40fc-86e5-1f076d516baf", 6 | "metadata": {}, 7 | "source": [ 8 | "This notebook shows how to optimize the ResNetV2101 model we saw in `resnet-export.ipynb` notebook. We will use [ONNX](https://onnx.ai/) for this purpose. " 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "id": "4ea7396f-a09d-4d30-9511-9ef46d3fe07f", 14 | "metadata": {}, 15 | "source": [ 16 | "## Installations" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 1, 22 | "id": "956baad6-4796-4b46-8184-258fda5f488c", 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", 30 | "tfx-bsl 1.9.0 requires google-api-python-client<2,>=1.7.11, but you have google-api-python-client 2.52.0 which is incompatible.\n", 31 | "tfx-bsl 1.9.0 requires pyarrow<6,>=1, but you have pyarrow 8.0.0 which is incompatible.\n", 32 | "tensorflow-transform 1.9.0 requires pyarrow<6,>=1, but you have pyarrow 8.0.0 which is incompatible.\n", 33 | "apache-beam 2.40.0 requires dill<0.3.2,>=0.3.1.1, but you have dill 0.3.4 which is incompatible.\n", 34 | "apache-beam 2.40.0 requires pyarrow<8.0.0,>=0.15.1, but you have pyarrow 8.0.0 which is incompatible.\u001b[0m\u001b[31m\n", 35 | "\u001b[0m" 36 | ] 37 | } 38 | ], 39 | "source": [ 40 | "!pip install onnxruntime==1.11.0 numpy==1.21.0 tf2onnx -q" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "id": "5231a95e-ccae-4201-bae7-d637f7328da9", 46 | "metadata": {}, 47 | "source": [ 48 | "## Imports" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 1, 54 | "id": "09d48ba2-5166-41c1-954f-4e7acaddd8e6", 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "import tensorflow as tf \n", 59 | "import tensorflow_hub as hub\n", 60 | "\n", 61 | "import onnx\n", 62 | "import timeit\n", 63 | "import tf2onnx\n", 64 | "import numpy as np\n", 65 | "import onnxruntime as ort" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "id": "d1b1a2af-d469-483b-9cd4-b07f646d9d81", 71 | "metadata": {}, 72 | "source": [ 73 | "## Constant" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 2, 79 | "id": "9d6898e7-e4fe-491e-b33c-64f479518b1e", 80 | "metadata": {}, 81 | "outputs": [], 82 | "source": [ 83 | "IMG_SIZE = 224" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "id": "a159a8e6-751c-4bea-ac22-40e173ee02e2", 89 | "metadata": {}, 90 | "source": [ 91 | "## Load the ResNetV2101 model" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 3, 97 | "id": "1f0a91ad-0467-4d38-aec4-0d9e9c9b515d", 98 | "metadata": {}, 99 | "outputs": [], 100 | "source": [ 101 | "tfhub_model = tf.keras.Sequential(\n", 102 | " [hub.KerasLayer(\"https://tfhub.dev/google/imagenet/resnet_v2_101/classification/5\")]\n", 103 | ")\n", 104 | "\n", 105 | "tfhub_model.build([None, IMG_SIZE, IMG_SIZE, 3])" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "id": "adf4dc8d-9854-405a-b355-851a1279ab0d", 111 | "metadata": {}, 112 | "source": [ 113 | "## Convert to ONNX" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 4, 119 | "id": "62f47a15-9c6f-4402-8fb4-b0dc10e2b3a6", 120 | "metadata": {}, 121 | "outputs": [ 122 | { 123 | "name": "stdout", 124 | "output_type": "stream", 125 | "text": [ 126 | "WARNING:tensorflow:From /opt/conda/lib/python3.7/site-packages/tf2onnx/tf_loader.py:711: extract_sub_graph (from tensorflow.python.framework.graph_util_impl) is deprecated and will be removed in a future version.\n", 127 | "Instructions for updating:\n", 128 | "Use `tf.compat.v1.graph_util.extract_sub_graph`\n" 129 | ] 130 | }, 131 | { 132 | "name": "stderr", 133 | "output_type": "stream", 134 | "text": [ 135 | "WARNING:tensorflow:From /opt/conda/lib/python3.7/site-packages/tf2onnx/tf_loader.py:711: extract_sub_graph (from tensorflow.python.framework.graph_util_impl) is deprecated and will be removed in a future version.\n", 136 | "Instructions for updating:\n", 137 | "Use `tf.compat.v1.graph_util.extract_sub_graph`\n" 138 | ] 139 | } 140 | ], 141 | "source": [ 142 | "input_signature = [\n", 143 | " tf.TensorSpec([None, IMG_SIZE, IMG_SIZE, 3], tf.float32)\n", 144 | "]\n", 145 | "onnx_model, _ = tf2onnx.convert.from_keras(tfhub_model, input_signature, opset=15)\n", 146 | "onnx_model_path = \"resnetv2101.onnx\"\n", 147 | "onnx.save(onnx_model, onnx_model_path)" 148 | ] 149 | }, 150 | { 151 | "cell_type": "markdown", 152 | "id": "b884e864-e6bf-41b6-8c35-50757a0157cd", 153 | "metadata": {}, 154 | "source": [ 155 | "## Ensure the ONNX and TF Hub model outputs match" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 5, 161 | "id": "4279be1b-a3aa-4da7-8f07-fd0d809270cb", 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [ 165 | "dummy_inputs = tf.random.normal((1, IMG_SIZE, IMG_SIZE, 3))\n", 166 | "dummy_inputs_numpy = dummy_inputs.numpy()" 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": 6, 172 | "id": "6a4ea34f-9eae-4cd7-8946-1af0a7d44a42", 173 | "metadata": {}, 174 | "outputs": [ 175 | { 176 | "data": { 177 | "text/plain": [ 178 | "True" 179 | ] 180 | }, 181 | "execution_count": 6, 182 | "metadata": {}, 183 | "output_type": "execute_result" 184 | } 185 | ], 186 | "source": [ 187 | "tf_outputs = tfhub_model(dummy_inputs, training=False)\n", 188 | "\n", 189 | "sess = ort.InferenceSession(onnx_model_path)\n", 190 | "ort_outputs = sess.run(None, {\"args_0\": dummy_inputs_numpy})\n", 191 | "\n", 192 | "np.allclose(tf_outputs.numpy(), ort_outputs, rtol=1e-5, atol=1e-05)" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "id": "4a8bc1e4-6ac1-4b0c-b514-21415f8c9ab6", 198 | "metadata": {}, 199 | "source": [ 200 | "## Benchmark latency of both the models" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": 7, 206 | "id": "a647a421-cf8f-49a8-854c-32e764c46868", 207 | "metadata": {}, 208 | "outputs": [ 209 | { 210 | "name": "stdout", 211 | "output_type": "stream", 212 | "text": [ 213 | "Benchmarking TF model...\n", 214 | "Average latency (seconds): 0.206272908560004.\n" 215 | ] 216 | } 217 | ], 218 | "source": [ 219 | "print(\"Benchmarking TF model...\")\n", 220 | "for _ in range(2):\n", 221 | " _ = tfhub_model(dummy_inputs, training=False)\n", 222 | "\n", 223 | "# Timing\n", 224 | "tf_runtimes = timeit.repeat(\n", 225 | " lambda: tfhub_model(dummy_inputs, training=False), number=1, repeat=25\n", 226 | ")\n", 227 | "print(f\"Average latency (seconds): {np.mean(tf_runtimes)}.\")" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": 8, 233 | "id": "7cf7abe3-3c35-48d3-b8ed-7d840e085702", 234 | "metadata": {}, 235 | "outputs": [ 236 | { 237 | "name": "stdout", 238 | "output_type": "stream", 239 | "text": [ 240 | "Benchmarking ONNX model...\n", 241 | "Average latency (seconds): 0.06843939660000614.\n" 242 | ] 243 | } 244 | ], 245 | "source": [ 246 | "print(\"Benchmarking ONNX model...\")\n", 247 | "for _ in range(2):\n", 248 | " _ = sess.run(None, {\"args_0\": dummy_inputs_numpy})\n", 249 | "\n", 250 | "# Timing\n", 251 | "onnx_runtimes = timeit.repeat(\n", 252 | " lambda: sess.run(None, {\"args_0\": dummy_inputs_numpy}), number=1, repeat=25\n", 253 | ")\n", 254 | "print(f\"Average latency (seconds): {np.mean(onnx_runtimes)}.\")" 255 | ] 256 | } 257 | ], 258 | "metadata": { 259 | "environment": { 260 | "kernel": "python3", 261 | "name": "tf2-gpu.2-9.m94", 262 | "type": "gcloud", 263 | "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-9:m94" 264 | }, 265 | "kernelspec": { 266 | "display_name": "Python 3", 267 | "language": "python", 268 | "name": "python3" 269 | }, 270 | "language_info": { 271 | "codemirror_mode": { 272 | "name": "ipython", 273 | "version": 3 274 | }, 275 | "file_extension": ".py", 276 | "mimetype": "text/x-python", 277 | "name": "python", 278 | "nbconvert_exporter": "python", 279 | "pygments_lexer": "ipython3", 280 | "version": "3.7.12" 281 | } 282 | }, 283 | "nbformat": 4, 284 | "nbformat_minor": 5 285 | } 286 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /notebooks/custom-onnx-deployment.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "4cb477f3", 6 | "metadata": {}, 7 | "source": [ 8 | "This notebook deploys the ONNX model we obtained in the `onnx-conversion.ipynb` notebook to Vertex AI using [custom prediction routes (CPR)](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/prediction/custom_prediction_routines/SDK_Pytorch_Custom_Predict.ipynb). " 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "id": "ead52da0", 14 | "metadata": {}, 15 | "source": [ 16 | "## Constants" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 1, 22 | "id": "cc8ada1b-228d-43c2-91de-82bd2654c5a8", 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "PROJECT_ID = \"[GCP-PROJECT]\"\n", 27 | "PREDICTION_IMAGE_URI = f\"gcr.io/{PROJECT_ID}/resnetv2\"\n", 28 | "BUCKET_NAME = \"gs://[BUCKET-NAME]\"\n", 29 | "REGION = \"us-central1\"" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "id": "05621d86", 35 | "metadata": {}, 36 | "source": [ 37 | "## Copy over the initial artifacts" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 2, 43 | "id": "7fe2a095-671f-454d-9d1f-3cfcf6609839", 44 | "metadata": {}, 45 | "outputs": [ 46 | { 47 | "name": "stdout", 48 | "output_type": "stream", 49 | "text": [ 50 | "total 0\n" 51 | ] 52 | } 53 | ], 54 | "source": [ 55 | "LOCAL_FOLDER = \"onnx_deployment_files\"\n", 56 | "!mkdir -p {LOCAL_FOLDER}\n", 57 | "!ls -lh {LOCAL_FOLDER}" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 3, 63 | "id": "c9062437-0b06-4256-96cf-a8be012ca97d", 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "!cp ilsvrc2012_wordnet_lemmas.txt {LOCAL_FOLDER}\n", 68 | "!cp resnetv2101.onnx {LOCAL_FOLDER}" 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "id": "b6abeb57", 74 | "metadata": {}, 75 | "source": [ 76 | "We're starting with two things:\n", 77 | "\n", 78 | "* The ImageNet-1k class label file which can be downloaded from [here](https://storage.googleapis.com/bit_models/ilsvrc2012_wordnet_lemmas.txt).\n", 79 | "* The ONNX variant of the ResNetV2101 model we started off with. Refer to the `onnx-conversion.ipynb` notebook for details on the ONNX model. " 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 4, 85 | "id": "b189a5f8-a9f9-4fd0-b3ed-1362ce6c19d3", 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "name": "stdout", 90 | "output_type": "stream", 91 | "text": [ 92 | "Overwriting requirements.txt\n" 93 | ] 94 | } 95 | ], 96 | "source": [ 97 | "%%writefile requirements.txt\n", 98 | "\n", 99 | "google-cloud-storage>=1.26.0,<2.0.0dev\n", 100 | "google-cloud-aiplatform[prediction]>=1.16.0\n", 101 | "onnxruntime==1.11.1\n", 102 | "numpy==1.22.2\n", 103 | "tensorflow>=2.5" 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "id": "31b231f6", 109 | "metadata": {}, 110 | "source": [ 111 | "The requirement file above will serve as the requirement file for all the custom Python dependencies we'd need to serve the Docker image that we will build here. " 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "id": "c145e14c", 117 | "metadata": {}, 118 | "source": [ 119 | "## The predictor class\n", 120 | "\n", 121 | "This is the meat of our deployment. We define all the logic needed to handle the request payload, run the ONNX model on it, and postprocess the predictions. \n", 122 | "\n", 123 | "Refer [here](https://github.com/googleapis/python-aiplatform/tree/custom-prediction-routine/google/cloud/aiplatform/prediction) to know more about this class and how Vertex AI's custom prediction routes are configured." 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 5, 129 | "id": "c60fbf37-cc79-4277-bafc-d133cd4a37ff", 130 | "metadata": {}, 131 | "outputs": [ 132 | { 133 | "name": "stdout", 134 | "output_type": "stream", 135 | "text": [ 136 | "Writing onnx_deployment_files/predictor.py\n" 137 | ] 138 | } 139 | ], 140 | "source": [ 141 | "%%writefile {LOCAL_FOLDER}/predictor.py\n", 142 | "\n", 143 | "import os\n", 144 | "import pickle\n", 145 | "from typing import Dict, List\n", 146 | "\n", 147 | "import numpy as np\n", 148 | "import onnxruntime as ort\n", 149 | "import tensorflow as tf\n", 150 | "\n", 151 | "from google.cloud.aiplatform.prediction.predictor import Predictor\n", 152 | "from google.cloud.aiplatform.utils import prediction_utils\n", 153 | "\n", 154 | "\n", 155 | "IMG_SIZE = 224\n", 156 | "\n", 157 | "\n", 158 | "class ImgClassificationPredictor(Predictor):\n", 159 | " def __init__(self):\n", 160 | " self._onnx_path = \"resnetv2101.onnx\"\n", 161 | " self._labels_path = \"ilsvrc2012_wordnet_lemmas.txt\"\n", 162 | "\n", 163 | " def load(self, artifacts_uri: str):\n", 164 | " \"\"\"Loads the model artifacts.\"\"\"\n", 165 | " prediction_utils.download_model_artifacts(artifacts_uri)\n", 166 | "\n", 167 | " sess_options = ort.SessionOptions()\n", 168 | " sess_options.intra_op_num_threads = os.cpu_count()\n", 169 | " self._model_session = ort.InferenceSession(\n", 170 | " self._onnx_path, sess_options, providers=[\"CPUExecutionProvider\"]\n", 171 | " )\n", 172 | "\n", 173 | " with open(self._labels_path, \"r\") as f:\n", 174 | " lines = f.readlines()\n", 175 | " self._imagenet_int_to_str = [line.rstrip() for line in lines]\n", 176 | "\n", 177 | " def preprocess_bytes(self, bytes_input) -> tf.Tensor:\n", 178 | " \"\"\"Preprocesses the raw input image strings.\"\"\"\n", 179 | " bytes_input = tf.io.decode_base64(bytes_input)\n", 180 | " decoded = tf.io.decode_jpeg(bytes_input, channels=3)\n", 181 | " decoded = tf.image.convert_image_dtype(decoded, tf.float32)\n", 182 | " resized = tf.image.resize(decoded, size=(IMG_SIZE, IMG_SIZE))\n", 183 | " return resized\n", 184 | "\n", 185 | " def preprocess(self, prediction_input: Dict) -> np.ndarray:\n", 186 | " \"\"\"Maps the raw input image strings to actual decoded images.\"\"\"\n", 187 | " instances = prediction_input[\"instances\"]\n", 188 | " decoded_images = tf.map_fn(\n", 189 | " self.preprocess_bytes,\n", 190 | " tf.constant(instances),\n", 191 | " dtype=tf.float32,\n", 192 | " back_prop=False,\n", 193 | " )\n", 194 | " return decoded_images.numpy()\n", 195 | "\n", 196 | " def predict(self, images: np.ndarray) -> List[str]:\n", 197 | " \"\"\"Performs prediction.\"\"\"\n", 198 | " predicted_labels = []\n", 199 | " logits = self._model_session.run(None, {\"args_0\": images})[0]\n", 200 | "\n", 201 | " for logit in logits:\n", 202 | " predicted_labels.append(self._imagenet_int_to_str[int(np.argmax(logits))])\n", 203 | "\n", 204 | " return predicted_labels\n", 205 | "\n", 206 | " def postprocess(self, prediction_results: Tuple) -> Dict[str, List[str]]:\n", 207 | " \"\"\"Postprocesses the predictions.\"\"\"\n", 208 | " return {\"predictions\": prediction_results}" 209 | ] 210 | }, 211 | { 212 | "cell_type": "markdown", 213 | "id": "6195ad35", 214 | "metadata": {}, 215 | "source": [ 216 | "## Copy over the new artifacts to our GCS bucket for remote predictions" 217 | ] 218 | }, 219 | { 220 | "cell_type": "code", 221 | "execution_count": 6, 222 | "id": "a437b3f9-eb0d-4db8-807a-838e545c68b6", 223 | "metadata": {}, 224 | "outputs": [ 225 | { 226 | "name": "stdout", 227 | "output_type": "stream", 228 | "text": [ 229 | "total 171M\n", 230 | "-rw-r--r-- 1 jupyter jupyter 22K Sep 20 03:59 ilsvrc2012_wordnet_lemmas.txt\n", 231 | "-rw-r--r-- 1 jupyter jupyter 2.1K Sep 20 03:59 predictor.py\n", 232 | "-rw-r--r-- 1 jupyter jupyter 134 Sep 20 03:59 requirements.txt\n", 233 | "-rw-r--r-- 1 jupyter jupyter 171M Sep 20 03:59 resnetv2101.onnx\n" 234 | ] 235 | } 236 | ], 237 | "source": [ 238 | "!cp requirements.txt $LOCAL_FOLDER/requirements.txt\n", 239 | "!ls -lh $LOCAL_FOLDER" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": 7, 245 | "id": "8b93194a-a7f7-4d8c-b2af-43e3cdeae3e5", 246 | "metadata": {}, 247 | "outputs": [ 248 | { 249 | "name": "stdout", 250 | "output_type": "stream", 251 | "text": [ 252 | "Copying file://onnx_deployment_files/ilsvrc2012_wordnet_lemmas.txt [Content-Type=text/plain]...\n", 253 | "/ [1 files][ 21.2 KiB/ 21.2 KiB] \n", 254 | "Operation completed over 1 objects/21.2 KiB. \n", 255 | "Copying file://onnx_deployment_files/resnetv2101.onnx [Content-Type=application/octet-stream]...\n", 256 | "==> NOTE: You are uploading one or more large file(s), which would run \n", 257 | "significantly faster if you enable parallel composite uploads. This\n", 258 | "feature can be enabled by editing the\n", 259 | "\"parallel_composite_upload_threshold\" value in your .boto\n", 260 | "configuration file. However, note that if you do this large files will\n", 261 | "be uploaded as `composite objects\n", 262 | "`_,which\n", 263 | "means that any user who downloads such objects will need to have a\n", 264 | "compiled crcmod installed (see \"gsutil help crcmod\"). This is because\n", 265 | "without a compiled crcmod, computing checksums on composite objects is\n", 266 | "so slow that gsutil disables downloads of composite objects.\n", 267 | "\n", 268 | "\\ [1 files][170.5 MiB/170.5 MiB] \n", 269 | "Operation completed over 1 objects/170.5 MiB. \n", 270 | "gs://ccd-ahm-2022/onnx_deployment_files/ilsvrc2012_wordnet_lemmas.txt\n", 271 | "gs://ccd-ahm-2022/onnx_deployment_files/resnetv2101.onnx\n" 272 | ] 273 | } 274 | ], 275 | "source": [ 276 | "!gsutil cp {LOCAL_FOLDER}/ilsvrc2012_wordnet_lemmas.txt {BUCKET_NAME}/{LOCAL_FOLDER}/\n", 277 | "!gsutil cp {LOCAL_FOLDER}/resnetv2101.onnx {BUCKET_NAME}/{LOCAL_FOLDER}/\n", 278 | "!gsutil ls {BUCKET_NAME}/{LOCAL_FOLDER}/" 279 | ] 280 | }, 281 | { 282 | "cell_type": "code", 283 | "execution_count": 8, 284 | "id": "d5260bcf-a1cc-4942-a7a7-abe9e25f2344", 285 | "metadata": {}, 286 | "outputs": [ 287 | { 288 | "name": "stdout", 289 | "output_type": "stream", 290 | "text": [ 291 | "total 8.0K\n", 292 | "-rw-r--r-- 1 jupyter jupyter 2.1K Sep 20 03:59 predictor.py\n", 293 | "-rw-r--r-- 1 jupyter jupyter 134 Sep 20 03:59 requirements.txt\n" 294 | ] 295 | } 296 | ], 297 | "source": [ 298 | "# Remove the local artifacts.\n", 299 | "!rm -rf {LOCAL_FOLDER}/resnetv2101.onnx\n", 300 | "!rm -rf {LOCAL_FOLDER}/ilsvrc2012_wordnet_lemmas.txt \n", 301 | "!ls -lh {LOCAL_FOLDER}" 302 | ] 303 | }, 304 | { 305 | "cell_type": "markdown", 306 | "id": "f9facb9a", 307 | "metadata": {}, 308 | "source": [ 309 | "## Build the Docker image" 310 | ] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "execution_count": 9, 315 | "id": "19fdb3c8-7778-4069-9887-b887a6b227d4", 316 | "metadata": {}, 317 | "outputs": [], 318 | "source": [ 319 | "import os\n", 320 | "\n", 321 | "from google.cloud.aiplatform.prediction import LocalModel\n", 322 | "from onnx_deployment_files.predictor import (\n", 323 | " ImgClassificationPredictor,\n", 324 | ") # Update this path as the variable $USER_SRC_DIR to import the custom predictor.\n", 325 | "\n", 326 | "local_model = LocalModel.build_cpr_model(\n", 327 | " LOCAL_FOLDER,\n", 328 | " PREDICTION_IMAGE_URI,\n", 329 | " base_image=\"python:3.8\",\n", 330 | " predictor=ImgClassificationPredictor,\n", 331 | " requirements_path=os.path.join(LOCAL_FOLDER, \"requirements.txt\"),\n", 332 | ")" 333 | ] 334 | }, 335 | { 336 | "cell_type": "code", 337 | "execution_count": 10, 338 | "id": "cd794757-20d1-49cb-a2bb-5d378137f3b5", 339 | "metadata": {}, 340 | "outputs": [ 341 | { 342 | "data": { 343 | "text/plain": [ 344 | "image_uri: \"gcr.io/fast-ai-exploration/resnetv2\"\n", 345 | "predict_route: \"/predict\"\n", 346 | "health_route: \"/health\"" 347 | ] 348 | }, 349 | "execution_count": 10, 350 | "metadata": {}, 351 | "output_type": "execute_result" 352 | } 353 | ], 354 | "source": [ 355 | "local_model.get_serving_container_spec()" 356 | ] 357 | }, 358 | { 359 | "cell_type": "markdown", 360 | "id": "d403afe4", 361 | "metadata": {}, 362 | "source": [ 363 | "## Copy over the model artifacts to a local directory for local predictions" 364 | ] 365 | }, 366 | { 367 | "cell_type": "code", 368 | "execution_count": 11, 369 | "id": "e6ee6e69-3189-446c-a6e4-ff4421334965", 370 | "metadata": {}, 371 | "outputs": [ 372 | { 373 | "name": "stdout", 374 | "output_type": "stream", 375 | "text": [ 376 | "Copying gs://ccd-ahm-2022/onnx_deployment_files/resnetv2101.onnx...\n", 377 | "| [1 files][170.5 MiB/170.5 MiB] \n", 378 | "Operation completed over 1 objects/170.5 MiB. \n", 379 | "Copying gs://ccd-ahm-2022/onnx_deployment_files/ilsvrc2012_wordnet_lemmas.txt...\n", 380 | "/ [1 files][ 21.2 KiB/ 21.2 KiB] \n", 381 | "Operation completed over 1 objects/21.2 KiB. \n", 382 | "ilsvrc2012_wordnet_lemmas.txt resnetv2101.onnx\n" 383 | ] 384 | } 385 | ], 386 | "source": [ 387 | "LOCAL_MODEL_ARTIFACTS_DIR = \"model_artifacts\"\n", 388 | "!mkdir -p {LOCAL_MODEL_ARTIFACTS_DIR}\n", 389 | "\n", 390 | "!gsutil cp {BUCKET_NAME}/{LOCAL_FOLDER}/resnetv2101.onnx $LOCAL_MODEL_ARTIFACTS_DIR\n", 391 | "!gsutil cp {BUCKET_NAME}/{LOCAL_FOLDER}/ilsvrc2012_wordnet_lemmas.txt $LOCAL_MODEL_ARTIFACTS_DIR\n", 392 | "\n", 393 | "!ls {LOCAL_MODEL_ARTIFACTS_DIR}" 394 | ] 395 | }, 396 | { 397 | "cell_type": "markdown", 398 | "id": "1c9e9c3c", 399 | "metadata": {}, 400 | "source": [ 401 | "## Healthness check" 402 | ] 403 | }, 404 | { 405 | "cell_type": "code", 406 | "execution_count": 12, 407 | "id": "ce4268d5-b717-4170-af1f-f045fb732641", 408 | "metadata": {}, 409 | "outputs": [ 410 | { 411 | "name": "stdout", 412 | "output_type": "stream", 413 | "text": [ 414 | " b'{}'\n" 415 | ] 416 | } 417 | ], 418 | "source": [ 419 | "with local_model.deploy_to_local_endpoint(\n", 420 | " artifact_uri=f\"{LOCAL_MODEL_ARTIFACTS_DIR}\",\n", 421 | ") as local_endpoint:\n", 422 | " health_check_response = local_endpoint.run_health_check()\n", 423 | "\n", 424 | "print(health_check_response, health_check_response.content)" 425 | ] 426 | }, 427 | { 428 | "cell_type": "markdown", 429 | "id": "3ea68ee8", 430 | "metadata": {}, 431 | "source": [ 432 | "## Test the Docker image if it's running ok" 433 | ] 434 | }, 435 | { 436 | "cell_type": "code", 437 | "execution_count": 13, 438 | "id": "45ecaf74-e807-49d9-bcbc-0d6e102608c6", 439 | "metadata": {}, 440 | "outputs": [], 441 | "source": [ 442 | "# Create request payload\n", 443 | "\n", 444 | "import base64\n", 445 | "import json\n", 446 | "\n", 447 | "with open(\"test.jpg\", \"rb\") as f:\n", 448 | " data = f.read()\n", 449 | "b64str = base64.urlsafe_b64encode(data).decode(\"utf-8\")\n", 450 | "\n", 451 | "instances = {\"instances\": [b64str]}\n", 452 | "s = json.dumps(instances)\n", 453 | "with open(\"instances.json\", \"w\") as f:\n", 454 | " f.write(s)" 455 | ] 456 | }, 457 | { 458 | "cell_type": "markdown", 459 | "id": "a2a7ffaf", 460 | "metadata": {}, 461 | "source": [ 462 | "You can obtain the `test.jpg` file like so:\n", 463 | "\n", 464 | "```sh\n", 465 | "gsutil cp gs://cloud-ml-data/img/flower_photos/daisy/100080576_f52e8ee070_n.jpg test.jpg\n", 466 | "```" 467 | ] 468 | }, 469 | { 470 | "cell_type": "markdown", 471 | "id": "ee62ddb0", 472 | "metadata": {}, 473 | "source": [ 474 | "### Test with a request body" 475 | ] 476 | }, 477 | { 478 | "cell_type": "code", 479 | "execution_count": 14, 480 | "id": "4ce77cc3-3f0f-4c90-a56f-eb1b150e4697", 481 | "metadata": {}, 482 | "outputs": [ 483 | { 484 | "name": "stdout", 485 | "output_type": "stream", 486 | "text": [ 487 | " b'{\"predictions\": [\"yellow_lady\\'s_slipper, yellow_lady-slipper, Cypripedium_calceolus, Cypripedium_parviflorum\"]}'\n", 488 | " b'{}'\n" 489 | ] 490 | } 491 | ], 492 | "source": [ 493 | "with local_model.deploy_to_local_endpoint(\n", 494 | " artifact_uri=f\"{LOCAL_MODEL_ARTIFACTS_DIR}\",\n", 495 | ") as local_endpoint:\n", 496 | " predict_response = local_endpoint.predict(\n", 497 | " request=s,\n", 498 | " headers={\"Content-Type\": \"application/json\"},\n", 499 | " )\n", 500 | "\n", 501 | " health_check_response = local_endpoint.run_health_check()\n", 502 | " \n", 503 | "print(predict_response, predict_response.content)\n", 504 | "print(health_check_response, health_check_response.content)" 505 | ] 506 | }, 507 | { 508 | "cell_type": "markdown", 509 | "id": "12956e8f", 510 | "metadata": {}, 511 | "source": [ 512 | "### Test with a request file" 513 | ] 514 | }, 515 | { 516 | "cell_type": "code", 517 | "execution_count": 17, 518 | "id": "22e30758-6b5e-4eae-8f65-412e454e26a0", 519 | "metadata": {}, 520 | "outputs": [ 521 | { 522 | "name": "stdout", 523 | "output_type": "stream", 524 | "text": [ 525 | " b'{\"predictions\": [\"yellow_lady\\'s_slipper, yellow_lady-slipper, Cypripedium_calceolus, Cypripedium_parviflorum\"]}'\n", 526 | " b'{}'\n" 527 | ] 528 | } 529 | ], 530 | "source": [ 531 | "with local_model.deploy_to_local_endpoint(\n", 532 | " artifact_uri=f\"{LOCAL_MODEL_ARTIFACTS_DIR}\",\n", 533 | ") as local_endpoint:\n", 534 | " predict_response = local_endpoint.predict(\n", 535 | " request_file=\"instances.json\",\n", 536 | " headers={\"Content-Type\": \"application/json\"},\n", 537 | " )\n", 538 | "\n", 539 | " health_check_response = local_endpoint.run_health_check()\n", 540 | " \n", 541 | "print(predict_response, predict_response.content)\n", 542 | "print(health_check_response, health_check_response.content)" 543 | ] 544 | }, 545 | { 546 | "cell_type": "markdown", 547 | "id": "f836a52e", 548 | "metadata": {}, 549 | "source": [ 550 | "## Run predictions with the remote artifacts" 551 | ] 552 | }, 553 | { 554 | "cell_type": "code", 555 | "execution_count": 19, 556 | "id": "098aadde-7aab-43dc-8a9a-1280ea66ec14", 557 | "metadata": {}, 558 | "outputs": [ 559 | { 560 | "name": "stdout", 561 | "output_type": "stream", 562 | "text": [ 563 | " b'{\"predictions\": [\"yellow_lady\\'s_slipper, yellow_lady-slipper, Cypripedium_calceolus, Cypripedium_parviflorum\"]}'\n", 564 | " b'{}'\n" 565 | ] 566 | } 567 | ], 568 | "source": [ 569 | "with local_model.deploy_to_local_endpoint(\n", 570 | " artifact_uri=f\"{BUCKET_NAME}/{LOCAL_FOLDER}\",\n", 571 | ") as local_endpoint:\n", 572 | " predict_response = local_endpoint.predict(\n", 573 | " request=s,\n", 574 | " headers={\"Content-Type\": \"application/json\"},\n", 575 | " )\n", 576 | "\n", 577 | " health_check_response = local_endpoint.run_health_check()\n", 578 | " \n", 579 | "print(predict_response, predict_response.content)\n", 580 | "print(health_check_response, health_check_response.content)" 581 | ] 582 | }, 583 | { 584 | "cell_type": "markdown", 585 | "id": "303ec492", 586 | "metadata": {}, 587 | "source": [ 588 | "## Push the Docker image to GCI for deployment" 589 | ] 590 | }, 591 | { 592 | "cell_type": "code", 593 | "execution_count": 20, 594 | "id": "6593ed7b-b60c-4280-a05b-9a9eede9e859", 595 | "metadata": {}, 596 | "outputs": [], 597 | "source": [ 598 | "local_model.push_image()" 599 | ] 600 | }, 601 | { 602 | "cell_type": "markdown", 603 | "id": "5ee7be2c", 604 | "metadata": {}, 605 | "source": [ 606 | "## Deploy the model!" 607 | ] 608 | }, 609 | { 610 | "cell_type": "code", 611 | "execution_count": 21, 612 | "id": "a65548e8-92fb-4930-99a2-fb66af8abbdd", 613 | "metadata": {}, 614 | "outputs": [], 615 | "source": [ 616 | "from google.cloud import aiplatform\n", 617 | "\n", 618 | "aiplatform.init(project=PROJECT_ID, location=REGION)" 619 | ] 620 | }, 621 | { 622 | "cell_type": "code", 623 | "execution_count": 22, 624 | "id": "aa84044a-514b-4e1d-84df-25e0097942be", 625 | "metadata": {}, 626 | "outputs": [ 627 | { 628 | "name": "stdout", 629 | "output_type": "stream", 630 | "text": [ 631 | "Creating Model\n", 632 | "Create Model backing LRO: projects/29880397572/locations/us-central1/models/7113184922780565504/operations/2616277266774097920\n", 633 | "Model created. Resource name: projects/29880397572/locations/us-central1/models/7113184922780565504@1\n", 634 | "To use this Model in another session:\n", 635 | "model = aiplatform.Model('projects/29880397572/locations/us-central1/models/7113184922780565504@1')\n" 636 | ] 637 | } 638 | ], 639 | "source": [ 640 | "# Upload the model to Vertex AI (Model Registry)\n", 641 | "MODEL_DISPLAY_NAME = \"resnetv2101-onnx\"\n", 642 | "\n", 643 | "model = aiplatform.Model.upload(\n", 644 | " local_model=local_model,\n", 645 | " display_name=MODEL_DISPLAY_NAME,\n", 646 | " artifact_uri=f\"{BUCKET_NAME}/{LOCAL_FOLDER}\",\n", 647 | ")" 648 | ] 649 | }, 650 | { 651 | "cell_type": "code", 652 | "execution_count": 23, 653 | "id": "702c18e3-c4d5-435f-aae5-23299f0a4feb", 654 | "metadata": {}, 655 | "outputs": [ 656 | { 657 | "name": "stdout", 658 | "output_type": "stream", 659 | "text": [ 660 | "Creating Endpoint\n", 661 | "Create Endpoint backing LRO: projects/29880397572/locations/us-central1/endpoints/5357585910617604096/operations/3160086921779085312\n", 662 | "Endpoint created. Resource name: projects/29880397572/locations/us-central1/endpoints/5357585910617604096\n", 663 | "To use this Endpoint in another session:\n", 664 | "endpoint = aiplatform.Endpoint('projects/29880397572/locations/us-central1/endpoints/5357585910617604096')\n", 665 | "Deploying model to Endpoint : projects/29880397572/locations/us-central1/endpoints/5357585910617604096\n", 666 | "Deploy Endpoint model backing LRO: projects/29880397572/locations/us-central1/endpoints/5357585910617604096/operations/2891841268973830144\n", 667 | "Endpoint model deployed. Resource name: projects/29880397572/locations/us-central1/endpoints/5357585910617604096\n" 668 | ] 669 | } 670 | ], 671 | "source": [ 672 | "# Deploy the model to an endpoint\n", 673 | "endpoint = model.deploy(\n", 674 | " machine_type=\"n1-standard-8\",\n", 675 | " min_replica_count=1,\n", 676 | " max_replica_count=3,\n", 677 | " autoscaling_target_cpu_utilization=60\n", 678 | ")" 679 | ] 680 | }, 681 | { 682 | "cell_type": "markdown", 683 | "id": "e1694645", 684 | "metadata": {}, 685 | "source": [ 686 | "## Test the Endpoint" 687 | ] 688 | }, 689 | { 690 | "cell_type": "code", 691 | "execution_count": 24, 692 | "id": "a6abd902-b6b9-4b55-8ae3-6fe13078f23e", 693 | "metadata": {}, 694 | "outputs": [ 695 | { 696 | "data": { 697 | "text/plain": [ 698 | "Prediction(predictions=[\"yellow_lady's_slipper, yellow_lady-slipper, Cypripedium_calceolus, Cypripedium_parviflorum\"], deployed_model_id='1939454948513153024', model_version_id='1', model_resource_name='projects/29880397572/locations/us-central1/models/7113184922780565504', explanations=None)" 699 | ] 700 | }, 701 | "execution_count": 24, 702 | "metadata": {}, 703 | "output_type": "execute_result" 704 | } 705 | ], 706 | "source": [ 707 | "results = endpoint.predict(instances=[b64str])\n", 708 | "results" 709 | ] 710 | }, 711 | { 712 | "cell_type": "code", 713 | "execution_count": 25, 714 | "id": "86be5873-0a2d-4c6c-ab00-6add82337535", 715 | "metadata": {}, 716 | "outputs": [ 717 | { 718 | "name": "stdout", 719 | "output_type": "stream", 720 | "text": [ 721 | "{\n", 722 | " \"predictions\": [\n", 723 | " \"yellow_lady's_slipper, yellow_lady-slipper, Cypripedium_calceolus, Cypripedium_parviflorum\"\n", 724 | " ],\n", 725 | " \"deployedModelId\": \"1939454948513153024\",\n", 726 | " \"model\": \"projects/29880397572/locations/us-central1/models/7113184922780565504\",\n", 727 | " \"modelDisplayName\": \"resnetv2101-onnx\",\n", 728 | " \"modelVersionId\": \"1\"\n", 729 | "}\n" 730 | ] 731 | } 732 | ], 733 | "source": [ 734 | "ENDPOINT_ID = endpoint.name\n", 735 | "\n", 736 | "! curl \\\n", 737 | " -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n", 738 | " -H \"Content-Type: application/json\" \\\n", 739 | " -d @instances.json \\\n", 740 | " https://{REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/endpoints/{ENDPOINT_ID}:predict" 741 | ] 742 | }, 743 | { 744 | "cell_type": "markdown", 745 | "id": "f2205a5f", 746 | "metadata": {}, 747 | "source": [ 748 | "## Clean up" 749 | ] 750 | }, 751 | { 752 | "cell_type": "code", 753 | "execution_count": 26, 754 | "id": "1c346484-817c-4dc6-90b5-137e917a2099", 755 | "metadata": {}, 756 | "outputs": [ 757 | { 758 | "name": "stdout", 759 | "output_type": "stream", 760 | "text": [ 761 | "Undeploying Endpoint model: projects/29880397572/locations/us-central1/endpoints/5357585910617604096\n", 762 | "Undeploy Endpoint model backing LRO: projects/29880397572/locations/us-central1/endpoints/5357585910617604096/operations/4624882700581339136\n", 763 | "Endpoint model undeployed. Resource name: projects/29880397572/locations/us-central1/endpoints/5357585910617604096\n", 764 | "Deleting Endpoint : projects/29880397572/locations/us-central1/endpoints/5357585910617604096\n", 765 | "Delete Endpoint backing LRO: projects/29880397572/locations/us-central1/operations/5177699554841067520\n", 766 | "Endpoint deleted. . Resource name: projects/29880397572/locations/us-central1/endpoints/5357585910617604096\n", 767 | "Deleting Model : projects/29880397572/locations/us-central1/models/7113184922780565504\n", 768 | "Delete Model backing LRO: projects/29880397572/locations/us-central1/operations/5050472865367851008\n", 769 | "Model deleted. . Resource name: projects/29880397572/locations/us-central1/models/7113184922780565504\n", 770 | "\u001b[1;33mWARNING:\u001b[0m Implicit \":latest\" tag specified: gcr.io/fast-ai-exploration/resnetv2\n", 771 | "\u001b[1;33mWARNING:\u001b[0m Successfully resolved tag to sha256, but it is recommended to use sha256 directly.\n", 772 | "Digests:\n", 773 | "- gcr.io/fast-ai-exploration/resnetv2@sha256:43fd9f5d69ac24ab741aa4d50d32d933a560f5636fb29ba8ed23887b0c66d51c\n", 774 | " Associated tags:\n", 775 | " - latest\n", 776 | "Tags:\n", 777 | "- gcr.io/fast-ai-exploration/resnetv2:latest\n", 778 | "Deleted [gcr.io/fast-ai-exploration/resnetv2:latest].\n", 779 | "Deleted [gcr.io/fast-ai-exploration/resnetv2@sha256:43fd9f5d69ac24ab741aa4d50d32d933a560f5636fb29ba8ed23887b0c66d51c].\n", 780 | "\n", 781 | "\n", 782 | "To take a quick anonymous survey, run:\n", 783 | " $ gcloud survey\n", 784 | "\n" 785 | ] 786 | } 787 | ], 788 | "source": [ 789 | "# Undeploy model and delete endpoint\n", 790 | "endpoint.delete(force=True)\n", 791 | "\n", 792 | "# Delete the model resource\n", 793 | "model.delete()\n", 794 | "\n", 795 | "!gcloud container images delete $PREDICTION_IMAGE_URI --quiet\n", 796 | "\n", 797 | "# !gsutil rm -r $BUCKET_NAME" 798 | ] 799 | } 800 | ], 801 | "metadata": { 802 | "environment": { 803 | "kernel": "python3", 804 | "name": "tf2-gpu.2-9.m94", 805 | "type": "gcloud", 806 | "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-9:m94" 807 | }, 808 | "kernelspec": { 809 | "display_name": "Python 3 (ipykernel)", 810 | "language": "python", 811 | "name": "python3" 812 | }, 813 | "language_info": { 814 | "codemirror_mode": { 815 | "name": "ipython", 816 | "version": 3 817 | }, 818 | "file_extension": ".py", 819 | "mimetype": "text/x-python", 820 | "name": "python", 821 | "nbconvert_exporter": "python", 822 | "pygments_lexer": "ipython3", 823 | "version": "3.8.2" 824 | } 825 | }, 826 | "nbformat": 4, 827 | "nbformat_minor": 5 828 | } 829 | -------------------------------------------------------------------------------- /notebooks/resnet-export.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "766f18aa-8459-46a1-add1-598191585637", 6 | "metadata": {}, 7 | "source": [ 8 | "This notebook shows how to prepare a [ResNetV2101 model from TensorFlow Hub](https://tfhub.dev/google/imagenet/resnet_v2_101/classification/5) for deploying to Vertex AI:\n", 9 | "\n", 10 | "* Load the ResNetV2101 model from TensorFlow Hub.\n", 11 | "* Export the model as a `SavedModel` resource so that it can handle raw image strings. \n", 12 | "* The utilities required to preprocess the input image strings will be embedded inside the exported `SavedModel` itself. " 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "id": "75a32256", 18 | "metadata": {}, 19 | "source": [ 20 | "## Initial imports" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 1, 26 | "id": "a13a640a-6852-4ef4-8849-cd4ce3dc50c6", 27 | "metadata": {}, 28 | "outputs": [], 29 | "source": [ 30 | "import tensorflow as tf \n", 31 | "import tensorflow_hub as hub\n", 32 | "import os" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "id": "e4c6c72c", 38 | "metadata": {}, 39 | "source": [ 40 | "## Constants" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "id": "bd8d102f-f0de-4b48-8af1-2247d179e99c", 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "IMG_SIZE = 224\n", 51 | "GCS_BUCKET = \"BUCKET-NAME\" # should contain the `gs://` identifier\n", 52 | "CONCRETE_INPUT = \"numpy_inputs\"\n", 53 | "MODEL_DIR = os.path.join(GCS_BUCKET, \"concrete_model\")" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "id": "327c6f52", 59 | "metadata": {}, 60 | "source": [ 61 | "Rest of the notebook assumes that the `GCS_BUCKET` has been already created. " 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "id": "4ad7f851", 67 | "metadata": {}, 68 | "source": [ 69 | "## ResNetV2101 model" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 3, 75 | "id": "9a9b6244-d366-4c08-8a3d-2533ab839850", 76 | "metadata": {}, 77 | "outputs": [], 78 | "source": [ 79 | "tfhub_model = tf.keras.Sequential(\n", 80 | " [hub.KerasLayer(\"https://tfhub.dev/google/imagenet/resnet_v2_101/classification/5\")]\n", 81 | ")\n", 82 | "\n", 83 | "tfhub_model.build([None, IMG_SIZE, IMG_SIZE, 3])" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "id": "1ec32900", 89 | "metadata": {}, 90 | "source": [ 91 | "## Model export" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 4, 97 | "id": "4d34d7d2-924f-484e-b75d-cc71c45e3404", 98 | "metadata": {}, 99 | "outputs": [ 100 | { 101 | "name": "stdout", 102 | "output_type": "stream", 103 | "text": [ 104 | "WARNING:tensorflow:Layers in a Sequential model should only have a single input tensor. Received: inputs=[]. Consider rewriting this model with the Functional API.\n" 105 | ] 106 | }, 107 | { 108 | "name": "stderr", 109 | "output_type": "stream", 110 | "text": [ 111 | "WARNING:tensorflow:Layers in a Sequential model should only have a single input tensor. Received: inputs=[]. Consider rewriting this model with the Functional API.\n" 112 | ] 113 | }, 114 | { 115 | "name": "stdout", 116 | "output_type": "stream", 117 | "text": [ 118 | "WARNING:tensorflow:From /opt/conda/lib/python3.7/site-packages/tensorflow/python/autograph/impl/api.py:458: calling map_fn_v2 (from tensorflow.python.ops.map_fn) with back_prop=False is deprecated and will be removed in a future version.\n", 119 | "Instructions for updating:\n", 120 | "back_prop=False is deprecated. Consider using tf.stop_gradient instead.\n", 121 | "Instead of:\n", 122 | "results = tf.map_fn(fn, elems, back_prop=False)\n", 123 | "Use:\n", 124 | "results = tf.nest.map_structure(tf.stop_gradient, tf.map_fn(fn, elems))\n" 125 | ] 126 | }, 127 | { 128 | "name": "stderr", 129 | "output_type": "stream", 130 | "text": [ 131 | "WARNING:tensorflow:From /opt/conda/lib/python3.7/site-packages/tensorflow/python/autograph/impl/api.py:458: calling map_fn_v2 (from tensorflow.python.ops.map_fn) with back_prop=False is deprecated and will be removed in a future version.\n", 132 | "Instructions for updating:\n", 133 | "back_prop=False is deprecated. Consider using tf.stop_gradient instead.\n", 134 | "Instead of:\n", 135 | "results = tf.map_fn(fn, elems, back_prop=False)\n", 136 | "Use:\n", 137 | "results = tf.nest.map_structure(tf.stop_gradient, tf.map_fn(fn, elems))\n" 138 | ] 139 | }, 140 | { 141 | "name": "stdout", 142 | "output_type": "stream", 143 | "text": [ 144 | "WARNING:tensorflow:From /opt/conda/lib/python3.7/site-packages/tensorflow/python/util/deprecation.py:629: calling map_fn_v2 (from tensorflow.python.ops.map_fn) with dtype is deprecated and will be removed in a future version.\n", 145 | "Instructions for updating:\n", 146 | "Use fn_output_signature instead\n" 147 | ] 148 | }, 149 | { 150 | "name": "stderr", 151 | "output_type": "stream", 152 | "text": [ 153 | "WARNING:tensorflow:From /opt/conda/lib/python3.7/site-packages/tensorflow/python/util/deprecation.py:629: calling map_fn_v2 (from tensorflow.python.ops.map_fn) with dtype is deprecated and will be removed in a future version.\n", 154 | "Instructions for updating:\n", 155 | "Use fn_output_signature instead\n" 156 | ] 157 | }, 158 | { 159 | "name": "stdout", 160 | "output_type": "stream", 161 | "text": [ 162 | "INFO:tensorflow:Assets written to: gs://ccd-ahm-2022/concrete_model/assets\n" 163 | ] 164 | }, 165 | { 166 | "name": "stderr", 167 | "output_type": "stream", 168 | "text": [ 169 | "INFO:tensorflow:Assets written to: gs://ccd-ahm-2022/concrete_model/assets\n" 170 | ] 171 | } 172 | ], 173 | "source": [ 174 | "def _preprocess(bytes_input):\n", 175 | " decoded = tf.io.decode_jpeg(bytes_input, channels=3)\n", 176 | " decoded = tf.image.convert_image_dtype(decoded, tf.float32)\n", 177 | " resized = tf.image.resize(decoded, size=(IMG_SIZE, IMG_SIZE))\n", 178 | " return resized\n", 179 | "\n", 180 | "\n", 181 | "@tf.function(input_signature=[tf.TensorSpec([None], tf.string)])\n", 182 | "def preprocess_fn(bytes_inputs):\n", 183 | " decoded_images = tf.map_fn(\n", 184 | " _preprocess, bytes_inputs, dtype=tf.float32, back_prop=False\n", 185 | " )\n", 186 | " return {\n", 187 | " CONCRETE_INPUT: decoded_images\n", 188 | " } # User needs to make sure the key matches model's input\n", 189 | "\n", 190 | "\n", 191 | "@tf.function(input_signature=[tf.TensorSpec([None], tf.string)])\n", 192 | "def serving_fn(bytes_inputs):\n", 193 | " images = preprocess_fn(bytes_inputs)\n", 194 | " prob = m_call(**images)\n", 195 | " return prob\n", 196 | "\n", 197 | "\n", 198 | "m_call = tf.function(tfhub_model.call).get_concrete_function(\n", 199 | " [tf.TensorSpec(shape=[None, IMG_SIZE, IMG_SIZE, 3], dtype=tf.float32, name=CONCRETE_INPUT)]\n", 200 | ")\n", 201 | "\n", 202 | "tf.saved_model.save(tfhub_model, MODEL_DIR, signatures={\"serving_default\": serving_fn})" 203 | ] 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "id": "e5898555", 208 | "metadata": {}, 209 | "source": [ 210 | "**Notes on making the model accept string inputs**:\n", 211 | "\n", 212 | "When dealing with images via REST or gRPC requests the size of the request payload can easily spiral up depending on the resolution of the images being passed. This is why, it is good practice to compress them reliably and then prepare the request payload." 213 | ] 214 | }, 215 | { 216 | "cell_type": "markdown", 217 | "id": "17ca0296", 218 | "metadata": {}, 219 | "source": [ 220 | "## Load the model signature for crafting the request payload" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 5, 226 | "id": "c45713e1-c0e6-4b38-8f32-0085ecd46be7", 227 | "metadata": {}, 228 | "outputs": [ 229 | { 230 | "name": "stdout", 231 | "output_type": "stream", 232 | "text": [ 233 | "Serving function input: bytes_inputs\n" 234 | ] 235 | } 236 | ], 237 | "source": [ 238 | "loaded = tf.saved_model.load(MODEL_DIR)\n", 239 | "\n", 240 | "serving_input = list(\n", 241 | " loaded.signatures[\"serving_default\"].structured_input_signature[1].keys()\n", 242 | ")[0]\n", 243 | "print(\"Serving function input:\", serving_input)" 244 | ] 245 | }, 246 | { 247 | "cell_type": "markdown", 248 | "id": "ac9d1109", 249 | "metadata": {}, 250 | "source": [ 251 | "## Deployment on Vertex AI" 252 | ] 253 | }, 254 | { 255 | "cell_type": "markdown", 256 | "id": "48c67742-6a2f-49bd-9abc-e9bbc3f695fe", 257 | "metadata": {}, 258 | "source": [ 259 | "Go back to the GUI: https://console.cloud.google.com/vertex-ai/models:\n", 260 | "\n", 261 | "* Import the model from `MODEL_DIR` into Vertex AI's Model Registry. \n", 262 | "* Configure deployment parameters. \n", 263 | "* Deploy the model to an Endpoint once the model is imported into Vertex AI's Model Registry. " 264 | ] 265 | }, 266 | { 267 | "cell_type": "markdown", 268 | "id": "e40151b7", 269 | "metadata": {}, 270 | "source": [ 271 | "After the model is successfully imported you'd get an email like so:\n", 272 | "\n", 273 | "![](https://i.ibb.co/tZVQTNc/Screenshot-2022-09-23-at-5-58-54-PM.png)\n", 274 | "\n", 275 | "Same when the model is deployed to a Vertex AI Endpoint:\n", 276 | "\n", 277 | "![](https://i.ibb.co/Yc79S8z/Screenshot-2022-09-23-at-6-02-10-PM.png)" 278 | ] 279 | }, 280 | { 281 | "cell_type": "markdown", 282 | "id": "7f46cf95", 283 | "metadata": {}, 284 | "source": [ 285 | "## Test the endpoint" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": 6, 291 | "id": "218928d8-bc32-4824-b063-ced1adddb5cc", 292 | "metadata": {}, 293 | "outputs": [ 294 | { 295 | "name": "stdout", 296 | "output_type": "stream", 297 | "text": [ 298 | "Copying gs://cloud-ml-data/img/flower_photos/daisy/100080576_f52e8ee070_n.jpg...\n", 299 | "/ [1 files][ 26.2 KiB/ 26.2 KiB] \n", 300 | "Operation completed over 1 objects/26.2 KiB. \n" 301 | ] 302 | } 303 | ], 304 | "source": [ 305 | "! gsutil cp gs://cloud-ml-data/img/flower_photos/daisy/100080576_f52e8ee070_n.jpg test.jpg" 306 | ] 307 | }, 308 | { 309 | "cell_type": "code", 310 | "execution_count": 7, 311 | "id": "026456b2-591f-465d-beff-3330670eafbc", 312 | "metadata": {}, 313 | "outputs": [], 314 | "source": [ 315 | "import base64\n", 316 | "\n", 317 | "with open(\"test.jpg\", \"rb\") as f:\n", 318 | " data = f.read()\n", 319 | "b64str = base64.b64encode(data).decode(\"utf-8\")" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": 14, 325 | "id": "219f4858-1219-407d-9107-a79ac1e91ce0", 326 | "metadata": {}, 327 | "outputs": [], 328 | "source": [ 329 | "from typing import Dict, List, Union\n", 330 | "\n", 331 | "from google.cloud import aiplatform\n", 332 | "from google.protobuf import json_format\n", 333 | "from google.protobuf.struct_pb2 import Value\n", 334 | "\n", 335 | "\n", 336 | "def predict_custom_trained_model_sample(\n", 337 | " project: str,\n", 338 | " endpoint_id: str,\n", 339 | " instances: Union[Dict, List[Dict]],\n", 340 | " location: str = \"us-central1\",\n", 341 | " api_endpoint: str = \"us-central1-aiplatform.googleapis.com\",\n", 342 | " verbose: bool = False,\n", 343 | "):\n", 344 | " \"\"\"\n", 345 | " `instances` can be either single instance of type dict or a list\n", 346 | " of instances.\n", 347 | " \"\"\"\n", 348 | " # The AI Platform services require regional API endpoints.\n", 349 | " client_options = {\"api_endpoint\": api_endpoint}\n", 350 | "\n", 351 | " # Initialize client that will be used to create and send requests.\n", 352 | " # This client only needs to be created once, and can be reused for multiple requests.\n", 353 | " client = aiplatform.gapic.PredictionServiceClient(client_options=client_options)\n", 354 | "\n", 355 | " # The format of each instance should conform to the deployed model's prediction input schema.\n", 356 | " instances = instances if type(instances) == list else [instances]\n", 357 | " instances = [\n", 358 | " json_format.ParseDict(instance_dict, Value()) for instance_dict in instances\n", 359 | " ]\n", 360 | " parameters_dict = {}\n", 361 | " parameters = json_format.ParseDict(parameters_dict, Value())\n", 362 | " endpoint = client.endpoint_path(\n", 363 | " project=project, location=location, endpoint=endpoint_id\n", 364 | " )\n", 365 | " response = client.predict(\n", 366 | " endpoint=endpoint, instances=instances, parameters=parameters\n", 367 | " )\n", 368 | " print(\"response\")\n", 369 | " print(\" deployed_model_id:\", response.deployed_model_id)\n", 370 | "\n", 371 | " # The predictions are a google.protobuf.Value representation of the model's predictions.\n", 372 | " predictions = response.predictions\n", 373 | "\n", 374 | " if verbose:\n", 375 | " for prediction in predictions:\n", 376 | " print(\" prediction:\", prediction)\n", 377 | "\n", 378 | " return predictions" 379 | ] 380 | }, 381 | { 382 | "cell_type": "code", 383 | "execution_count": 15, 384 | "id": "23c54a38-9755-4dee-9bf6-e44b0dfa1508", 385 | "metadata": {}, 386 | "outputs": [ 387 | { 388 | "name": "stdout", 389 | "output_type": "stream", 390 | "text": [ 391 | "response\n", 392 | " deployed_model_id: 8163429633539178496\n", 393 | " prediction: [0.250591457, 0.194626302, -0.0140532702, 0.402600884, -0.928164, 0.836641908, -0.750856876, -1.18550014, -0.273119688, -0.977083564, -1.17410266, -2.0498178, -0.212214127, -1.86051607, 0.145549029, -0.115280904, -2.27409911, -1.79983175, -0.310122877, -0.652436495, 0.494947284, -1.26416564, -0.303813338, 2.00824332, -2.02947283, 0.406100035, -1.47534215, -1.86568451, -0.877228737, -0.246239409, -2.6560142, 0.00912472606, -1.12441134, -0.453974903, -0.205595866, -0.830915451, -1.5522964, 0.890759468, -1.09383655, -0.808113575, -1.22966015, -2.11738706, 0.287828118, -1.94342947, -0.943711281, 0.037689358, -0.611755, 0.214991361, -2.14857411, -0.283408731, -0.871614277, -1.24275661, -0.768078685, 0.867587566, 0.178276092, -1.38478732, 0.396636307, -0.200070232, -0.842316389, 2.32990146, -2.38132524, -1.1887, -0.499461234, -0.683241546, -0.802491903, -1.15744722, -1.6984756, -1.1094569, -0.321194768, -0.0335791707, -1.40636444, 0.725622118, -0.701358676, -1.49867737, 0.30448398, 0.988148153, -1.14154911, -2.5933094, -1.1901263, -2.23489547, -1.8491714, 2.3046248, 1.6447525, -2.04863787, 1.4417944, 1.10332727, -1.5828532, -1.77564716, -1.22943985, -0.944497049, 2.85713434, -0.184180424, -1.38417816, -3.13869762, 0.88673979, 0.872651219, 2.82212949, -2.38863111, -0.367411971, -0.171449482, -0.198063731, 0.317475498, -0.807937443, -1.46052456, -0.877217114, -0.850115418, -0.615724266, 0.497060686, 0.13118352, 2.94539165, -0.950459719, -3.03995252, -2.22519684, 0.81415689, 2.50844908, 0.713809133, 0.869093597, -0.776347458, -1.10576582, -2.0545156, 0.184684128, 0.715409398, -0.393181443, -1.86280167, -2.64828324, -2.27694941, -2.34100819, -1.77337754, -1.26855838, -0.610181212, -1.32340229, -0.99088186, -1.96340609, 0.537964165, -2.82223582, -0.907116115, -1.34156299, -1.46499121, -0.0463190302, -0.794180512, 1.13199031, -0.626473308, -1.34623623, -0.639152944, -1.43433201, -0.90241468, -1.0769974, -0.907379746, -0.230680719, 1.59362316, -0.971482575, 0.764897048, -0.0239086598, 2.18796492, 2.12713623, 1.58544552, 1.41349328, 0.707613945, 1.66773117, 1.23671019, 1.92106438, 1.27120495, 0.944968581, -1.17172837, 0.751952827, -0.404027939, 0.554498494, 0.0442189164, 0.770455718, 0.758930087, 0.571941495, 2.13757849, 1.17314792, -0.777151108, 0.263454467, 0.24438709, 0.590887725, 1.39368796, 0.862859249, 2.26094699, 1.57151282, 0.531721592, 0.623429, 0.17597872, 0.2406234, 1.06857657, 0.800937891, -1.35772836, 2.07006121, 0.669483781, -0.246894628, -0.138587311, 0.828916967, 0.0806695521, 0.69132024, 0.0978749, 1.38688684, -0.181703, -0.219862953, -0.188180983, 1.5647167, 1.33384705, 0.621309698, 0.937903345, -0.417371958, 1.28584123, 1.27896035, 0.605579853, 0.583035886, 0.531031847, 1.55503201, 1.07887626, 1.07796, -1.11535323, 0.920671403, -0.14685449, 0.479350805, 0.932380438, 0.0591039658, 0.443903923, 0.345671207, 1.21164393, 0.0648421794, -0.653961658, 0.403791487, 1.41174567, 0.964315414, -0.335482121, 0.921847641, -0.300710797, 0.187149882, 0.670778692, 1.09717548, 0.805264711, 0.811456442, 1.44910264, 0.468327254, 2.41986656, 0.442806184, 1.90406156, 0.204141334, 0.866283238, -0.241151139, 0.698566556, 1.59773254, 1.49094236, 0.187605619, 1.78989196, 1.30326593, 0.97275573, 0.250137746, -0.0625810176, 0.208682671, 0.674552679, 1.30954814, -0.107964419, 0.204951286, -0.618391395, 2.10325336, 0.65086484, 2.03030944, 1.93999, 1.14112031, 0.881618261, 0.595682263, 0.677763641, 0.406933784, 0.325609624, 0.611242712, 1.86858678, -0.711217523, 0.702586532, -0.687029, 0.415864855, 0.277695954, -0.161887765, 1.28387117, 0.51427573, -0.787156463, -1.87706673, 0.299817622, 1.79757631, -0.0228582397, -1.56379092, 0.23952125, 0.295997888, -0.597702563, 1.31086373, 0.139347345, -0.61820358, 0.270391524, -0.46426484, 0.221380368, -0.78102535, -0.669181168, 1.03373528, 0.709242225, 1.78401423, -0.040522635, 0.337028921, -0.200018078, -0.0102479421, 3.51198292, -1.63434482, 3.14662027, 0.593672872, -0.739407539, -1.90185678, 3.62749887, 8.39115143, 7.48641539, 3.11496472, 4.24959, 2.6450913, -2.23606443, -1.49425709, 0.756684899, -4.19746113, 0.695462227, 2.03000951, -1.8857615, -1.40153587, 3.02951717, 3.20837283, 3.59038067, 2.94123483, 4.25266743, 2.38101482, -0.959306121, -0.716694891, -1.45656574, 0.584071398, -0.0750090778, 1.09591448, -0.369230181, -0.0608791709, -0.490462422, 0.914412141, 1.44409728, 0.764778078, 0.631139159, -0.183252648, -0.312755674, 0.476705939, 0.163250968, 0.13365081, 0.0547006726, 0.238678575, -0.260237604, -0.947965503, 0.968143642, 0.77169311, 0.459311873, 0.112368822, -0.008705616, 0.394370347, -0.128413931, -2.16896534, 0.0934581161, -0.609870791, 0.307557374, -0.651334047, -0.425120145, 0.354245156, -1.14449561, -0.656273127, -0.0908548683, 0.370536387, 0.151732653, 1.0298332, -0.437369168, -0.496649802, -0.108852528, 2.05015469, -0.202855289, -0.934519112, -0.00426641107, -0.469819486, 1.82943153, 0.236080438, -0.00849512219, 0.527299881, -1.62784958, -0.487842083, 0.593702912, -0.687027097, -0.159440726, -0.0465968549, -0.492285252, -0.847614288, -1.64486611, -0.96209234, -2.22412705, -1.68959832, -1.45641553, 0.256981432, 0.82871896, -1.38304877, -2.09967566, -0.693850875, -0.547450483, 0.950622082, -0.993369877, 0.0875085518, 0.969644248, -0.564489663, 0.0179885402, 1.4858067, 1.36873388, 1.5452745, -0.19468452, -0.141382843, -1.01528716, 2.19505382, 0.00833268836, 0.580489159, 1.68851125, -0.458777279, -0.143975914, 0.262320608, -2.04446316, -1.21007991, -0.300953388, -0.967949212, -0.10950835, 0.117863469, 0.388867378, 0.450284898, -0.346168637, 1.30359924, -0.812328279, -0.351364017, -1.11047769, 0.0584379733, -0.0523306131, 0.246174335, 0.696509838, 1.12643254, 0.203679547, 0.795440137, 0.401070446, 0.420744717, -1.24921584, 0.360374928, -1.43141699, 1.11997604, 0.729127347, 2.04846811, 0.43442902, 0.466426194, -0.700053632, -0.747830391, 3.69039106, 0.342692226, -0.0328666829, 0.673930883, 2.48669219, -0.0431249142, -0.000429242849, 2.63610935, -1.75098598, 0.0119205117, 0.681752503, -2.28828335, 1.39715719, 0.714098573, 0.931204, -0.657340586, -2.43315268, 2.09292769, -1.61910844, 0.0906160474, 0.333504617, 1.3908217, 1.41790986, -0.813488245, 0.691094279, -0.220145881, 0.583247304, 0.471909791, 0.667349458, 1.50021279, -0.421483099, 0.432643086, -0.328688651, -0.430595636, -0.980924428, -1.65009665, -0.477493346, 1.0657593, 2.10813713, -0.0165664256, -0.237240195, -0.60567385, 0.81473279, -1.7214154, -0.553213596, -1.46066308, -0.340666056, -0.273367941, -1.04754269, -1.08934307, -1.28482008, -0.686294198, -0.832331896, 0.442828894, 0.269842863, -3.01021338, 0.994434476, 0.634037673, -2.55283856, -0.0107069537, -0.285137594, 0.162748247, -0.389167398, 1.46798384, 0.03394261, 1.28781211, -0.40590179, -0.538043618, 0.501916885, -1.82134306, 0.762461543, 0.460613668, 0.153463185, -0.743288696, -0.54957062, -0.817966, 0.716884553, -0.0374258757, -0.525004, -0.105578274, -0.501658678, -0.280041218, 0.0477492809, -1.34975123, -1.88149, -0.0207834523, -0.157657743, 1.16530585, 0.35201, -0.138719797, -0.986087382, -1.35825229, -1.09340644, -1.02042425, 0.174226105, 0.109743893, 0.275155485, -0.245400727, -1.42380786, -0.297595322, 2.2944212, -1.14832568, -0.849866867, -0.125545397, 1.12726, -0.926636815, 0.306665301, -0.367853969, 0.878332376, -0.459295452, 0.947839379, 0.0963763, -0.353115708, 1.42768788, 0.839698911, -0.707280159, -0.745129824, -0.746205866, 0.826586604, 0.0833131373, 0.960739434, 0.685951948, 0.619491518, -0.0646473169, 1.52607727, -0.368680477, 0.496665746, 0.684145451, -1.27522063, 2.00212693, -0.701031089, -1.78673303, -0.0967851877, 2.40686798, -1.19470859, 1.25559378, 0.189131141, 3.60349417, -1.4463501, 0.0325782225, 2.31510735, -0.680772364, 0.749588728, 0.136017799, -0.254693389, -0.627980471, -0.00423306227, -0.27074486, -3.28650117, -1.69415498, -0.721129954, -0.138162389, 1.55761051, -0.0920393, -1.01831901, -1.38512325, 1.00428426, -1.25370336, 1.55360472, -0.824190617, -0.328616798, 0.988193691, -0.434354246, -2.2539587, -1.64150071, -0.627541065, 0.217586756, -1.21746039, 0.874728739, -1.34470105, 1.15122962, -0.430975854, -1.17130709, -0.365225911, -0.927740097, -0.951265216, 1.82736897, -0.0107093006, -1.53820515, 0.593725741, 0.509708107, 0.653253257, -2.44200349, 0.326151252, 0.113152117, 0.584071636, 1.44017768, 0.0223753154, -0.312277794, -0.442064822, 1.76474333, 0.228993401, 0.133319199, -0.73249948, 0.122090518, -0.866647124, -0.534026384, 0.757155299, 0.565889835, -0.383939147, -0.61638844, 0.844737411, 1.58509469, 0.893646657, 0.0348052382, -0.41598621, -0.206717253, 1.87965441, 1.39963901, 0.994024, 1.1313132, 0.570324123, -0.927809834, -0.470339179, 0.130738631, -0.488292068, 0.025162071, 0.895184875, -0.40584895, 0.599721432, 0.229691043, 0.207456455, -0.96744132, -0.82566452, 0.365191758, 0.475316405, 0.149797559, 0.609680474, -0.444246262, 0.198855668, 2.99265265, -0.132255912, 0.512737095, -0.0278341919, 0.380294442, -0.456849158, -0.430063099, 0.311361879, 1.53778279, 1.31401122, -1.68546784, 1.10089803, 0.0790350586, -0.295667827, -1.4935087, -0.451091111, 0.273355722, 0.471158087, 0.661554813, -0.934185505, -1.12272763, 1.71133256, 0.574833333, 1.33265626, 0.709496856, -0.533576548, 1.98923635, 2.9524262, -2.18345046, -1.89798748, 0.113729462, -0.429602891, -0.248047173, -0.501667202, 1.43578231, 3.15590358, 0.792825401, 0.716994524, -0.872241378, 3.20508599, 0.0669616833, -2.79366136, -0.337338924, -0.607686639, 0.804386795, -1.40164793, -0.0742584765, -0.252744764, 2.1166091, -0.682336032, -2.45568633, 0.623611808, -0.866350591, 1.1426897, -1.58023465, 0.285362929, 2.48298717, 2.7296412, -0.0398295522, 0.920670807, 0.837678611, 0.180364102, -1.39135611, 0.232409358, 0.797412038, -0.552674294, 0.0229423344, -0.307932496, -0.310607642, -2.16755319, 1.11865187, 0.0816131681, -0.0563161373, -0.763742447, -0.81535852, -1.25102282, 1.86085689, -1.65937483, 1.5316149, -0.948999465, 0.996812046, -0.28152442, -1.35827339, 0.792883396, 1.91728747, -0.354559839, -2.39210773, -0.936615109, -1.42914748, 2.61321592, 0.00341010094, -1.93674266, 0.261003852, -0.595611572, 0.592430115, -1.16496265, 0.244201392, -0.726139665, 1.57480574, -1.26350534, 0.774279416, 2.35529542, -1.00913286, -2.6436944, -0.209061533, -0.460739166, -1.63214123, -1.56473231, 0.511471748, -0.289062947, 0.0182371512, 0.280859768, 0.694085419, 0.967819929, -0.783438444, -0.219694436, -0.345253766, 2.58691835, -1.43012881, 0.506455958, -1.54815221, 0.117324814, 1.12301087, 0.0950718075, -1.96521306, -1.18648827, 0.892180204, -0.707349539, 0.807534635, -0.488634735, -2.06389356, -1.53606784, -1.68697965, -0.524871886, -1.11205542, -0.533741593, -0.370895028, 1.08830488, -0.116584569, 0.821303308, 0.238990754, -0.106623977, 1.36921775, -2.59517956, 1.49149466, -1.0023, 0.104615301, 0.74123919, 2.26149535, 1.71133137, 0.026979357, -0.37148118, 0.307175785, -0.413401, 1.7139802, 0.421710312, -0.264927447, 1.39656758, -0.321781486, 1.41659474, 0.214645356, -1.36185813, -0.841321349, 0.64464277, 0.214189678, -1.59506321, 1.8872714, -0.765448749, -0.405296654, 0.763058841, -0.523341715, 0.563566446, 1.40632176, 0.807921469, -0.182211161, -0.501815915, 0.125272095, -1.0128963, -0.445075, -0.847727835, 1.74651229, -2.07496333, -0.464241892, 1.30521905, -2.87297082, 0.181571096, 1.82577646, -0.535218, -0.577610075, -1.11807728, 0.58648622, -0.469394386, 1.24898326, 2.41126084, 0.0517258644, -0.705021143, -0.578039527, 0.473230243, -2.21510434, 0.276322305, 0.183783829, -1.73449612, 3.82255, 0.674755216, -0.955551326, -0.342920452, 1.26274896, 0.960667431, -0.8003304, -1.73487067, -1.42313, 1.97743821, -0.148675546, -0.520493, 0.242155373, -1.15406215, -0.8460325, 0.80481565, -2.04986191, 0.66076082, -1.48553789, -1.08013189, -0.7511549, 0.476640046, -1.32259595, 0.32654506, -1.00023818, -1.55825019, -1.26656783, -1.51863706, -0.583040655, 1.22211075, -0.665201902, -0.0342136323, 0.817356, 2.09716535, -2.28463984, -0.06171529, 1.83444762, 1.4206295, -1.91280806, -0.376333892, 0.145144373, -1.57343578, 0.427493, -0.613690436, -0.679180384, -0.584534645, 0.387920141, -1.06696033, -1.5837611, 0.808945596, -1.09457326, -0.469181448, -1.46991301, -0.715859354, -0.0471784398, -0.94689405, -1.22025549, -0.770708323, -0.808551073, -2.61572838, -2.10260963, -0.62946713, 1.37758088, 1.52483559, -1.62986994, 0.357295126, 0.816705108, -0.111220181, -0.145489335, -3.99923682, -0.620193124, -2.87475872, 1.06246769, 0.0213973224, -2.05929613, 0.714709699, -1.08145761, -0.139947504, -1.08195, 0.549894452, -0.79039371, -0.829913497, -1.40523279, -1.23282218, -0.388466, 2.62010193, -0.640603721, 1.02476931, 1.8849231, 1.06345749, -1.6760304, 0.227633864, 0.716588378, 1.06123972, -0.505497217, 1.8912766, -0.00808286667, -0.347650707, -0.671419, -0.355074406, -0.666690826, -1.31132519, 24.6055279, -2.38091493, -0.71583724, -2.69310927, -3.2131021, -2.8236084, -2.30138016, -2.24968052, -1.09198463, -0.581991494, 2.95040512, -1.39248502, -3.60473347, 0.220937967, -0.284140199]\n" 394 | ] 395 | } 396 | ], 397 | "source": [ 398 | "instances = [{serving_input: {\"b64\": b64str}}]\n", 399 | "\n", 400 | "\n", 401 | "# The magic numbers were retrieved from the Endpoint console:\n", 402 | "# https://console.cloud.google.com/vertex-ai/locations/us-central1/models/\n", 403 | "predictions = predict_custom_trained_model_sample(\n", 404 | " project=\"29880397572\",\n", 405 | " endpoint_id=\"5702111282111447040\",\n", 406 | " location=\"us-central1\",\n", 407 | " instances=instances,\n", 408 | " verbose=True,\n", 409 | ")" 410 | ] 411 | }, 412 | { 413 | "cell_type": "code", 414 | "execution_count": 12, 415 | "id": "6d664ea8-a552-4295-9d83-34c24d555c17", 416 | "metadata": {}, 417 | "outputs": [ 418 | { 419 | "name": "stdout", 420 | "output_type": "stream", 421 | "text": [ 422 | "--2022-09-19 06:43:06-- https://storage.googleapis.com/bit_models/ilsvrc2012_wordnet_lemmas.txt\n", 423 | "Resolving storage.googleapis.com (storage.googleapis.com)... 142.250.136.128, 142.250.148.128, 209.85.200.128, ...\n", 424 | "Connecting to storage.googleapis.com (storage.googleapis.com)|142.250.136.128|:443... connected.\n", 425 | "HTTP request sent, awaiting response... 200 OK\n", 426 | "Length: 21675 (21K) [text/plain]\n", 427 | "Saving to: ‘ilsvrc2012_wordnet_lemmas.txt’\n", 428 | "\n", 429 | "ilsvrc2012_wordnet_ 100%[===================>] 21.17K --.-KB/s in 0s \n", 430 | "\n", 431 | "2022-09-19 06:43:07 (89.3 MB/s) - ‘ilsvrc2012_wordnet_lemmas.txt’ saved [21675/21675]\n", 432 | "\n" 433 | ] 434 | } 435 | ], 436 | "source": [ 437 | "!wget https://storage.googleapis.com/bit_models/ilsvrc2012_wordnet_lemmas.txt -O ilsvrc2012_wordnet_lemmas.txt" 438 | ] 439 | }, 440 | { 441 | "cell_type": "code", 442 | "execution_count": 13, 443 | "id": "1be10358-d22e-45f9-b9e6-defc997839ce", 444 | "metadata": {}, 445 | "outputs": [], 446 | "source": [ 447 | "with open(\"ilsvrc2012_wordnet_lemmas.txt\", \"r\") as f:\n", 448 | " lines = f.readlines()\n", 449 | "imagenet_int_to_str = [line.rstrip() for line in lines]" 450 | ] 451 | }, 452 | { 453 | "cell_type": "code", 454 | "execution_count": 16, 455 | "id": "923ac3fe-3224-49e7-9a64-8f9fe953c2f7", 456 | "metadata": {}, 457 | "outputs": [ 458 | { 459 | "data": { 460 | "image/png": "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", 461 | "text/plain": [ 462 | "
" 463 | ] 464 | }, 465 | "metadata": { 466 | "needs_background": "light" 467 | }, 468 | "output_type": "display_data" 469 | } 470 | ], 471 | "source": [ 472 | "import numpy as np\n", 473 | "import matplotlib.pyplot as plt\n", 474 | "\n", 475 | "predicted_label = imagenet_int_to_str[int(np.argmax(predictions[0]))]\n", 476 | "\n", 477 | "image = plt.imread(\"test.jpg\")\n", 478 | "plt.imshow(image)\n", 479 | "plt.title(predicted_label)\n", 480 | "plt.axis(\"off\")\n", 481 | "plt.show()" 482 | ] 483 | }, 484 | { 485 | "cell_type": "markdown", 486 | "id": "2afe3ae6-80b5-4b39-8168-d0a4440609a4", 487 | "metadata": {}, 488 | "source": [ 489 | "You can refer to [this resource](https://github.com/sayakpaul/deploy-hf-tf-vision-models/tree/main/hf_vision_model_vertex_ai) to learn how to include the postprocessing utilities into the `SavedModel` itself. Additionally, you will find a notebook that shows you how to handle this type of deployment in a programmatic manner." 490 | ] 491 | }, 492 | { 493 | "cell_type": "markdown", 494 | "id": "e5d75860-0aca-4fdf-992a-bbeed38c9dd3", 495 | "metadata": {}, 496 | "source": [ 497 | "## References\n", 498 | "\n", 499 | "* https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/ml_ops/stage6/get_started_with_tf_serving_function.ipynb\n", 500 | "* https://github.com/googleapis/python-aiplatform/blob/main/samples/snippets/prediction_service/predict_custom_trained_model_sample.py" 501 | ] 502 | } 503 | ], 504 | "metadata": { 505 | "environment": { 506 | "kernel": "python3", 507 | "name": "tf2-gpu.2-9.m94", 508 | "type": "gcloud", 509 | "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-9:m94" 510 | }, 511 | "kernelspec": { 512 | "display_name": "Python 3 (ipykernel)", 513 | "language": "python", 514 | "name": "python3" 515 | }, 516 | "language_info": { 517 | "codemirror_mode": { 518 | "name": "ipython", 519 | "version": 3 520 | }, 521 | "file_extension": ".py", 522 | "mimetype": "text/x-python", 523 | "name": "python", 524 | "nbconvert_exporter": "python", 525 | "pygments_lexer": "ipython3", 526 | "version": "3.8.2" 527 | } 528 | }, 529 | "nbformat": 4, 530 | "nbformat_minor": 5 531 | } 532 | --------------------------------------------------------------------------------