使用 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

本教程假设服务可以在本地访问。

您还需要安装 jqKubeflow Pipelines SDK

构建和运行管道

按照本指南下载、编译并运行sequential.py示例管道。要了解如何使用Kubeflow Pipelines SDK或Jupyter Notebook编译和运行管道,请遵循使用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。运行以下命令,以您使用Kubeflow Pipelines UI的方式部署生成的.tar.gz文件,但这次使用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)

偶尔运行以下命令以查看您的运行状态如何变化。过一段时间后,您的管道状态应该会更改为 成功

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 Reference 以了解有关如何使用该 API 的更多信息。

反馈

此页面有帮助吗?