{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "id": "w3cO7lQMtLkh", "outputId": "267a2cff-6127-4946-8f3d-2ef927df4f29" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting kfp==1.8.9\n", " Downloading kfp-1.8.9.tar.gz (296 kB)\n", "\u001b[K |████████████████████████████████| 296 kB 20.1 MB/s \n", "\u001b[?25hCollecting absl-py<=0.11,>=0.9\n", " Downloading absl_py-0.11.0-py3-none-any.whl (127 kB)\n", "\u001b[K |████████████████████████████████| 127 kB 73.9 MB/s \n", "\u001b[?25hCollecting PyYAML<6,>=5.3\n", " Downloading PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl (636 kB)\n", "\u001b[K |████████████████████████████████| 636 kB 57.3 MB/s \n", "\u001b[?25hCollecting google-cloud-storage<2,>=1.20.0\n", " Downloading google_cloud_storage-1.44.0-py2.py3-none-any.whl (106 kB)\n", "\u001b[K |████████████████████████████████| 106 kB 64.8 MB/s \n", "\u001b[?25hCollecting kubernetes<19,>=8.0.0\n", " Downloading kubernetes-18.20.0-py2.py3-none-any.whl (1.6 MB)\n", "\u001b[K |████████████████████████████████| 1.6 MB 64.0 MB/s \n", "\u001b[?25hRequirement already satisfied: google-api-python-client<2,>=1.7.8 in /usr/local/lib/python3.7/dist-packages (from kfp==1.8.9->-r requirements.txt (line 1)) (1.12.11)\n", "Collecting google-auth<2,>=1.6.1\n", " Downloading google_auth-1.35.0-py2.py3-none-any.whl (152 kB)\n", "\u001b[K |████████████████████████████████| 152 kB 66.3 MB/s \n", "\u001b[?25hCollecting requests-toolbelt<1,>=0.8.0\n", " Downloading requests_toolbelt-0.10.1-py2.py3-none-any.whl (54 kB)\n", "\u001b[K |████████████████████████████████| 54 kB 3.4 MB/s \n", "\u001b[?25hCollecting cloudpickle<3,>=2.0.0\n", " Downloading cloudpickle-2.2.0-py3-none-any.whl (25 kB)\n", "Collecting kfp-server-api<2.0.0,>=1.1.2\n", " Downloading kfp-server-api-1.8.5.tar.gz (58 kB)\n", "\u001b[K |████████████████████████████████| 58 kB 6.1 MB/s \n", "\u001b[?25hCollecting jsonschema<4,>=3.0.1\n", " Downloading jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)\n", "\u001b[K |████████████████████████████████| 56 kB 5.3 MB/s \n", "\u001b[?25hRequirement already satisfied: tabulate<1,>=0.8.6 in /usr/local/lib/python3.7/dist-packages (from kfp==1.8.9->-r requirements.txt (line 1)) (0.8.10)\n", "Requirement already satisfied: click<9,>=7.1.2 in /usr/local/lib/python3.7/dist-packages (from kfp==1.8.9->-r requirements.txt (line 1)) (7.1.2)\n", "Collecting Deprecated<2,>=1.2.7\n", " Downloading Deprecated-1.2.13-py2.py3-none-any.whl (9.6 kB)\n", "Collecting strip-hints<1,>=0.1.8\n", " Downloading strip-hints-0.1.10.tar.gz (29 kB)\n", "Collecting docstring-parser<1,>=0.7.3\n", " Downloading docstring_parser-0.15-py3-none-any.whl (36 kB)\n", "Collecting kfp-pipeline-spec<0.2.0,>=0.1.13\n", " Downloading kfp_pipeline_spec-0.1.16-py3-none-any.whl (19 kB)\n", "Collecting fire<1,>=0.3.1\n", " Downloading fire-0.4.0.tar.gz (87 kB)\n", "\u001b[K |████████████████████████████████| 87 kB 7.8 MB/s \n", "\u001b[?25hRequirement already satisfied: protobuf<4,>=3.13.0 in /usr/local/lib/python3.7/dist-packages (from kfp==1.8.9->-r requirements.txt (line 1)) (3.19.6)\n", "Requirement already satisfied: uritemplate<4,>=3.0.1 in /usr/local/lib/python3.7/dist-packages (from kfp==1.8.9->-r requirements.txt (line 1)) (3.0.1)\n", "Requirement already satisfied: pydantic<2,>=1.8.2 in /usr/local/lib/python3.7/dist-packages (from kfp==1.8.9->-r requirements.txt (line 1)) (1.10.2)\n", "Requirement already satisfied: typer<1.0,>=0.3.2 in /usr/local/lib/python3.7/dist-packages (from kfp==1.8.9->-r requirements.txt (line 1)) (0.4.2)\n", "Collecting typing-extensions<4,>=3.7.4\n", " Downloading typing_extensions-3.10.0.2-py3-none-any.whl (26 kB)\n", "Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from absl-py<=0.11,>=0.9->kfp==1.8.9->-r requirements.txt (line 1)) (1.15.0)\n", "Requirement already satisfied: wrapt<2,>=1.10 in /usr/local/lib/python3.7/dist-packages (from Deprecated<2,>=1.2.7->kfp==1.8.9->-r requirements.txt (line 1)) (1.14.1)\n", "Requirement already satisfied: termcolor in /usr/local/lib/python3.7/dist-packages (from fire<1,>=0.3.1->kfp==1.8.9->-r requirements.txt (line 1)) (2.1.0)\n", "Requirement already satisfied: google-auth-httplib2>=0.0.3 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client<2,>=1.7.8->kfp==1.8.9->-r requirements.txt (line 1)) (0.0.4)\n", "Requirement already satisfied: google-api-core<3dev,>=1.21.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client<2,>=1.7.8->kfp==1.8.9->-r requirements.txt (line 1)) (2.8.2)\n", "Requirement already satisfied: httplib2<1dev,>=0.15.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client<2,>=1.7.8->kfp==1.8.9->-r requirements.txt (line 1)) (0.17.4)\n", "Requirement already satisfied: googleapis-common-protos<2.0dev,>=1.56.2 in /usr/local/lib/python3.7/dist-packages (from google-api-core<3dev,>=1.21.0->google-api-python-client<2,>=1.7.8->kfp==1.8.9->-r requirements.txt (line 1)) (1.56.4)\n", "Requirement already satisfied: requests<3.0.0dev,>=2.18.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<3dev,>=1.21.0->google-api-python-client<2,>=1.7.8->kfp==1.8.9->-r requirements.txt (line 1)) (2.23.0)\n", "Collecting cachetools<5.0,>=2.0.0\n", " Downloading cachetools-4.2.4-py3-none-any.whl (10 kB)\n", "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/dist-packages (from google-auth<2,>=1.6.1->kfp==1.8.9->-r requirements.txt (line 1)) (4.9)\n", "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from google-auth<2,>=1.6.1->kfp==1.8.9->-r requirements.txt (line 1)) (0.2.8)\n", "Requirement already satisfied: setuptools>=40.3.0 in /usr/local/lib/python3.7/dist-packages (from google-auth<2,>=1.6.1->kfp==1.8.9->-r requirements.txt (line 1)) (57.4.0)\n", "Requirement already satisfied: google-cloud-core<3.0dev,>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from google-cloud-storage<2,>=1.20.0->kfp==1.8.9->-r requirements.txt (line 1)) (2.3.2)\n", "Requirement already satisfied: google-resumable-media<3.0dev,>=1.3.0 in /usr/local/lib/python3.7/dist-packages (from google-cloud-storage<2,>=1.20.0->kfp==1.8.9->-r requirements.txt (line 1)) (2.4.0)\n", "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /usr/local/lib/python3.7/dist-packages (from google-resumable-media<3.0dev,>=1.3.0->google-cloud-storage<2,>=1.20.0->kfp==1.8.9->-r requirements.txt (line 1)) (1.5.0)\n", "Requirement already satisfied: pyrsistent>=0.14.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema<4,>=3.0.1->kfp==1.8.9->-r requirements.txt (line 1)) (0.19.2)\n", "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from jsonschema<4,>=3.0.1->kfp==1.8.9->-r requirements.txt (line 1)) (4.13.0)\n", "Requirement already satisfied: attrs>=17.4.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema<4,>=3.0.1->kfp==1.8.9->-r requirements.txt (line 1)) (22.1.0)\n", "Requirement already satisfied: urllib3>=1.15 in /usr/local/lib/python3.7/dist-packages (from kfp-server-api<2.0.0,>=1.1.2->kfp==1.8.9->-r requirements.txt (line 1)) (1.24.3)\n", "Requirement already satisfied: certifi in /usr/local/lib/python3.7/dist-packages (from kfp-server-api<2.0.0,>=1.1.2->kfp==1.8.9->-r requirements.txt (line 1)) (2022.9.24)\n", "Requirement already satisfied: python-dateutil in /usr/local/lib/python3.7/dist-packages (from kfp-server-api<2.0.0,>=1.1.2->kfp==1.8.9->-r requirements.txt (line 1)) (2.8.2)\n", "Requirement already satisfied: requests-oauthlib in /usr/local/lib/python3.7/dist-packages (from kubernetes<19,>=8.0.0->kfp==1.8.9->-r requirements.txt (line 1)) (1.3.1)\n", "Collecting websocket-client!=0.40.0,!=0.41.*,!=0.42.*,>=0.32.0\n", " Downloading websocket_client-1.4.2-py3-none-any.whl (55 kB)\n", "\u001b[K |████████████████████████████████| 55 kB 4.1 MB/s \n", "\u001b[?25hRequirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/dist-packages (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.1->kfp==1.8.9->-r requirements.txt (line 1)) (0.4.8)\n", "Collecting pydantic<2,>=1.8.2\n", " Downloading pydantic-1.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.8 MB)\n", "\u001b[K |████████████████████████████████| 11.8 MB 34.0 MB/s \n", "\u001b[?25h Downloading pydantic-1.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.8 MB)\n", "\u001b[K |████████████████████████████████| 11.8 MB 73.2 MB/s \n", "\u001b[?25h Downloading pydantic-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.1 MB)\n", "\u001b[K |████████████████████████████████| 11.1 MB 61.1 MB/s \n", "\u001b[?25hRequirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<3dev,>=1.21.0->google-api-python-client<2,>=1.7.8->kfp==1.8.9->-r requirements.txt (line 1)) (2.10)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<3dev,>=1.21.0->google-api-python-client<2,>=1.7.8->kfp==1.8.9->-r requirements.txt (line 1)) (3.0.4)\n", "Requirement already satisfied: wheel in /usr/local/lib/python3.7/dist-packages (from strip-hints<1,>=0.1.8->kfp==1.8.9->-r requirements.txt (line 1)) (0.38.3)\n", "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->jsonschema<4,>=3.0.1->kfp==1.8.9->-r requirements.txt (line 1)) (3.10.0)\n", "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from requests-oauthlib->kubernetes<19,>=8.0.0->kfp==1.8.9->-r requirements.txt (line 1)) (3.2.2)\n", "Building wheels for collected packages: kfp, fire, kfp-server-api, strip-hints\n", " Building wheel for kfp (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for kfp: filename=kfp-1.8.9-py3-none-any.whl size=409652 sha256=43e44f032c43467623798159d60362ba9ab12ac7467a89d19b5a4466995c9b69\n", " Stored in directory: /root/.cache/pip/wheels/0e/20/7e/c2c43249eb0538c5aa2542bcc9b02affb0211ed5617fbd4abc\n", " Building wheel for fire (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for fire: filename=fire-0.4.0-py2.py3-none-any.whl size=115940 sha256=eb7248330010e4ad64864fe4fc84c7c6071e087c8600f323385fd22323e3473f\n", " Stored in directory: /root/.cache/pip/wheels/8a/67/fb/2e8a12fa16661b9d5af1f654bd199366799740a85c64981226\n", " Building wheel for kfp-server-api (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for kfp-server-api: filename=kfp_server_api-1.8.5-py3-none-any.whl size=99714 sha256=a72a28dd2826841a3b7bf6963274d20ec0071f8196240d59bc6e977e22f45031\n", " Stored in directory: /root/.cache/pip/wheels/77/0e/7b/ed385d69453b7b754834c01d83fa9f5708ba66b4f6ed5d6a35\n", " Building wheel for strip-hints (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for strip-hints: filename=strip_hints-0.1.10-py2.py3-none-any.whl size=22301 sha256=3bf78a6eefb5344febdc8fe4a7ca165f5e38b2b5ee816f60c3b339c19fed397d\n", " Stored in directory: /root/.cache/pip/wheels/5e/14/c3/6e44e9b2545f2d570b03f5b6d38c00b7534aa8abb376978363\n", "Successfully built kfp fire kfp-server-api strip-hints\n", "Installing collected packages: cachetools, google-auth, typing-extensions, websocket-client, PyYAML, strip-hints, requests-toolbelt, pydantic, kubernetes, kfp-server-api, kfp-pipeline-spec, jsonschema, google-cloud-storage, fire, docstring-parser, Deprecated, cloudpickle, absl-py, kfp\n", "\u001b[33m WARNING: The script wsdump is installed in '/root/.local/bin' which is not on PATH.\n", " Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\u001b[0m\n", "\u001b[33m WARNING: The script strip-hints is installed in '/root/.local/bin' which is not on PATH.\n", " Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\u001b[0m\n", "\u001b[33m WARNING: The script jsonschema is installed in '/root/.local/bin' which is not on PATH.\n", " Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\u001b[0m\n", "\u001b[33m WARNING: The scripts dsl-compile, dsl-compile-v2 and kfp are installed in '/root/.local/bin' which is not on PATH.\n", " Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\u001b[0m\n", "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", "tensorflow 2.9.2 requires absl-py>=1.0.0, but you have absl-py 0.11.0 which is incompatible.\u001b[0m\n", "Successfully installed Deprecated-1.2.13 PyYAML-5.4.1 absl-py-0.11.0 cachetools-4.2.4 cloudpickle-2.2.0 docstring-parser-0.15 fire-0.4.0 google-auth-1.35.0 google-cloud-storage-1.44.0 jsonschema-3.2.0 kfp-1.8.9 kfp-pipeline-spec-0.1.16 kfp-server-api-1.8.5 kubernetes-18.20.0 pydantic-1.9.2 requests-toolbelt-0.10.1 strip-hints-0.1.10 typing-extensions-3.10.0.2 websocket-client-1.4.2\n" ] }, { "output_type": "display_data", "data": { "application/vnd.colab-display-data+json": { "pip_warning": { "packages": [ "google", "typing_extensions" ] } } }, "metadata": {} }, { "output_type": "error", "ename": "ModuleNotFoundError", "evalue": "ignored", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtyping\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mNamedTuple\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mkfp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mkfp\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdsl\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mkfp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcomponents\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mfunc_to_container_op\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mInputPath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mOutputPath\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'kfp'", "", "\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n" ], "errorDetails": { "actions": [ { "action": "open_url", "actionText": "Open Examples", "url": "/notebooks/snippets/importing_libraries.ipynb" } ] } } ], "source": [ "#!/usr/bin/env python\n", "# coding: utf-8\n", "\n", "# In[2]:\n", "\n", "\n", "with open(\"requirements.txt\", \"w\") as f:\n", " f.write(\"kfp==1.8.9\\n\")\n", " \n", "get_ipython().system('pip install -r requirements.txt --upgrade --user')\n", "\n", "\n", "# In[1]:\n", "\n", "\n", "from typing import NamedTuple\n", "\n", "import kfp\n", "from kfp import dsl\n", "from kfp.components import func_to_container_op, InputPath, OutputPath\n", "\n", "from typing import NamedTuple\n", "def train(log_folder:str) -> NamedTuple('Outputs', [('logdir', str)]):\n", " \n", " print('mnist_func:', log_folder)\n", " import tensorflow as tf\n", " import json\n", " mnist = tf.keras.datasets.mnist\n", " (x_train,y_train), (x_test, y_test) = mnist.load_data()\n", " x_train, x_test = x_train/255.0, x_test/255.0\n", "\n", " def create_model():\n", " return tf.keras.models.Sequential([\n", " tf.keras.layers.Flatten(input_shape = (28,28)),\n", " tf.keras.layers.Dense(512, activation = 'relu'),\n", " tf.keras.layers.Dropout(0.2),\n", " tf.keras.layers.Dense(10, activation = 'softmax')\n", " ])\n", " model = create_model()\n", " model.compile(optimizer='adam',\n", " loss='sparse_categorical_crossentropy',\n", " metrics=['accuracy'])\n", " import datetime\n", " import os\n", " \n", " ### add tensorboard logout callback\n", " log_dir = os.path.join(log_folder, \"logs\", datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\"))\n", " tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)\n", " ######\n", " \n", " model.fit(x=x_train, \n", " y=y_train, \n", " epochs=5, \n", " validation_data=(x_test, y_test), \n", " callbacks=[tensorboard_callback])\n", "\n", " print('At least tensorboard callbacks are correct')\n", " print('logdir:', log_dir)\n", " return ([log_dir])\n", "\n", "def prepare_tensorboard_from_localdir(pvc_name:str) -> NamedTuple('Outputs', [('mlpipeline_ui_metadata', 'UI_metadata')]):\n", " import json\n", " import kfp.components as components\n", " prepare_tensorboard = components.load_component_from_url(\n", " 'https://raw.githubusercontent.com/kubeflow/pipelines/1b107eb4bb2510ecb99fd5f4fb438cbf7c96a87a/components/contrib/tensorflow/tensorboard/prepare_tensorboard/component.yaml'\n", ")\n", " # log_dir_uri is consisted of volume:///folders\n", " # the volume.name should be same as ones specified in pod_template.spec.volumes.name\n", " \n", " return prepare_tensorboard(\n", " log_dir_uri=f'volume://mypvc/logs', \n", " image=\"footprintai/tensorboard:2.7.0\", \n", " pod_template_spec=json.dumps({\n", " \"spec\": {\n", " \"containers\": [\n", " {\n", " \"volumeMounts\": [\n", " {\n", " \"mountPath\": \"/data\",\n", " \"name\": \"mypvc\"\n", " }\n", " ]\n", " }\n", " ],\n", " \"serviceAccountName\": \"default-editor\",\n", " \"volumes\": [\n", " {\n", " \"name\": \"mypvc\",\n", " \"persistentVolumeClaim\": {\n", " \"claimName\": pvc_name\n", " }\n", " }\n", " ]\n", " }\n", " }),\n", " )\n", "\n", "def model(text1):\n", " return dsl.ContainerOp(\n", " name='model',\n", " image='library/bash:4.4.23',\n", " command=['sh', '-c'],\n", " arguments=['echo \"$0\"', text1])\n", "\n", "\n", "# In[2]:\n", "\n", "\n", "import kfp.dsl as dsl\n", "import kfp.components as components\n", "import time\n", "\n", "\n", "@dsl.pipeline(\n", " name='tf pipeline',\n", " description='A pipeline to train a model on tf dataset and start a tensorboard.'\n", ")\n", "def tf_pipeline(text1='message 1'):\n", "\n", " log_folder = '/data'\n", " pvc_name = 'input'\n", " unique_pvc_resource_name = 'my-awesome-kf-workshop-%d'% int(time.time())\n", " \n", " vop = dsl.VolumeOp(\n", " name=pvc_name,\n", " resource_name=unique_pvc_resource_name,\n", " size=\"1Gi\",\n", " modes=dsl.VOLUME_MODE_RWO,\n", " generate_unique_name=False,\n", " )\n", " tf_op = func_to_container_op(\n", " func=train,\n", " base_image=\"tensorflow/tensorflow:2.0.0-py3\",\n", " )\n", " tensorboard_task = prepare_tensorboard_from_localdir(unique_pvc_resource_name)\n", " \n", " tf_task = tf_op(log_folder).add_pvolumes({\n", " log_folder:vop.volume,\n", " })\n", "\n", " \n", " \n", " step1_task = model(text1)\n", "# step1_task.after(tensorboard_task) \n", " tensorboard_task.after(tf_task)\n", " tf_task.after(step1_task)\n", "\n", "\n", "# In[4]:\n", "\n", "\n", "kfp.compiler.Compiler().compile(tf_pipeline, 'helloworld.zip')\n", "\n", "\n", "# In[ ]:\n" ] } ] }