特殊情况:导入器组件

从 pipeline 外部导入 artifact

导入器组件用法

与其他三种创作方法不同,导入器组件不是一种通用的创作风格,而是一种用于特定用例的预置组件:将机器学习 artifact 从 URI 加载到当前 pipeline 中,并因此加载到 ML Metadata 中。本节假设您对 KFP artifact 有基本的了解。

Pipeline 基础知识中所述,任务的输入通常是上游任务的输出。在这种情况下,可以使用 my_task.outputs['<output-key>'] 轻松访问上游任务上的 artifact。artifact 在由上游任务创建时也会在 ML Metadata 中注册。

如果您希望使用当前 pipeline 中的任务未生成的现有 artifact,可以使用 dsl.importer 组件从其 URI 加载 artifact。

您无需编写导入器组件;它可以直接从 dsl 模块导入并使用。

from kfp import dsl

@dsl.pipeline
def my_pipeline():
    task = get_date_string()
    importer_task = dsl.importer(
        artifact_uri='gs://ml-pipeline-playground/shakespeare1.txt',
        artifact_class=dsl.Dataset,
        reimport=True,
        metadata={'date': task.output})
    other_component(dataset=importer_task.output)

除了 artifact_uri 参数外,您还必须提供 artifact_class 参数来指定 artifact 的类型。

从容器镜像导入模型 Artifact

从 Kubeflow Pipelines 2.5 开始,您可以使用 modelcar 格式导入打包为容器镜像的模型 artifact。工作方式如下:

  1. 指定 URI:

    • artifact_uri 参数中使用 OCI URI
    • 示例:对于容器镜像 quay.io/my-org/my-model:v1,使用 artifact_uri='oci://quay.io/my-org/my-model:v1'
  2. 运行时行为:

    • 当组件使用导入的模型时,modelcar 将作为 sidecar 容器在 pod 中运行
    • 模型的 path 属性指向正在运行的 modelcar 中的 /models 目录
  3. 处理同一用户要求:

    • 组件容器和 modelcar 容器必须使用相同的用户/UID 运行
    • 如果用户/UID 不匹配,访问模型的 path 属性将因权限错误而失败
    • 对于将随机用户分配给 pod 的 Kubernetes 发行版(例如 OpenShift),无需采取任何操作
    • 对于其他情况,您有两种选择:
      • 使用与组件容器镜像相同的 UID 构建 modelcar 容器
      • 在 Kubeflow Pipelines API 服务器部署上将 PIPELINE_RUN_AS_USER 环境变量设置为非 root UID,这将确保 Kubeflow Pipelines 创建的所有 pod 上的 UID 保持一致

设置元数据和控制导入

importer 组件允许通过 metadata 参数设置 artifact 元数据。元数据可以使用上游任务的输出构建,就像示例 pipeline 中为 'date' 值所做的那样。

您还可以指定一个布尔值 reimport 参数。如果 reimportFalse,KFP 将检查 artifact 是否已导入到 ML Metadata 中,如果已导入,则使用它。这对于在多个 pipeline 运行导入同一 artifact 时避免 ML Metadata 中出现重复的 artifact 条目非常有用。如果 reimportTrue,KFP 将把该 artifact 作为新的 artifact 重新导入到 ML Metadata 中,无论之前是否导入过。

反馈

此页面有用吗?