使用 Kubeflow Pipelines API 进行实验
旧版本
本页面介绍 Kubeflow Pipelines V1,有关最新信息请参阅 V2 文档。
请注意,虽然 V2 后端能够运行由 V1 SDK 提交的流水线,但我们强烈建议迁移到 V2 SDK。作为参考,V1 SDK 的最终版本是 kfp==1.8.22
,其参考文档在此处提供。
本教程演示如何使用 Kubeflow Pipelines API 构建、运行和管理流水线。本指南推荐给希望学习如何使用 REST API 管理 Kubeflow Pipelines 的用户。
开始之前
本教程假设您有权访问 ml-pipeline
服务。如果 Kubeflow 未配置使用身份提供程序,请使用端口转发直接访问该服务。
SVC_PORT=$(kubectl -n kubeflow get svc/ml-pipeline -o json | jq ".spec.ports[0].port")
kubectl port-forward -n kubeflow svc/ml-pipeline ${SVC_PORT}:8888
本教程假设可通过 localhost 访问该服务。
您还需要安装 jq 和 Kubeflow Pipelines SDK。
构建和运行流水线
请按照本指南下载、编译并运行 sequential.py
示例流水线。要了解如何使用 Kubeflow Pipelines SDK 或 Jupyter 笔记本编译和运行流水线,请遵循使用 Kubeflow Pipelines 示例进行实验教程。
PIPELINE_URL=https://raw.githubusercontent.com/kubeflow/pipelines/master/samples/core/sequential/sequential.py
PIPELINE_FILE=${PIPELINE_URL##*/}
PIPELINE_NAME=${PIPELINE_FILE%.*}
wget -O ${PIPELINE_FILE} ${PIPELINE_URL}
dsl-compile --py ${PIPELINE_FILE} --output ${PIPELINE_NAME}.tar.gz
运行上述命令后,您应在当前目录中获得两个文件:sequential.py
和 sequential.tar.gz
。运行以下命令部署生成的 .tar.gz
文件,就像您使用 Kubeflow Pipelines UI 操作一样,但这次是使用 REST API。
SVC=localhost:8888
PIPELINE_ID=$(curl -F "uploadfile=@${PIPELINE_NAME}.tar.gz" ${SVC}/apis/v1beta1/pipelines/upload | jq -r .id)
如果操作成功,您应该能在中央控制面板中看到该流水线。您还可以使用 PIPELINE_ID
通过以下 API 调用获取详细信息。
curl ${SVC}/apis/v1beta1/pipelines/${PIPELINE_ID} | jq
响应应类似于以下内容
{
"id": "d30d28d7-0bfc-4f0c-8a57-6844a8ec9742",
"created_at": "2020-02-20T16:15:02Z",
"name": "sequential.tar.gz",
"parameters": [
{
"name": "url",
"value": "gs://ml-pipeline-playground/shakespeare1.txt"
}
],
"default_version": {
"id": "d30d28d7-0bfc-4f0c-8a57-6844a8ec9742",
"name": "sequential.tar.gz",
"created_at": "2020-02-20T16:15:02Z",
"parameters": [
{
"name": "url",
"value": "gs://ml-pipeline-playground/shakespeare1.txt"
}
],
"resource_references": [
{
"key": {
"type": "PIPELINE",
"id": "d30d28d7-0bfc-4f0c-8a57-6844a8ec9742"
},
"relationship": "OWNER"
}
]
}
}
最后,使用 PIPELINE_ID
触发流水线运行。
RUN_ID=$((
curl -H "Content-Type: application/json" -X POST ${SVC}/apis/v1beta1/runs \
-d @- << EOF
{
"name":"${PIPELINE_NAME}_run",
"pipeline_spec":{
"pipeline_id":"${PIPELINE_ID}"
}
}
EOF
) | jq -r .run.id)
偶尔运行以下命令查看您的运行状态如何变化。一段时间后,您的流水线状态应变为 成功 (Succeeded)。
curl ${SVC}/apis/v1beta1/runs/${RUN_ID} | jq
响应应类似于以下内容
{
"run": {
"id": "4ff0debd-d6d7-4681-8593-21ec002e6e0c",
"name": "sequential_run",
"pipeline_spec": {
"pipeline_id": "d30d28d7-0bfc-4f0c-8a57-6844a8ec9742",
"pipeline_name": "sequential.tar.gz",
"workflow_manifest": "{...}"
},
"resource_references": [
{
"key": {
"type": "EXPERIMENT",
"id": "27af7eee-ce0a-44ba-a44d-07142abfc83c"
},
"name": "Default",
"relationship": "OWNER"
}
],
"created_at": "2020-02-20T16:18:58Z",
"scheduled_at": "1970-01-01T00:00:00Z",
"finished_at": "1970-01-01T00:00:00Z",
"status": "Succeeded"
},
"pipeline_runtime": {
"workflow_manifest": "{...}"
}
}
阅读Kubeflow Pipelines API 参考,了解有关如何使用 API 的更多信息。