2. 金融模型推理基础

在进入性能优化之前,必须先回答一个更基础的问题:我们到底在优化什么?金融模型推理并不是单一负载,它横跨毫秒级撮合风控、分钟级批量评分、小时级组合优化与隔夜风险模拟。不同模型类型、不同推理任务对计算资源的需求差异极大,选错硬件或优化方向,往往比不优化更糟。本节从模型类型、任务特点、CPU/GPU角色和选型依据四个层面建立推理性能优化的认知基线。

一、常见金融模型类型及其计算特征

金融业务中的模型大致可分为五类,每类的计算模式截然不同:

  • 统计与计量模型:如ARIMA、GARCH、VAR、逻辑回归、线性回归。以矩阵运算和递推为主,单次计算量小,但常需高频调用或滚动窗口重估。
  • 树模型与集成模型:如XGBoost、LightGBM、随机森林。推理以特征分裂判断为主,分支多、访存密集,对缓存和内存带宽敏感,GPU加速收益取决于树深度与批量大小。
  • 深度学习模型:如LSTM、Transformer、TCN,用于时序预测、舆情分析、反欺诈。以张量运算为核心,GPU并行优势明显,但小批量低延迟场景可能受限于内核启动开销。
  • 图模型与关系网络:如GNN用于关联交易、团伙欺诈识别。计算不规则,邻居采样和稀疏矩阵操作多,CPU与GPU混合调度常见。
  • 优化与仿真模型:如蒙特卡洛模拟、组合优化、VaR/CVA计算。计算量大、可并行度高,是GPU加速的经典场景,但路径依赖和随机数生成会带来额外开销。

二、金融推理任务的四类特点

同样是推理,金融场景对延迟、吞吐、精度和稳定性的要求并不一致。可归纳为四个维度:

任务类型 典型场景 延迟要求 批量特征 资源倾向
在线实时推理 支付风控、交易反欺诈 毫秒级 单条或极小批量 CPU低延迟优先
近线批量推理 信贷评分、客户分层 秒级到分钟级 中大批量 GPU吞吐优先
离线批量推理 隔夜风险、组合回测 小时级 超大批量 GPU并行优先
交互式分析推理 投研问答、报表生成 百毫秒到秒级 变长批量 CPU/GPU混合
延迟与吞吐往往互相制约。在线风控追求P99延迟,离线风险追求单位时间吞吐,两者的优化目标函数不同,不能套用同一套调参策略。

三、CPU与GPU在金融场景中的角色分工

CPU和GPU不是替代关系,而是分工关系。CPU擅长复杂控制流、低延迟单线程、分支密集和内存随机访问;GPU擅长规则的大规模并行、高吞吐张量计算和批处理。金融推理中常见的分工模式是:CPU负责请求接入、特征拼装、规则过滤、结果后处理与调度;GPU负责模型主体计算,尤其是矩阵乘、卷积、注意力和大规模模拟。

金融推理中CPU与GPU的角色分工 CPU侧职责 请求接入与协议解析 特征拼装与规则过滤 小批量低延迟推理 结果后处理与调度 分支密集与随机访存 GPU侧职责 大批量张量计算 矩阵乘与注意力 蒙特卡洛路径模拟 深度模型主体推理 高吞吐批处理 协同调度层 批大小自适应 CPU预处理 → GPU计算 → CPU后处理 延迟与吞吐权衡

四、选型依据:从任务画像到硬件决策

硬件选型不应从“GPU更快”出发,而应从任务画像出发。建议按以下顺序判断:

  1. 看延迟预算:P99延迟低于10ms的在线风控,优先CPU或CPU+小GPU;延迟预算在50ms以上再考虑GPU批处理。
  2. 看批量规模:批量小于8时GPU利用率低,内核启动和传输开销占比高;批量大于64时GPU吞吐优势开始显现。
  3. 看模型结构:树模型和稀疏模型优先CPU;Transformer、CNN、大规模蒙特卡洛优先GPU。
  4. 看数据搬运成本:若特征在CPU内存中生成,GPU推理需额外H2D传输,需评估PCIe带宽与传输延迟是否可被计算掩盖。
  5. 看成本与弹性:GPU实例成本高,离线任务可用Spot实例或分时调度;在线任务需考虑GPU共享与MIG隔离。
常见误区:把离线回测的GPU吞吐结论直接搬到在线推理。离线批量大、延迟不敏感,GPU利用率高;在线单条请求下,GPU可能因内核启动和传输开销反而慢于CPU。选型必须区分在线与离线两条路径。

五、一个典型选型复盘案例

某支付风控团队最初将XGBoost模型整体迁移到GPU,期望降低延迟。实测发现:单条请求P99延迟从8ms上升到15ms,吞吐反而下降。复盘原因有三:一是批量太小,GPU并行度不足;二是特征在CPU侧生成,每次推理都要做H2D传输;三是树模型的分裂判断在GPU上分支发散严重。最终方案改为CPU推理+GPU离线批量评分,在线延迟回到6ms,离线评分吞吐提升4倍。

# 选型判断伪代码
if latency_budget < 10ms and batch_size < 8:
    prefer = "CPU"
elif model_type in ["tree", "sparse"] and batch_size < 64:
    prefer = "CPU"
elif model_type in ["transformer", "cnn", "monte_carlo"] and batch_size >= 64:
    prefer = "GPU"
else:
    prefer = "CPU+GPU hybrid"

本节的核心结论是:金融模型推理优化不是单纯追求GPU利用率,而是在延迟、吞吐、成本和模型结构之间找到匹配点。理解模型类型与任务特点是选型的前提,也是后续CPU指令级优化、GPU内核调优和混合调度策略的基础。