现实世界中的 ML 系统只有一小部分是由 ML 代码组成的,如中间的小黑盒所示。所需的周边基础设施庞大而复杂。
随着机器学习(ML)社区不断积累多年使用实时系统的经验,出现了一个普遍而令人不安的趋势:开发和部署 ML 系统相对较快且成本较低,但长期维护却困难重重、费用高昂。
技术债务是Ward Cunningham于 1992 年提出的一个比喻,用来解释软件工程快速发展所带来的长期成本。与财政债务一样,承担技术债务通常也有合理的战略原因。并非所有债务都是坏账,但所有债务都需要偿还。技术债务可以通过重构代码、改进单元测试、删除无效代码、减少依赖性、收紧应用程序接口和改进文档来偿还。这样做的目的不是为了增加新功能,而是为了实现未来的改进、减少错误和提高可维护性。推迟支付这些费用会导致成本增加。隐性债务是危险的,因为它会无声无息地增加。
ML 系统具有产生技术债务的特殊能力,因为它们具有传统代码的所有维护问题,外加一系列额外的 ML 特有问题。这种债务可能难以察觉,因为它存在于系统层面而非代码层面。由于数据会影响 ML 系统的行为,传统的抽象和边界可能会被微妙地破坏或失效。偿还代码级技术债务的典型方法不足以解决系统级的 ML 特定技术债务。
ML 的技术债务的重点放在系统级交互和接口上,而且可能会迅速积累。在系统级,ML 模型可能会悄无声息地侵蚀抽象边界。诱人的重复使用或输入信号链可能会无意中将原本互不关联的系统连接起来。ML