特殊情况:导入器组件
导入器组件用法
与其他三种创作方法不同,导入器组件不是一种通用的创作风格,而是一种用于特定用例的预置组件:将机器学习 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。工作方式如下:
指定 URI:
- 在
artifact_uri参数中使用 OCI URI - 示例:对于容器镜像
quay.io/my-org/my-model:v1,使用artifact_uri='oci://quay.io/my-org/my-model:v1'
- 在
运行时行为:
- 当组件使用导入的模型时,modelcar 将作为 sidecar 容器在 pod 中运行
- 模型的
path属性指向正在运行的 modelcar 中的/models目录
处理同一用户要求:
- 组件容器和 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 参数。如果 reimport 为 False,KFP 将检查 artifact 是否已导入到 ML Metadata 中,如果已导入,则使用它。这对于在多个 pipeline 运行导入同一 artifact 时避免 ML Metadata 中出现重复的 artifact 条目非常有用。如果 reimport 为 True,KFP 将把该 artifact 作为新的 artifact 重新导入到 ML Metadata 中,无论之前是否导入过。