训练任务流特殊接口
涵盖训练 Pipeline(/pipeline_modelview/api)、固化任务流(/pipeline_immutable_modelview)、训练 Task(/task_modelview/api)、Workflow(/workflow_modelview/api)、超参搜索 NNI(/nni_modelview/api)。
训练Pipeline /pipeline_modelview
代码文件:myapp/views/view_pipeline.py(route_base = '/pipeline_modelview/api')
我的 Pipeline 列表
GET /pipeline_modelview/api/my/list/
无需参数。返回当前用户创建的所有 Pipeline(不含 demo 和固化类型)。
响应:
{"status": 0, "message": "success", "result": [{...pipeline_json...}]}
示例 Pipeline 列表
GET /pipeline_modelview/api/demo/list/
无需参数。返回所有 demo 类型 Pipeline(parameter 中含 "demo": "true")。多租户模式下按组织过滤。
响应:
{"status": 0, "message": "success", "result": [{...demo_pipeline_json...}]}
运行 Pipeline
GET/POST /pipeline_modelview/api/run_pipeline/<pipeline_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| pipeline_id | path | int | Pipeline ID |
响应: 302 重定向到 /web/log/{pipeline_id}(执行日志页面)
说明:
- 仅创建者或管理员可执行
- 清理旧任务、删除之前运行的 Workflow
- 编译 Pipeline DAG 为 Argo Workflow YAML
- 校验资源配额后提交 K8s Workflow CRD
- 自动清理策略:运行完成 3 小时后清理
打开编排界面
GET /pipeline_modelview/api/web/<pipeline_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| pipeline_id | path | int | Pipeline ID |
响应: 302 重定向到可视化编排器 /static/appbuilder/vison/index.html?pipeline_id={id}
打开调试跟踪界面
GET /pipeline_modelview/api/web/log/<pipeline_id>
响应: 302 重定向到 Workflow DAG 可视化页面
打开资源监控界面
GET /pipeline_modelview/api/web/monitoring/<pipeline_id>
响应: 302 重定向到 Grafana 仪表盘
打开 Pod 界面
GET /pipeline_modelview/api/web/pod/<pipeline_id>
响应: 302 重定向到 K8s Pod 搜索页面
打开定时记录界面
GET /pipeline_modelview/api/web/runhistory/<pipeline_id>
响应: 302 重定向到 RunHistory 列表页面(按 pipeline_id 过滤)
打开 Workflow 界面
GET /pipeline_modelview/api/web/workflow/<pipeline_id>
响应: 302 重定向到 Workflow 实例列表页面
LabelStudio Webhook 触发训练
GET/POST /pipeline_modelview/api/labelstudio/run_pipeline/<pipeline_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| pipeline_id | path | int | Pipeline ID |
| action | body | string | 事件类型(仅处理 PROJECT_FINISHED) |
响应:
{
"status": 0,
"message": "开始训练",
"result": {"pipeline_id": 1, "run_id": "xxx", "crd_name": "workflow-xxx"}
}
说明: 无需认证(webhook 场景)。仅在 action 为 PROJECT_FINISHED 时触发 Pipeline 执行。
复制 Pipeline
GET/POST /pipeline_modelview/api/copy_pipeline/<pipeline_id>
响应: 302 重定向到新 Pipeline 的编排页面
说明: 深拷贝 Pipeline 及其所有 Task,名称追加随机后缀,描述追加 "(copy)"。
批量上传
POST /pipeline_modelview/api/upload/
Content-Type: multipart/form-data
| 参数 | 类型 | 说明 |
|---|---|---|
| csv_file | file | JSON 文件(格式见下方) |
上传 JSON 格式:
{
"pipeline_name": {
"pipeline": {"name": "...", "describe": "...", ...},
"tasks": [{"name": "task1", ...}]
}
}
响应:
{"status": 0, "message": "result为上传成功行,共成功2", "result": ["success", "错误信息"]}
批量下载
GET /pipeline_modelview/api/download/
请求参数: 同标准 download 接口(通过 form_data 传 filters)
响应: JSON 文件下载(pipeline-{timestamp}.json)
下载上传模板
GET /pipeline_modelview/api/download_template/
响应: JSON 文件下载(pipeline-template.json),包含示例 Pipeline + Task 结构
固化任务流 /pipeline_immutable_modelview
代码文件:myapp/views/view_pipeline_immutable.py
固化任务流为动态注册的路由,前缀为 /pipeline_immutable_modelview/<pipeline_id>/api/(route_base 在运行时按 pipeline_id 拼接)。
获取固化任务流子任务元信息
GET /pipeline_immutable_modelview/<pipeline_id>/api/_info
响应: JSON,包含模板参数的表单字段定义(同 _info 格式),字段由模板配置动态生成(ui-type 支持 input-select / select / textArea / json 等)。
固化任务流子任务列表 / 新增
GET /pipeline_immutable_modelview/<pipeline_id>/api/ # 列表
POST /pipeline_immutable_modelview/<pipeline_id>/api/ # 新增
POST 请求体(JSON):
{
"describe": "实例描述",
"project": 1,
"field1": "value1",
"field2": "value2"
}
响应:
{"status": 0, "message": "success", "result": {}}
说明: POST 会克隆固化模板 Pipeline,根据表单字段映射到 Task 参数。
查看/更新/删除固化任务流子任务
GET /pipeline_immutable_modelview/<pipeline_id>/api/<pk> # 查看
PUT /pipeline_immutable_modelview/<pipeline_id>/api/<pk> # 更新
DELETE /pipeline_immutable_modelview/<pipeline_id>/api/<pk> # 删除
GET 响应:
{
"status": 0,
"message": "success",
"result": {"id": 1, "describe": "...", "project": 1, "field1": "value1"}
}
DELETE 说明: 会级联删除所有关联的 Workflow、Task 和运行历史。
训练Task /task_modelview
代码文件:myapp/views/view_task.py(route_base = '/task_modelview/api')
单个任务 debug
GET/POST /task_modelview/api/debug/<task_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| task_id | path | int | Task ID |
响应: 302 重定向到 Pod 终端界面
说明:
- 仅 Pipeline 创建者、管理员或模板创建者可执行
- 不支持逻辑类型 Job 的 debug
- 创建 debug Pod(sleep 2h),等待最多 60 秒进入 Running 状态
单个任务 run
GET/POST /task_modelview/api/run/<task_id>
响应: 302 重定向到 Pod 列表页面
说明:
- 仅 Pipeline 创建者或管理员可执行
- 不支持逻辑类型和 Python 类型 Job
- 不支持有上游输出依赖的 Task
- 自动清理之前的 run/debug Pod 后执行
单个任务 clear
GET/POST /task_modelview/api/clear/<task_id>
响应: 302 重定向到 Pipeline 详情页面
说明: 删除该 Task 的所有运行 Pod(包括 run 和 debug)。
单个任务查看日志
GET/POST /task_modelview/api/log/<task_id>
响应: 302 重定向到 K8s Pod 日志查看页面
说明: 查找当前运行中的 Pod(匹配 run-{pipeline}-{task} 模式),若无运行 Pod 则提示。
Workflow /workflow_modelview
代码文件:myapp/views/view_workflow.py(route_base = '/workflow_modelview/api')
暂停 Workflow
GET /workflow_modelview/api/pause/<crd_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| crd_id | path | int | Workflow 数据库 ID |
响应: 302 重定向到来源页面
说明: Patch Workflow CRD 的 spec.suspend = True。当前运行中的任务会继续完成,新任务不再启动。
恢复 Workflow
GET /workflow_modelview/api/recover/<crd_id>
参数同 pause。 Patch spec.suspend = False,恢复后续任务执行。
停止 Workflow
GET /workflow_modelview/api/stop/<crd_id>
参数同 pause。
说明: 删除 K8s Workflow CRD 及关联 Pod,数据库状态设为 Deleted。仅 Workflow 拥有者、管理员或 Pipeline 项目创建者可执行。
Workflow 执行日志
GET /workflow_modelview/api/web/log/<cluster_name>/<namespace>/<workflow_name>/<pod_name>
GET /workflow_modelview/api/web/log/<cluster_name>/<namespace>/<workflow_name>/<pod_name>/<file_name>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| cluster_name | path | string | 集群名称 |
| namespace | path | string | 命名空间 |
| workflow_name | path | string | Workflow 名称 |
| pod_name | path | string | Pod 名称 |
| file_name | path | string | 日志文件名,默认 main.log |
响应: HTML 格式的日志内容
说明: 从 MinIO 存储读取日志(路径 {workflow_name}/{pod_name}/{file_name})。自动解压 .zip/.tgz 文件,去除 ANSI 转义字符。
Workflow 节点日志(JSON格式)
GET /workflow_modelview/api/web/log_node/<cluster_name>/<namespace>/<workflow_name>/<pod_name>
参数同上。 返回 JSON 格式(包含 HTML 日志内容)。
任务实例详情
GET /workflow_modelview/api/web/node_detail/<cluster_name>/<namespace>/<workflow_name>/<node_name>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| cluster_name | path | string | 集群名称 |
| namespace | path | string | 命名空间 |
| workflow_name | path | string | Workflow 名称 |
| node_name | path | string | 节点名称 |
响应:
{
"status": 0,
"message": "success",
"result": {
"detail": [
{
"tabName": "输入输出",
"content": [
{
"groupName": "消息",
"groupContent": {"label": "...", "value": "...", "type": "html"}
}
]
},
{"tabName": "pod信息", "content": [...]},
{"tabName": "结果可视化", "content": [...]},
{"tabName": "workflow信息", "content": [...]}
],
"control": {"width": "700px"}
}
}
说明: 包含多个 tab(输入输出、Pod 信息、结果可视化、Workflow 信息等),支持 echart / image / table / HTML 等可视化类型。
任务流实例 DAG 信息
GET /workflow_modelview/api/web/dag/<cluster_name>/<namespace>/<workflow_name>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| cluster_name | path | string | 集群名称 |
| namespace | path | string | 命名空间 |
| workflow_name | path | string | Workflow 名称 |
响应:
{
"status": 0,
"message": "success",
"result": {
"control": {"node_ops": ["detail", "explore"], "direction": "vertical"},
"dag": [
{"id": "node-1", "name": "task-name", "status": "Succeeded", "elapsed": "2m30s", "children": [...]}
],
"layout": {"status": "Running", "progress": "3/5 completed", "actions": ["pause", "stop"]}
}
}
Workflow 实例运行进度
GET /workflow_modelview/api/web/layout/<cluster_name>/<namespace>/<workflow_name>
参数同 dag。 仅返回 layout 部分(状态、进度、操作按钮),不含完整 DAG 数据,用于头部概览刷新。
超参搜索 /nni_modelview
代码文件:myapp/views/view_nni.py(route_base = '/nni_modelview/api')
停止超参搜索
GET/POST /nni_modelview/api/stop/<nni_id>
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
| nni_id | path | int | NNI 记录 ID |
响应: 302 重定向到 NNI 列表页面
说明: 清理 K8s 资源(Pod、Service、Istio 入口、Volcano Job),标记状态为 offline。
启动超参搜索
GET/POST /nni_modelview/api/run/<nni_id>
响应: 302 重定向到 /frontend/k8s/web/search/{cluster}/{namespace}/{nni_name}
说明:
- 校验资源配额
- 生成 NNI YAML 配置文件
- 单机模式部署 K8s Pod,多机模式部署 Volcano Job
- 创建 Service 和 VirtualService 用于 Web 界面访问
查看超参搜索日志
GET/POST /nni_modelview/api/log/<nni_id>
响应: 302 重定向到 Pod 日志页面 /frontend/k8s/web/log/{cluster}/{namespace}/{pod_name}/nnijob
查看超参搜索运行界面
GET/POST /nni_modelview/api/web/<nni_id>
响应: 302 重定向到 NNI Web 仪表盘 {HOST}/nni/{nni_name}/