机器学习技术正在以前所未有的速度改变我们的生活。然而,学术界的研究人员往往在原型算法的研发阶段就止步不前,而在实际工业应用场景中,将这些算法转化为应用则面临着诸多挑战。
对于希望借助人工智能创造价值的企业来说,大规模部署机器学习模型是其中的一大难点。随着模型变得越来越复杂,这一挑战变得更为严峻。在担任顾问的过程中,我发现只有少数机器学习项目能够顺利进入生产阶段。人工智能项目的失败原因众多,其中“难以部署”便是其中一个主要因素。对于每一个决策者来说,充分了解项目部署的内部机制,并采取措施降低失败风险至关重要。
模型部署定义
我们可以将部署的模型定义为能够无缝融入生产环境的代码单元,它能够接收输入并返回相应的输出结果。
挑战
机器学习技术的特殊性质使得其大规模部署变得更加困难。以下是一些当前面临的主要问题:
1. 数据科学语言管理
机器学习应用程序通常由多种编程语言编写,这些语言之间常常存在兼容性问题。例如,一个机器学习应用可能最初使用R语言,然后转向Python,最后又使用其他语言。尽管Python和R是最流行的两种语言,但出于各种原因(包括运行速度),它们在生产环境中较少被使用。将用Python或R编写的模型迁移到C++或Java等常用语言中非常复杂,而且往往会降低模型的性能(如运行速度和准确性)。R是一种优秀的原型开发语言,因为它便于交互和解决问题,但在生产环境中则需要转换为Python、C++或Java。
容器化技术(如Docker)可以帮助解决由于工具类型繁多而引起的不兼容性和可移植性问题。然而,自动依赖检查、错误检查、测试和不同的构建工具等问题仍然难以跨越语言障碍。复现性也是个巨大挑战。理论上,数据科学家可以用不同的编程语言、库或同一库的不同版本来构建模型的各个版本。手动跟踪这些依赖关系非常困难。为了应对这些挑战,我们需要一个机器学习生命周期工具,它可以在训练阶段自动跟踪并记录这些依赖关系,然后将它们与训练好的模型一起打包成待部署的组件。建议使用可以即时将一种语言的代码转换为另一种语言的工具,或者让数据科学团队能够通过API部署模型,以便这些模型能够在任何地方集成。
2. 计算能力和GPU
现代神经网络通常非常复杂,这意味着训练和推理过程需要大量的计算资源。我们希望算法能够快速运行,这对很多用户来说是一个重要障碍。此外,许多生产环境中的机器学习系统依赖于GPU。然而,GPU既稀缺又昂贵,这使得大规模部署机器学习变得更加复杂。
3. 可移植性
模型部署的另一个问题是缺乏可移植性。许多历史遗留的分析系统造成的这个问题。由于缺乏将软件组件轻松移植到不同主机环境并在那里运行的能力,这种软件组合可能会被限制在一个特定的平台上。这给数据科学家在创建和部署模型时带来了障碍。
4. 可扩展性
在许多人工智能项目中,可扩展性是一个重要问题。实际上,你需要确保你的模型能够适应不断增长的数据量和数据传输模式。在项目初期,我们通常依赖于较小规模的相对静态数据。随着模型向生产环境迁移,它通常需要处理更大数量的数据和更复杂的数据传输模式。你的团队需要多种工具来管理和解决功能和可扩展性方面的问题。我相信,采用基于微服务的方法可以解决可扩展性问题。团队应该能够通过简单的配置更改,迅速将模型从批处理模式迁移到流处理模式。同样,团队应该有扩展计算和内存使用的选项,以支持更复杂的工作负载。
5. 在极限状态下运行机器学习计算
当你的算法训练完成后,它们并不总是立即投入使用。用户只会在需要的时候调用这些算法。这意味着,上午8点你可能只需要支持100次API调用,但到8点半这个数字可能激增至10,000次。根据我的经验,要在不为不需要的服务付费的情况下扩展和缩小部署规模是一项巨大的挑战。
由于上述原因,只有少数数据科学项目最终成功落地到生产系统中。
提升鲁棒性以使模型能够运行
我们通常需要花费大量时间使模型准备好投入使用。提升模型的鲁棒性意味着获取原型并使其准备就绪,从而能够为实际用户服务,这通常需要大量的工作。很多时候,我们需要使用适合现有架构的语言重新编码整个模型。这本身就是一个艰巨的任务,可能导致部署工作推迟数月。一旦完成,它必须集成到公司的IT架构中,包括之前提到的所有库的问题。此外,在生产环境中访问数据往往是一项困难的任务,这些数据通常受到数据仓库的技术和组织负担。
其他挑战
在我的项目经历中,我还注意到以下问题:
测试和验证挑战
正如你可能已经了解到的,由于数据变化、采用新方法等原因,模型会不断演变。因此,每次发生这种情况时,我们都必须重新验证模型的功能。这些验证步骤带来了以下挑战:
除了离线测试外,在生产环境中评估模型性能也非常重要。通常我们会在部署策略和监管部分对此进行规划。
自动化机器学习平台
你可能听说过自动化机器学习平台,这是一种加快模型创建的好方法。此外,这样的平台还可以支持多个模型的开发和比较。因此,企业可以选择最适合其预测精度、计算延迟和计算资源需求的模型。据估计,高达90%的企业级机器学习模型可以通过自动化方式开发。数据科学家可以与业务人员合作,开发那些目前自动化方法无法实现的少数模型。许多模型会遭遇“模型漂移”的问题(随着时间推移功能下降)。因此,我们需要对部署后的模型进行监控。每个部署后的模型应该记录所有的输入、输出和异常情况。模型部署平台需要提供日志存储和模型性能可视化功能。密切关注模型性能是有效管理机器学习模型生命周期的关键。
发布策略
探索各种不同的方法来部署软件(这是一个值得长期学习的课题,可参考材料:https://medium.com/@copyconstruct/monitoring-in-the-time-of-cloud-native-c87c7a5bfa3e),采用“影子模式”和“金丝雀模式”部署机器学习应用程序是非常有效的。
在“影子模式”中,你可以获取生产环境中新模型的输入和预测结果,但实际上并不会基于这些预测展开服务。相反,你可以自由地分析结果,即使检测到一个bug也不会造成严重后果。
随着架构的逐渐成熟,你可以逐步启用这种渐进或“金丝雀模式”的发布策略。在这种模式下,你可以向一小部分客户发布应用,而不是一次性全部发布或完全不发布。这需要更成熟的工具,但当错误发生时,可以将损失降至最低。
结语
机器学习技术正蓬勃发展。事实上,软件和硬件组件都在不断发展以满足当前机器学习的需求。我们可以使用“Docker/Kubernetes”和微服务架构来应对异构性和基础环境的挑战。现有的工具可以在很大程度上单独解决一些问题。我相信,将所有这些工具结合起来应用于生产环境中的机器学习是目前最大的挑战。部署机器学习是一项艰巨的任务,并且未来仍将如此。值得庆幸的是,一些新的架构和产品正在成为数据科学家的有力助手。随着越来越多的公司扩展数据科学业务,它们也在努力开发使模型部署更加便捷的工具。