编码到可用于生产的机器学习需要4个步骤
回到博客主页

编码到可用于生产的机器学习需要4个步骤

协作 2021年2月3日

我们如何将数据科学代码存储库转变为数据和模型版本化、实验跟踪的项目,并准备好投入生产

博士TL;

我们将从GitHub中选取一个纯代码的机器学习项目,并展示如何添加:

  • 使用DVC和DAGsHub进行数据和模型版本控制
  • 使用DAGsHub Logger进行人类可读格式的跟踪实验
  • 一个让任何人都可以尝试模型的笔记本

如果您想直接查看结果,请查看BioBERT DAGsHub回购


使用你在网上找到的机器学习项目是困难的,特别是如果你想在生产中使用它们。在很大程度上,这是因为您需要将项目所包含的所有信息拼凑在一起。你通常从GitHub上的一些代码开始。然后,您必须找到用于训练和评估模型的数据、使用的参数以及模型所获得的结果。这通常没有一个明确的方法来在您自己的示例中测试模型,以确保它按预期工作。

直到最近,解决这些问题都是一项艰巨的任务,需要创造者同步多个平台,以便能够触及所有内容。现在情况已经不同了。你可以把一个只有代码的项目变成可生产的ML项目,通过以下方法:

  1. 数据版本控制
  2. 模型版本控制
  3. 实验跟踪
  4. 交互式推理——一个装载模型的笔记本,让您对其进行实验

所有这些都使用开源雷竞技技官网下载工具。也许与直觉相反,这真的很容易做到。在这篇文章的最后,我将向你展示我是如何转变一个这样的项目,并获得数据浏览,差异和共享,实验可视化,甚至在此过程中笔记本的差异。

一个你永远用不上的伟大项目

GitHub上有许多数据科学项目,但当您在寻找可以在项目中使用的东西或如果您想修改结果时,通常无法找到所需的一切。毕竟,一个完整的数据科学项目不仅包括代码,还包括数据、模型、实验和管道。通常情况下,您最终要花费大量时间将这些组件拼凑在一起,要使这些组件工作起来非常痛苦。这意味着数据科学项目被忽视,或者更糟糕的是,从头开始重新实现。我们有更重要的事要做。

让所有这些组件都存在于一个地方,将使与所需上下文共享数据科学项目、与他人协作并提高工作效率变得更加容易。

我们将从当前的开源状态来推广我们的项目代码项目,到一个雷竞技技官网下载开源数据科学项目

现在,你可能会说:“这当然是我们想要的。我们没有看到它发生的原因是,它非常难以实现。”-有了今天的工具,情况就不一样了。

项目背景

我们开始这个项目作为合作努力的一部分,在ML方面专注于从医学文本中分析和提取信息。目的是了解临床试验是如何进行的。

因此,我们对医学文本的语言模型很感兴趣,特别是尼珥.我们在网上搜索并做出了选择BioBERT作为一个好起点。该模型有很好的结果,似乎相对容易使用。

当我们发现GitHub BioBERT项目我们有所有的代码,我们有一个脚本下载数据,这是用wget从一些谷歌文档,我们有4个文件夹,其中3个用于模型可以执行的每个任务- NER(命名实体识别),QA(问题回答)和RE(关系提取)。还有一个文件夹用来存放嵌入的东西。每个文件夹都包含用于预处理数据的代码,并为该任务训练模型。每个文件夹中的README都包含结果。

开头不错,但我们想要更多。

有一件事是很难重新创建的(根据定义),我们不会在这篇文章中关注,是项目的实验历史。我们想知道哪些实验失败了,就像我们想知道哪些实验成功了一样——想象一下,尝试了一种方法,然后意识到,在事实发生后,有人已经尝试过了,它没有成功,但它从未被记录下来。了解我们的实验历史的最好方法是从一开始就使用数据和模型版本管理和实验跟踪,最好添加一个有意义的提交消息来描述你的实验方法。

添加数据版本控制

方法的第一步是添加作为项目一部分进行版本控制的数据。最初为了得到数据,你必须运行一个脚本它下载了数据集。一种方法是将其转换为DVC管道步骤,这将使我们能够更改脚本并自动运行它。因为我们希望以最简单、最直接的方式完成此操作,所以我们只在本地运行脚本。数据下载到我们的系统后,我们添加了DVC要跟踪的文件夹。

下载数据后,我们的数据集/文件夹看起来像这样:

$ ./download.sh $ tree数据集-d数据集├──NER│├──BC2GM│├──BC4CHEMD│├──BC5CDR-chem│├──BC5CDR-disease│├──JNLPBA│├──NCBI-disease│├──linnaus│├──s800├──QA│├──GAD│├──1│├──2│├─2

我们为模型执行的每个任务(NER、QA、RE)设置了一个文件夹,其中包含每个任务的各种数据集。每个文件夹都包含一些文件(与任务相关),主要是一个训练集、开发集和测试集。

不需要单独跟踪每个文件,在dvc中,我们可以将整个文件夹作为一个数据集对象,只需在终端中输入:

$ DVC添加数据集

接下来,我们进行预处理步骤。对于这3个任务,我们需要的预处理步骤是不同的。因为在这篇文章中,我们专注于NER任务,我们的预处理脚本位于指定实体识别/文件夹中。这个脚本所做的是将. tsv文件到. txt文件,然后运行preprocess.py脚本,它对数据进行标记,并将数据保存到其标签旁边的文本文件中。这些预处理数据被保存到我们的preprocessed_datasets /文件夹,在适当的任务和数据集文件夹中。对我们来说,确实如此尼珥/.预处理步骤完成后,我们可以添加被DVC跟踪的预处理数据,在我们的终端中输入:

$ DVC添加预处理数据集

当我改变数据时会发生什么

现在,假设您想为RE任务添加预处理数据。我们要做的是运行预处理步骤,然后替换"添加…我们要做的:

$ DVC提交预处理数据集

然后是提交并推送到Git,然后是DVC:

$ git添加。$ git commit -m“用RE任务更新预处理数据”$ git push origin master $ dvc push -r origin

训练模型并使其可访问

因此,预处理是一个相对“轻量级”的步骤。在这个特定的例子中,我们可以在一个不太强大的计算机上在合理的时间内完成它。当我们进行训练时,情况就不一定是这样了,如果可能的话,我们希望能拿出重拳出击.因为我们希望这个项目是社区可访问的,这些大枪是谷歌Colab,它给了我们一个免费的GPU。我们仍然希望从DAGsHub提取代码和数据,并在训练后将它们推回到模型旁边。

在我们的例子中,我们创造了这个笔记本我们提交给我们的项目存储库。它由下列各节组成:

  1. 加载代码、数据和模型git拉而且"拉命令
  2. 对相关的BioMed数据集上的模型进行微调
  3. 加载模型并查看它在一些用户提供的示例上的执行情况。
  4. 将所有代码、数据和模型更改提交回DAGsHub Git和DVC远程。

在上一节中,我们使用与添加数据相同的命令提交模型:

#如果这是第一次添加输出文件夹$ dvc add outputs #如果我们改变了模型$ dvc提交输出

轻松添加实验跟踪

最后我们想添加的是实验跟踪。正如我在开头提到的,在历史实验中添加这一点是很有挑战性的,因为如果项目没有从第一天开始记录实验,这些就会丢失。因为我们想让未来的合作变得更容易,所以我们认为晚添加总比不添加好。

为此,我们对运行脚本做了一些小的修改,以便它在训练期间自动记录所有指标,基于变形金刚的图书馆用来微调模型。你可以在这里看到变化.这会产生一些metrics.csv而且params.yaml保存所有实验上下文的文件。然后我们将这些文件和我们的代码一起推到DAGsHub存储库中。

现在,当我们用一些新的数据,或者不同的参数进行实验时,我们会创建一个可以过滤,分享和比较的实验。这也意味着,如果有人想要为项目做出贡献,他们将更容易理解我们所做的努力,什么是有效的,以及什么需要改进。

实验跟踪帮助我们理解测试了什么方法
实验跟踪帮助我们理解测试了什么方法

模型的交互推理

我在上面已经提到过这一点,但是我们在笔记本中添加了一个“游乐场”部分,它允许任何人加载我们的模型,并在他们可以编辑模型的相同地方进行尝试。你自己在这里试试吧

点击这里查看详情!我们的模型预测用户提供的例子!
点击这里查看详情!我们的模型预测用户提供的例子!

我们相信这对任何数据科学项目都很重要,尤其是对那些您想要分享和合作的项目。每个严肃的OSS项目都有演示,每个严肃的osd项目也应该有一个。在ML中,这可能需要更多的资源,所以演示笔记本是最好的中间选择。笔记本还有一个额外的好处,它允许用户更改模型的各个方面,或者测试他们自己的示例,以查看模型在哪些方面可能不能很好地工作。

另一个好处:如果您决定对模型进行更改,并希望查看结果与原始模型的比较,您可以将您的笔记本提交给DAGsHub,使用笔记本差分作为我们数据科学拉请求的一部分。

笔记本在DAGsHub上展开
笔记本在DAGsHub上展开

总结

恭喜你!如果您已经做到了这一点,那么您已经成功地将数据科学代码回购转换为可用于生产的数据科学项目——所有这些都包含数据和模型版本、实验跟踪,甚至还包括在GPU机器上训练模型并为合作者演示模型的简洁方法。如果你有任何问题,请随时加入我们的不和通道.如果你正在转换一个项目,让我知道,我很乐意帮助。

标签

院长Pleban

DAGsHub联合创始人兼首席执行官。构建数据科学协作之家。对机器学习、物理和哲学感兴趣。加入https://DAGsHub.com

太棒了!您已经成功订阅。
太棒了!接下来,完成签出以获得完全访问权限。
欢迎回来!您已经成功登录。
成功!您的帐户已完全激活,您现在可以访问所有内容。