From 2cfb7eed3b12f69e17309c26d4bdf05ebe3150ee Mon Sep 17 00:00:00 2001 From: kbthu <130526586+kbthu@users.noreply.github.com> Date: Tue, 27 Jun 2023 14:28:54 +0800 Subject: [PATCH] Add usage of volume mount example for Kubeflow pipeline. (#1044) * Add flow control example of Kubeflow pipeline * Add volume example. * Upload runs graph. * Add data passing example of Kubeflow pipeline * Add sidecar example for Kubeflow pipeline. --- .../dsl/data-passing-runs-graph.jpg | Bin 0 -> 58192 bytes .../dsl/data-passing-runs-params.jpg | Bin 0 -> 20325 bytes pipelines-demo/dsl/data-passing.py | 57 ++++++++++++++++ pipelines-demo/dsl/sidecar-example.py | 32 +++++++++ pipelines-demo/volume/runs-graph.jpg | Bin 0 -> 12786 bytes pipelines-demo/volume/volume_example.py | 63 ++++++++++++++++++ 6 files changed, 152 insertions(+) create mode 100644 pipelines-demo/dsl/data-passing-runs-graph.jpg create mode 100644 pipelines-demo/dsl/data-passing-runs-params.jpg create mode 100644 pipelines-demo/dsl/data-passing.py create mode 100644 pipelines-demo/dsl/sidecar-example.py create mode 100644 pipelines-demo/volume/runs-graph.jpg create mode 100644 pipelines-demo/volume/volume_example.py diff --git a/pipelines-demo/dsl/data-passing-runs-graph.jpg b/pipelines-demo/dsl/data-passing-runs-graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3795da2cc25aad3d6b3d346eefa044f279733f9a GIT binary patch literal 58192 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ƍ>__gwjU!NGaG4WlmE4E9l#|Weku}}xstD2 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 Y0V~yaKwtm232*pYOVR(}dVY}q18sKd-2eap literal 0 HcmV?d00001 diff --git a/pipelines-demo/dsl/data-passing-runs-params.jpg b/pipelines-demo/dsl/data-passing-runs-params.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd64b9cc4a917d16067277e2c96c3d929c96e219 GIT binary patch literal 20325 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 Bf@J^z literal 0 HcmV?d00001 diff --git a/pipelines-demo/dsl/data-passing.py b/pipelines-demo/dsl/data-passing.py new file mode 100644 index 00000000..b77a4460 --- /dev/null +++ b/pipelines-demo/dsl/data-passing.py @@ -0,0 +1,57 @@ +# Copyright 2023 kbthu. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import kfp +from kfp import dsl +from kfp.components import func_to_container_op +from typing import NamedTuple + + +@func_to_container_op +def calculate_op(a: float, b: float) -> NamedTuple( + 'MyOutputs', + [ + ('sum', float), + ('product', float) + ]): + return (a + b, a * b) + + +def echo_func(sum: float, product: float): + cop = dsl.ContainerOp( + name='echo_func', + image='bash:5.1', + command=['sh', '-c'], + arguments=['echo sum %s product %s | tee /out.txt' % (sum, product)], + file_outputs={'out': '/out.txt'}, + ) + cop.container.set_image_pull_policy('IfNotPresent') + return cop + + +@dsl.pipeline( + name='Kubeflow data passing example', + description='Demonstrate the data passing between Kubeflow funcs' +) +def data_passing( + a: dsl.PipelineParam(name='a', value=2), + b: dsl.PipelineParam(name='b', value=3) + ): + result = calculate_op(a, b) + echo_func(result.outputs['sum'], result.outputs['product']) + + +if __name__ == '__main__': + import kfp.compiler as compiler + compiler.Compiler().compile(data_passing, __file__ + '.yaml') diff --git a/pipelines-demo/dsl/sidecar-example.py b/pipelines-demo/dsl/sidecar-example.py new file mode 100644 index 00000000..f49d9f0b --- /dev/null +++ b/pipelines-demo/dsl/sidecar-example.py @@ -0,0 +1,32 @@ +# Copyright 2023 kbthu. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import kfp +from kfp import dsl + +@dsl.pipeline( + name='metric-test', + description='query metrics from promehteus') +def exec_pipeline(): + op = dsl.ContainerOp(name='metrics-test', + image='kbthu/metrics-example:1.0.1', + command=['metrics'], + arguments=['pq', '-q', 'count(prometheus_target_interval_length_seconds)'], + ) + op.container.set_image_pull_policy('IfNotPresent') + op.add_sidecar(dsl.Sidecar('prometheus', 'bitnami/prometheus:2.44.0', command='ls') + .set_image_pull_policy('IfNotPresent')) + +if __name__ == '__main__': + kfp.compiler.Compiler().compile(exec_pipeline, __file__ + '.yaml') diff --git a/pipelines-demo/volume/runs-graph.jpg b/pipelines-demo/volume/runs-graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6cc05721c2add50d046dabc1a142f43e43aea46 GIT binary patch literal 12786 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�e=-72EC4UoscT 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 literal 0 HcmV?d00001 diff --git a/pipelines-demo/volume/volume_example.py b/pipelines-demo/volume/volume_example.py new file mode 100644 index 00000000..59ac2f1a --- /dev/null +++ b/pipelines-demo/volume/volume_example.py @@ -0,0 +1,63 @@ +# Copyright 2023 kbthu. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import kfp +from kfp import dsl + +def create_pv(): + return dsl.VolumeOp( + name="create_pv", + resource_name="kfp-pvc", + size="1Gi", + modes=dsl.VOLUME_MODE_RWO + ) + + +def generate_data(vol_name: str): + cop = dsl.ContainerOp( + name='generate_data', + image='bash:5.1', + command=['sh', '-c'], + arguments=['echo $(( $RANDOM % 10 + 1 )) | tee /mnt/out.txt'] + ) + cop.container.set_image_pull_policy('IfNotPresent') + cop.add_pvolumes({'/mnt': dsl.PipelineVolume(pvc=vol_name)}) + return cop + + +def use_pre_data(vol_name: str): + cop = dsl.ContainerOp( + name='use_pre_data', + image='bash:5.1', + command=['sh', '-c'], + arguments=['tail /mnt/out.txt'] + ) + cop.container.set_image_pull_policy('IfNotPresent') + cop.add_pvolumes({'/mnt': dsl.PipelineVolume(pvc=vol_name)}) + return cop + + +@dsl.pipeline( + name="Kubeflow volume example", + description="Demonstrate the use case of volume on Kubeflow pipeline." +) +def volume_example(): + vop = create_pv() + cop = generate_data(vop.outputs["name"]).after(vop) + use_pre_data(vop.outputs["name"]).after(vop,cop) + + +if __name__ == "__main__": + import kfp.compiler as compiler + compiler.Compiler().compile(volume_example, __file__ + ".yaml") \ No newline at end of file