0

所有这一切都是在我使用轻量级 python 函数作为 kubeflow 管道中的一个组件时,但最近我切换到使用 docker 容器作为 kubeflow 管道中的一个组件,就像这样......

    produce: str = 'hello'
):
    return dsl.ContainerOp(
        name = 'Say hi', 
        image = 'docker.io/playground/comp1:latest', 
        command = ['python', 'msg.py'],
        arguments=[
            '--msg', send_msg
        ],
        file_outputs={
            'output': '/output.txt',
        }
    )

我需要对上述代码进行一些更改吗?我需要自动缩放 docker 容器吗?如果是这样,dsl.ContainerOp将如何知道它应该命中哪个 docker 容器实例?

我做了很多搜索,还探索了 kfp 包,看看是否有帮助,但幸运的是,我什至找不到更接近的解决方案。首先有可能吗?我在正确的方向吗?有人可以帮助我进行研发吗?

4

2 回答 2

3

我在 kubeflow 管道中使用轻量级 python 函数作为组件,但最近我改用 docker 容器作为组件

  1. 轻量级组件合适的容器组件。您可以将它们导出到component.yaml文件并共享它们:create_component_from_func(my_func, output_component_file='component.yaml')或(相同)func_to_container_op(my_func, output_component_file='component.yaml')

  2. ContainerOps不是组件。它们是半编译的类似任务的对象。我们建议我们的用户不要直接创建它们,而是创建真正的可重用组件。

component.yaml

name: 'Say hi'
inputs:
- {name: Message}
outputs:
- {name: Output}
implementation:
  container:
    image: 'docker.io/playground/comp1:latest'
    command: ['python', 'msg.py']
    args: [
      '--msg', {inputValue: Message},
      '--output', {outputPath: Output},
    ]

然后使用load_component_from_fileor load_component_from_urlor加载它load_component_from_text并在多个管道中使用它。可重用组件ContainerOp在您实例化它们时会自动生成 s。

  1. 在执行方面,轻量级组件、从 component.yaml 加载的组件和手动创建的 ContainerOp 实例之间没有区别。

我需要对上述代码进行一些更改吗?我需要自动缩放 docker 容器吗?

可能不是。Kubernetes 的自动缩放是一项可选功能,可在负载高时启动更多节点。所以它只有在你并行运行许多繁重的任务时才会起作用。如果您只运行一个任务,则没有什么可扩展的。

于 2020-06-19T23:41:44.650 回答
0

我认为代码没有问题,您走在正确的轨道上。根据 GCP 文档单击此处,您可以利用 GKE 自动缩放来横向扩展您的工作负载。话虽如此,您可以在部署清单中定义一个 pod。请注意,pod 将像容器一样包含 kubeflow 组件。有关详细信息,请点击此处 链接。我希望这可以帮助您解决问题。

于 2020-06-12T18:40:26.610 回答