2. 金融训练任务基础
在金融训练场景中,一个“任务”并不是简单的脚本调用,而是把数据、模型、算力、合规约束和业务目标封装成可调度、可观测、可重试的最小执行单元。理解任务的定义方式、类型划分、依赖关系与生命周期,是后续编排与失败重试设计的地基。本节从工程视角拆解这些基础概念,并给出金融场景中的典型任务示例。
一、任务定义:从脚本到可调度单元
金融训练任务的定义通常包含五个要素:输入数据源、计算逻辑、资源规格、输出产物、调度与重试策略。与普通脚本不同,任务定义必须显式声明这些要素,才能被编排系统识别、调度和恢复。
- 输入数据源:行情快照、财报、征信、交易流水、特征表等,需标注分区、时间窗口与版本。
- 计算逻辑:特征工程、模型训练、回测、评分卡拟合、风险指标计算等。
- 资源规格:CPU/GPU 数量、内存、显存、优先级、超时时间。
- 输出产物:模型文件、特征表、评估报告、指标快照,需带版本与校验值。
- 调度与重试策略:触发方式、依赖条件、最大重试次数、退避策略、失败告警。
一个典型的任务定义可以用如下配置片段表达:
task:
name: credit_score_train
type: model_training
inputs:
- dataset: feature_store/credit_v3
partition: "2024-06-01"
resources:
cpu: 8
memory: 32Gi
gpu: 1
outputs:
- path: models/credit_score/v3
retry:
max_attempts: 3
backoff: exponential
base_seconds: 30
timeout_seconds: 7200
二、任务类型:金融训练中的常见分类
金融训练任务可按计算性质与业务用途分类。不同类型对重试的敏感度差异很大:幂等任务可安全重跑,非幂等任务需要额外保护。
| 任务类型 | 典型用途 | 幂等性 | 重试敏感度 |
|---|---|---|---|
| 数据抽取任务 | 拉取行情、财报、征信数据 | 通常幂等 | 低,可重跑 |
| 特征工程任务 | 生成特征表、标签表 | 分区覆盖可幂等 | 中,需保证分区一致 |
| 模型训练任务 | 评分卡、风控模型、量化模型 | 依赖随机种子 | 高,需固定种子与版本 |
| 回测任务 | 策略历史表现验证 | 通常幂等 | 中,需锁定数据版本 |
| 评估与报告任务 | 指标计算、合规报告 | 幂等 | 低,可重跑 |
| 模型发布任务 | 上线、灰度、注册 | 非幂等 | 极高,需人工确认 |
从重试设计角度看,任务类型决定了重试边界:数据类任务可自动重试,训练类任务需固定随机种子,发布类任务必须引入审批与幂等令牌。
三、任务依赖:DAG 与数据版本约束
金融训练任务很少孤立存在。特征任务依赖数据抽取,训练任务依赖特征任务,评估任务依赖训练任务,发布任务依赖评估任务。这些依赖构成有向无环图(DAG)。
依赖关系分为两类:控制依赖(前序任务成功才触发后序)和数据依赖(后序任务读取前序产物的特定分区或版本)。在金融场景中,数据依赖往往比控制依赖更关键,因为同一任务可能读取多个数据版本。
依赖设计中的关键约束是:后序任务必须锁定前序产物的版本。如果特征表被覆盖而训练任务仍读取旧版本,重试时可能得到不一致结果。因此金融训练任务通常要求产物带版本号与校验值,并在依赖声明中显式引用。
四、任务生命周期:状态迁移与重试切入点
任务从创建到结束会经历多个状态。理解状态迁移,才能判断失败重试应该从哪个状态切入。
- PENDING:已创建,等待依赖满足。
- QUEUED:依赖满足,等待资源分配。
- RUNNING:正在执行,可能处于数据读取、训练、写回等阶段。
- SUCCEEDED:成功完成,产物已提交。
- FAILED:执行失败,可进入重试判断。
- RETRYING:满足重试条件,重新排队。
- CANCELLED:被人工或策略取消。
一个常见的失败日志片段如下,用于判断重试切入点:
[2024-06-01 03:12:44] task=credit_score_train state=RUNNING
[2024-06-01 03:45:10] ERROR: GPU OOM at epoch 12
[2024-06-01 03:45:11] task=credit_score_train state=FAILED
[2024-06-01 03:45:12] retry_policy: max_attempts=3, attempt=1
[2024-06-01 03:45:12] task=credit_score_train state=RETRYING
该日志表明失败原因是资源不足,属于可重试类型,但重试前应调整资源规格或降低 batch size,而不是原样重跑。
五、金融场景典型任务示例与复盘要点
以信贷评分卡训练为例,完整任务链包括:数据抽取 → 特征工程 → 标签构建 → 模型训练 → 评估报告 → 模型发布。每个环节都有典型失败模式:
- 数据抽取:上游接口超时,可自动重试,但需去重。
- 特征工程:分区缺失,需检查分区是否已生成,避免空跑。
- 模型训练:GPU OOM 或随机种子未固定,重试前需调整资源或固定种子。
- 评估报告:指标未达门禁,不应重试,而应触发人工复核。
- 模型发布:非幂等,重试必须使用幂等令牌并人工确认。
掌握任务定义、类型、依赖与生命周期后,后续的编排设计与失败重试策略才有明确的落点。金融训练任务的特殊性在于:数据有版本、模型有种子、发布有门禁,任何重试都必须尊重这些约束。