火箭金钱 x Hugging Face:扩展生产中的波动机器学习模型
火箭金钱 x Hugging Face:波动机器学习模型扩展生产
“我们发现他们不仅仅是服务提供商,而是我们的合作伙伴,他们致力于我们的目标和成果” – Nicolas Kuzak,Rocket Money的高级机器学习工程师。
在没有MLOps团队的情况下扩展和维护ML模型
我们创建了Rocket Money(一款个人财务应用,前身为Truebill),以帮助用户改善他们的财务状况。用户将他们的银行账户连接到该应用程序,然后该应用程序对其交易进行分类和归类,识别重复模式,以提供其个人财务生活的综合全面视图。交易处理的关键阶段是检测已知商家和服务,其中一些可以由Rocket Money取消并为成员谈判费用。此检测从将短、经常截断和加密格式的交易字符串转换为我们可以用来丰富产品体验的类别开始。
走向新系统的旅程
我们首先使用基于正则表达式的规范化器从交易中提取品牌和产品。这些与一个越来越复杂的决策表一起使用,将字符串映射到相应的品牌上。当公司的用户基数增长、订阅经济繁荣并且我们的产品范围扩大时,这个系统在前四年中证明是有效的,当时类别仅与我们支持的取消和谈判产品相关联。然而,随着新类别的速度不断增长,同时调整正则表达式、防止冲突和重叠,我们需要跟上。为了解决这个问题,我们探索了各种传统的机器学习(ML)解决方案,包括基于词袋模型的模型-每类架构。这个系统在维护和性能方面遇到了困难,因此被搁置。
我们决定从零开始,组建一个新团队和新任务。我们的第一个任务是积累训练数据并从头构建一套内部系统。我们使用Retool构建标记队列、黄金标准验证数据集和漂移检测监控工具。我们探索了许多不同的模型拓扑,但最终选择了BERT模型系列来解决我们的文本分类问题。最初的模型测试和评估工作主要在我们的GCP仓库中进行。在这里,我们设计和构建了用于测量拥有4000多个类别的模型性能的遥测和系统。
通过与Hugging Face合作解决领域挑战和限制
我们在领域内面临许多独特的挑战,包括商家注入的熵、处理/支付公司、制度差异和用户行为变化。设计和构建高效的模型性能警报以及现实基准数据集已经成为一个持续的挑战。另一个重要的障碍是确定我们系统中的最佳类别数量-每个类别代表着大量的创建和维护工作。因此,我们必须考虑它为用户和我们的业务提供的价值。
在离线测试中模型表现良好,拥有一小队ML工程师后,我们面临一个新的挑战:将该模型无缝集成到我们的生产流程中。现有的正则表达式系统每月处理超过1亿笔交易,负载突发,因此至关重要的是具备高可用性的系统,能够动态扩展以在流程中维持低总延迟,并且针对我们正在提供的模型进行计算优化。当时的我们是一家小型创业公司,选择购买而不是构建模型服务解决方案。当时,我们没有内部的模型操作专业知识,我们需要将ML工程师的精力集中在提升产品中的模型性能上。考虑到这一点,我们开始寻找解决方案。
起初,我们试用了一种自家设计的、用于原型设计的内部模型托管解决方案,将其与AWS Sagemaker和Hugging Face的新模型托管推断API进行比较。考虑到我们使用GCP进行数据存储和Google Vertex Pipelines进行模型训练,将模型导出到AWS Sagemaker非常繁琐且容易出错。幸运的是,使用Hugging Face的设置快速且简单,并且它能够在一周内处理小部分流量。Hugging Face简单易用,这降低了我们的阻力,使我们决定继续沿着这条路线前进。
经过为期三个月的详尽评估,我们选择了Hugging Face来托管我们的模型。在此期间,我们逐渐增加了流量,并根据最坏情况下的交易量进行了众多模拟负载测试。这个过程使我们能够微调我们的系统并监控性能,最终使我们对推断API处理我们的交易增值负载的能力充满信心。
除了技术能力之外,我们还与Hugging Face团队建立了良好的合作关系。我们发现他们不仅是服务提供商,更是投身于我们的目标和结果的合作伙伴。在合作初期,我们建立了一个共享的Slack频道,这对我们非常宝贵。他们对问题的及时响应和积极解决问题的态度给我们留下了深刻印象。他们的工程师和客户成功经理在我们的成功和正确执行事务方面始终表现出承诺和奉献精神。当我们做最终选择时,这为我们增加了额外的信心。
集成、评估和最终选择
“总体而言,与Hugging Face密切合作进行模型部署的经验对我们的团队来说是丰富的,它给我们灌输了推动更大规模的信心”- Nicolas Kuzak,Rocket Money的高级机器学习工程师。
合同签订后,我们开始将基于正则表达式的系统迁移到直接将越来越多的关键路径流量引导到转换器模型上。在内部,我们不得不为模型和生产数据监控构建一些新的遥测。鉴于这个系统在产品体验中的位置非常早期,模型结果的任何不准确都可能对业务指标产生重大影响。我们进行了一项广泛的实验,将新用户均等地分为旧系统和新模型。我们评估了模型的性能,同时也考虑到了更广泛的业务指标,如付费用户保留和参与度。从保留方面来看,机器学习模型明显优于其他模型,这使我们有信心决定扩大系统的规模-首先面向新用户,然后面向现有用户,并在两个月的时间内逐步提高到100%。
随着模型完全定位在交易处理管道中,系统的正常运行时间和延迟成为了主要关注点。我们的许多下游流程都依赖于分类结果,任何复杂情况都可能导致延迟数据或不完整的数据处理,从而导致用户体验下降。
Rocket Money与Hugging Face之间的首年合作并非没有挑战。然而,两个团队都展现出了非凡的韧性和共同解决问题的承诺。其中一个例子是当我们扩展第二个生产模型的类别数量时,不幸地导致了系统故障。尽管面临这个挫折,团队们仍然坚持不懈,我们成功地避免了同样问题的再次发生。另一个问题是当我们转换到新模型时,由于Hugging Face的缓存问题,我们仍然收到了来自先前模型的结果。这个问题被迅速解决,并且没有再次发生。总的来说,与Hugging Face密切合作进行模型部署的经验对我们的团队来说是丰富的,并且给了我们推动更大规模的信心。
说到规模,随着我们开始见证对模型的流量显著增加,很明显推理的成本将超过我们预期的预算。我们在推理调用之前使用了一个缓存层,它可以显著减少交易的基数,并尝试从之前的推理中获益。从技术上讲,我们的问题可以实现93%的缓存命中率,但在实际生产环境中,我们只能达到85%。随着模型提供100%的预测,Rocket Money方面取得了一些重要的里程碑-我们的模型已经能够每月处理超过十亿笔交易,并在我们攀升至应用商店金融类应用的第一名和总体排名第七名的同时,保持低延迟。
合作与未来计划
“我们对HuggingFace推理API的正常运行时间和信心使我们能够将精力集中在模型产生的价值上,而不是管道和日常运营上”- Nicolas Kuzak,Rocket Money的高级机器学习工程师。
在发布后,Rocket Money内部团队现在正在专注于模型的分类和性能调优,此外还有更多自动化监控和训练标签系统。我们每天都会添加新的标签,并面临着模型生命周期管理的有趣挑战,包括公司改名、以及Rocket Companies在2021年底收购Truebill后出现的新公司和产品等独特事物。
我们不断检查是否针对我们的问题选择了正确的模型拓扑结构。虽然最近LLMs在新闻中频频出现,但我们仍然很难找到一个能够在速度和成本上超越我们专门的Transformer分类器的实现。我们看到在服务的长尾(即小本经营的商店)中使用它们的初步结果很有希望 – 请在未来版本的Rocket Money中留意这一点!HuggingFace推理API的可用性和可信度使我们能够将精力集中在模型产生的价值上,而不是管道和日常运营方面。在Hugging Face的帮助下,我们已经在模型的规模和复杂性以及所产生的价值类型方面取得了更大的进展。他们的客户服务和支持超出了我们的期望,他们真正是我们旅程中一个伟大的合作伙伴。
如果您想了解Hugging Face如何管理您的机器学习推理工作负载,请联系Hugging Face团队。