使用 Kubeflow Pipelines API 进行实验

Kubeflow Pipelines API 入门

本教程演示如何使用 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 访问该服务。

您还需要安装 jqKubeflow 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.pysequential.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 的更多信息。

反馈

本页对您有帮助吗?


上次修改时间:2024 年 8 月 27 日:改进 KFP / 用户指南 / 核心功能文档 (#3795) (d3ca1b1)