Ramp 的第一个信用风险模型花了近四个月、超过 3,000 行代码才投入生产。作为一家金融服务公司,Ramp 还需要每个模型的输出都能按需精确复现,而定制的、一次性的部署代码很难保证这一点。机器学习的讨论往往聚焦于模型本身,但工程时间实际上主要花在“特征流水线”上——即清洗、转换原始数据并将其转化为可用输入的代码——团队估计这部分占实际工作的 99%。

Ramp 的工程团队构建了 Turbo,一个基于 YAML 的配置系统,来对此进行标准化。他们识别出了每个机器学习工作流共享的实体:特征流水线(原始数据到特征)和模型流水线(特征到预测)。一个“JobSpec”类读取 YAML 文件,将这些实体物化为 Pydantic 对象,并提交到计算环境——训练作业(拟合新模型)或预测作业(从模型存储中加载模型)。由于两种作业共享同一 schema,部署模型几乎等同于复制一个配置文件并修改几行。

回报立竿见影:今天在配置文件中描述的流水线,只要底层数据未变,一两年后再次运行也会产生相同的结果,直接满足了可复现性要求。一个迁移过来的时间序列预测模型还免费获得了全局一致的节假日处理,因为用该抽象构建的每个模型都继承相同的特征工程逻辑,而不是各自独立重新实现。

将每个机器学习流水线转化为两个可复用部分(特征、模型),描述在一个 YAML 文件中

将特征流水线与模型流水线分离为可复用实体,意味着机器学习工作中非建模的那 99% 只需解决一次。

采用声明式 YAML schema 而非代码库,意味着没有机器学习背景的工程师也能部署和维护模型,无需自己编写流水线代码。

训练和预测共享同一 schema,意味着开发者只需学习一套概念即可完成两者,而不必为每个阶段使用单独的工具。

标准化特征工程(例如时间序列模型中的节假日处理)一次性修复了一整类不一致性缺陷,而不是逐个模型打补丁。

当同样的两阶段流水线形态在多个系统中反复出现时,将其一次性编码为声明式 schema——这能把一项只有专家才能完成、耗时数月的任务,变成任何工程师都能填写的任务。

到 Ramp 撰写关于 Turbo 的文章时,一个新模型可以在不到 5 分钟内完成部署,平均只需约 40 行 YAML,相比之前的 4 个月和 3,000 多行代码大幅减少。当时已有近 20 个模型投入生产,由 9 位不同的开发者构建,其中许多人在 Turbo 出现之前从未训练或部署过机器学习模型。

从这里,追溯依据

参考来源

  1. Turbo-Charging ML Development Ramp Engineering (Builders Blog) · builders.ramp.com ·