当前位置: 首页 > 科技观察

未来机器学习所需的工程量将大大减少

时间:2023-03-17 17:52:53 科技观察

未来构建ML产品会更有趣,这些系统也会更好地工作。随着ML自动化工具的不断改进,数据科学家和ML工程师将花费更多的时间来构建出色的模型,而将更少的时间花在与生产级ML系统相关的繁琐但必要的任务上。人工智能是一个系统工程问题。构建有用的机器学习产品需要创建大量工程组件,其中只有一小部分涉及ML代码。构建生产级ML系统涉及大量工作,例如构建数据管道、配置云资源和管理服务基础架构。传统上,机器学习研究的重点是创建更好的模型并推动语言建模和图像处理等领域的技术边界。很少有人关注在系统级设计和实施生产级ML应用程序的良好实践。尽管受到的关注较少,但ML系统级的设计和工程挑战仍然非常重要——创造有用的东西需要的不仅仅是构建好的模型,还需要构建好的系统。真实世界的机器学习在2015年,谷歌的一个团队制作了下图:它显示了在真实世界的机器学习系统(小黑盒)中专门用于建模的代码量与代码的比较。这个图表没有什么奇怪的。对于大多数项目,构建生产系统所涉及的大部分难题并非来自典型的ML问题,如过拟合或欠拟合,而是来自在系统中构建足够的结构以使模型按预期工作。生产级ML系统构建生产级ML系统归结为构建工作流——从数据摄取到模型服务的一系列步骤,其中每个步骤都是序列化的,并且足够健壮,可以在生产中运行。该工作流从一些数据源开始,包括创建模型端点所需的所有步骤——输入数据预处理、特征工程、训练和评估模型、将模型推送到服务环境,以及在生产中持续监控模型端点。此工作流程的特征工程>训练>调整部分通常被认为是机器学习的“艺术”。对于大多数问题,特征设计、模型架构构建和超参数调整的方法太多,以至于数据科学家/机器学习工程师只能依靠直觉和实验的结合。建模过程也是机器学习的一个有趣部分。建模与工程在不同的应用场景和问题域中,建模过程会有所不同。如果您正在训练一个模型来推荐Netflix上的内容,那么建模过程将与您构建用于客户服务的聊天机器人有很大不同。不仅底层数据的格式会不同(稀疏矩阵与文本),而且预处理、模型构建和调整步骤也会有很大不同。然而,虽然建模过程在不同的应用场景和问题领域中是独一无二的,但工程挑战在很大程度上是相同的。无论您将哪种类型的模型投入生产,围绕该模型构建生产工作流程的工程挑战在很大程度上是相同的。这些工程挑战在ML领域的同质性是一个巨大的机会。在未来(以及现在的大部分时间),这些工程挑战将在很大程度上实现自动化。将在JupyterNotebooks中创建的模型转变为生产级ML系统的过程变得更加容易。数据科学家/ML工程师已经使用的开源框架和云服务将自动在后台自动实施这些解决方案,而不是创建专门的基础设施来解决这些挑战。大规模数据摄取所有生产级ML工作流都从单一数据源开始。通常,与数据源相关的工程挑战围绕着大规模数据摄取——我们如何导入和预处理来自各种来源的数据集,这些数据集太大而无法放入内存。开源机器学习框架通过开发数据加载器在很大程度上解决了这个问题。这些工具,包括TensorFlow的tf.dataAPI和PyTorchDataLoader库,将数据分段加载到内存中,几乎可以用于任何大小的数据集。它们还提供动态特征工程,并且可扩展到生产环境。加速模型训练ML社区已经做了大量工作来减少训练大型模型所需的时间。对于大型训练作业,通常将训练作业分配给一组机器(训练集群)。使用专用硬件(GPU和现在的TPU)来进一步减少训练模型所需的时间也是常见的做法。传统上,跨多台机器和设??备分发训练操作需要修改模型代码,这并不简单。为了真正获得使用机器集群和专用硬件的效率增益,代码必须智能地拆分矩阵运算并结合每个训练步骤的参数更新。现代工具使这个过程变得更加容易。TensorFlowEstimatorAPI从根本上简化了配置模型代码以在分布式集群上进行训练的过程。使用EstimatorAPI,设置一个参数可以自动将训练图分布到多台机器/设备上。AIPlatformTraining等工具为分布式集群上的模型训练提供按需资源配置。可以使用bashshell命令为训练作业提供各种机器和设备类型(高性能CPU、GPU设备、TPU)。便携式、可扩展、可重复的ML实验创建一个既能实现快速原型设计又能使实验过程标准化的环境会带来一连串的工程挑战。如果没有明确的方法来复制过去的实验并将模型元数据(参数值)与观察到的评估指标相关联,则超参数调整(改变模型参数的值以减少验证错误)的过程是不可靠的。快速迭代和高效运行实验的能力需要硬件加速器支持的分布式和大规模训练。此外,如果ML代码不可移植,实验过程将变得难以管理——实验无法被其他团队成员/利益相关者复制,并且生产中的模型无法在新数据可用时重新训练。就个人而言,我在为AIHub构建容器的团队中,我们正在努力帮助解决这些挑战。我们将ML算法(XGBoost、ResNet等)的高性能实现构建为Docker容器。容器为AI平台提供原生支持,并默认保存模型元数据,为运行实验提供可重复的过程。这些容器支持分布式训练,可以在GPU或TPU设备上运行。它们也是可移植的——只要安装了Docker,任何人都可以在任何地方运行容器。服务基础设施生产级ML系统在两端进行扩展:大规模数据摄取和模型训练,以及大规模模型服务。模型经过训练后,必须将其导出到可用于生成推理的环境中。正如消费者网站需要处理网络流量的大幅波动一样,模型端点必须能够处理预测请求的波动。AIPlatformPrediction等云工具为模型服务提供了可扩展的解决方案。云服务的弹性特性允许服务基础设施根据预测的请求数量进行扩展。这些环境还允许对模型进行持续监控,并且可以编写测试程序来检查模型在生产中的行为。未来更好的ML系统未来,构建ML产品会更有趣,而且这些系统会工作得更好。随着ML自动化工具的不断改进,数据科学家和ML工程师将花费更多的时间来构建出色的模型,而将更少的时间花在与生产级ML系统相关的繁琐但必要的任务上。