数据库结构 - 训练任务流与分布式训练
任务流编排域:pipeline 任务流(带 dag_json 上下游、调度配置、argo 关联)、task 任务节点、run 定时运行记录、workflow argo workflow 记录、nni 超参搜索,以及 tfjob / pytorchjob / xgbjob 等分布式训练 CRD 实例记录。对应 myapp/models/model_job.py(repository/images/job_template/pipeline/task/run/workflow)、model_nni.py(nni)。
CRD 记录表均复用
model_job.py中的Crd基类(model_job.py:902),结构高度一致,为 k8s 自定义资源的本地快照(name/cluster/namespace/status/spec/labels/annotations/info_json/foreign_key 等)。当前代码中以该基类实际定义的只有Workflow(model_job.py:967,__tablename__='workflow')。说明:快照中的
tfjob/pytorchjob/xgbjob三张表在当前myapp/models/中已无对应 ORM 模型(仅workflow留存,见model_job.py:967),且已由迁移ff850cfc62f3的upgrade()显式drop_table(仅其downgrade()中重建),属历史遗留表。以下快照为这三张表的历史结构留存。
pipeline任务流表: pipeline
| 列名 | 类型 | 是否为空 | 默认值 | 描述 | 是否唯一 | 外键 |
|---|---|---|---|---|---|---|
| created_on | datetime | YES | None | No | No | |
| changed_on | datetime | YES | None | No | No | |
| id | int | NO | None | id主键 | Yes | No |
| name | varchar(100) | NO | None | 英文名 | No | No |
| describe | varchar(200) | NO | None | 描述 | No | No |
| project_id | int | NO | None | 项目组id | No | project(id) |
| dag_json | text | NO | None | 上下游关系 | No | No |
| namespace | varchar(100) | YES | None | 命名空间 | No | No |
| global_env | varchar(500) | YES | None | 全局环境变量 | No | No |
| schedule_type | enum('once','crontab') | NO | once | 调度类型 | No | No |
| cron_time | varchar(100) | YES | None | 调度周期 | No | No |
| cronjob_start_time | varchar(300) | YES | None | 定时调度补录起点 | No | No |
| pipeline_file | mediumtext | YES | None | workflow yaml文件 | No | No |
| pipeline_argo_id | varchar(100) | YES | None | argo workflow id | No | No |
| version_id | varchar(100) | YES | None | workflow version id | No | No |
| run_id | varchar(100) | YES | None | workflow run id | No | No |
| node_selector | varchar(100) | YES | None | 机器选择器 | No | No |
| image_pull_policy | enum('Always','IfNotPresent') | NO | None | 镜像拉取策略 | No | No |
| parallelism | int | NO | 1 | 同一个pipeline,最大并行的task数目 | No | No |
| alert_status | varchar(100) | YES | None | 哪些状态会报警Pending,Running,Succeeded,Failed,Unknown,Waiting,Terminated | No | No |
| alert_user | varchar(300) | YES | None | 报警接收人 | No | No |
| expand | mediumtext | YES | None | 扩展参数 | No | No |
| depends_on_past | tinyint(1) | YES | None | 是否依赖过往实例 | No | No |
| max_active_runs | int | NO | 3 | 最大同时运行的pipeline实例 | No | No |
| expired_limit | int | NO | 0 | 过期保留个数,此数值有效时,会优先使用,覆盖max_active_runs的功能 | No | No |
| parameter | mediumtext | YES | None | 前端保留参数,用于记录编排样式 | No | No |
| created_by_fk | int | YES | None | No | ab_user(id) | |
| changed_by_fk | int | YES | None | No | ab_user(id) | |
| priority | varchar(100) | YES | None | 优先级 | No | No |
已按代码补全默认值:
schedule_type默认once、parallelism默认1、max_active_runs默认3、expired_limit默认0(快照中均记为 None),见myapp/models/model_job.py:378,387,393,394。
pipeline任务表: task
| 列名 | 类型 | 是否为空 | 默认值 | 描述 | 是否唯一 | 外键 |
|---|---|---|---|---|---|---|
| created_on | datetime | YES | None | No | No | |
| changed_on | datetime | YES | None | No | No | |
| id | int | NO | None | id主键 | Yes | No |
| name | varchar(100) | NO | None | 英文名 | No | No |
| label | varchar(100) | NO | None | 中文名 | No | No |
| job_template_id | int | YES | None | 任务模板id | No | job_template(id) |
| pipeline_id | int | YES | None | 任务流id | No | pipeline(id) |
| working_dir | varchar(1000) | YES | None | 启动目录 | No | No |
| command | varchar(1000) | YES | None | 启动命令 | No | No |
| overwrite_entrypoint | tinyint(1) | YES | None | 是否覆盖模板中的入口点 | No | No |
| args | text | YES | None | 任务启动参数 | No | No |
| volume_mount | varchar(2000) | YES | None | 挂载 | No | No |
| node_selector | varchar(100) | YES | None | 机器选择器 | No | No |
| resource_memory | varchar(100) | YES | None | 申请内存 | No | No |
| resource_cpu | varchar(100) | YES | None | 申请cpu | No | No |
| resource_gpu | varchar(100) | YES | None | 申请gpu | No | No |
| resource_rdma | varchar(100) | YES | None | rdma的资源数量 | No | No |
| timeout | int | NO | None | 超时 | No | No |
| retry | int | NO | None | 重试次数 | No | No |
| outputs | text | YES | None | task的输出,会将输出复制到minio上 | No | No |
| monitoring | text | YES | None | 该任务的监控信息 | No | No |
| expand | mediumtext | YES | None | 扩展参数 | No | No |
| skip | tinyint(1) | YES | None | 是否跳过 | No | No |
| created_by_fk | int | YES | None | No | ab_user(id) | |
| changed_by_fk | int | YES | None | No | ab_user(id) |
定时运行记录表: run
| 列名 | 类型 | 是否为空 | 默认值 | 描述 | 是否唯一 | 外键 |
|---|---|---|---|---|---|---|
| id | int | NO | None | id主键 | Yes | No |
| pipeline_id | int | YES | None | 任务流id | No | pipeline(id) |
| pipeline_file | mediumtext | YES | None | workflow yaml | No | No |
| pipeline_argo_id | varchar(100) | YES | None | 任务流 argo id | No | No |
| version_id | varchar(100) | YES | None | 上传的版本号 | No | No |
| experiment_id | varchar(100) | YES | None | 实验id | No | No |
| run_id | varchar(100) | YES | None | run id | No | No |
| message | text | YES | None | 消息 | No | No |
| created_on | datetime | NO | None | 创建时间 | No | No |
| execution_date | varchar(200) | NO | None | 执行时间 | No | No |
| status | varchar(100) | YES | None | 状态 | No | No |
nni超参搜索表: nni
| 列名 | 类型 | 是否为空 | 默认值 | 描述 | 是否唯一 | 外键 |
|---|---|---|---|---|---|---|
| created_on | datetime | YES | None | No | No | |
| changed_on | datetime | YES | None | No | No | |
| id | int | NO | None | id主键 | Yes | No |
| job_type | enum('Job') | YES | None | 任务类型 | No | No |
| project_id | int | NO | None | 项目组id | No | project(id) |
| name | varchar(200) | NO | None | 英文名 | No | No |
| namespace | varchar(200) | YES | None | 命名空间 | No | No |
| describe | text | YES | None | 描述 | No | No |
| parallel_trial_count | int | YES | None | 最大并行数 | No | No |
| max_exec_duration | int | YES | None | 最大执行时长 | No | No |
| max_trial_count | int | YES | None | 最大搜索次数 | No | No |
| max_failed_trial_count | int | YES | None | 最大失败次数 | No | No |
| objective_type | enum('maximize','minimize') | NO | None | 搜索目标类型 | No | No |
| objective_goal | float | NO | None | 搜索目标值 | No | No |
| objective_metric_name | varchar(200) | NO | None | 目标度量名称 | No | No |
| objective_additional_metric_names | varchar(200) | YES | None | 附加目标度量名 | No | No |
| algorithm_name | varchar(200) | NO | None | 算法名 | No | No |
| algorithm_setting | text | YES | None | 算法配置 | No | No |
| parameters | text | YES | None | 搜索超参的配置 | No | No |
| job_json | text | YES | None | 根据不同算法和参数写入的task模板 | No | No |
| trial_spec | text | YES | None | 根据不同算法和参数写入的task模板 | No | No |
| job_worker_image | varchar(200) | YES | None | 执行镜像 | No | No |
| job_worker_command | varchar(200) | YES | None | 执行命令 | No | No |
| working_dir | varchar(200) | YES | None | 启动目录 | No | No |
| volume_mount | varchar(2000) | YES | None | 挂载 | No | No |
| node_selector | varchar(100) | YES | None | 机器选择器 | No | No |
| image_pull_policy | enum('Always','IfNotPresent') | NO | None | 镜像拉取策略 | No | No |
| resource_memory | varchar(100) | YES | None | 申请内存 | No | No |
| resource_cpu | varchar(100) | YES | None | 申请cpu | No | No |
| resource_gpu | varchar(100) | YES | None | 申请gpu | No | No |
| experiment | text | YES | None | 构建出来的实验体 | No | No |
| alert_status | varchar(100) | YES | None | 哪些状态会报警Pending,Running,Succeeded,Failed,Unknown,Waiting,Terminated | No | No |
| created_by_fk | int | YES | None | No | ab_user(id) | |
| changed_by_fk | int | YES | None | No | ab_user(id) | |
| parallel_trial_type | varchar(100) | YES | None | 并行方式 | No | No |
workflow表: workflow
argo workflow 在本地的快照记录(任务流运行实例)。
| 列名 | 类型 | 是否为空 | 默认值 | 描述 | 是否唯一 | 外键 |
|---|---|---|---|---|---|---|
| id | int | NO | None | id主键 | Yes | No |
| name | varchar(100) | YES | None | 英文名 | No | No |
| cluster | varchar(100) | YES | None | k8s集群 | No | No |
| namespace | varchar(100) | YES | None | 命名空间 | No | No |
| create_time | varchar(100) | YES | None | 创建时间 | No | No |
| change_time | varchar(100) | YES | None | 修改时间 | No | No |
| status | varchar(100) | YES | None | 状态 | No | No |
| annotations | text | YES | None | 注释 | No | No |
| labels | text | YES | None | 标签 | No | No |
| spec | mediumtext | YES | None | 配置详情 | No | No |
| status_more | text | YES | None | 状态 | No | No |
| username | varchar(100) | YES | None | 用户名 | No | No |
| info_json | text | YES | None | 通知记录 | No | No |
| add_row_time | datetime | YES | None | 记录时间 | No | No |
| foreign_key | varchar(100) | YES | None | 外键 | No | No |
tfjob表: tfjob
TensorFlow 分布式训练 CRD 的本地快照记录。字段与 workflow 表一致(id / name / cluster / namespace / create_time / change_time / status / annotations / labels / spec / status_more / username / info_json / add_row_time / foreign_key)。
pytorchjob表: pytorchjob
PyTorch 分布式训练 CRD 的本地快照记录。字段与 workflow 表一致。
xgbjob表: xgbjob
XGBoost 分布式训练 CRD 的本地快照记录。字段与 workflow 表一致。