Pipeline 组件

概述

Pipelines 由使用组件实现的节点组成。一个组件通常只实现一个工作单元,例如加载数据、转换数据、训练模型或将模型部署到服务中。以下展示了可视化管道编辑器中的一个基础管道,它利用组件加载数据文件、拆分文件、截断结果文件,并统计每个文件中的记录数量。

A basic Kubeflow pipeline

同样的流水线可以使用一个执行所有这些任务的单一组件来实现,但该组件可能不够通用可重用。例如,考虑另一个项目的数据存储在不同的存储类型中。使用细粒度组件,您只需要将加载数据组件替换为支持其他存储类型的组件,并可以保留其他所有内容。

通用组件

Elyra包含三个通用组件,允许处理Jupyter笔记本、Python脚本和R脚本。这些组件之所以被称为通用,是因为它们可以被包含在任何支持的运行时类型的管道中:本地/JupyterLab、Kubeflow Pipelines和Apache Airflow >= 2.7.0。组件通过调色板在管道编辑器中暴露。

Generic components in the palette

注意:参考用户指南中的最佳实践主题,了解更多关于通用组件的特殊注意事项。

自定义组件

自定义组件通常仅针对一种运行时类型实现,例如 Kubeflow Pipelines 或 Apache Airflow < 2。(本地运行时类型不支持自定义组件)。Apache Airflow 的自定义组件,由于仅支持 Airflow 1.x,因此仅在 Elyra < 4 中受支持。

Kubeflow components in the palette

网络上有很多自定义组件可供您在流水线中使用,但您也可以创建自己的组件。有关如何创建组件的详细信息可在Kubeflow Pipelines 文档Apache Airflow 文档中找到。请注意,在 Apache Airflow 中,组件被称为运算符,但为了保持一致性,Elyra 文档将其称为组件。

注意:请参考用户指南中的自定义流水线组件要求与最佳实践主题了解更多关于自定义组件的特殊注意事项。

组件目录

Elyra 并不包含自己的组件仓库。相反,你可以配置它从本地或远程目录拉取组件,例如文件系统、网络资源或源代码控制系统。Elyra 定义了一个连接器 API,提供对目录资源的访问。

component catalogs

Elyra 包含以下组件目录类型的连接器:

  • 文件系统组件目录 提供对存储在JupyterLab/Elyra可读取文件系统中的组件的访问。

    示例:一个使用 /users/jdoe/kubeflow_components/dev/my_component.yaml 路径配置的文件系统组件目录,使得 my_component.yaml 可供Elyra使用。

  • 目录组件目录 提供对存储在目录中的组件的访问权限。

    示例:一个使用 /users/jdoe/kubeflow_components/test 路径配置的目录组件目录,使得该目录中的所有组件文件都可被Elyra使用。

  • URL 组件目录 提供对存储在网络上并可通过 HTTP GET 请求获取的组件的访问权限。

    示例:使用 http://myserver:myport/mypath/my_component.yaml URL 配置的 URL 组件目录将 my_component.yaml 组件文件提供给 Elyra 使用。

  • Apache Airflow 包目录 提供对存储在 Apache Airflow 内置发行版中的 Apache Airflow 操作器的访问。目前仅支持 Airflow < 2 版本。

  • Apache Airflow provider package catalogs 提供对存储在Apache Airflow provider包中的Apache Airflow算子的访问。目前仅支持Airflow < 2。

关于这些连接器的详细信息,请参考章节内置目录连接器参考

您可以通过从目录连接器市场安装连接器或实现您自己的目录连接器来添加对其他组件目录的支持。

示例自定义组件

为了帮助您开始使用自定义组件,Elyra社区已经为Kubeflow Pipelines挑选了几个组件,并通过示例目录提供。

Example pipeline for the HTTP component

是否你的 Elyra 包含示例组件取决于你的部署方式:

  • 社区维护的预构建容器镜像已预先安装并启用了Kubeflow Pipelines的示例组件目录。这些组件可在流水线编辑器中直接使用。

  • 包含所有内容的独立安装(例如 pip install "elyra[all]")包含示例组件。然而,目录必须显式添加到调色板中。

  • 仅核心安装(例如 pip install elyra)不包括示例组件。示例目录必须单独安装并显式添加到调色板中。

安装并启用组件示例目录

按照Kubeflow Pipelines 组件示例目录中的说明进行操作。

一些包含组件的详细信息和演示流水线可以在Elyra示例仓库中找到:

自定义Airflow组件的特殊考量

从某些类型的组件目录连接器导入的自定义Airflow组件需要额外配置才能在流水线中使用。 详情请参阅 ‘Custom Pipeline Components最佳实践’

管理流水线组件

组件在Elyra中通过JupyterLab UIElyra命令行界面进行管理。

使用 JupyterLab UI 管理自定义组件

自定义组件可以在Pipeline Components面板中添加、修改、复制和删除。

Pipeline components UI

要在JupyterLab中访问面板:

  • 点击管道编辑器工具栏中的 Open Pipeline Components 按钮。

    Open panel from pipeline editor toolbar

  • 从JupyterLab侧边栏中选择 Pipeline Components 面板。

    Open panel from sidebar

    或者

  • 打开 JupyterLab 命令面板 (Cmd/Ctrl + Shift + C) 并搜索 Manage Pipeline Components

    Open panel from command palette

添加一个组件目录

要从目录添加组件:

  1. 打开 Pipeline Components 面板。

  2. 管道组件面板中点击+

  3. 从可用选项列表中选择一个组件目录类型。

  4. 输入目录信息。有关每个属性的描述,请参考配置属性部分。

  5. 保存目录条目。

Elyra 查询目录,加载组件,并将它们添加到可视化管道编辑器面板中。

提示:如果在面板中未显示所添加目录中的组件,请检查日志文件中的错误消息。

重新加载组件目录条目

如果底层目录已更改,重新加载目录条目:

  1. 打开Pipeline Components面板。

  2. 点击条目名称旁边的reload图标。

  3. 目录条目被重新加载且更改会反映在可视化流水线编辑器面板中。条目处理的速度取决于目录类型、目录中的条目数量以及网络连接情况。

提示:如果在调色板中未显示重新加载目录的更新,请检查日志文件中的错误消息。

修改组件目录条目

  1. 打开 Pipeline Components 面板。

  2. 点击条目名称旁边的edit(铅笔)图标。

  3. 根据需要修改目录条目。

复制组件目录条目

要复制组件目录条目:

  1. 打开Pipeline Components面板。

  2. 点击条目名称旁边的复制图标。

  3. 按照‘修改组件目录条目’中的步骤自定义复制的条目。

删除组件目录条目

要从可视化管道编辑器调色板中移除组件目录条目及其引用的组件:

  1. 打开 Pipeline Components 面板。

  2. 点击条目名称旁边的delete(垃圾桶)图标。

  3. 确认删除。

注意:在删除目录条目后,使用所引用组件的流水线不再有效。

使用 Elyra CLI 管理自定义组件

自定义组件可以使用 elyra-metadata 命令行界面 来添加、修改和移除。

列出组件目录条目:

$ elyra-metadata list component-catalogs

Available metadata instances for component-catalogs:

Schema               Instance                            Resource
------               --------                            --------
elyra-kfp-examples-catalog       kubeflow_pipelines_examples  /.../Jupyter/metadata/component-catalogs/kubeflow_pipelines_examples.json

添加一个组件目录

要添加组件目录条目,请运行elyra-metadata create component-catalogs

$ elyra-metadata create component-catalogs \
       --display_name "filter components" \
       --description "filter text in files" \
       --runtime_type KUBEFLOW_PIPELINES \
       --schema_name "url-catalog"\
       --paths "['https://raw.githubusercontent.com/elyra-ai/examples/main/component-catalog-connectors/kfp-example-components-connector/kfp_examples_connector/resources/filter_text_using_shell_and_grep.yaml']" \
       --categories '["filter content"]'

请参阅章节Configuration properties了解参数描述。

修改组件目录条目

要替换组件目录条目,请运行elyra-metadata update component-catalogs

$ elyra-metadata update component-catalogs \
       --name "filter_components" \
       --display_name "filter components" \
       --description "filter text in files" \
       --runtime_type KUBEFLOW_PIPELINES \
       --schema_name "url-catalog"\
       --paths "['https://raw.githubusercontent.com/elyra-ai/examples/main/component-catalog-connectors/kfp-example-components-connector/kfp_examples_connector/resources/filter_text_using_shell_and_grep.yaml']" \
       --categories='["file operations"]'

注意:您必须指定所有属性值,而不仅仅是您想要修改的那些。

请参阅章节 Configuration properties 以获取参数描述。

导出组件目录

导出组件目录:

$ elyra-metadata export component-catalogs \
	--directory "/tmp/foo"

上述示例会将所有组件目录导出到“/tmp/foo/component-catalogs”目录。

请注意,您必须指定--directory选项。

在导出组件目录时,可以指定两个标志:

  1. 要包含无效组件目录,请使用 --include-invalid 标志。

  2. 要清理导出目录,请使用 --clean 标志。在上述示例中使用 --clean 标志将在导出组件目录之前清空 "/tmp/foo/component-catalogs" 目录。

导入组件目录

导入组件目录:

$ elyra-metadata import component-catalogs \
	--directory "/tmp/foo"

上述示例将导入“/tmp/foo”目录中的所有有效组件目录(任何子目录中存在的文件将被忽略)。

请注意,您必须指定--directory选项。

默认情况下,如果已存在同名的组件目录实例,则不会导入元数据。--overwrite标志可用于覆盖此默认行为,并用导入目录中的新文件替换任何已安装的元数据。

删除组件目录条目

要将一个组件目录条目及其组件定义从可视化管道编辑器调色板中移除:

$ elyra-metadata remove component-catalogs \
       --name "filter_components"

请参阅章节Configuration properties了解参数描述。

迁移用户定义的组件注册表

Elyra 3.3版本将Component Registries重命名为Component Catalogs,并根据旧模式的location-typecomponent-registry模式拆分为三个独立的“组件目录”模式。因此,除非进行迁移,否则在Elyra 3.3之前创建的任何用户定义的组件注册表实例将不可用。

然而,Elyra 3.7版本正式移除了对component-registries模式的支持,包括将组件注册表实例迁移至组件目录实例的功能。如果您已从Elyra 3.2或更早版本升级至Elyra 3.7+,并且仍希望访问先前定义的实例,首先需要安装一个低级别版本,并使用以下说明迁移您的实例。此迁移通过elyra-metadata CLI工具执行。

确定要迁移的实例

要确定可迁移的实例,请执行以下命令:

$ elyra-metadata list component-registries

在这个示例中,有三个用户定义的实例。

Available metadata instances for component-registries:

Schema               Instance            Resource
------               --------            --------
component-registry   airflow_components  /Users/jovyan/Library/Jupyter/metadata/component-registries/airflow_components.json
component-registry   aa_custom           /Users/jovyan/Library/Jupyter/metadata/component-registries/aa_custom.json
component-registry   myoperators         /Users/jovyan/Library/Jupyter/metadata/component-registries/myoperators.json

您可能会发现其中某些实例不再适用。如果存在不适用于 3.3 的实例,可以单独移除它们:

$ elyra-metadata remove component-registries --name aa_custom

Metadata instance 'aa_custom' removed from schemaspace 'component-registries'.

注意:由于component-registries schema空间已被弃用,实例可以被列出、移除或迁移,但无法创建。

迁移实例

确定要迁移的组件注册实例集后,发出以下命令以迁移剩余的实例:

$ elyra-metadata migrate component-registries

完成后,这应该只需要几秒钟时间,将生成类似于以下的输出:

[I 2021-11-15 11:05:48,012.012] Migrating 'component-registries' instance 'myoperators' to schema 'local-file-catalog' of schemaspace 'component-catalogs'...
[I 2021-11-15 11:05:48,042.042] Migrating 'component-registries' instance 'airflow_components' to schema 'url-catalog' of schemaspace 'component-catalogs'...
The following component-registries instances were migrated: ['myoperators', 'airflow_components']

一旦迁移完成,这些条目应出现在组件目录集合中。可以通过列出组件目录实例来确认:

$ elyra-metadata list component-catalogs
Available metadata instances for component-catalogs:

Schema                    Instance                            Resource                                                                                                         
------                    --------                            --------                                                                                                             
local-file-catalog        aa_custom                           /Users/jovyan/Library/Jupyter/metadata/component-catalogs/aa_custom.json                                         
local-file-catalog        myoperators                         /Users/jovyan/Library/Jupyter/metadata/component-catalogs/myoperators.json                                       
url-catalog               airflow_components                  /Users/jovyan/Library/Jupyter/metadata/component-catalogs/airflow_components.json                                             

配置属性

组件目录条目属性定义如下。下方标题中用括号括住的字符串,表示CLI选项名称。

名称 (display_name)

目录条目的用户友好名称。请注意,目录条目名称不会在调色板中显示。此属性为必需项。

示例:data load components

N/A (名称)

此目录条目的规范名称。若未提供值,将从Name自动生成。

示例: data_load_components

说明 (description)

目录条目的描述。

示例:Load data from external data sources

分类(类别)

在流水线编辑器调色板中,组件按类别分组以便更容易访问。如果未提供类别,则此目录条目定义的组件将添加到调色板中的no category下。每个类别的字符数限制为18个或更少。

示例 (CLI):

  • ['从数据库加载数据']

  • ['训练 模型','pytorch']

运行时 (runtime)

支持组件运行的运行时环境。有效值为下拉菜单(UI)或帮助文本(CLI)中显示的已配置运行时集合。此属性为必填项。

示例:

  • APACHE_AIRFLOW

  • KUBEFLOW_PIPELINES

内置目录连接器参考

Elyra 支持使用其内置连接器从文件系统和网络获取组件。

文件系统组件目录

文件系统组件目录连接器提供对存储在运行Elyra的文件系统中的组件的访问:

  • ~ 可用于表示用户的主目录。

  • 不支持通配符(例如 *?)。

  • 您可以指定一个或多个文件名。

  • 最佳实践:流水线文件包含对组件加载位置的引用。当向目录添加文件时,指定一个base directory和一个相对文件路径,使流水线能够在不同环境中移植。

示例 (GUI):

  • /Users/patti/specs/load_data_from_public_source/http_operator.py

  • ~patti/specs/filter_files/row_filter.yaml

示例 (CLI):

  • ['/Users/patti/specs/load_data_from_public_source/http_operator.py']

  • ['~patti/specs/filter_files/row_filter.yaml']

  • ['/Users/patti/specs/comp1.yaml','/Users/patti/specs/comp2.yaml']

目录组件目录

目录组件目录连接器提供对存储在文件系统目录中的组件的访问:

  • 如果Path设置为/Users/patti/specs/load_from_database,连接器将在指定目录中搜索所选运行时类型的组件。

  • 如果启用了子目录选项,搜索将递归执行。

  • ~ 可用于表示用户的主目录。

  • 您可以指定一个或多个目录。

示例 (图形用户界面):

  • /Users/patti/specs/load_from_database

  • ~patti/specs/load_from_cloud_storage

示例 (CLI):

  • ['/Users/patti/specs/load_from_database']

  • ['~patti/specs/load_from_cloud_storage']

  • ['/Users/patti/load_specs/','/Users/patti/cleanse_specs/']

URL组件目录

URL 组件目录连接器提供对存储在 web 上的组件的访问:

  • 您可以指定一个或多个URL资源。

  • 指定的URL必须可以通过HTTP GET请求获取。支持 httphttpsfile URI schemes

  • 如果资源受到保护,请提供凭据,例如用户ID和密码或API密钥。

  • 在安全环境中,SSL服务器真实性只能使用基于私有公钥基础设施(PKI)的证书进行验证,这些证书带有根证书颁发机构(CAs)以及可选的中间证书颁发机构(CAs),这些机构并非公开受信任,您必须在运行JupyterLab/Elyra的环境中定义环境变量 TRUSTED_CA_BUNDLE_PATH。变量值必须标识一个现有的 Privacy-Enhanced Mail (PEM) file

示例 (图形界面):

示例 (CLI):

  • HTTPS 网址

    ['https://raw.githubusercontent.com/elyra-ai/examples/main/component-catalog-connectors/kfp-example-components-connector/kfp_examples_connector/resources/filter_text_using_shell_and_grep.yaml']
    
  • 本地文件URL

    ['file:///absolute/path/to/component.yaml']
    
  • 多个网址

    ['','']
    

Apache Airflow 包目录

Apache Airflow package catalog connector 提供了对存储在 Apache Airflow built distributions 中的操作器的访问:

  • 仅支持wheel distribution format

  • 仅支持 Airflow < 2 版本。该功能在 Elyra >=4 中无法使用,因为不再支持 Airflow 1.x。

  • 指定的URL必须能够通过HTTP GET请求获取。支持httphttpsfile URI方案

  • 在安全环境中,SSL服务器真实性只能使用基于私有公钥基础设施(PKI)的证书进行验证,这些证书具有根以及可选的非公开信任的中级证书颁发机构(CA),您必须在JupyterLab/Elyra运行环境中定义环境变量TRUSTED_CA_BUNDLE_PATH。变量值必须标识一个现有的隐私增强邮件(PEM)文件

示例:

  • Apache Airflow(v1.10.15):

    https://files.pythonhosted.org/packages/f0/3a/f5ce74b2bdbbe59c925bb3398ec0781b66a64b8a23e2f6adc7ab9f1005d9/apache_airflow-1.10.15-py2.py3-none-any.whl
    
  • 已下载的Apache Airflow包的本地副本

    file:///absolute/path/to/apache_airflow-1.10.15-py2.py3-none-any.whl
    

Apache Airflow Provider 包目录

Apache Airflow provider package catalog connector 提供访问存储在Apache Airflow provider packages中的操作器:

  • 仅支持 wheel 分发格式

  • 仅支持 Airflow < 2 及 Airflow < 2 的操作器。该功能在 Elyra >=4 中无法使用,Elyra 不再支持 Airflow 1.x。

  • 指定的URL必须能够通过HTTP GET请求检索。httphttpsfile URI schemes均受支持。

  • 在受保护的环境中,SSL服务器身份验证只能使用基于私有公钥基础设施(PKI)的证书进行验证,这些证书具有根证书和可选的中间证书颁发机构(CA),这些机构不受公共信任,您必须在JupyterLab/Elyra运行的环境中定义环境变量TRUSTED_CA_BUNDLE_PATH。变量值必须指定一个现有的隐私增强邮件(PEM)文件

示例:

  • apache-airflow-providers-http(v2.0.2):

    https://files.<pythonhosted.org/packages/a1/08/91653e9f394cbefe356ac07db809be7e69cc89b094379ad91d6cef3d2bc9/apache_airflow_providers_http-2.0.2-py3-none-any.whl
    
  • 已下载提供程序包的本地副本

    file:///absolute/path/to/apache_airflow_providers_http-2.0.2-py3-none-any.whl