在本文中,咱们将探讨零丁于任何器具的中枢 MLOps 原则。这些原则旨在匡助咱们想象出健壮且可膨胀的坐褥级机器学习系统和架构。
自动化或操作化
版块戒指
实验追踪
测试
监控
可复现性
率先,咱们来接洽自动化(操作化)的基本因素。
自动化或操作化
为了实施 MLOps,大多量应用系统会资格三个中枢脉络的自如演进,从手动操作到十足自动化:
手动历程:在开发机器学习应用的早期,历程无为是实验性和迭代性的。数据科学家手动践诺每个管说念的范例,如数据准备和考证、模子查验和测试。在这个阶段,他们不绝使用 Jupyter Notebooks 来查验模子。此阶段的产出是用于准备数据和查验模子的代码。
捏续查验 (CT):下一阶段波及模子查验的自动化,这即是所谓的捏续查验 (CT)。当需要时,它会自动触发模子的再查验。在这一阶段,数据和模子考证范例无为依然自动化。这个范例无为由编排器具完成,举例 ZenML,它将通盘代码整合在通盘,并在特定触发器上践诺。最常见的触发器是基于时候计议(举例每天一次),或某些事件发生时(如新数据上传或监控系统检测到性能下跌),从而提供天确切触发要求。
CI/CD:终末一个阶段是扫尾 CI/CD 管说念,确保将 ML 代码快速且可靠地部署到坐褥环境中。该阶段的要害进展是自动化数据、模子和查验管说念组件的构建、测试和部署。CI/CD 用于将新代码赶紧推送到不同环境(举例测试环境或坐褥环境),确保高效、可靠的部署历程。
在构建 LLM 系统时,咱们不错专揽 FTI 架构,快速从手动历程过渡到 CI/CD 和 CT。在图 1 中,咱们不错看到,CT 历程不错由多种事件触发,举例监控管说念检测到的性能下跌,或是新一批数据的到达。
此外,图1分为两大部分。上半部分展示了自动化历程,而下半部分展示了数据科学团队在实验多样数据处理步协调模子时进行的手动操作历程。
一朝团队通过鼎新数据处理模式或模子架构矫正了模子,他们会将代码推送到代码库中,随之触发 CI/CD 管说念。这将自动构建、测试、打包,并将新转变部署到 FTI 管说念中。
说七说八,CT 扫尾了 FTI 管说念的自动化,而 CI/CD 则崇敬构建、测试并将 FTI 管说念的新版代码推送到坐褥环境
版块戒指
到现在为止,咱们知说念代码、模子或数据中的任何转变齐会导致所有机器学习系统发生变化。因此,辞别对这三者进行追踪和版块戒指至关进犯。那么,咱们该何如辞别追踪代码、模子和数据呢?
代码 是通过Git进行版块戒指的,Git匡助咱们在每次向代码库添加转变时创建一个新的提交(代码的快照)。此外,基于Git的器具无为允许咱们发布版块,版块无为包含多个新功能和空虚开荒。
尽管每次提交会生成一个东说念主类难以解读的独一标志符,但版块发布顺从更常见的定名商定,无为包括主版块、次版块和补丁版块。
举例,在版块号为 "v1.2.3" 的版块中,"1" 暗示主版块,"2" 暗示次版块,而 "3" 暗示补丁版块。常见的器具包括 GitHub 和 GitLab。
模子 的版块戒指不错通过模子注册表扫尾,它允许存储和分享系统中使用的通盘模子,并对其进行版块化。模子版块戒指无为选择与代码访佛的语义版块戒指(Semantic Versioning)决策,使用主版块、次版块和补丁版块,同期也维持 alpha 和 beta 版块,用于向应用范例发出信号。
此外,你还不错通过 ML 元数据存储将一些附加信息臆意象模子上,比如模子是在哪些数据上查验的、模子架构、性能策画、延长,以及任何对您特定用例异常念念的信息。这样作念不错创建一个了了的模子目次,使团队和公司约略纰漏浏览和使用这些模子。
数据的版块戒指比代码和模子要复杂得多,因为它取决于数据的类型(结构化或非结构化)以及数据量的大小(少量据集或大数据集)。
举例,关于结构化数据,你不错使用带有版块列的 SQL 数据库来匡助追踪数据聚合的转变。臆想词,还有一些其他流行的惩处决策,如基于 Git 的系统 DVC,不错用于追踪数据集的每次转变。
另一种流行的惩处决策是基于工件(artifact),访佛于模子注册表,它允许你为数据集添加凭空层,追踪每次数据转变并创建新版块。Comet ML、W&B 和 ZenML 齐提供了遍及的工件功能。无论选拔哪种惩处决策,数据无为需要存储在土产货或云对象存储惩处决策中(如 AWS S3)。这些器具提供了构建、版块化、追踪和拜谒数据集的才调。
实验追踪
查验机器学习模子是一个十足迭代且实验性的过程。与传统的软件开发不同,机器学习波及初始多个并行实验,基于一组预界说的策画对它们进行比拟,并决定哪一个实验应推动到坐褥环境中。
实验追踪器具不错匡助您记载通盘必要的信息,举例模子瞻望的策画和可视化效果,以便比拟各个实验并纰漏选拔最好模子。常用的器具包括Comet ML、W&B、MLFlow和Neptune
测试
在测试机器学习系统时,咱们也会遭受与传统软件访佛的挑战。因此,咱们必须从三个方面测试咱们的应用范例:数据、模子 和 代码。此外,还必须确保特征、查验管说念和推理管说念能与外部办事(如特征存储)雅致集成,并约略动作一个好意思满的系统协同责任。
在 Python 环境中,最常用的测试框架是 pytest,咱们也保举使用它来编写测试。
测试类型
在开发周期的不同阶段,无为会选择以下五种主要类型的测试:
单位测试:这些测试关切具有单一职责的单个组件。举例,测试一个用于将两个张量相加的函数或在列表中查找特定元素的函数。
集成测试:这些测试评估系统中多个集成组件或单位之间的交互。举例,测试数据处理管说念或特征工程管说念,以及它们与数据仓库和特征存储的集成情况。
系统测试:系统测试在开发周期中起着要害作用,它们稽查所有系统的好意思满性,涵盖了好意思满的集成应用范例。这类测试严格评估系统的端到端功能,包括性能、安全性和举座用户体验。举例,测试所有机器学习管说念,从数据经受到模子查验和推理,确保系统能针对特定输入产生正确的输出。
验收测试:这些测试无为称为用户验收测试(UAT),它们用于考证系统是否知足端正的需求,确保系统已准备好部署。
转头测试:转头测试的成见是稽查先前开荒的空虚,以确保新代码的转变不会再行引入已惩处的问题。
压力测试:压力测试用于评估系统在高负载或顶点要求下的施展,确保它能在峰值流量或数据量加多的情况下依然沉着初始。
图2 - 测试类型
咱们测试什么?
在编写大多量测试时,无为将组件视为一个黑盒。因此,您不错戒指的主若是输入和输出。测试的成见是检核关于给定的输入,是否约略取得预期的输出。这里有一些应该每每研讨测试的推行:
输入:数据类型、神色、长度,以及范围情况(如最小值/最大值,小范围/大范围等)。
输出:数据类型、神色、终点、中间效果以及最终输出。
测试的例子
在测试代码时,不错专揽经典的软件工程范例。以下是一些在编写单位测试时的代码测试示例,有助于更好地意会咱们但愿测试的推行。
举例,您可能想稽查一个句子是否按照预期模式进行了算帐。此外,您也不错测试分块算法,断言它在处理不同句子和块大小时是否平时责任。
当咱们谈到数据考证时,主要指的是数据的有用性。数据有用性测试代码无为在从数据仓库中经受原始数据或筹商特征之后初始,成为特征管说念的一部分。因此,通过为您的特征管说念编写集成或系统测试,您不错稽查系统是否对有用和无效数据作念出正确的反应。
数据有用性的测试模式在很猛进程上取决于应用场景和数据类型。举例,处理表格数据时,不错稽查是否存在非空值、分类变量是否仅包含预期的类别,或浮点值是否遥远为正数。而在处理非结构化数据(如文本)时,可能会稽查数据的长度、字符编码、话语、特殊字符及语法空虚。
模子测试
模子测试是最具挑战性的,因为模子查验过程是机器学习系统中最省略情的部分。与传统软件不同,机器学习系统即使莫得抛出任何空虚,也可能产生不正确的效果,而这些空虚无为只可在评估或测试阶段被发现。
一些常见的模子测试时候包括:
输入张量和模子输出张量的面孔:
经过一批(或多批)查验后,耗费减少:
小批量查验时,耗费逐步趋近于 0:
你的查验管说念不错在通盘维持的开荒上初始,如 CPU 和 GPU:
早停和稽查点逻辑功能平时:
通盘测试齐会在 CI(捏续集成)管说念中自动触发。如果某些测试的资本较高,举例模子测试,不错成就为在特定要求下践诺,比如当修改模子代码时才触发。
另一方面,您还不错对模子进行活动测试。活动测试鉴戒了代码测试的步调,将模子视为一个黑盒,只关切输入和祈望输出。这使得活动测试与模子的具体扫尾无关,具有模子弗成知的特色。
这一领域的进犯接洽之一是《突出准确性:使用清单进行 NLP 模子的活动测试》一文。如果您想更深切了解这个主题,冷落阅读该论文。动作快速综合,该论文冷落对模子进行三种类型的测试。以下咱们用一个从句子中索要主语的模子动作例子来阐发:
不变性测试:输入的某些变化不应影响输出。举例,基于同义词替换的测试
model(text="The advancements in AI are changing the world rapidly.")# output: aimodel(text="The progress in AI is changing the world rapidly.")# output: ai
成见性测试:输入的变化应当影响输出。举例,以下是一个示例:咱们知说念输出应该左证提供的输入而变化
model(text="Deep learning used for sentiment analysis.")# output: deep-learningmodel(text="Deep learning used for object detection.")# output: deep-learningmodel(text="RNNs for sentiment analysis.")# output: rnn
最小功能:输入和预期输出的最精真金不怕火组合。举例,底下是咱们祈望模子遥远正确的一组精真金不怕火示例的示例
model(text="NLP is the next big wave in machine learning.")# output: nlpmodel(text="MLOps is the next big wave in machine learning.")# output: mlopsmodel(text="This is about graph neural networks.")# output: gnn