机器学习项目通常都是从Python笔记本开始的,这是有充分理由的。笔记本能够让我们轻松地探索数据、测试各种想法,并以最少的准备工作快速进行迭代。在问题尚未明确、问题的具体形态还在逐渐清晰的过程中,笔记本为团队提供了一个熟悉的实验环境。

然而,随着项目的规模不断扩大,人们的期望也会发生变化。那些在探索阶段可以正常运行的模型,现在需要能够在不同的环境中稳定运行,而往往这些环境与最初开发它们的环境是不同的。此外,还需要其他人能够使用这些模型的分析结果,而且这些成果必须具备长期使用的稳定性。在这种情况下,仅仅输出笔记本的结果或保存序列化文件已经无法完全反映系统所承担的所有功能了。

现代的机器学习工作并不仅仅局限于交互式的开发环境。模型需要被封装成可被一致性地使用的形式,以便在不受特定用户限制的环境中执行,并且能够成为持续工作流程中的重要组成部分。

在本文中,我们将探讨当你的团队所需处理的工作内容超出了笔记本所能承载的范围时,可以使用哪些工具,重点介绍这些工具是如何帮助团队为实际的产品和系统开发机器学习模型的。

让我们开始吧!

1. Streamlit

Streamlit logo

当你的机器学习工作发展到需要与他人共享结果的时候,Streamlit往往会成为下一步该选择的工具。

例如,你可能正在开发一个预测或分类项目,目前已经编写了几份能够正常运行的笔记本。项目的运行效果符合预期,你也清楚各个部分是如何协同工作的。

但这时通常会遇到这样的需求:其他人想要查看分析结果,尝试不同的输入数据,或者在不深入了解笔记本内部代码的情况下审查分析结果。

Streamlit正好适用于这种场景,因为它可以直接与你已有的Python代码配合使用。你可以将模型或分析结果封装在一个小型应用程序中,只暴露出他人需要交互的部分。人们可以调整输入参数并实时查看结果的变化,而底层的代码却保持不变,仍然由团队掌控。尽管逻辑本身没有改变,但交互方式却变得更加简便了。

团队在以下情况下经常会选择使用Streamlit:

  • 在内部讨论中展示模型的运行机制

  • 将预测结果或各项指标分享给不在机器学习工作流程中的团队成员

  • 在演示文稿和内部工具中重复使用相同的逻辑

  • 在审查过程中了解不同输入参数对分析结果的影响

借助Streamlit,机器学习工作就可以摆脱最初的开发环境限制,变得更加易于被他人使用。人们可以直接与分析结果进行交互,而无需依赖笔记本或具体的开发者。这样,你的团队就能将机器学习应用从个人的工作空间中解放出来,纳入到共享的工作流程中,从而让结果真正为决策过程提供支持。

定价与可用性:
Streamlit的核心框架是开源的,用户可以自行托管。Streamlit Community Cloud为公共应用提供了免费版本,而对于私有部署和团队协作功能,则需要购买付费套餐。

2. Prefect

Prefect标志

一旦你的机器学习项目开始被他人共享和使用,另一个重要的需求就会浮现:必须确保实验结果能够被他人重复生成,而无需任何人手动打开笔记本来运行相关代码。最初只是个成功的实验,现在却需要成为持续运行的流程的一部分。

Prefect正好适合这一阶段的需求,因为它能将现有的Python代码集成到受管理的 workflows中。训练步骤、数据准备或评估逻辑都可以被定义为系统能够自动执行的部分。每次运行后都会生成清晰的记录,这样团队就能更容易地了解进展,并在问题出现时及时作出反应。

当人们期望机器学习流程能够自动运行时,团队就会开始思考一些实际的问题:比如这个流程在日常工作中该如何运作?

  • 这个任务应该多久自动运行一次,而无需人工干预?

  • 如果在执行过程中某个步骤出现了故障,应该怎么办?

  • 其他人是否容易理解或接手这个工作流程?

  • 在对代码进行修改后,能否放心地重新运行同样的流程?

Prefect通过确保流程的可靠性和可追溯性,帮助团队顺利度过这一发展阶段。即使代码和团队规模都在不断扩大,这些 workflows依然能够作为日常运营的一部分持续运行。它使团队能够将机器学习技术从交互式应用转变为支持定期更新和长期使用的自动化流程。

定价与可用性:
Prefect提供了开源的核心组件,团队可以自行托管。Prefect Cloud则提供了托管服务,小型项目可以使用免费版本,而付费套餐则包含更高级的编排、协作和管理功能。

3. Dagster

Dagster标志

假设你有一个机器学习项目,它每天早上8点会自动运行。这个流程会在团队开始工作之前完成,结果也会在人们登录系统时立即被使用。

但是有一天早上,在你还在睡觉的时候,系统出了问题,预期的输出结果没有出现。当你开始调查这个问题时,最困难的部分并不是修复故障本身,而是确定问题的根源以及还有哪些其他环节可能会受到影响。

Dagster在此处显得十分合适,因为它能够清晰地展现工作流程的结构。工作流程被定义为一组具有明确关联关系的步骤,因此系统能够真实反映工作的组织方式。每个部分都有明确的职责,这些职责可以被审查和讨论,从而帮助团队在需求增加或流水线规模扩大时合理地应对各种变更。

当这些工作流程成为日常运营的一部分时,团队通常会需要针对一些实际问题得到更清晰的答案,例如:

  • 工作流程的哪些部分依赖于特定的输入数据

  • 当逻辑或数据发生变化时,哪些环节需要重新运行

  • 某个步骤中的问题会如何影响后续的工作流程

  • 谁负责维护工作的各个部分

Dagster使机器学习流水线的结构变得透明化。团队可以清楚地了解工作是如何组织的,理解变更所带来的影响,并且能够随着需求的变化持续维护这些流水线。当工作流程的结构清晰明了时,机器学习系统就会更容易被理解和操作。

定价与可用性:
Dagster提供了开源版本,团队可以自行托管它。而Dagster Cloud则提供托管服务,其中小型项目可以使用免费套餐,而付费套餐则包含更强大的可观测性功能、协作工具以及企业级支持。

4. BentoML

BentoML logo

在某个阶段,训练好的模型必须脱离它最初被训练的环境进行使用。此时,工作不再局限于本地测试环境,模型需要能够在原始设置之外的环境中运行。一旦模型开始被实际应用,那些在开发过程中看似隐含的细节就变得尤为重要了。

BentoML通过改变模型的打包方式来解决这一问题。它不是将模型与单独的配置说明一起作为序列化文件进行共享,而是将模型封装在一个称为“Bento”的标准化发行包中。一个Bento包含了模型本身、其依赖项以及运行该模型所需的全部逻辑代码,模型被打包成了一个能够确保其稳定运行的完整单元。

在模型移交使用的过程中,团队通常需要明确以下几方面的内容:

  • 模型在原始环境之外应该如何运行

  • 为了使模型正常工作,需要哪些条件满足

  • 提供模型服务的逻辑代码应该放在哪里

  • 如何引入新版本而无需重复进行配置工作

借助BentoML,模型的打包过程成为了开发流程中不可或缺的一部分。模型被作为完整的单元进行准备和共享,而不是以零散的文件形式存在。这样一来,不同团队之间进行测试、部署和复用就变得更加方便了,因此当机器学习工作从简单的笔记本输出方式发展到需要使用专门设计的系统来进行持续运行时,BentoML自然而然地成为了理想的选择。

定价与可用性:
BentoML是开源项目,用户可以自行托管它。对于那些希望获得托管式部署服务的团队来说,BentoCloud提供了专为生产环境设计的付费托管服务。

5. Modal

Modal logo

一旦模型和工作流程被打包完毕并准备好运行,接下来就需要考虑在何处执行它们。许多团队会先在本地或长期运行的笔记本环境中运行这些任务。这种做法适合开发阶段,但当工作负载需要更多的计算资源(尤其是GPU),或者当某些任务只需要在需要时才运行、而不需要一直保持活跃状态时,这种方式就会变得不够灵活。

Modal通常被那些希望在不直接管理基础设施的情况下,对机器学习工作负载的执行过程拥有更多控制权的团队所采用。代码是用Python编写的,但执行是按需进行的——任务会在被触发时开始运行,使用所需的资源,完成后就会关闭。这种机制使得在不需要持续维持运行环境的情况下,也能顺利运行那些计算量较大的任务。

在日常工作中,当团队遇到以下情况时,Modal的作用就显得尤为明显:

  • 只需要在特定时间运行需要GPU的训练或推理任务

  • 让工作负载的规模超出本地机器或笔记本的限制

  • 执行批处理任务,而无需维持始终处于活跃状态的环境

  • 将执行逻辑紧密地与代码结合在一起,同时将计算管理的负担卸下来

使用Modal改变了团队对机器学习执行方式的理解——计算资源是按需申请的,而不是默认处于激活状态。任务在干净、隔离的环境中运行,其所需资源也会根据工作负载的规模进行动态调整。

随着机器学习系统的发展,当它们从交互式开发模式转向那些需要灵活性、可扩展性和可预测行为执行模式的阶段时,这种做法显得尤为合适。

定价与可用性:
Modal是一个托管型云平台,而非开源工具。它提供免费 tier,但使用量有限;其定价依据的是计算时间、存储空间以及GPU的使用情况。

6. 权重与偏差

Weights & Biases logo

当团队决定采用迭代的方式来进行机器学习开发时,实验的管理方式就需要更加有条理。迭代意味着要多次运行相同的训练流程,调整参数,改变数据输入,然后分析这些变化对结果产生的影响。要想取得进展,就必须能够对比不同的运行结果,并弄清楚为什么某个版本的模型会表现出不同的性能。

Weights & Biases 通过为每个实验提供清晰的记录来支持这一阶段。每次实验的配置、评估指标及输出结果都会被保存在同一个地方,因此人们可以轻松地回顾之前尝试过的方法。这些信息会在团队内部共享,这样讨论就能基于实际数据而非记忆或截图来进行。

当团队开始进行以下操作时,通常会使用这个工具:

  • 测试参数变化对模型性能的影响

  • 比较不同数据集或训练方法得到的结果

  • 在选择模型时回顾实验历史

  • 在团队讨论中分享进展和发现成果

使用 Weights & Biases 能够改变项目中的学习过程。实验为各项决策的制定过程以及哪些改动带来了改进提供了清晰的记录。这样的记录方式有助于提升协作效率,也让团队能够更加自信地解释自己的决定。Weights & Biases 提供了一个共享的实验记录系统,从而支持有条理且可重复的迭代开发流程。

定价与可用性:
Weights & Biases 是一个商业平台,个人用户和学术研究可以使用免费版本。针对团队和企业,还提供了付费计划;对于那些对基础设施有特殊要求的组织,也提供了自托管部署选项。

7. Pinecone

Pinecone logo

假设你正在开发一个能够根据信息含义而非精确匹配来检索数据的功能。在开发阶段,会创建嵌入向量并将它们保存在代码附近,以便快速进行实验测试。在受控环境中进行的初步测试通常都能得到预期的结果。

但一旦这个功能开始被实际使用,需求就会发生变化。随着数据集规模的扩大,查询请求的频率也会增加,因此检索系统必须在不同的会话和部署环境下保持一致的性能。

Pinecone 就在这种时候派上了用场。它提供了一个专门用于存储嵌入向量并高效执行相似性搜索的数据库。嵌入向量只需被创建一次,之后就可以被反复使用而无需在每次运行时都重新生成,也不必与特定的处理流程绑定在一起。即使数据量不断增加,检索性能也能保持稳定,从而确保应用程序的行为一致性。

当团队需要实现以下功能时,通常会选择使用 Pinecone:

  • 在文档或记录中进行语义搜索

  • 为问答工作流程提供检索支持

  • 为语言模型生成提示语时挑选相关的内容

  • 在应用程序内部实现基于相似性的信息发现功能

嵌入式数据结构会成为系统数据层的一部分,每当应用程序需要使用时,这些数据就能被立即使用。随着数据量的增加,信息检索功能依然能够可靠地运行,从而满足各种实际应用需求以及基于语义访问机制构建的生产环境中的工作负载要求。当机器学习技术所支持的功能依赖于稳定、可扩展的信息检索能力而非短暂性的实验结果时,Pinecone这种工具就能发挥其天然的优势。

定价与可用性:
Pinecone是一种托管式的向量数据库服务,并非开源工具。它提供免费的入门级版本,但会限制使用量;而付费套餐则会根据存储需求、性能要求以及查询量来进行定制。

将各项要素整合起来

Python笔记本仍然是进行机器学习工作的理想起点。它们使得探索过程既快速又灵活。然而,当这些工作需要被共享、重新执行或部署给其他人使用时,团队们就会面临一些新的挑战。

本文介绍的各种工具正是为应对这些新挑战而设计的。每一种工具都针对机器学习在应用于实际场景时所遇到的具体问题进行了优化,涉及界面设计、执行流程、数据打包、进度跟踪以及信息检索等多个方面。事实上,超越Python笔记本这一工具框架,更重要的是将机器学习视为一个需要团队长期持续开发与完善的系统。

Comments are closed.