Coursera

#@title 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
#
# https://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.

Simple TFX Pipeline for Vertex Pipelines

This notebook-based tutorial will create a simple TFX pipeline and run it using Google Cloud Vertex Pipelines. This notebook is based on the TFX pipeline built in Simple TFX Pipeline Tutorial.

Google Cloud Vertex Pipelines helps you to automate, monitor, and govern your ML systems by orchestrating your ML workflow in a serverless manner. You can define your ML pipelines using Python with TFX, and then execute your pipelines on Google Cloud. See Vertex Pipelines introduction to learn more about Vertex Pipelines.

Setup

Install python packages

We will install required Python packages including TFX and KFP to author ML pipelines and submit jobs to Vertex Pipelines.

# Use the latest version of pip.
!pip install --upgrade pip
!pip install --upgrade "tfx[kfp]<2"
Requirement already satisfied: pip in /opt/conda/lib/python3.7/site-packages (21.3.1)
Collecting pip
  Downloading pip-23.2.1-py3-none-any.whl (2.1 MB)
     |████████████████████████████████| 2.1 MB 4.3 MB/s            
[?25hInstalling collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.3.1
    Uninstalling pip-21.3.1:
      Successfully uninstalled pip-21.3.1
Successfully installed pip-23.2.1
Collecting tfx[kfp]<2
  Downloading tfx-1.12.0-py3-none-any.whl (2.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 15.0 MB/s eta 0:00:0000:0100:01
[?25hCollecting ml-pipelines-sdk==1.12.0 (from tfx[kfp]<2)
  Downloading ml_pipelines_sdk-1.12.0-py3-none-any.whl (1.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 7.6 MB/s eta 0:00:000:00:01
[?25hRequirement already satisfied: absl-py<2.0.0,>=0.9 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (1.0.0)
Collecting ml-metadata<1.13.0,>=1.12.0 (from tfx[kfp]<2)
  Downloading ml_metadata-1.12.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.7/6.7 MB 27.5 MB/s eta 0:00:0000:0100:01
[?25hCollecting packaging<21,>=20 (from tfx[kfp]<2)
  Downloading packaging-20.9-py2.py3-none-any.whl (40 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.9/40.9 kB 3.9 MB/s eta 0:00:00
[?25hCollecting portpicker<2,>=1.3.1 (from tfx[kfp]<2)
  Obtaining dependency information for portpicker<2,>=1.3.1 from https://files.pythonhosted.org/packages/32/2d/440e4d7041fff89f28f483733eb617127aa866135c2dc719e05893f089e1/portpicker-1.6.0-py3-none-any.whl.metadata
  Downloading portpicker-1.6.0-py3-none-any.whl.metadata (1.5 kB)
Requirement already satisfied: protobuf<4,>=3.13 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (3.19.1)
Collecting docker<5,>=4.1 (from tfx[kfp]<2)
  Downloading docker-4.4.4-py2.py3-none-any.whl (147 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 147.0/147.0 kB 13.1 MB/s eta 0:00:00
[?25hRequirement already satisfied: google-apitools<1,>=0.5 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (0.5.31)
Collecting google-api-python-client<2,>=1.8 (from tfx[kfp]<2)
  Downloading google_api_python_client-1.12.11-py2.py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.1/62.1 kB 4.5 MB/s eta 0:00:00
[?25hRequirement already satisfied: jinja2<4,>=2.7.3 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (2.11.3)
Requirement already satisfied: typing-extensions<5,>=3.10.0.2 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (4.0.1)
Collecting apache-beam[gcp]<3,>=2.40 (from tfx[kfp]<2)
  Obtaining dependency information for apache-beam[gcp]<3,>=2.40 from https://files.pythonhosted.org/packages/00/33/649676f6db6ec45959d976ddaabee2164ae2f15ef0c56daf2bbeb7895845/apache_beam-2.48.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata
  Downloading apache_beam-2.48.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.2 kB)
Requirement already satisfied: attrs<22,>=19.3.0 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (21.2.0)
Collecting click<8,>=7 (from tfx[kfp]<2)
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.8/82.8 kB 8.6 MB/s eta 0:00:00
[?25hRequirement already satisfied: google-api-core<1.33 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (1.31.5)
Requirement already satisfied: google-cloud-aiplatform<1.18,>=1.6.2 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (1.8.1)
Requirement already satisfied: google-cloud-bigquery<3,>=2.26.0 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (2.31.0)
Requirement already satisfied: grpcio<2,>=1.28.1 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (1.42.0)
Requirement already satisfied: keras-tuner<2,>=1.0.4 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (1.1.0)
Collecting kubernetes<13,>=10.0.1 (from tfx[kfp]<2)
  Downloading kubernetes-12.0.1-py2.py3-none-any.whl (1.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 19.9 MB/s eta 0:00:0000:0100:01
[?25hRequirement already satisfied: numpy<2,>=1.16 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (1.19.5)
Collecting pyarrow<7,>=6 (from tfx[kfp]<2)
  Downloading pyarrow-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 25.6/25.6 MB 21.2 MB/s eta 0:00:0000:0100:01
[?25hCollecting pyyaml<6,>=3.12 (from tfx[kfp]<2)
  Downloading PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl (636 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 636.6/636.6 kB 21.6 MB/s eta 0:00:00
[?25hCollecting tensorflow<2.12,>=2.11.0 (from tfx[kfp]<2)
  Downloading tensorflow-2.11.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (588.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 588.3/588.3 MB 1.1 MB/s eta 0:00:0000:0100:01
[?25hRequirement already satisfied: tensorflow-hub<0.13,>=0.9.0 in /opt/conda/lib/python3.7/site-packages (from tfx[kfp]<2) (0.12.0)
Collecting tensorflow-data-validation<1.13.0,>=1.12.0 (from tfx[kfp]<2)
  Downloading tensorflow_data_validation-1.12.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (18.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 33.5 MB/s eta 0:00:0000:0100:01
[?25hCollecting tensorflow-model-analysis<0.44.0,>=0.43.0 (from tfx[kfp]<2)
  Downloading tensorflow_model_analysis-0.43.0-py3-none-any.whl (1.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 24.0 MB/s eta 0:00:0000:0100:01
[?25hCollecting tensorflow-serving-api!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,<3,>=1.15 (from tfx[kfp]<2)
  Downloading tensorflow_serving_api-2.11.1-py2.py3-none-any.whl (37 kB)
Collecting tensorflow-transform<1.13.0,>=1.12.0 (from tfx[kfp]<2)
  Downloading tensorflow_transform-1.12.0-py3-none-any.whl (439 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 439.8/439.8 kB 16.5 MB/s eta 0:00:00
[?25hCollecting tfx-bsl<1.13.0,>=1.12.0 (from tfx[kfp]<2)
  Downloading tfx_bsl-1.12.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (21.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.6/21.6 MB 34.9 MB/s eta 0:00:0000:0100:01
[?25hCollecting kfp<2,>=1.8.5 (from tfx[kfp]<2)
  Downloading kfp-1.8.22.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.9/304.9 kB 14.0 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting kfp-pipeline-spec<0.2,>=0.1.10 (from tfx[kfp]<2)
  Downloading kfp_pipeline_spec-0.1.16-py3-none-any.whl (19 kB)
Requirement already satisfied: six in /opt/conda/lib/python3.7/site-packages (from absl-py<2.0.0,>=0.9->tfx[kfp]<2) (1.16.0)
Requirement already satisfied: crcmod<2.0,>=1.7 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.7)
Requirement already satisfied: orjson<4.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (3.6.5)
Collecting dill<0.3.2,>=0.3.1.1 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading dill-0.3.1.1.tar.gz (151 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 152.0/152.0 kB 7.5 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting cloudpickle~=2.2.1 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading cloudpickle-2.2.1-py3-none-any.whl (25 kB)
Requirement already satisfied: fastavro<2,>=0.23.6 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.4.7)
Requirement already satisfied: fasteners<1.0,>=0.3 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.16.3)
Requirement already satisfied: hdfs<3.0.0,>=2.1.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (2.6.0)
Requirement already satisfied: httplib2<0.23.0,>=0.8 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.20.2)
Collecting objsize<0.7.0,>=0.6.1 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading objsize-0.6.1-py3-none-any.whl (9.3 kB)
Requirement already satisfied: pymongo<5.0.0,>=3.8.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (3.12.3)
Requirement already satisfied: proto-plus<2,>=1.7.1 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.19.8)
Collecting protobuf<4,>=3.13 (from tfx[kfp]<2)
  Downloading protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 15.2 MB/s eta 0:00:0000:01
[?25hRequirement already satisfied: pydot<2,>=1.2.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.4.2)
Requirement already satisfied: python-dateutil<3,>=2.8.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (2.8.2)
Requirement already satisfied: pytz>=2018.3 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (2021.3)
Collecting regex>=2020.6.8 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for regex>=2020.6.8 from https://files.pythonhosted.org/packages/63/78/ed291d95116695b8b5d7469a931d7c2e83d942df0853915ee504cee98bcf/regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata
  Downloading regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (40 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.9/40.9 kB 1.6 MB/s eta 0:00:00
[?25hRequirement already satisfied: requests<3.0.0,>=2.24.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (2.26.0)
Collecting zstandard<1,>=0.18.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading zstandard-0.21.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 46.7 MB/s eta 0:00:0000:01
[?25hRequirement already satisfied: cachetools<6,>=3.1.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (4.2.4)
Requirement already satisfied: google-auth<3,>=1.18.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (2.3.3)
Requirement already satisfied: google-auth-httplib2<0.2.0,>=0.1.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.1.0)
Collecting google-cloud-datastore<3,>=2.0.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-datastore<3,>=2.0.0 from https://files.pythonhosted.org/packages/45/44/e2ee842931fe00d8e7506dcb3206afaa8d32a661e04f09d01931f6f4003f/google_cloud_datastore-2.17.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_datastore-2.17.0-py2.py3-none-any.whl.metadata (5.5 kB)
Collecting google-cloud-pubsub<3,>=2.1.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-pubsub<3,>=2.1.0 from https://files.pythonhosted.org/packages/e2/00/916d3934aeb1c602f4a0e2b658d844dd47264cd7e53851f60f334c095608/google_cloud_pubsub-2.18.3-py2.py3-none-any.whl.metadata
  Downloading google_cloud_pubsub-2.18.3-py2.py3-none-any.whl.metadata (9.2 kB)
Collecting google-cloud-pubsublite<2,>=1.2.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading google_cloud_pubsublite-1.7.0-py2.py3-none-any.whl (273 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 273.9/273.9 kB 10.3 MB/s eta 0:00:00
[?25hRequirement already satisfied: google-cloud-bigquery-storage<3,>=2.6.3 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (2.10.1)
Requirement already satisfied: google-cloud-core<3,>=2.0.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (2.2.1)
Collecting google-cloud-bigtable<2.18.0,>=2.0.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading google_cloud_bigtable-2.17.0-py2.py3-none-any.whl (288 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 288.6/288.6 kB 10.1 MB/s eta 0:00:00
[?25hCollecting google-cloud-spanner<4,>=3.0.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/fd/77/527bbb6c103ef5e8e0d49d8000e337d3ce4ed66a373af915b0170012de30/google_cloud_spanner-3.40.1-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.40.1-py2.py3-none-any.whl.metadata (10 kB)
Collecting google-cloud-dlp<4,>=3.0.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-dlp<4,>=3.0.0 from https://files.pythonhosted.org/packages/83/21/1d12ac0200d599ac7d2d9ec735851fa51eb365b962638de124247645232f/google_cloud_dlp-3.12.2-py2.py3-none-any.whl.metadata
  Downloading google_cloud_dlp-3.12.2-py2.py3-none-any.whl.metadata (5.1 kB)
Collecting google-cloud-language<3,>=2.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-language<3,>=2.0 from https://files.pythonhosted.org/packages/0b/28/a137e4b56fd79595b42a5e14576148337265d8218d0787068610a004158b/google_cloud_language-2.11.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_language-2.11.0-py2.py3-none-any.whl.metadata (5.3 kB)
Collecting google-cloud-videointelligence<3,>=2.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-videointelligence<3,>=2.0 from https://files.pythonhosted.org/packages/54/49/463abf7c16f703d40951c21e9d9439702923127ae5acad2c4924dbc52288/google_cloud_videointelligence-2.11.3-py2.py3-none-any.whl.metadata
  Downloading google_cloud_videointelligence-2.11.3-py2.py3-none-any.whl.metadata (5.5 kB)
Collecting google-cloud-vision<4,>=2 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-vision<4,>=2 from https://files.pythonhosted.org/packages/14/16/e3ea36b6989e0cff58c2cc38261b9b5133a58d1fb08d64fb85fc552f3466/google_cloud_vision-3.4.4-py2.py3-none-any.whl.metadata
  Downloading google_cloud_vision-3.4.4-py2.py3-none-any.whl.metadata (6.2 kB)
Requirement already satisfied: google-cloud-recommendations-ai<0.11.0,>=0.1.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.2.0)
Requirement already satisfied: websocket-client>=0.32.0 in /opt/conda/lib/python3.7/site-packages (from docker<5,>=4.1->tfx[kfp]<2) (1.2.3)
Requirement already satisfied: googleapis-common-protos<2.0dev,>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from google-api-core<1.33->tfx[kfp]<2) (1.53.0)
Collecting google-auth<3,>=1.18.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading google_auth-1.35.0-py2.py3-none-any.whl (152 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 152.9/152.9 kB 9.8 MB/s eta 0:00:00
[?25hRequirement already satisfied: setuptools>=40.3.0 in /opt/conda/lib/python3.7/site-packages (from google-api-core<1.33->tfx[kfp]<2) (59.6.0)
Requirement already satisfied: uritemplate<4dev,>=3.0.0 in /opt/conda/lib/python3.7/site-packages (from google-api-python-client<2,>=1.8->tfx[kfp]<2) (3.0.1)
Requirement already satisfied: oauth2client>=1.4.12 in /opt/conda/lib/python3.7/site-packages (from google-apitools<1,>=0.5->tfx[kfp]<2) (4.1.3)
Requirement already satisfied: google-cloud-storage<2.0.0dev,>=1.32.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-aiplatform<1.18,>=1.6.2->tfx[kfp]<2) (1.43.0)
Requirement already satisfied: google-resumable-media<3.0dev,>=0.6.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-bigquery<3,>=2.26.0->tfx[kfp]<2) (2.1.0)
Requirement already satisfied: MarkupSafe>=0.23 in /opt/conda/lib/python3.7/site-packages (from jinja2<4,>=2.7.3->tfx[kfp]<2) (1.1.1)
Requirement already satisfied: scipy in /opt/conda/lib/python3.7/site-packages (from keras-tuner<2,>=1.0.4->tfx[kfp]<2) (1.7.3)
Requirement already satisfied: tensorboard in /opt/conda/lib/python3.7/site-packages (from keras-tuner<2,>=1.0.4->tfx[kfp]<2) (2.7.0)
Requirement already satisfied: ipython in /opt/conda/lib/python3.7/site-packages (from keras-tuner<2,>=1.0.4->tfx[kfp]<2) (7.30.1)
Requirement already satisfied: kt-legacy in /opt/conda/lib/python3.7/site-packages (from keras-tuner<2,>=1.0.4->tfx[kfp]<2) (1.0.4)
Collecting requests-toolbelt<1,>=0.8.0 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Downloading requests_toolbelt-0.10.1-py2.py3-none-any.whl (54 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.5/54.5 kB 5.6 MB/s eta 0:00:00
[?25hCollecting kfp-server-api<2.0.0,>=1.1.2 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Downloading kfp-server-api-1.8.5.tar.gz (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.1/58.1 kB 4.9 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hRequirement already satisfied: jsonschema<5,>=3.0.1 in /opt/conda/lib/python3.7/site-packages (from kfp<2,>=1.8.5->tfx[kfp]<2) (4.3.1)
Collecting tabulate<1,>=0.8.6 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Downloading tabulate-0.9.0-py3-none-any.whl (35 kB)
Collecting Deprecated<2,>=1.2.7 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Obtaining dependency information for Deprecated<2,>=1.2.7 from https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl.metadata
  Downloading Deprecated-1.2.14-py2.py3-none-any.whl.metadata (5.4 kB)
Collecting strip-hints<1,>=0.1.8 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Downloading strip-hints-0.1.10.tar.gz (29 kB)
  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting docstring-parser<1,>=0.7.3 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Downloading docstring_parser-0.15-py3-none-any.whl (36 kB)
Collecting fire<1,>=0.3.1 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Downloading fire-0.5.0.tar.gz (88 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.3/88.3 kB 7.5 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hRequirement already satisfied: urllib3<2 in /opt/conda/lib/python3.7/site-packages (from kfp<2,>=1.8.5->tfx[kfp]<2) (1.26.7)
Requirement already satisfied: pydantic<2,>=1.8.2 in /opt/conda/lib/python3.7/site-packages (from kfp<2,>=1.8.5->tfx[kfp]<2) (1.8.2)
Collecting typer<1.0,>=0.3.2 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Downloading typer-0.9.0-py3-none-any.whl (45 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.9/45.9 kB 2.4 MB/s eta 0:00:00
[?25hRequirement already satisfied: certifi>=14.05.14 in /opt/conda/lib/python3.7/site-packages (from kubernetes<13,>=10.0.1->tfx[kfp]<2) (2021.10.8)
Requirement already satisfied: requests-oauthlib in /opt/conda/lib/python3.7/site-packages (from kubernetes<13,>=10.0.1->tfx[kfp]<2) (1.3.0)
Requirement already satisfied: pyparsing>=2.0.2 in /opt/conda/lib/python3.7/site-packages (from packaging<21,>=20->tfx[kfp]<2) (3.0.6)
Requirement already satisfied: psutil in /opt/conda/lib/python3.7/site-packages (from portpicker<2,>=1.3.1->tfx[kfp]<2) (5.8.0)
Requirement already satisfied: astunparse>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow<2.12,>=2.11.0->tfx[kfp]<2) (1.6.3)
Requirement already satisfied: flatbuffers>=2.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow<2.12,>=2.11.0->tfx[kfp]<2) (2.0)
Requirement already satisfied: gast<=0.4.0,>=0.2.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow<2.12,>=2.11.0->tfx[kfp]<2) (0.4.0)
Requirement already satisfied: google-pasta>=0.1.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow<2.12,>=2.11.0->tfx[kfp]<2) (0.2.0)
Requirement already satisfied: h5py>=2.9.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow<2.12,>=2.11.0->tfx[kfp]<2) (3.6.0)
Collecting keras<2.12,>=2.11.0 (from tensorflow<2.12,>=2.11.0->tfx[kfp]<2)
  Downloading keras-2.11.0-py2.py3-none-any.whl (1.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 23.8 MB/s eta 0:00:00a 0:00:01
[?25hCollecting libclang>=13.0.0 (from tensorflow<2.12,>=2.11.0->tfx[kfp]<2)
  Obtaining dependency information for libclang>=13.0.0 from https://files.pythonhosted.org/packages/ea/df/55525e489c43f9dbb6c8ea27d8a567b3dcd18a22f3c45483055f5ca6611d/libclang-16.0.6-py2.py3-none-manylinux2010_x86_64.whl.metadata
  Downloading libclang-16.0.6-py2.py3-none-manylinux2010_x86_64.whl.metadata (5.2 kB)
Collecting numpy<2,>=1.16 (from tfx[kfp]<2)
  Downloading numpy-1.21.6-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.7/15.7 MB 40.9 MB/s eta 0:00:0000:0100:01
[?25hRequirement already satisfied: opt-einsum>=2.3.2 in /opt/conda/lib/python3.7/site-packages (from tensorflow<2.12,>=2.11.0->tfx[kfp]<2) (3.3.0)
INFO: pip is looking at multiple versions of tensorflow to determine which version is compatible with other requirements. This could take a while.
Collecting kfp<2,>=1.8.5 (from tfx[kfp]<2)
  Downloading kfp-1.8.21.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.9/304.9 kB 9.8 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.20.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.8/304.8 kB 6.8 MB/s eta 0:00:0000:01
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.19.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.8/304.8 kB 11.0 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.18.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.8/304.8 kB 7.1 MB/s eta 0:00:0000:01
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting jsonschema<4,>=3.0.1 (from kfp<2,>=1.8.5->tfx[kfp]<2)
  Downloading jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 kB 2.9 MB/s eta 0:00:00
[?25hCollecting kfp<2,>=1.8.5 (from tfx[kfp]<2)
  Downloading kfp-1.8.17.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.7/304.7 kB 13.9 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.16.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.5/304.5 kB 7.2 MB/s eta 0:00:0000:01
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.15.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.5/304.5 kB 13.5 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hINFO: pip is still looking at multiple versions of tensorflow to determine which version is compatible with other requirements. This could take a while.
  Downloading kfp-1.8.14.tar.gz (304 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 304.3/304.3 kB 17.3 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.13.tar.gz (300 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 300.1/300.1 kB 16.2 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting kfp-pipeline-spec<0.2,>=0.1.10 (from tfx[kfp]<2)
  Downloading kfp_pipeline_spec-0.1.15-py3-none-any.whl (11 kB)
  Downloading kfp_pipeline_spec-0.1.14-py3-none-any.whl (18 kB)
Collecting kfp<2,>=1.8.5 (from tfx[kfp]<2)
  Downloading kfp-1.8.12.tar.gz (301 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 301.2/301.2 kB 21.9 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting typing-extensions<5,>=3.10.0.2 (from tfx[kfp]<2)
  Downloading typing_extensions-3.10.0.2-py3-none-any.whl (26 kB)
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
Collecting kfp<2,>=1.8.5 (from tfx[kfp]<2)
  Downloading kfp-1.8.11.tar.gz (298 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 298.6/298.6 kB 25.4 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting kfp-pipeline-spec<0.2,>=0.1.10 (from tfx[kfp]<2)
  Downloading kfp_pipeline_spec-0.1.13-py3-none-any.whl (18 kB)
Collecting kfp<2,>=1.8.5 (from tfx[kfp]<2)
  Downloading kfp-1.8.10.tar.gz (298 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 298.3/298.3 kB 25.8 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting absl-py<2.0.0,>=0.9 (from tfx[kfp]<2)
  Downloading absl_py-0.11.0-py3-none-any.whl (127 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.8/127.8 kB 11.8 MB/s eta 0:00:00
[?25hCollecting kfp<2,>=1.8.5 (from tfx[kfp]<2)
  Downloading kfp-1.8.9.tar.gz (296 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 296.3/296.3 kB 26.0 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.8.tar.gz (296 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 296.2/296.2 kB 24.7 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.7.tar.gz (295 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 295.5/295.5 kB 23.5 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.6.tar.gz (266 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 266.5/266.5 kB 17.7 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25h  Downloading kfp-1.8.5.tar.gz (264 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 264.3/264.3 kB 17.2 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting tfx[kfp]<2
  Downloading tfx-1.11.0-py3-none-any.whl (2.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 44.3 MB/s eta 0:00:0000:01
[?25hCollecting ml-pipelines-sdk==1.11.0 (from tfx[kfp]<2)
  Downloading ml_pipelines_sdk-1.11.0-py3-none-any.whl (1.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 44.1 MB/s eta 0:00:00
[?25hCollecting ml-metadata<1.12.0,>=1.11.0 (from tfx[kfp]<2)
  Downloading ml_metadata-1.11.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.7/6.7 MB 5.9 MB/s eta 0:00:0000:0100:01m
[?25hCollecting tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5 (from tfx[kfp]<2)
  Downloading tensorflow-2.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (578.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 578.1/578.1 MB 1.1 MB/s eta 0:00:0000:0100:01
[?25hCollecting tensorflow-data-validation<1.12.0,>=1.11.0 (from tfx[kfp]<2)
  Downloading tensorflow_data_validation-1.11.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (18.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.2/18.2 MB 45.4 MB/s eta 0:00:0000:0100:01
[?25hCollecting tensorflow-model-analysis<0.43.0,>=0.42.0 (from tfx[kfp]<2)
  Downloading tensorflow_model_analysis-0.42.0-py3-none-any.whl (1.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 39.0 MB/s eta 0:00:0000:01
[?25hCollecting tensorflow-transform<1.12.0,>=1.11.0 (from tfx[kfp]<2)
  Downloading tensorflow_transform-1.11.0-py3-none-any.whl (446 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 446.5/446.5 kB 29.1 MB/s eta 0:00:00
[?25hCollecting tfx-bsl<1.12.0,>=1.11.0 (from tfx[kfp]<2)
  Downloading tfx_bsl-1.11.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (21.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.6/21.6 MB 33.3 MB/s eta 0:00:0000:0100:01
[?25hRequirement already satisfied: cloudpickle<3,>=2.0.0 in /opt/conda/lib/python3.7/site-packages (from kfp<2,>=1.8.5->tfx[kfp]<2) (2.0.0)
Collecting keras<2.11,>=2.10.0 (from tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2)
  Downloading keras-2.10.0-py2.py3-none-any.whl (1.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 29.5 MB/s eta 0:00:00
[?25hRequirement already satisfied: keras-preprocessing>=1.1.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (1.1.2)
Collecting tensorboard<2.11,>=2.10 (from tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2)
  Downloading tensorboard-2.10.1-py3-none-any.whl (5.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 34.4 MB/s eta 0:00:0000:0100:01
[?25hRequirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (0.23.1)
Collecting tensorflow-estimator<2.11,>=2.10.0 (from tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2)
  Downloading tensorflow_estimator-2.10.0-py2.py3-none-any.whl (438 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 438.7/438.7 kB 25.0 MB/s eta 0:00:00
[?25hRequirement already satisfied: termcolor>=1.1.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (1.1.0)
Requirement already satisfied: wrapt>=1.11.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (1.13.3)
INFO: pip is looking at multiple versions of apache-beam[gcp] to determine which version is compatible with other requirements. This could take a while.
Collecting apache-beam[gcp]<3,>=2.40 (from tfx[kfp]<2)
  Downloading apache_beam-2.47.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.5 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.5/13.5 MB 41.8 MB/s eta 0:00:0000:0100:01
[?25h  Downloading apache_beam-2.46.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.4/13.4 MB 44.2 MB/s eta 0:00:0000:0100:01
[?25hRequirement already satisfied: google-cloud-datastore<2,>=1.8.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.15.3)
Requirement already satisfied: google-cloud-bigtable<2,>=0.31.1 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.7.0)
Requirement already satisfied: google-cloud-language<2,>=1.3.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.3.0)
Requirement already satisfied: google-cloud-videointelligence<2,>=1.8.0 in /opt/conda/lib/python3.7/site-packages (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.16.1)
Collecting joblib>=1.2.0 (from tensorflow-data-validation<1.12.0,>=1.11.0->tfx[kfp]<2)
  Obtaining dependency information for joblib>=1.2.0 from https://files.pythonhosted.org/packages/10/40/d551139c85db202f1f384ba8bcf96aca2f329440a844f924c8a0040b6d02/joblib-1.3.2-py3-none-any.whl.metadata
  Downloading joblib-1.3.2-py3-none-any.whl.metadata (5.4 kB)
Requirement already satisfied: pandas<2,>=1.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow-data-validation<1.12.0,>=1.11.0->tfx[kfp]<2) (1.3.5)
Collecting pyfarmhash<0.4,>=0.2 (from tensorflow-data-validation<1.12.0,>=1.11.0->tfx[kfp]<2)
  Downloading pyfarmhash-0.3.2.tar.gz (99 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.9/99.9 kB 12.2 MB/s eta 0:00:00
[?25h  Preparing metadata (setup.py) ... [?25ldone
[?25hCollecting tensorflow-metadata<1.12,>=1.11.0 (from tensorflow-data-validation<1.12.0,>=1.11.0->tfx[kfp]<2)
  Downloading tensorflow_metadata-1.11.0-py3-none-any.whl (52 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.3/52.3 kB 5.6 MB/s eta 0:00:00
[?25hRequirement already satisfied: ipywidgets<8,>=7 in /opt/conda/lib/python3.7/site-packages (from tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (7.6.5)
INFO: pip is looking at multiple versions of tensorflow-serving-api to determine which version is compatible with other requirements. This could take a while.
Collecting tensorflow-serving-api!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,<3,>=1.15 (from tfx[kfp]<2)
  Downloading tensorflow_serving_api-2.11.0-py2.py3-none-any.whl (37 kB)
  Downloading tensorflow_serving_api-2.10.1-py2.py3-none-any.whl (37 kB)
Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.7/site-packages (from astunparse>=1.6.0->tensorflow<2.12,>=2.11.0->tfx[kfp]<2) (0.37.0)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.7/site-packages (from google-auth<3,>=1.18.0->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.2.7)
Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.7/site-packages (from google-auth<3,>=1.18.0->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (4.8)
Requirement already satisfied: libcst>=0.2.5 in /opt/conda/lib/python3.7/site-packages (from google-cloud-bigquery-storage<3,>=2.6.3->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.3.23)
Collecting google-cloud-core<3,>=0.28.1 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading google_cloud_core-1.7.3-py2.py3-none-any.whl (28 kB)
Requirement already satisfied: grpc-google-iam-v1<0.13dev,>=0.12.3 in /opt/conda/lib/python3.7/site-packages (from google-cloud-bigtable<2,>=0.31.1->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.12.3)
INFO: pip is looking at multiple versions of google-cloud-dlp to determine which version is compatible with other requirements. This could take a while.
Collecting google-cloud-dlp<4,>=3.0.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading google_cloud_dlp-3.12.1-py2.py3-none-any.whl (143 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.4/143.4 kB 16.2 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.12.0-py2.py3-none-any.whl (143 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.4/143.4 kB 9.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.11.1-py2.py3-none-any.whl (131 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 131.4/131.4 kB 14.2 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.11.0-py2.py3-none-any.whl (126 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 126.0/126.0 kB 11.0 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.10.1-py2.py3-none-any.whl (125 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 126.0/126.0 kB 11.4 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.10.0-py2.py3-none-any.whl (125 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 126.0/126.0 kB 14.3 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.9.2-py2.py3-none-any.whl (125 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.3/125.3 kB 17.0 MB/s eta 0:00:00
[?25hINFO: pip is still looking at multiple versions of google-cloud-dlp to determine which version is compatible with other requirements. This could take a while.
  Downloading google_cloud_dlp-3.9.1-py2.py3-none-any.whl (125 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.3/125.3 kB 13.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.9.0-py2.py3-none-any.whl (124 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.6/124.6 kB 12.5 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.8.1-py2.py3-none-any.whl (119 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 119.4/119.4 kB 8.9 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.8.0-py2.py3-none-any.whl (119 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 119.4/119.4 kB 8.6 MB/s eta 0:00:00
[?25h  Downloading google_cloud_dlp-3.7.1-py2.py3-none-any.whl (118 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.2/118.2 kB 8.8 MB/s eta 0:00:00
[?25hCollecting grpcio<2,>=1.28.1 (from tfx[kfp]<2)
  Obtaining dependency information for grpcio<2,>=1.28.1 from https://files.pythonhosted.org/packages/ca/fb/a23f72166bc650652e93500cf596f724dbe9468cd1e74cc2e546d6a4fe6e/grpcio-1.57.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata
  Downloading grpcio-1.57.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)
INFO: pip is looking at multiple versions of google-cloud-pubsub to determine which version is compatible with other requirements. This could take a while.
Collecting google-cloud-pubsub<3,>=2.1.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-pubsub<3,>=2.1.0 from https://files.pythonhosted.org/packages/a2/50/3c2993f929985a4fca742ff776878e4f4d3e804b8efd345fdfd054a46e6b/google_cloud_pubsub-2.18.2-py2.py3-none-any.whl.metadata
  Downloading google_cloud_pubsub-2.18.2-py2.py3-none-any.whl.metadata (9.2 kB)
  Obtaining dependency information for google-cloud-pubsub<3,>=2.1.0 from https://files.pythonhosted.org/packages/be/60/22d3609eb807514c91b291b7075243a9b5924d1f3a557325ccd7de15f32b/google_cloud_pubsub-2.18.1-py2.py3-none-any.whl.metadata
  Downloading google_cloud_pubsub-2.18.1-py2.py3-none-any.whl.metadata (9.2 kB)
  Obtaining dependency information for google-cloud-pubsub<3,>=2.1.0 from https://files.pythonhosted.org/packages/51/8d/3784f023a00c0d0fa0860d131039df6ce58b3f10abbb84f91f7d4c0f13a3/google_cloud_pubsub-2.18.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_pubsub-2.18.0-py2.py3-none-any.whl.metadata (9.2 kB)
  Obtaining dependency information for google-cloud-pubsub<3,>=2.1.0 from https://files.pythonhosted.org/packages/f5/21/1a70e8d2959d578e8365241af7a6cf463d6f0ee56ae7f7d4ba4a4914a4fe/google_cloud_pubsub-2.17.1-py2.py3-none-any.whl.metadata
  Downloading google_cloud_pubsub-2.17.1-py2.py3-none-any.whl.metadata (9.4 kB)
  Obtaining dependency information for google-cloud-pubsub<3,>=2.1.0 from https://files.pythonhosted.org/packages/c8/98/54e08d32d9990754f66a8625a3d4ba7a8152451c4dc682ca969ac49eaf0b/google_cloud_pubsub-2.17.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_pubsub-2.17.0-py2.py3-none-any.whl.metadata (9.4 kB)
  Downloading google_cloud_pubsub-2.16.1-py2.py3-none-any.whl (263 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 264.0/264.0 kB 15.2 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.16.0-py2.py3-none-any.whl (263 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 263.9/263.9 kB 24.8 MB/s eta 0:00:00
[?25hINFO: pip is still looking at multiple versions of google-cloud-pubsub to determine which version is compatible with other requirements. This could take a while.
  Downloading google_cloud_pubsub-2.15.2-py2.py3-none-any.whl (243 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 243.1/243.1 kB 24.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.15.1-py2.py3-none-any.whl (243 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 243.0/243.0 kB 20.5 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.15.0-py2.py3-none-any.whl (242 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 243.0/243.0 kB 17.4 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.14.1-py2.py3-none-any.whl (242 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 242.2/242.2 kB 23.4 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.14.0-py2.py3-none-any.whl (241 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 241.5/241.5 kB 24.9 MB/s eta 0:00:00
[?25hINFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  Downloading google_cloud_pubsub-2.13.12-py2.py3-none-any.whl (238 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 238.3/238.3 kB 22.3 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.11-py2.py3-none-any.whl (236 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 237.0/237.0 kB 23.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.10-py2.py3-none-any.whl (236 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 236.6/236.6 kB 16.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.9-py2.py3-none-any.whl (236 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 236.7/236.7 kB 19.6 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.8-py2.py3-none-any.whl (236 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 236.7/236.7 kB 24.4 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.7-py2.py3-none-any.whl (236 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 236.6/236.6 kB 22.3 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.6-py2.py3-none-any.whl (235 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 235.1/235.1 kB 24.0 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.5-py2.py3-none-any.whl (234 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 234.8/234.8 kB 21.2 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.4-py2.py3-none-any.whl (234 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 234.4/234.4 kB 13.4 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.3-py2.py3-none-any.whl (234 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 234.5/234.5 kB 13.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.2-py2.py3-none-any.whl (234 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 234.5/234.5 kB 19.6 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsub-2.13.1-py2.py3-none-any.whl (234 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 234.5/234.5 kB 14.1 MB/s eta 0:00:00
[?25hCollecting grpc-google-iam-v1<0.13dev,>=0.12.3 (from google-cloud-bigtable<2,>=0.31.1->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading grpc_google_iam_v1-0.12.6-py2.py3-none-any.whl (26 kB)
Requirement already satisfied: grpcio-status>=1.16.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-pubsub<3,>=2.1.0->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (1.43.0)
Collecting overrides<7.0.0,>=6.0.1 (from google-cloud-pubsublite<2,>=1.2.0->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading overrides-6.5.0-py3-none-any.whl (17 kB)
INFO: pip is looking at multiple versions of google-cloud-pubsublite to determine which version is compatible with other requirements. This could take a while.
Collecting google-cloud-pubsublite<2,>=1.2.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Downloading google_cloud_pubsublite-1.6.0-py2.py3-none-any.whl (271 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 271.1/271.1 kB 18.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsublite-1.5.0-py2.py3-none-any.whl (270 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 270.5/270.5 kB 15.8 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsublite-1.4.3-py2.py3-none-any.whl (267 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 267.2/267.2 kB 18.4 MB/s eta 0:00:00
[?25h  Downloading google_cloud_pubsublite-1.4.2-py2.py3-none-any.whl (265 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 265.8/265.8 kB 10.8 MB/s eta 0:00:00
[?25hINFO: pip is looking at multiple versions of google-cloud-spanner to determine which version is compatible with other requirements. This could take a while.
Collecting google-cloud-spanner<4,>=3.0.0 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/e9/a8/31e93da06b9da3e6d5729f8fa5f7c21a47cfd1c19ec7a6f3a9587a19901e/google_cloud_spanner-3.40.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.40.0-py2.py3-none-any.whl.metadata (10 kB)
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/a4/80/a09c81dc83a7906a5ec33af55ffbf91aabdd923f7b06528b2a5985e3ae38/google_cloud_spanner-3.39.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.39.0-py2.py3-none-any.whl.metadata (10 kB)
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/5e/5c/7b69a80efeb9106612d15c6fa0338ea2a0806b6f2178fef19bd0e069b630/google_cloud_spanner-3.38.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.38.0-py2.py3-none-any.whl.metadata (10 kB)
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/32/bc/ba4eddcb589f7633bb43cab477fdf8b4460778128286e143d6cbb05c4da0/google_cloud_spanner-3.37.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.37.0-py2.py3-none-any.whl.metadata (10 kB)
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/d9/54/aabeec25d96edfc3448da88adfd0012397bf7e11308bc3862dcdad1ef133/google_cloud_spanner-3.36.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.36.0-py2.py3-none-any.whl.metadata (10 kB)
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/a2/9f/5a4176995bfbc81c6fd887077c2cf5de2d4afa5996641e075b54f83e1a94/google_cloud_spanner-3.35.1-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.35.1-py2.py3-none-any.whl.metadata (10 kB)
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/ab/82/e3b60154b9ced9318882d9bdf10a1121457b1007d9603da5d1a4ba4ca9d9/google_cloud_spanner-3.35.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.35.0-py2.py3-none-any.whl.metadata (10 kB)
INFO: pip is still looking at multiple versions of google-cloud-spanner to determine which version is compatible with other requirements. This could take a while.
  Obtaining dependency information for google-cloud-spanner<4,>=3.0.0 from https://files.pythonhosted.org/packages/e8/bc/d46d1d4e386f8b55d9c03aad28c8452b4a49484ebd2cd4d92e6cf373e1d1/google_cloud_spanner-3.34.0-py2.py3-none-any.whl.metadata
  Downloading google_cloud_spanner-3.34.0-py2.py3-none-any.whl.metadata (10 kB)
  Downloading google_cloud_spanner-3.33.0-py2.py3-none-any.whl (328 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 328.5/328.5 kB 27.3 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.32.0-py2.py3-none-any.whl (327 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 327.7/327.7 kB 23.2 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.31.0-py2.py3-none-any.whl (327 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 327.6/327.6 kB 25.9 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.30.0-py2.py3-none-any.whl (327 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 327.3/327.3 kB 25.4 MB/s eta 0:00:00
[?25hINFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  Downloading google_cloud_spanner-3.29.0-py2.py3-none-any.whl (327 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 327.3/327.3 kB 23.0 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.28.0-py2.py3-none-any.whl (327 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 327.1/327.1 kB 23.2 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.27.1-py2.py3-none-any.whl (300 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 300.0/300.0 kB 24.6 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.27.0-py2.py3-none-any.whl (297 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 297.1/297.1 kB 22.8 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.26.0-py2.py3-none-any.whl (294 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 294.4/294.4 kB 23.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.25.0-py2.py3-none-any.whl (293 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 293.3/293.3 kB 26.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.24.0-py2.py3-none-any.whl (292 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 292.4/292.4 kB 26.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.23.0-py2.py3-none-any.whl (292 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 292.7/292.7 kB 22.8 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.22.2-py2.py3-none-any.whl (291 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 291.7/291.7 kB 23.9 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.22.1-py2.py3-none-any.whl (291 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 291.7/291.7 kB 20.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.22.0-py2.py3-none-any.whl (291 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 291.7/291.7 kB 24.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.21.0-py2.py3-none-any.whl (291 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 291.2/291.2 kB 13.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.20.0-py2.py3-none-any.whl (279 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 279.6/279.6 kB 20.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.19.0-py2.py3-none-any.whl (279 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 279.6/279.6 kB 23.8 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.18.0-py2.py3-none-any.whl (279 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 279.5/279.5 kB 23.9 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.17.0-py2.py3-none-any.whl (276 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 276.8/276.8 kB 22.9 MB/s eta 0:00:00
[?25h  Downloading google_cloud_spanner-3.16.0-py2.py3-none-any.whl (275 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 275.6/275.6 kB 23.4 MB/s eta 0:00:00
[?25hRequirement already satisfied: sqlparse>=0.3.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-spanner<4,>=3.0.0->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.4.2)
INFO: pip is looking at multiple versions of google-cloud-vision to determine which version is compatible with other requirements. This could take a while.
Collecting google-cloud-vision<4,>=2 (from apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for google-cloud-vision<4,>=2 from https://files.pythonhosted.org/packages/39/13/c7c28209b32909cc261634c62273373c3db82a1a06accba3730fae9a0757/google_cloud_vision-3.4.3-py2.py3-none-any.whl.metadata
  Downloading google_cloud_vision-3.4.3-py2.py3-none-any.whl.metadata (6.2 kB)
  Obtaining dependency information for google-cloud-vision<4,>=2 from https://files.pythonhosted.org/packages/24/bf/14e72eb9b247f354ee5278112173ed1b05f228ae4072f081830c5fd4f597/google_cloud_vision-3.4.2-py2.py3-none-any.whl.metadata
  Downloading google_cloud_vision-3.4.2-py2.py3-none-any.whl.metadata (6.3 kB)
  Downloading google_cloud_vision-3.4.1-py2.py3-none-any.whl (444 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 444.3/444.3 kB 26.6 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-3.4.0-py2.py3-none-any.whl (444 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 444.2/444.2 kB 19.6 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-3.3.1-py2.py3-none-any.whl (393 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 393.5/393.5 kB 26.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-3.3.0-py2.py3-none-any.whl (386 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 386.5/386.5 kB 26.9 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-3.2.0-py2.py3-none-any.whl (386 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 386.5/386.5 kB 26.7 MB/s eta 0:00:00
[?25hINFO: pip is still looking at multiple versions of google-cloud-vision to determine which version is compatible with other requirements. This could take a while.
  Downloading google_cloud_vision-3.1.4-py2.py3-none-any.whl (390 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 390.4/390.4 kB 27.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-3.1.3-py2.py3-none-any.whl (390 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 390.4/390.4 kB 20.3 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-3.1.2-py2.py3-none-any.whl (390 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 390.4/390.4 kB 29.7 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-3.1.1-py2.py3-none-any.whl (386 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 386.5/386.5 kB 26.1 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-3.1.0-py2.py3-none-any.whl (386 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 386.5/386.5 kB 18.9 MB/s eta 0:00:00
[?25hINFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  Downloading google_cloud_vision-3.0.0-py2.py3-none-any.whl (386 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 386.3/386.3 kB 28.6 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-2.8.0-py2.py3-none-any.whl (385 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 385.6/385.6 kB 28.4 MB/s eta 0:00:00
[?25h  Downloading google_cloud_vision-2.7.3-py2.py3-none-any.whl (385 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 385.4/385.4 kB 30.5 MB/s eta 0:00:00
[?25hRequirement already satisfied: google-crc32c<2.0dev,>=1.0 in /opt/conda/lib/python3.7/site-packages (from google-resumable-media<3.0dev,>=0.6.0->google-cloud-bigquery<3,>=2.26.0->tfx[kfp]<2) (1.1.2)
Requirement already satisfied: cached-property in /opt/conda/lib/python3.7/site-packages (from h5py>=2.9.0->tensorflow<2.12,>=2.11.0->tfx[kfp]<2) (1.5.2)
Requirement already satisfied: docopt in /opt/conda/lib/python3.7/site-packages (from hdfs<3.0.0,>=2.1.0->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.6.2)
Requirement already satisfied: jedi>=0.16 in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (0.18.1)
Requirement already satisfied: decorator in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (5.1.0)
Requirement already satisfied: pickleshare in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (0.7.5)
Requirement already satisfied: traitlets>=4.2 in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (5.1.1)
Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (3.0.24)
Requirement already satisfied: pygments in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (2.10.0)
Requirement already satisfied: backcall in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (0.2.0)
Requirement already satisfied: matplotlib-inline in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (0.1.3)
Requirement already satisfied: pexpect>4.3 in /opt/conda/lib/python3.7/site-packages (from ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (4.8.0)
Requirement already satisfied: ipykernel>=4.5.1 in /opt/conda/lib/python3.7/site-packages (from ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (6.6.0)
Requirement already satisfied: ipython-genutils~=0.2.0 in /opt/conda/lib/python3.7/site-packages (from ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.2.0)
Requirement already satisfied: nbformat>=4.2.0 in /opt/conda/lib/python3.7/site-packages (from ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (5.1.3)
Requirement already satisfied: widgetsnbextension~=3.5.0 in /opt/conda/lib/python3.7/site-packages (from ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (3.5.2)
Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /opt/conda/lib/python3.7/site-packages (from ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (1.0.2)
Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /opt/conda/lib/python3.7/site-packages (from jsonschema<5,>=3.0.1->kfp<2,>=1.8.5->tfx[kfp]<2) (0.18.0)
Requirement already satisfied: importlib-metadata in /opt/conda/lib/python3.7/site-packages (from jsonschema<5,>=3.0.1->kfp<2,>=1.8.5->tfx[kfp]<2) (4.9.0)
Requirement already satisfied: importlib-resources>=1.4.0 in /opt/conda/lib/python3.7/site-packages (from jsonschema<5,>=3.0.1->kfp<2,>=1.8.5->tfx[kfp]<2) (5.4.0)
Requirement already satisfied: pyasn1>=0.1.7 in /opt/conda/lib/python3.7/site-packages (from oauth2client>=1.4.12->google-apitools<1,>=0.5->tfx[kfp]<2) (0.4.8)
Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/conda/lib/python3.7/site-packages (from requests<3.0.0,>=2.24.0->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (2.0.9)
Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.7/site-packages (from requests<3.0.0,>=2.24.0->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (3.1)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.11,>=2.10->tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (0.4.6)
Requirement already satisfied: markdown>=2.6.8 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.11,>=2.10->tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (3.3.6)
Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.11,>=2.10->tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (0.6.1)
Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.11,>=2.10->tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (1.8.0)
Requirement already satisfied: werkzeug>=1.0.1 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.11,>=2.10->tensorflow!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<2.11,>=1.15.5->tfx[kfp]<2) (2.0.2)
Requirement already satisfied: oauthlib>=3.0.0 in /opt/conda/lib/python3.7/site-packages (from requests-oauthlib->kubernetes<13,>=10.0.1->tfx[kfp]<2) (3.1.1)
Requirement already satisfied: cffi>=1.0.0 in /opt/conda/lib/python3.7/site-packages (from google-crc32c<2.0dev,>=1.0->google-resumable-media<3.0dev,>=0.6.0->google-cloud-bigquery<3,>=2.26.0->tfx[kfp]<2) (1.15.0)
Collecting googleapis-common-protos[grpc]<2.0.0dev,>=1.56.0 (from grpc-google-iam-v1<0.13dev,>=0.12.3->google-cloud-bigtable<2,>=0.31.1->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2)
  Obtaining dependency information for googleapis-common-protos[grpc]<2.0.0dev,>=1.56.0 from https://files.pythonhosted.org/packages/a7/bc/416a1ffeba4dcd072bc10523dac9ed97f2e7fc4b760580e2bdbdc1e2afdd/googleapis_common_protos-1.60.0-py2.py3-none-any.whl.metadata
  Downloading googleapis_common_protos-1.60.0-py2.py3-none-any.whl.metadata (1.5 kB)
Collecting protobuf<4,>=3.13 (from tfx[kfp]<2)
  Downloading protobuf-3.19.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 22.1 MB/s eta 0:00:00:00:01
[?25hRequirement already satisfied: zipp>=3.1.0 in /opt/conda/lib/python3.7/site-packages (from importlib-resources>=1.4.0->jsonschema<5,>=3.0.1->kfp<2,>=1.8.5->tfx[kfp]<2) (3.6.0)
Requirement already satisfied: debugpy<2.0,>=1.0.0 in /opt/conda/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (1.5.1)
Requirement already satisfied: jupyter-client<8.0 in /opt/conda/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (7.1.0)
Requirement already satisfied: tornado<7.0,>=4.2 in /opt/conda/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (6.1)
Requirement already satisfied: argcomplete>=1.12.3 in /opt/conda/lib/python3.7/site-packages (from ipykernel>=4.5.1->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (1.12.3)
Requirement already satisfied: parso<0.9.0,>=0.8.0 in /opt/conda/lib/python3.7/site-packages (from jedi>=0.16->ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (0.8.3)
Requirement already satisfied: typing-inspect>=0.4.0 in /opt/conda/lib/python3.7/site-packages (from libcst>=0.2.5->google-cloud-bigquery-storage<3,>=2.6.3->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.7.1)
Requirement already satisfied: jupyter-core in /opt/conda/lib/python3.7/site-packages (from nbformat>=4.2.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (4.9.1)
Requirement already satisfied: ptyprocess>=0.5 in /opt/conda/lib/python3.7/site-packages (from pexpect>4.3->ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (0.7.0)
Requirement already satisfied: wcwidth in /opt/conda/lib/python3.7/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython->keras-tuner<2,>=1.0.4->tfx[kfp]<2) (0.2.5)
Requirement already satisfied: notebook>=4.4.1 in /opt/conda/lib/python3.7/site-packages (from widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (6.4.6)
Requirement already satisfied: pycparser in /opt/conda/lib/python3.7/site-packages (from cffi>=1.0.0->google-crc32c<2.0dev,>=1.0->google-resumable-media<3.0dev,>=0.6.0->google-cloud-bigquery<3,>=2.26.0->tfx[kfp]<2) (2.21)
Requirement already satisfied: entrypoints in /opt/conda/lib/python3.7/site-packages (from jupyter-client<8.0->ipykernel>=4.5.1->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.3)
Requirement already satisfied: nest-asyncio>=1.5 in /opt/conda/lib/python3.7/site-packages (from jupyter-client<8.0->ipykernel>=4.5.1->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (1.5.4)
Requirement already satisfied: pyzmq>=13 in /opt/conda/lib/python3.7/site-packages (from jupyter-client<8.0->ipykernel>=4.5.1->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (22.3.0)
Requirement already satisfied: argon2-cffi in /opt/conda/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (21.1.0)
Requirement already satisfied: nbconvert in /opt/conda/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (6.3.0)
Requirement already satisfied: Send2Trash>=1.8.0 in /opt/conda/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (1.8.0)
Requirement already satisfied: terminado>=0.8.3 in /opt/conda/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.12.1)
Requirement already satisfied: prometheus-client in /opt/conda/lib/python3.7/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.12.0)
Requirement already satisfied: mypy-extensions>=0.3.0 in /opt/conda/lib/python3.7/site-packages (from typing-inspect>=0.4.0->libcst>=0.2.5->google-cloud-bigquery-storage<3,>=2.6.3->apache-beam[gcp]<3,>=2.40->tfx[kfp]<2) (0.4.3)
Requirement already satisfied: mistune<2,>=0.8.1 in /opt/conda/lib/python3.7/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.8.4)
Requirement already satisfied: jupyterlab-pygments in /opt/conda/lib/python3.7/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.1.2)
Requirement already satisfied: bleach in /opt/conda/lib/python3.7/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (4.1.0)
Requirement already satisfied: pandocfilters>=1.4.1 in /opt/conda/lib/python3.7/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (1.5.0)
Requirement already satisfied: testpath in /opt/conda/lib/python3.7/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.5.0)
Requirement already satisfied: defusedxml in /opt/conda/lib/python3.7/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.7.1)
Requirement already satisfied: nbclient<0.6.0,>=0.5.0 in /opt/conda/lib/python3.7/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.5.9)
Requirement already satisfied: webencodings in /opt/conda/lib/python3.7/site-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets<8,>=7->tensorflow-model-analysis<0.43.0,>=0.42.0->tfx[kfp]<2) (0.5.1)
Downloading portpicker-1.6.0-py3-none-any.whl (16 kB)
Downloading Deprecated-1.2.14-py2.py3-none-any.whl (9.6 kB)
Downloading joblib-1.3.2-py3-none-any.whl (302 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 302.2/302.2 kB 27.4 MB/s eta 0:00:00
[?25hDownloading libclang-16.0.6-py2.py3-none-manylinux2010_x86_64.whl (22.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 22.9/22.9 MB 28.0 MB/s eta 0:00:0000:0100:01
[?25hDownloading regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (758 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 759.0/759.0 kB 27.3 MB/s eta 0:00:00
[?25hDownloading grpcio-1.57.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3/5.3 MB 37.6 MB/s eta 0:00:0000:0100:01
[?25hDownloading googleapis_common_protos-1.60.0-py2.py3-none-any.whl (227 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 227.6/227.6 kB 21.4 MB/s eta 0:00:00
[?25hBuilding wheels for collected packages: kfp, dill, fire, kfp-server-api, pyfarmhash, strip-hints
  Building wheel for kfp (setup.py) ... [?25ldone
[?25h  Created wheel for kfp: filename=kfp-1.8.22-py3-none-any.whl size=426992 sha256=e3288a989bd8a8b120dc585b835a4c0e984286d51e3153e7c29cab92725fca81
  Stored in directory: /home/jupyter/.cache/pip/wheels/f1/ea/2f/99e16eb441be7831b69cb568df54a0dd04ab31cb758bfc6819
  Building wheel for dill (setup.py) ... [?25ldone
[?25h  Created wheel for dill: filename=dill-0.3.1.1-py3-none-any.whl size=78546 sha256=64a3f5008aa5c0e80f0c1db8ff7faa518a5c5298438721a0a62271258839040f
  Stored in directory: /home/jupyter/.cache/pip/wheels/a4/61/fd/c57e374e580aa78a45ed78d5859b3a44436af17e22ca53284f
  Building wheel for fire (setup.py) ... [?25ldone
[?25h  Created wheel for fire: filename=fire-0.5.0-py2.py3-none-any.whl size=116950 sha256=dd0c2bc2b4098bba2f64f4c0b71f4d5e1966fd7ccbddb3e27efda6a461ed897e
  Stored in directory: /home/jupyter/.cache/pip/wheels/20/97/e1/dd2c472bebcdcaa85fdc07d0f19020299f1c86773028860c53
  Building wheel for kfp-server-api (setup.py) ... [?25ldone
[?25h  Created wheel for kfp-server-api: filename=kfp_server_api-1.8.5-py3-none-any.whl size=99715 sha256=76bcd53b12d5497fe5666275fc2b91dc4d037d16b4d2f744cb1817f8e5105ead
  Stored in directory: /home/jupyter/.cache/pip/wheels/77/0e/7b/ed385d69453b7b754834c01d83fa9f5708ba66b4f6ed5d6a35
  Building wheel for pyfarmhash (setup.py) ... [?25ldone
[?25h  Created wheel for pyfarmhash: filename=pyfarmhash-0.3.2-cp37-cp37m-linux_x86_64.whl size=108618 sha256=2e93bbb3dffeab584354b6f8aac7499ca010e64ff0075c6d8adccaeb52d66d66
  Stored in directory: /home/jupyter/.cache/pip/wheels/53/58/7a/3b040f3a2ee31908e3be916e32660db6db53621ce6eba838dc
  Building wheel for strip-hints (setup.py) ... [?25ldone
[?25h  Created wheel for strip-hints: filename=strip_hints-0.1.10-py2.py3-none-any.whl size=22302 sha256=7ec56ee2a9f74bd69eb76aca20c1e864dcbe2207b40ca658179b252b1ccf37bb
  Stored in directory: /home/jupyter/.cache/pip/wheels/5e/14/c3/6e44e9b2545f2d570b03f5b6d38c00b7534aa8abb376978363
Successfully built kfp dill fire kfp-server-api pyfarmhash strip-hints
Installing collected packages: pyfarmhash, libclang, keras, zstandard, tensorflow-estimator, tabulate, strip-hints, regex, pyyaml, protobuf, portpicker, packaging, overrides, objsize, numpy, joblib, grpcio, fire, docstring-parser, dill, Deprecated, cloudpickle, click, typer, requests-toolbelt, pyarrow, ml-metadata, kfp-server-api, kfp-pipeline-spec, googleapis-common-protos, google-auth, docker, tensorflow-metadata, kubernetes, apache-beam, tensorboard, grpc-google-iam-v1, google-cloud-core, google-api-python-client, tensorflow, ml-pipelines-sdk, google-cloud-vision, google-cloud-spanner, google-cloud-pubsub, google-cloud-dlp, tensorflow-serving-api, kfp, google-cloud-pubsublite, tfx-bsl, tensorflow-transform, tensorflow-model-analysis, tensorflow-data-validation, tfx
  Attempting uninstall: libclang
    Found existing installation: libclang 12.0.0
    Uninstalling libclang-12.0.0:
      Successfully uninstalled libclang-12.0.0
  Attempting uninstall: keras
    Found existing installation: keras 2.7.0
    Uninstalling keras-2.7.0:
      Successfully uninstalled keras-2.7.0
  Attempting uninstall: tensorflow-estimator
    Found existing installation: tensorflow-estimator 2.7.0
    Uninstalling tensorflow-estimator-2.7.0:
      Successfully uninstalled tensorflow-estimator-2.7.0
  Attempting uninstall: pyyaml
    Found existing installation: PyYAML 6.0
    Uninstalling PyYAML-6.0:
      Successfully uninstalled PyYAML-6.0
  Attempting uninstall: protobuf
    Found existing installation: protobuf 3.19.1
    Uninstalling protobuf-3.19.1:
      Successfully uninstalled protobuf-3.19.1
  Attempting uninstall: packaging
    Found existing installation: packaging 21.3
    Uninstalling packaging-21.3:
      Successfully uninstalled packaging-21.3
  Attempting uninstall: numpy
    Found existing installation: numpy 1.19.5
    Uninstalling numpy-1.19.5:
      Successfully uninstalled numpy-1.19.5
  Attempting uninstall: joblib
    Found existing installation: joblib 1.1.0
    Uninstalling joblib-1.1.0:
      Successfully uninstalled joblib-1.1.0
  Attempting uninstall: grpcio
    Found existing installation: grpcio 1.42.0
    Uninstalling grpcio-1.42.0:
      Successfully uninstalled grpcio-1.42.0
  Attempting uninstall: dill
    Found existing installation: dill 0.3.4
    Uninstalling dill-0.3.4:
      Successfully uninstalled dill-0.3.4
  Attempting uninstall: cloudpickle
    Found existing installation: cloudpickle 2.0.0
    Uninstalling cloudpickle-2.0.0:
      Successfully uninstalled cloudpickle-2.0.0
  Attempting uninstall: click
    Found existing installation: click 8.0.3
    Uninstalling click-8.0.3:
      Successfully uninstalled click-8.0.3
  Attempting uninstall: pyarrow
    Found existing installation: pyarrow 5.0.0
    Uninstalling pyarrow-5.0.0:
      Successfully uninstalled pyarrow-5.0.0
  Attempting uninstall: googleapis-common-protos
    Found existing installation: googleapis-common-protos 1.53.0
    Uninstalling googleapis-common-protos-1.53.0:
      Successfully uninstalled googleapis-common-protos-1.53.0
  Attempting uninstall: google-auth
    Found existing installation: google-auth 2.3.3
    Uninstalling google-auth-2.3.3:
      Successfully uninstalled google-auth-2.3.3
  Attempting uninstall: docker
    Found existing installation: docker 5.0.3
    Uninstalling docker-5.0.3:
      Successfully uninstalled docker-5.0.3
  Attempting uninstall: tensorflow-metadata
    Found existing installation: tensorflow-metadata 1.5.0
    Uninstalling tensorflow-metadata-1.5.0:
      Successfully uninstalled tensorflow-metadata-1.5.0
  Attempting uninstall: kubernetes
    Found existing installation: kubernetes 21.7.0
    Uninstalling kubernetes-21.7.0:
      Successfully uninstalled kubernetes-21.7.0
  Attempting uninstall: apache-beam
    Found existing installation: apache-beam 2.34.0
    Uninstalling apache-beam-2.34.0:
      Successfully uninstalled apache-beam-2.34.0
  Attempting uninstall: tensorboard
    Found existing installation: tensorboard 2.7.0
    Uninstalling tensorboard-2.7.0:
      Successfully uninstalled tensorboard-2.7.0
  Attempting uninstall: grpc-google-iam-v1
    Found existing installation: grpc-google-iam-v1 0.12.3
    Uninstalling grpc-google-iam-v1-0.12.3:
      Successfully uninstalled grpc-google-iam-v1-0.12.3
  Attempting uninstall: google-cloud-core
    Found existing installation: google-cloud-core 2.2.1
    Uninstalling google-cloud-core-2.2.1:
      Successfully uninstalled google-cloud-core-2.2.1
  Attempting uninstall: google-api-python-client
    Found existing installation: google-api-python-client 2.33.0
    Uninstalling google-api-python-client-2.33.0:
      Successfully uninstalled google-api-python-client-2.33.0
  Attempting uninstall: tensorflow
    Found existing installation: tensorflow 2.7.0
    Uninstalling tensorflow-2.7.0:
      Successfully uninstalled tensorflow-2.7.0
  Attempting uninstall: google-cloud-vision
    Found existing installation: google-cloud-vision 1.0.0
    Uninstalling google-cloud-vision-1.0.0:
      Successfully uninstalled google-cloud-vision-1.0.0
  Attempting uninstall: google-cloud-spanner
    Found existing installation: google-cloud-spanner 1.19.1
    Uninstalling google-cloud-spanner-1.19.1:
      Successfully uninstalled google-cloud-spanner-1.19.1
  Attempting uninstall: google-cloud-pubsub
    Found existing installation: google-cloud-pubsub 1.7.0
    Uninstalling google-cloud-pubsub-1.7.0:
      Successfully uninstalled google-cloud-pubsub-1.7.0
  Attempting uninstall: google-cloud-dlp
    Found existing installation: google-cloud-dlp 1.0.0
    Uninstalling google-cloud-dlp-1.0.0:
      Successfully uninstalled google-cloud-dlp-1.0.0
  Attempting uninstall: tensorflow-serving-api
    Found existing installation: tensorflow-serving-api 2.7.0
    Uninstalling tensorflow-serving-api-2.7.0:
      Successfully uninstalled tensorflow-serving-api-2.7.0
  Attempting uninstall: tfx-bsl
    Found existing installation: tfx-bsl 1.5.0
    Uninstalling tfx-bsl-1.5.0:
      Successfully uninstalled tfx-bsl-1.5.0
  Attempting uninstall: tensorflow-transform
    Found existing installation: tensorflow-transform 1.5.0
    Uninstalling tensorflow-transform-1.5.0:
      Successfully uninstalled tensorflow-transform-1.5.0
ERROR: 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.
explainable-ai-sdk 1.3.2 requires xai-image-widget, which is not installed.
cloud-tpu-client 0.10 requires google-api-python-client==1.8.0, but you have google-api-python-client 1.12.11 which is incompatible.
numba 0.54.1 requires numpy<1.21,>=1.17, but you have numpy 1.21.6 which is incompatible.
pandas-profiling 3.0.0 requires tangled-up-in-unicode==0.1.0, but you have tangled-up-in-unicode 0.2.0 which is incompatible.
tensorflow-io 0.21.0 requires tensorflow<2.7.0,>=2.6.0, but you have tensorflow 2.10.1 which is incompatible.
tensorflow-io 0.21.0 requires tensorflow-io-gcs-filesystem==0.21.0, but you have tensorflow-io-gcs-filesystem 0.23.1 which is incompatible.
Successfully installed Deprecated-1.2.14 apache-beam-2.46.0 click-7.1.2 cloudpickle-2.2.1 dill-0.3.1.1 docker-4.4.4 docstring-parser-0.15 fire-0.5.0 google-api-python-client-1.12.11 google-auth-1.35.0 google-cloud-core-1.7.3 google-cloud-dlp-3.7.1 google-cloud-pubsub-2.13.1 google-cloud-pubsublite-1.4.2 google-cloud-spanner-3.12.0 google-cloud-vision-2.6.3 googleapis-common-protos-1.60.0 grpc-google-iam-v1-0.12.6 grpcio-1.43.0 joblib-1.3.2 keras-2.10.0 kfp-1.8.22 kfp-pipeline-spec-0.1.16 kfp-server-api-1.8.5 kubernetes-12.0.1 libclang-16.0.6 ml-metadata-1.11.0 ml-pipelines-sdk-1.11.0 numpy-1.21.6 objsize-0.6.1 overrides-6.5.0 packaging-20.9 portpicker-1.6.0 protobuf-3.19.6 pyarrow-6.0.1 pyfarmhash-0.3.2 pyyaml-5.4.1 regex-2023.8.8 requests-toolbelt-0.10.1 strip-hints-0.1.10 tabulate-0.9.0 tensorboard-2.10.1 tensorflow-2.10.1 tensorflow-data-validation-1.11.0 tensorflow-estimator-2.10.0 tensorflow-metadata-1.11.0 tensorflow-model-analysis-0.42.0 tensorflow-serving-api-2.10.1 tensorflow-transform-1.11.0 tfx-1.11.0 tfx-bsl-1.11.0 typer-0.9.0 zstandard-0.21.0

Restart the runtime

Restart the runtime to ensure the following cells use the updated versions.

You can restart the runtime with following cell:

# docs_infra: no_execute
import sys
if not 'google.colab' in sys.modules:
  # Automatically restart kernel after installs
  import IPython
  app = IPython.Application.instance()
  app.kernel.do_shutdown(True)

Check the package versions.

import tensorflow as tf
print('TensorFlow version: {}'.format(tf.__version__))
from tfx import v1 as tfx
print('TFX version: {}'.format(tfx.__version__))
import kfp
print('KFP version: {}'.format(kfp.__version__))
2023-08-30 16:23:53.662762: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-08-30 16:23:54.137846: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2023-08-30 16:23:54.137908: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2023-08-30 16:23:54.285411: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2023-08-30 16:23:57.080057: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory
2023-08-30 16:23:57.080289: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory
2023-08-30 16:23:57.080310: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.


TensorFlow version: 2.10.1
TFX version: 1.11.0
KFP version: 1.8.22

Set up variables

We will set up some variables used to customize the pipelines below. Following information is required:

Enter required values in the cell below before running it.

GOOGLE_CLOUD_PROJECT = 'qwiklabs-gcp-01-1f17730f9f0a'     # <--- ENTER THIS
GOOGLE_CLOUD_REGION = 'us-east1'     
GCS_BUCKET_NAME = GOOGLE_CLOUD_PROJECT + '-gcs'

if not (GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_REGION and GCS_BUCKET_NAME):
    from absl import logging
    logging.error('Please set all required parameters.')

Set gcloud to use your project.

!gcloud config set project {GOOGLE_CLOUD_PROJECT}
Updated property [core/project].
PIPELINE_NAME = 'penguin-vertex-pipelines'

# Path to various pipeline artifact.
PIPELINE_ROOT = 'gs://{}/pipeline_root/{}'.format(
    GCS_BUCKET_NAME, PIPELINE_NAME)

# Paths for users' Python module.
MODULE_ROOT = 'gs://{}/pipeline_module/{}'.format(
    GCS_BUCKET_NAME, PIPELINE_NAME)

# Paths for input data.
DATA_ROOT = 'gs://{}/data/{}'.format(GCS_BUCKET_NAME, PIPELINE_NAME)

# This is the path where your model will be pushed for serving.
SERVING_MODEL_DIR = 'gs://{}/serving_model/{}'.format(
    GCS_BUCKET_NAME, PIPELINE_NAME)

print('PIPELINE_ROOT: {}'.format(PIPELINE_ROOT))
PIPELINE_ROOT: gs://qwiklabs-gcp-01-1f17730f9f0a-gcs/pipeline_root/penguin-vertex-pipelines

Prepare example data

The dataset we are using is the Palmer Penguins dataset.

There are four numeric features in this dataset:

All features were already normalized to have range [0,1]. We will build a classification model which predicts the species of penguins.

We need to make our own copy of the dataset. Because TFX ExampleGen reads inputs from a directory, we need to create a directory and copy dataset to it on GCS.

!gsutil cp gs://download.tensorflow.org/data/palmer_penguins/penguins_processed.csv {DATA_ROOT}/
Copying gs://download.tensorflow.org/data/palmer_penguins/penguins_processed.csv [Content-Type=application/octet-stream]...
/ [1 files][ 25.0 KiB/ 25.0 KiB]                                                
Operation completed over 1 objects/25.0 KiB.                                     

Take a quick look at the CSV file.

!gsutil cat {DATA_ROOT}/penguins_processed.csv | head
species,culmen_length_mm,culmen_depth_mm,flipper_length_mm,body_mass_g
0,0.2545454545454545,0.6666666666666666,0.15254237288135594,0.2916666666666667
0,0.26909090909090905,0.5119047619047618,0.23728813559322035,0.3055555555555556
0,0.29818181818181805,0.5833333333333334,0.3898305084745763,0.1527777777777778
0,0.16727272727272732,0.7380952380952381,0.3559322033898305,0.20833333333333334
0,0.26181818181818167,0.892857142857143,0.3050847457627119,0.2638888888888889
0,0.24727272727272717,0.5595238095238096,0.15254237288135594,0.2569444444444444
0,0.25818181818181823,0.773809523809524,0.3898305084745763,0.5486111111111112
0,0.32727272727272727,0.5357142857142859,0.1694915254237288,0.1388888888888889
0,0.23636363636363636,0.9642857142857142,0.3220338983050847,0.3055555555555556
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe

You should be able to see five values. species is one of 0, 1 or 2, and all other features should have values between 0 and 1.

Create a pipeline

TFX pipelines are defined using Python APIs. We will define a pipeline which consists of three components:

Our pipeline will be almost identical to a basic TFX pipeline.

The only difference is that we don’t need to set metadata_connection_config which is used to locate ML Metadata database. Because Vertex Pipelines uses a managed metadata service, users don’t need to care of it, and we don’t need to specify the parameter.

Before actually define the pipeline, we need to write a model code for the Trainer component first.

Write model code.

We will create a simple DNN model for classification using TensorFlow Keras API. This model training code will be saved to a separate file.

In this tutorial we will use Generic Trainer of TFX which support Keras-based models. You need to write a Python file containing run_fn function, which is the entrypoint for the Trainer component.

_trainer_module_file = 'penguin_trainer.py'
%%writefile {_trainer_module_file}

# Copied from https://www.tensorflow.org/tfx/tutorials/tfx/penguin_simple

from typing import List
from absl import logging
import tensorflow as tf
from tensorflow import keras
from tensorflow_transform.tf_metadata import schema_utils


from tfx import v1 as tfx
from tfx_bsl.public import tfxio

from tensorflow_metadata.proto.v0 import schema_pb2

_FEATURE_KEYS = [
    'culmen_length_mm', 'culmen_depth_mm', 'flipper_length_mm', 'body_mass_g'
]
_LABEL_KEY = 'species'

_TRAIN_BATCH_SIZE = 20
_EVAL_BATCH_SIZE = 10

# Since we're not generating or creating a schema, we will instead create
# a feature spec.  Since there are a fairly small number of features this is
# manageable for this dataset.
_FEATURE_SPEC = {
    **{
        feature: tf.io.FixedLenFeature(shape=[1], dtype=tf.float32)
           for feature in _FEATURE_KEYS
       },
    _LABEL_KEY: tf.io.FixedLenFeature(shape=[1], dtype=tf.int64)
}


def _input_fn(file_pattern: List[str],
              data_accessor: tfx.components.DataAccessor,
              schema: schema_pb2.Schema,
              batch_size: int) -> tf.data.Dataset:
  """Generates features and label for training.

  Args:
    file_pattern: List of paths or patterns of input tfrecord files.
    data_accessor: DataAccessor for converting input to RecordBatch.
    schema: schema of the input data.
    batch_size: representing the number of consecutive elements of returned
      dataset to combine in a single batch

  Returns:
    A dataset that contains (features, indices) tuple where features is a
      dictionary of Tensors, and indices is a single Tensor of label indices.
  """
  return data_accessor.tf_dataset_factory(
      file_pattern,
      tfxio.TensorFlowDatasetOptions(
          batch_size=batch_size, label_key=_LABEL_KEY),
      schema=schema).repeat()


def _make_keras_model() -> tf.keras.Model:
  """Creates a DNN Keras model for classifying penguin data.

  Returns:
    A Keras Model.
  """
  # The model below is built with Functional API, please refer to
  # https://www.tensorflow.org/guide/keras/overview for all API options.
  inputs = [keras.layers.Input(shape=(1,), name=f) for f in _FEATURE_KEYS]
  d = keras.layers.concatenate(inputs)
  for _ in range(2):
    d = keras.layers.Dense(8, activation='relu')(d)
  outputs = keras.layers.Dense(3)(d)

  model = keras.Model(inputs=inputs, outputs=outputs)
  model.compile(
      optimizer=keras.optimizers.Adam(1e-2),
      loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
      metrics=[keras.metrics.SparseCategoricalAccuracy()])

  model.summary(print_fn=logging.info)
  return model


# TFX Trainer will call this function.
def run_fn(fn_args: tfx.components.FnArgs):
  """Train the model based on given args.

  Args:
    fn_args: Holds args used to train the model as name/value pairs.
  """

  # This schema is usually either an output of SchemaGen or a manually-curated
  # version provided by pipeline author. A schema can also derived from TFT
  # graph if a Transform component is used. In the case when either is missing,
  # `schema_from_feature_spec` could be used to generate schema from very simple
  # feature_spec, but the schema returned would be very primitive.
  schema = schema_utils.schema_from_feature_spec(_FEATURE_SPEC)

  train_dataset = _input_fn(
      fn_args.train_files,
      fn_args.data_accessor,
      schema,
      batch_size=_TRAIN_BATCH_SIZE)
  eval_dataset = _input_fn(
      fn_args.eval_files,
      fn_args.data_accessor,
      schema,
      batch_size=_EVAL_BATCH_SIZE)

  model = _make_keras_model()
  model.fit(
      train_dataset,
      steps_per_epoch=fn_args.train_steps,
      validation_data=eval_dataset,
      validation_steps=fn_args.eval_steps)

  # The result of the training should be saved in `fn_args.serving_model_dir`
  # directory.
  model.save(fn_args.serving_model_dir, save_format='tf')
Writing penguin_trainer.py

Copy the module file to GCS which can be accessed from the pipeline components. Because model training happens on GCP, we need to upload this model definition.

Otherwise, you might want to build a container image including the module file and use the image to run the pipeline.

!gsutil cp {_trainer_module_file} {MODULE_ROOT}/
Copying file://penguin_trainer.py [Content-Type=text/x-python]...
/ [1 files][  3.8 KiB/  3.8 KiB]                                                
Operation completed over 1 objects/3.8 KiB.                                      

Write a pipeline definition

We will define a function to create a TFX pipeline.

# Copied from https://www.tensorflow.org/tfx/tutorials/tfx/penguin_simple and
# slightly modified because we don't need `metadata_path` argument.

def _create_pipeline(pipeline_name: str, pipeline_root: str, data_root: str,
                     module_file: str, serving_model_dir: str,
                     ) -> tfx.dsl.Pipeline:
  """Creates a three component penguin pipeline with TFX."""
  # Brings data into the pipeline.
  example_gen = tfx.components.CsvExampleGen(input_base=data_root)

  # Uses user-provided Python function that trains a model.
  trainer = tfx.components.Trainer(
      module_file=module_file,
      examples=example_gen.outputs['examples'],
      train_args=tfx.proto.TrainArgs(num_steps=100),
      eval_args=tfx.proto.EvalArgs(num_steps=5))

  # Pushes the model to a filesystem destination.
  pusher = tfx.components.Pusher(
      model=trainer.outputs['model'],
      push_destination=tfx.proto.PushDestination(
          filesystem=tfx.proto.PushDestination.Filesystem(
              base_directory=serving_model_dir)))

  # Following three components will be included in the pipeline.
  components = [
      example_gen,
      trainer,
      pusher,
  ]

  return tfx.dsl.Pipeline(
      pipeline_name=pipeline_name,
      pipeline_root=pipeline_root,
      components=components)

Run the pipeline on Vertex Pipelines.

TFX provides multiple orchestrators to run your pipeline. In this tutorial we will use the Vertex Pipelines together with the Kubeflow V2 dag runner.

We need to define a runner to actually run the pipeline. You will compile your pipeline into our pipeline definition format using TFX APIs.

import os

PIPELINE_DEFINITION_FILE = PIPELINE_NAME + '_pipeline.json'

runner = tfx.orchestration.experimental.KubeflowV2DagRunner(
    config=tfx.orchestration.experimental.KubeflowV2DagRunnerConfig(),
    output_filename=PIPELINE_DEFINITION_FILE)
# Following function will write the pipeline definition to PIPELINE_DEFINITION_FILE.
_ = runner.run(
    _create_pipeline(
        pipeline_name=PIPELINE_NAME,
        pipeline_root=PIPELINE_ROOT,
        data_root=DATA_ROOT,
        module_file=os.path.join(MODULE_ROOT, _trainer_module_file),
        serving_model_dir=SERVING_MODEL_DIR))
running bdist_wheel
running build
running build_py
creating build
creating build/lib
copying penguin_trainer.py -> build/lib
installing to /tmp/tmpckb2dvws
running install
running install_lib
copying build/lib/penguin_trainer.py -> /tmp/tmpckb2dvws
running install_egg_info
running egg_info
creating tfx_user_code_Trainer.egg-info
writing tfx_user_code_Trainer.egg-info/PKG-INFO
writing dependency_links to tfx_user_code_Trainer.egg-info/dependency_links.txt
writing top-level names to tfx_user_code_Trainer.egg-info/top_level.txt
writing manifest file 'tfx_user_code_Trainer.egg-info/SOURCES.txt'
reading manifest file 'tfx_user_code_Trainer.egg-info/SOURCES.txt'
writing manifest file 'tfx_user_code_Trainer.egg-info/SOURCES.txt'
Copying tfx_user_code_Trainer.egg-info to /tmp/tmpckb2dvws/tfx_user_code_Trainer-0.0+afa8d5dfaf2942b08385545b5e095850331200a5d7a669b1791b3e7efcc5fdd9-py3.7.egg-info
running install_scripts
creating /tmp/tmpckb2dvws/tfx_user_code_Trainer-0.0+afa8d5dfaf2942b08385545b5e095850331200a5d7a669b1791b3e7efcc5fdd9.dist-info/WHEEL
creating '/tmp/tmpo6u7k9pb/tfx_user_code_Trainer-0.0+afa8d5dfaf2942b08385545b5e095850331200a5d7a669b1791b3e7efcc5fdd9-py3-none-any.whl' and adding '/tmp/tmpckb2dvws' to it
adding 'penguin_trainer.py'
adding 'tfx_user_code_Trainer-0.0+afa8d5dfaf2942b08385545b5e095850331200a5d7a669b1791b3e7efcc5fdd9.dist-info/METADATA'
adding 'tfx_user_code_Trainer-0.0+afa8d5dfaf2942b08385545b5e095850331200a5d7a669b1791b3e7efcc5fdd9.dist-info/WHEEL'
adding 'tfx_user_code_Trainer-0.0+afa8d5dfaf2942b08385545b5e095850331200a5d7a669b1791b3e7efcc5fdd9.dist-info/top_level.txt'
adding 'tfx_user_code_Trainer-0.0+afa8d5dfaf2942b08385545b5e095850331200a5d7a669b1791b3e7efcc5fdd9.dist-info/RECORD'
removing /tmp/tmpckb2dvws


/opt/conda/lib/python3.7/site-packages/setuptools/command/install.py:37: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
  setuptools.SetuptoolsDeprecationWarning,

The generated definition file can be submitted using kfp client.

# docs_infra: no_execute
from google.cloud import aiplatform
from google.cloud.aiplatform import pipeline_jobs

aiplatform.init(project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_REGION)

job = pipeline_jobs.PipelineJob(template_path=PIPELINE_DEFINITION_FILE,
                                display_name=PIPELINE_NAME)
job.run(sync=False)

Visit Vertex AI > Pipelines in your Google Cloud Console page to see the progress.

Click on your penguin-vertex-pipelines-xxx run:

pipeline_start

Explore the information displayed in each step while you wait for the job to progress.

On completion, your pipeline UI should look similar to this:

pipeline_end

This job will take about 15 minutes in total to complete. Once complete, return to the lab to check your progress.