原文:NeptuneAI Blog
协议:CC BY-NC-SA 4.0
原文:https://web.archive.org/web/https://neptune.ai/blog/best-mlops-tools
在我们的一篇文章中——机器学习团队实际使用的最好的工具、库、框架和方法——我们从 41 家 ML 初创公司学到的东西——Acerta 的 CTO Jean-Christophe Petkovich 解释了他们的 ML 团队如何接近 MLOps。
据他所说,一个完整的 T2 系统有几个组成部分:T3
- 您需要能够构建包含预处理数据和生成结果所需的所有信息的模型工件。
- 一旦您能够构建模型工件,您必须能够跟踪构建它们的代码,以及它们被训练和测试的数据。
- 您需要跟踪所有这三样东西,模型、它们的代码和它们的数据,是如何关联的。
- 一旦您可以跟踪所有这些内容,您还可以将它们标记为准备就绪,进行生产,并通过 CI/CD 流程运行它们。
- 最后,为了在该过程的最后实际部署它们,您需要某种方法来基于该模型工件旋转服务。
这是对如何在公司中成功实施 MLOps 的高度概括。但是了解高层需要什么只是拼图的一部分。另一个是采用或创建适当的工具来完成工作。
这就是为什么我们编制了一份最佳 MLOps 工具的清单。我们将它们分为六类,以便您根据自己的需求选择合适的工具。让我们开始吧!
几乎在所有的 ML 工作流程中,您都想知道您的模型是如何构建的,尝试了哪些想法,或者在哪里可以找到所有打包的模型。
为此,您需要跟踪所有的模型构建元数据和训练模型,如超参数、指标、代码和数据集版本、评估预测、打包模型等。
根据您的模型元数据问题是在研究方面还是在产品化方面,您可以选择更具体的解决方案:实验跟踪工具、模型注册中心,或者一个 ML 元数据存储。
无论如何,在考虑元数据存储和管理工具时,您应该考虑:
- 一般业务相关的东西:定价模式、安全性和支持
- 设置:需要多少基础设施,插入您的工作流程有多容易
- 灵活性、速度和可访问性:你能定制元数据结构吗?它能从你的语言/框架/基础设施中访问吗?它对你的工作流来说足够快和可靠吗?
- 模型版本化、沿袭和打包:你能版本化和复制模型和实验吗?你能看到下游使用的数据/模型/实验的完整模型谱系吗?
- 元数据的记录和显示:API 和 UI 支持哪些元数据类型?你能渲染音频/视频吗?你从你的框架中获得了什么?
- 对比和可视化实验和模型:支持哪些可视化,是否有平行坐标图?可以对比图像吗?你能调试系统信息吗?
- 组织和搜索实验、模型和相关元数据:你能在工具中以一种干净的方式管理你的工作流程吗?你能根据自己的需要定制用户界面吗?能轻松找到实验和模型吗?
- 模型评审、协作和共享:在转移到生产之前,您能自动和手动地批准模型吗?你能和你的团队一起评论和讨论实验吗?
- CI/CD/CT 兼容性:它与 CI/CD 工具的兼容性如何?它支持持续培训/测试(CT)吗?
- 集成和支持:它是否与您的模型培训框架相集成?你能在编排和管道工具中使用它吗?
根据您的模型元数据问题是在研究方面还是在产品化方面,您可能希望进行比较并选择更具体的解决方案:
记住这一点,让我们来看看其中的一些工具。
Neptune 是一个 ML 元数据存储库,为运行许多实验的研究和生产团队而构建。
您可以记录和显示几乎任何 ML 元数据,从超参数和度量到视频、交互式可视化和渲染的 jupyter 笔记本。
它有一个灵活的元数据结构,允许你以你想要的方式组织培训和生产元数据。您可以将它想象成一个字典或文件夹结构,您用代码创建并显示在 UI 中。
web UI 是为管理 ML 模型元数据而构建的,它允许您:
你可以通过易于使用的 API 和 25+ 与来自 ML 生态系统的工具集成,从 ML 元数据存储中记录和查询元数据。
如果您想知道它是否适合您的工作流程:
但是如果你和我一样,你会想先把它和这个领域的其他工具比如 MLflow,TensorBoard,wandb 或者 comet 进行比较。这里有许多更深入的逐个特性的比较以使评估更容易。
海王——概要:
- 灵活的类似文件夹的元数据结构
- 高度可定制的 UI,用于搜索、显示、比较和组织 ML 元数据
- 易于使用的 API,用于记录和查询模型元数据,以及与 MLOps 工具的 25 种集成
- 提供托管和本地版本
- 协作功能和组织/项目/用户管理
MLflow 是一个开源平台,帮助管理整个机器学习生命周期,包括实验、再现性、部署和中央模型注册。
MLflow 适合个人和任何规模的团队。
该工具与库无关。你可以用任何机器学习库和任何编程语言来使用它。
MLflow 包括四个帮助跟踪和组织实验的主要功能:
- ml flow Tracking——一个 API 和 UI,用于在运行机器学习代码时记录参数、代码版本、指标和工件,并在以后可视化和比较结果
- MLflow 项目——将 ML 代码打包成可重用、可复制的形式,以便与其他数据科学家共享或转移到生产中
- MLflow 模型——从不同的 ML 库中管理和部署模型到各种模型服务和推理平台
- MLflow Model Registry–一个中央模型存储库,用于协作管理 ml flow 模型的整个生命周期,包括模型版本控制、阶段转换和注释
检查ml flow&海王星之间的对比
Comet 是一个元机器学习平台,用于跟踪、比较、解释和优化实验和模型。它允许你在一个地方查看和比较你所有的实验。无论你在哪里用任何机器学习库运行你的代码,对于任何机器学习任务,它都能工作。
comet适合团队、个人、学者、组织以及任何想要轻松可视化实验、方便工作和运行实验的人。
这颗彗星最显著的一些特征包括:
- 团队共享工作:团队共享的多种特性
- 与现有的 ML 库配合良好
- 处理用户管理
- 让您比较实验——代码、超参数、度量、预测、依赖性、系统度量等等
- 允许您通过视觉、音频、文本和表格数据的专用模块可视化样品
- 有许多集成,可以轻松地将其连接到其他工具
查看彗星&海王星之间的对比
如果您关心再现性,数据和管道版本控制工具将对您的工作流程至关重要。
在数据方面,它们帮助您获得工件的版本,数据集或模型的散列,您可以在以后使用它来识别和比较。通常,您会将此数据版本记录到您的元数据管理解决方案中,以确保您的模型训练是版本化的和可重复的。
通过记录管道每个节点的输入/输出,您可以在管道中使用工件版本。通过这样做,您也可以对管道执行进行版本控制。
要为您的工作流选择一个好的数据/管道版本工具,您应该检查:
- 对您的数据形态的支持:它如何支持视频/音频?它是否为表格数据提供了一些预览?
- 易用性:在你的工作流程中使用起来有多容易?它给你的执行增加了多少开销?
- Diff and compare: 可以比较数据集吗?你能看到你的图像目录的不同吗?
这里有几个值得检查的工具。
DVC,或数据版本控制,是一个机器学习项目的开源版本控制系统。这是一个实验工具,帮助你定义你的管道,不管你使用什么语言。
当您在 ML 模型的前一版本中发现问题时,DVC 通过利用代码、数据版本化和可再现性来帮助节省时间。您还可以训练您的模型,并通过 DVC 管道与您的队友分享。
DVC 可以处理大量数据的版本和组织,并以一种组织良好、易于访问的方式存储它们。它专注于数据和管道版本化和管理,但也有一些(有限的)实验跟踪功能。
DVC——概要:
- 可以使用不同类型的存储—不受存储限制
- 完整的代码和数据来源有助于跟踪每个 ML 模型的完整发展
- 通过始终如一地维护输入数据、配置和最初用于运行实验的代码的组合来实现可重复性
- 跟踪指标
- 一种将 ML 步骤连接到 DAG 并端到端运行整个管道的内置方式
检查 DVC &海王星比较
Pachyderm 是一个将数据谱系与 Kubernetes 上的端到端管道相结合的平台。
它有三个版本,社区版(开源,可以在任何地方使用)、企业版(完整的版本控制平台)和中心版(仍是测试版,它结合了前两个版本的特点)。
您需要将 Pachyderm 与您的基础架构/私有云相集成。
由于在本节中我们讨论的是数据和管道版本,所以我们将讨论这两者,但除此之外还有更多内容(查看网站了解更多信息)。
谈到数据版本化,Pachyderm 数据版本化系统有以下几个主要概念:
- 存储库–厚皮动物存储库是最高级别的数据对象。通常,Pachyderm 中的每个数据集都有自己的存储库
- 提交–回购在特定时间点的不可变快照
- 分支–特定提交的别名或指针,在提交新数据时自动移动
- 文件–文件和目录是存储库中的实际数据。Pachyderm 支持任何类型、大小和数量的文件
- 出处——表达各种提交、分支和存储库之间的关系。它帮助您跟踪每个提交的来源
查看厚皮动物&海王星比较
如果 MLOps 工作流的数据和管道版本控制部分对您很重要,请查看数据版本控制工具的更深入的比较。
如果你想从你的模型中获得好的性能,而你不能仅仅给它更多的训练数据,你必须调整超参数。您可以使用随机搜索或贝叶斯优化方法手动完成。
许多工具都可以帮助您,但是要选择一个适合您的工具,请考虑:
- 易用性和 API :将其连接到您的代码库有多容易?您能在您的分布式基础设施中运行它吗?
- 支持的优化方法:可以动态构建搜索空间吗?它支持 TPE 吗?它有像 BOHB 那样的基于树的代理模型吗?
- 支持修剪、重启和异常处理:你能在没有希望的试验上提前停止吗?你能从检查站开始吗?当参数配置试验失败时会发生什么?
- 速度和并行化:在一台或多台机器上分配培训有多容易?
- 可视化和调试功能:你能可视化扫描吗?可以对比参数配置吗?它是否容易连接到监控/跟踪工具?
我们来看几个选项。
Optuna 是一个自动超参数优化框架,既可以用于机器学习/深度学习,也可以用于其他领域。它有一套最先进的算法,你可以选择(或连接),它是非常容易的分布训练到多台机器,并让你很好地可视化你的结果。
它集成了流行的机器学习库,如 PyTorch、TensorFlow、Keras、FastAI、scikit-learn、LightGBM 和 XGBoost。
——概要:
- 支持在一台机器(多进程)和一个集群(多节点)上进行分布式培训
- 支持各种修剪策略,以更快地收敛(并使用更少的计算)
- 拥有一套强大的可视化工具,如平行坐标、等高线图或切片图
检查 Neptune-Optuna 集成,让您记录并实时监控 Optuna 超参数扫描。
SigOpt 旨在加速和放大机器学习、深度学习和模拟模型的影响。它有助于通过自动化过程节省时间,使其成为超参数调整的合适工具。
您可以将 SigOpt 无缝集成到任何模型、框架或平台中,而无需担心您的数据、模型和基础架构——一切都是安全的。
该工具还可以让你监控、跟踪和分析你的优化实验 以及可视化它们。
SigOpt——概要:
- 多指标优化便于同时探索两个不同的指标
- 条件参数允许定义和调整架构参数,并自动选择模型
- 高并行性使您能够充分利用大规模计算机基础设施,并在多达 100 名工作人员中运行优化实验
当您的工作流有多个可以单独执行的步骤(预处理、培训、评估)时,您将受益于工作流管道和编排工具。
这些工具将帮助您:
- 按照正确的顺序执行步骤
- 将执行抽象到任何基础设施
- 确保每个步骤在开始运行之前都有来自其他步骤的所有输入
- 通过保存/缓存中间步骤的输出并只运行那些必须运行的输出,加速管道执行
- 重试/重新运行失败的步骤,而不使整个管道崩溃
- 基于时间(每周)或事件(每次合并到主分支)调度/触发管道执行
- 可视化管道结构和执行
让我们回顾一下其中的一些工具。
Kubeflow 是 Kubernetes 的 ML 工具包。它通过打包和管理 docker 容器来帮助维护机器学习系统。它通过使机器学习工作流的运行编排和部署更容易来促进机器学习模型的扩展。
这是一个开源项目,包含一组特定于各种 ML 任务的兼容工具和框架。
您可以使用 Kubeflow 管道来克服长时间的 ML 培训工作、手动实验、再现性和 DevOps 障碍。
kube flow——概要:
- 用于管理和跟踪实验、作业和运行的用户界面(UI)
- 使用 SDK 与系统交互的笔记本电脑
- 重用组件和管道来快速创建端到端解决方案,而不必每次都重新构建
- Kubeflow Pipelines 可作为 Kubeflow 的核心组件或独立安装使用
检查库伯弗洛&海王星比较
Polyaxon 是一个平台,用于复制和管理机器学习项目的整个生命周期,以及深度学习应用的整个生命周期。
该工具可以部署到任何数据中心、云提供商,并且可以由 Polyaxon 托管和管理。它支持所有主要的深度学习框架,如 Torch、Tensorflow、MXNet。
说到流程编排,Polyaxon 允许您通过 CLI、dashboard、SDK 或 REST API 调度作业和实验,从而最大限度地利用集群。
多轴 — 概要:
- 支持整个生命周期,包括运行流程编排,但可以做的远不止这些
- 有一个开源版本,您可以立即使用,但也为企业提供了选项
- 文档非常完整的平台,包括技术参考文档、入门指南、学习资源、指南、教程、变更日志等等
- 允许使用 experiment insights 仪表板监控、跟踪和分析每个优化实验
检查多轴&海王星之间的比较
Airflow 是一个开源平台,允许您使用 web 应用程序来监控、调度和管理您的工作流。它提供了对已完成和正在进行的任务状态的了解,以及对日志的了解。
Airflow 使用有向无环图(Dag)来管理工作流编排。该工具是用 Python 编写的,但是您可以将其用于任何其他语言
气流——概要:
- 易于与您当前的基础架构一起使用—与 Google 云平台、Amazon Web Services、Microsoft Azure 和许多其他服务集成
- 您可以可视化生产中运行的管道
- 它可以帮助您管理任务之间不同的相关性
这个工作流编排工具基于 Python。您可以创建可重复、可维护和模块化的工作流程,使您的 ML 流程更简单、更准确。Kedro 将软件工程集成到机器学习环境中,其中包含模块化、关注点分离和版本控制等概念。
它基于 Cookiecutter 数据科学 提供了一个标准的、可修改的项目模板。数据目录处理一系列轻量级数据连接器,用于跨许多不同的文件格式和文件系统保存和加载数据。
凯德罗——概要:
- 通过管道抽象,您可以自动化 Python 代码和工作流可视化之间的依赖关系。
- Kedro 支持单机或分布式机器部署。
- 主要焦点是创建可维护的数据科学代码,以解决 Jupyter 笔记本、一次性脚本和胶水代码的缺点。
- 这个工具使得不同层次的团队协作更加容易,并且通过模块化、可重用的代码在编码环境中提供效率。
检查 Kedro-Neptune integration ,它允许您过滤、比较、显示和组织管道和节点中生成的 ML 元数据。
如果你想回顾更多的框架,请阅读我们的管道编排工具的深度比较。
希望您的团队已经有了生产中的模型,或者您即将部署它们。太棒了!但是,正如你现在可能知道的,生产围绕 ML 模型的可操作性提出了它的挑战。
您遇到的第一批问题是如何打包、部署、服务和扩展基础架构以支持生产中的模型。模型部署和服务工具对此有所帮助。
选择工具时,您应该考虑:
- 与您的模型打包框架和模型打包实用程序的兼容性
- 基础设施扩展能力
- 支持各种部署场景:金丝雀、A/B 测试、挑战者与冠军
- 集成和支持生产模型监控框架或内置监控功能
这里有一些模型部署和服务工具。
BentoML 简化了构建机器学习 API 端点的过程。它提供了一个标准,但是简化的架构来将训练好的 ML 模型移植到生产中。
它让你打包训练好的模型,使用任何 ML 框架来解释它们,以服务于生产环境。它支持在线 API 服务和离线批处理服务。
BentoML 有一个灵活的工作流和一个高性能的模型服务器。该服务器还支持自适应微批处理。UI 仪表板提供了一个集中的系统来组织模型和监控部署过程。
工作机制是模块化的,使配置可重用,服务器不停机。这是一个多用途的框架,解决了 ML 模型服务、组织和部署的问题。主要重点是连接数据科学和 DevOps 部门,以实现更高效的工作环境,并产生高性能的可扩展 API 端点。
BentoML — 概要:
- 支持高性能的模型服务、模型管理、模型打包和统一的模型格式。
- 支持部署到多个平台。
- 灵活的模块化设计。
- 不处理现成的水平缩放。
Cortex architecture diagram | Source
cortex是一个开源的替代方案,可以通过 SageMaker 或在 AWS 服务如 Elastic Kubernetes Service (EKS)、Lambda 或 Fargate 和开源项目如 Docker、Kubernetes、TensorFlow Serving 和 TorchServe 之上构建自己的模型部署平台。
这是一个多框架工具,允许您部署所有类型的模型。
皮层 — 小结:
- 自动扩展 API 以处理生产工作负载
- 对任何 AWS 实例类型运行推理
- 在单个 API 中部署多个模型,并在不停机的情况下更新已部署的 API
- 监控 API 性能和预测结果
Seldon 是一个开源平台,允许你在 Kubernetes 上部署机器学习模型。它在云中和内部都可用。
谢顿——概要:
- 利用 canary deployment 等各种选项简化模型部署
- 出现问题时,使用警报系统监控生产中的模型
- 使用模型解释器来理解为什么会做出某些预测。谢顿还开源了一个模型解释器包 alibi
如果您曾经“成功地”将模型部署到生产环境中,却发现它们产生了疯狂的结果,那么您知道监视生产模型是非常重要的,并且可以为您节省很多麻烦(和金钱)。如果没有,相信我的话。
模型监控工具可以通过以下方式让您了解生产中正在发生的事情:
- 监控输入数据漂移:你的模型得到的真实数据和训练数据有区别吗?
- 监控概念漂移:问题是否随着时间的推移而改变,你的模型性能在衰减?
- 监控硬件指标:该型号的功耗是否明显高于之前的型号?
选择模型监控工具时,您应该考虑:
- 易于集成:将其连接到您的模型服务工具有多容易
- 服务开销:日志记录给模型部署基础设施带来了多少开销
- 监控功能:是否监控数据/特征/概念/模型漂移?你能比较同时运行的多个模型吗(A/B 测试)?
- 警报:出现问题时,它会自动发出警报吗?
这里有你可以选择的。
亚马逊 SageMaker 模型监视器是亚马逊 SageMaker 平台的一部分,它使数据科学家能够构建、训练和部署机器学习模型。
谈到亚马逊 SageMaker 模型监视器,它可以让你自动监控生产中的机器学习模型,并在数据质量问题出现时提醒你。
该工具有助于节省时间和资源,因此您和您的团队可以专注于结果。
亚马逊 SageMaker 模型监视器—摘要:
- 在任何端点上使用该工具—当使用内置算法、内置框架或您自己的容器训练模型时
- 使用 SageMaker SDK,您可以捕获预测或发送到端点的数据的可配置部分,并将其存储在您的亚马逊简单存储服务(S3)桶中。元数据丰富了捕获的数据,您可以像保护任何 S3 对象一样保护和访问这些数据。
- 启动监视计划并接收报告,这些报告包含最新时间段内收到的数据的统计信息和模式信息,以及检测到的任何违规
Fiddler 是一个模型监控工具,它有一个用户友好的、清晰的、简单的界面。它允许您监控模型性能,解释和调试模型预测,分析整个数据和切片的模型行为,大规模部署机器学习模型,以及管理您的机器学习模型和数据集
Fiddler ML–摘要:
- 性能监控—一种直观的方式来探索数据漂移,并确定哪些数据正在漂移、何时漂移以及如何漂移
- 数据完整性—确保没有不正确的数据进入您的模型,并且不会对最终用户体验产生负面影响
- 跟踪异常值 —Fiddler 在异常值检测选项卡中显示单变量和多变量异常值
- 服务指标—让您基本了解生产中 ML 服务的运行状况
- Alerts —Fiddler 允许您为项目中的一个模型或一组模型设置警报,以警告生产中的问题
总的来说,它是一个监控机器学习模型的伟大工具,具有所有必要的功能。
Hydrosphere 是一个用于管理 ML 模型的开源平台。Hydrosphere Monitoring 是其模块,允许您实时监控您的生产机器学习。
它使用不同的统计和机器学习方法来检查你的生产分布是否与训练分布相匹配。它支持外部基础设施,允许您将 Hydrosphere 外部托管的模型连接到 Hydrosphere Monitoring,以监控其质量。
水圈监测—总结:
- 通过统计漂移检测,监控数据中的各种统计数据如何随时间变化
- 复杂的数据漂移可以通过水圈多元数据监控来检测
- 使用自定义 KNN 度量或自定义隔离林度量监控异常
- 它支持表格、图像和文本数据
- 当您的指标发生变化时,您会收到通知,以便能够快速响应
显然是一个开源的 ML 模型监控系统。它有助于在开发、验证或生产监控期间分析机器学习模型。工具从熊猫数据帧生成交互式报告。
目前,有 6 种报告可供使用:
- 数据漂移:检测特征分布的变化
- 数字目标漂移:检测数字目标和特征行为的变化
- 分类目标漂移:检测分类目标和特征行为的变化
- 回归模型性能:分析回归模型的性能和模型误差
- 分类模型性能:分析分类模型的性能和错误。适用于二进制和多类模型
- 概率分类模型性能:分析概率分类模型的性能、模型校准质量和模型误差。适用于二进制和多类模型
现在您已经有了最佳工具的列表,您“只”需要弄清楚如何让它在您的设置中工作。
一些资源可以帮助你做到这一点:
如果您想讨论如何设置 MLOps 堆栈,我很乐意提供帮助。
联系我 ,看看我能做些什么!
原文:https://web.archive.org/web/https://neptune.ai/blog/best-open-source-mlops-tools
你不需要在 MLOps 工具上花很多钱,就能把 DevOps 的魔力带到你的机器学习项目中。有大量开源工具可供选择。当你试图解决独特的问题,并且需要一个可以依赖的社区时,这是一个很好的解决方案。但是也有一些倾向于开源工具。
- 首先,要小心——开源工具并不总是 100%免费的。例如,Kuberflow 有客户端和服务器组件,并且都是开放的。然而,有些工具可能只开放其中一个组件的源代码。客户端是开放的,但是供应商控制着服务器端的一切。
- 免费的开源工具也会让你在其他方面付出代价。如果你考虑到你必须长期托管和维护这个工具,你会发现开源毕竟是非常昂贵的。
- 最后,如果出现问题,您可能无法依靠 24/7/365 的供应商支持。社区可以帮助你,但是很明显,他们对你留下的结果不负任何责任。
最终,开源工具可能会很棘手。在为您的项目选择工具之前,您需要仔细研究它的优缺点。此外,您需要确保这些工具能够与您的堆栈的其他部分很好地协作。这就是为什么我为模型开发过程的不同阶段准备了一个流行的和社区认可的 MLOps 工具的列表。
在这个列表中,你会发现成熟的机器学习平台,以及帮助你进行数据探索、部署和测试的专业工具。
成熟的平台
成熟的平台包含机器学习工作流程所有阶段的工具。理想情况下,一旦你有了一个成熟的工具,你就不需要设置任何其他的工具。实际操作中,要看你的项目需求和个人喜好。
1. Kubeflow
几乎就在 Kubernetes 确立了自己作为处理集群容器的标准之后,Google 创建了 T2 kube flow——一个开源项目,简化了在 Kubernetes 中处理 ML 的工作。它拥有这种编排工具的所有优势,从在任何基础设施上部署的能力到管理松散耦合的微服务,以及按需扩展。
这个项目是为开发人员谁想要部署可移植和可扩展的机器学习项目。谷歌不想再造其他服务。他们希望创建一个最先进的开源系统,可以与各种基础设施(从超级计算机到笔记本电脑)一起应用。
https://web.archive.org/web/228if_/https://www.youtube.com/embed/cTZArDgbIWw?feature=oembed
视频
MLOps open-source tool: MLflow | Source
使用 Kuberflow,您可以受益于以下功能:
创建和定制 Jupyter 笔记本,立即查看运行代码的结果,创建交互式分析报告。
- 自定义张量流作业运算符
此功能有助于训练您的模型,并应用 TensorFlow 或 Seldon 核心服务容器将模型导出到 Kubernetes。
- 简化集装箱化
Kuberflow 消除了将代码容器化的复杂性。数据科学家可以在更短的时间内完成数据准备、培训和部署。
总而言之,Kuberflow 是一个用于端到端 ML 工作流开发和部署的成熟解决方案。
2.MLflow
MLflow 是一个开源平台,机器学习工程师可以通过实验、部署和测试来管理 ML 生命周期。当您想要跟踪模型的性能时,MLflow 就派上了用场。它就像一个仪表板,在这里您可以:
- 监控 ML 管道,
- 存储模型元数据,以及
- 挑选表现最好的型号。
MLOps open-source tool: MLflow | Source
目前,MLflow 提供了四个组件:
MLflow 跟踪组件是一个 API 和 UI,用于记录参数、代码版本、指标以及运行代码和可视化结果的输出文件。您可以使用 Python、REST、R API 和 Java APIs 进行日志和查询实验。你也可以记录结果。
MLflow 项目是 ML 团队以可重用和可复制的方式打包数据科学代码的工具。它附带了一个 API 和命令行工具来将项目连接到工作流中。它可以帮助你在任何平台上运行项目。
MLflow 模型可以轻松打包机器学习模型,供各种下游工具使用,如 Apache Spark。这样,在不同的服务环境中部署机器学习模型就更容易管理了。
总的来说,用户喜欢 MLflow,因为它易于在本地使用,无需专用服务器,并且有一个奇妙的 UI,您可以在其中探索您的实验。
网飞创建了 Metaflow 作为一个开源的 MLOps 平台,用于构建和管理大规模的企业级数据科学项目。数据科学家可以使用这个平台进行端到端的开发和部署他们的机器学习模型。
Metaflow 支持所有流行的数据科学库,如 TensorFlow 和 scikit-learn,因此您可以继续使用您最喜欢的工具。Metaflow 支持 Python 和 R,这使得它在库和包选择方面更加灵活。
- 强大的版本控制工具包
Metaflow 的优秀之处在于,它可以自动对你的所有实验进行版本化和跟踪。你不会丢失任何重要的东西,你甚至可以在笔记本上检查所有实验的结果。
如上所述,Metaflow 是专门为大规模机器学习开发而创建的。AWS 云为解决方案提供支持,因此如果您需要扩展,可以内置 AWS 的存储、计算和机器学习服务。您不必重写或更改代码来使用它。
4.MLReef
MLOps open-source tool: MLReef | Source
MLReef 是一个 MLOps 平台,供团队合作并分享他们的机器学习实验结果。项目是建立在可重用的 ML 模块之上的,这些模块可以由你或者社区来实现。这提高了开发速度,并通过促进并发性使工作流更加高效。
MLReef 提供了四个方向的工具:
您拥有一个完全版本化的数据托管和处理基础架构来设置和管理您的模型。
每个开发人员都可以访问容器化和版本化的脚本库,您可以在您的机器学习管道中使用它们。
您可以使用 MLReef 在项目的不同迭代中进行实验跟踪。
该解决方案可帮助您优化管道管理和流程编排,自动化日常任务。
此外,MLReef 欢迎任何规模的项目。新手可以将它用于小规模项目,有经验的开发人员可以将它用于小型、中型和企业项目。
如果你没有太多开发 ML 模型的经验,你会发现一个用户友好的界面和社区支持来解决你可能面临的任何问题。
MLReef 允许您在 Git 上构建项目,同时为您处理所有 DevOps 的混乱。您可以在自动化环境中轻松监控进度和结果。
MLReef for enterprise 易于在云中或内部进行扩展和控制。
总而言之,MLReef 是您 ML 项目的一个方便的框架。只需几个简单的设置,您就能够一砖一瓦地开发、测试和优化您的 ML 解决方案。
5. Kedro
Kedro 是一个 Python 框架,用于机器学习工程师和数据科学家创建可复制和可维护的代码。
如果你想组织你的数据管道并使 ML 项目开发更有效,这个框架是你最好的朋友。您不必在代码重写上浪费时间,并且将有更多的机会关注健壮的管道。此外,Kedro 帮助团队建立协作标准,以限制延迟并构建可伸缩、可部署的项目。
MLOps open-source tool: Kedro | Source
Kedro 有很多好的特性:
通常,你必须花很多时间去了解如何建立你的分析项目。Kedro 提供了一个标准模板,可以节省您的时间。
Kedro 将帮助您加载和存储数据,不再担心代码的可重复性和可伸缩性。
当你在处理复杂的软件系统时,这是一个必要的工具。如果您对配置管理不够重视,您可能会遇到严重的可靠性和可伸缩性问题。
Kedro 提倡一种数据驱动的 ML 开发方法,并在降低业务运营风险的同时维护行业标准。
如果您想利用组织良好的 Kedro 管道和强大的 Neptune UI 来组织和比较管道和节点中生成的 ML 元数据,请查看 Neptune-Kedro 插件。
MLOps 中的开发和部署工具可跨多个环境自动执行手动部署的日常任务。您可以通过更方便的工具进行部署,这取决于您使用的平台堆栈。
6.ZenML
MLOps open-source tool: ZenML | Source
ZenML 是一个 MLOps 框架,用于编排你的 ML 实验管道。它为您提供了以下工具:
ZenML 帮助您将原始数据转换成可供分析的数据。
在其他方便培训的工具中,该平台使用声明式管道配置,因此您可以在内部和云环境之间轻松切换。
ZenML 的创造者声称,该平台的主要好处是自动跟踪实验,并保证实验之间的可比性。
XML 致力于使 ML 开发对于个人开发人员和大型团队来说都是可重复和简单的。
这个框架让你摆脱了用传统工具交付机器学习模型的所有麻烦。如果您努力提供足够的实验数据来证明结果的可重复性,希望减少浪费并使代码的重用更简单,ZenML 将会有所帮助。
7.MLRun
MLRun 是 ML 模型开发和部署的工具。如果您正在寻找一种可以方便地在各种环境中运行并支持多种技术堆栈的工具,它绝对值得一试。MLRun 提供了管理数据管道的综合方法。
MLOps open-source tool: MLRun | Source
MLRun 具有分层架构,可提供以下强大功能:
- 功能和工件存储
这一层帮助您处理数据的准备和处理,并跨不同的存储库存储数据。
- 弹性无服务器运行时层
将简单的代码转换成易于扩展和维护的微服务。它与 Kubernetes jobs、Dask 和 Apache Spark 等标准运行时引擎兼容。
为了让您专注于训练模型和微调超参数,pipeline automation 工具可帮助您进行数据准备、测试和实时部署。你只需要提供你的监督来创建一个最先进的 ML 解决方案。
在这里,您可以访问统一的控制面板来管理您的整个工作流程。MLRun 有一个方便的用户界面、一个 CLI 和一个您可以在任何地方访问的 SDK。
使用 MLRun,您可以编写一次代码,然后使用自动化解决方案在不同的平台上运行它。该工具管理构建过程、执行、数据移动、缩放、版本控制、参数化、输出跟踪等等。
8.currentmodelogic 电流型逻辑的
CML (持续机器学习)是机器学习项目持续集成和交付(CI / CD)的库。该库是由 DVC 的创建者开发的,这是一个用于对 ML 模型和实验进行版本控制的开源库。CML 应该与 DVC、Tensorboard 和云服务一起,促进开发和实现 ML 模型到产品中的过程。
- 自动化管道建设
CML 被设计用来自动化 ML 工程师的一些工作,包括训练实验、模型评估、数据集以及它们的添加。
该工具被定位为支持数据科学项目 GitFlow 的库,允许自动生成报告,并隐藏使用外部服务的复杂细节。外部服务的例子包括云平台:AWS、Azure、GCP 等等。对于基础设施任务,也使用 DVC、docker 和 Terraform。最近,有一个 ML 项目的基础设施方面吸引了更多的注意力。
该库非常灵活,提供了广泛的功能;从发送报告和发布数据,到为项目分发云资源。
9.Cortex 实验室
Cortex Labs 是一家由伯克利科学家开发的早期创业公司。他们正在为神经科学家开发一种方便的工具,帮助他们理解大脑是如何工作的。这个应用程序的用途变得更加广泛。
Cortex Lab 项目很有趣,因为它允许您部署、管理和扩展容器,而不用担心 Kubernetes。它在 AWS 上将容器作为服务提供。
如果您决定将 Cortex 纳入您的技术体系,您将受益于以下特性:
Cortex 可以实时处理请求,并根据进行中的请求量自动扩展。
- 自动化集群管理
Cortex 使集群自动扩展变得容易。很容易用不同的参数创建集群。
- CI/CD 和可观察性集成
Cortex 允许您使用声明性配置创建供应集群。
Cortex Lab 旨在与 AWS 顺利集成。它运行在 EKS 之上,能够可靠、经济地扩展工作负载。您可以使用此工具来处理图像和视频处理的数据密集型模型。微服务架构使其易于扩展,没有任何资源限制。
10.塞尔顿核心
MLOps open-source tool: Seldon Core | Source
Seldon Core 是 Kubernetes 上 ML 模型部署的平台。这个工具可以帮助开发人员在一个健壮的 Kubernetes 环境中构建模型,具有定制资源定义等特性来管理模型图。您还可以将该工具与您的持续集成和部署工具合并。
Seldon core 可以将你建立在 TensorFlow、PyTorch、H2O 等框架上的模型转换成基于 REST/GRPC 的可扩展微服务架构。
- 监控模型性能
它将为您处理缩放,并为您提供测量模型性能、检测异常值和进行开箱即用的 A/B 测试的高级解决方案。
Seldon Core 可以夸耀通过持续维护和安全策略更新支持的系统的健壮性和可靠性。
Seldon Core 提供的优化服务器可以让你建立大规模的深度学习系统,而不必将其容器化或担心其安全性。
11.汽车经销商
AutoKeras 是一个用于自动机器学习(AutoML)的开源库。使用 AutoML 框架,您可以自动处理原始数据,选择机器学习模型,并优化学习算法的超参数。
- 简化 ML 模型开发
AutoML 减少了人类开发机器学习模型时出现的偏差和差异,并简化了机器学习模型的开发。
- 享受自动化超参数调谐
AutoKeras 是一种工具,它提供了自动匹配深度学习模型的架构和超参数的功能。
AutoKeras 最出名的是它的灵活性。在这种情况下,无论后端如何,您编写的代码都将被执行。它支持 Theano、Tensorflow 和其他框架。
AutoKeras 内部有几个训练数据集。它们已经以方便工作的形式放置,但它没有向您展示 AutoKeras 的全部功能。事实上,它包含了对文本、图片和时间序列进行适当预处理的工具。换句话说,最常见的数据类型,这使得数据准备过程更易于管理。该工具还具有内置的模型可视化功能。
12.H2O 汽车公司
https://web.archive.org/web/228if_/https://www.youtube.com/embed/-3dcNUrq_fQ?feature=oembed
视频
MLOps open-source tool: H2O Auto ML | Source
H2O.ai 是一个使用 AutoML 优化机器学习过程的软件平台。H2O 声称,该平台可以比 scikit-learn 等流行的机器学习库更快地训练模型。
H2O 是一个机器学习,预测数据分析平台,用于建立机器学习模型,并为它们生成 Java 和 Python 的生产代码,只需点击一个按钮。
- 实施现成的 ML 模型
它实现了监督和非监督算法,如 GLM 和 K-Means,以及一个易于使用的 web 界面,称为 Flow。
该工具对初学者和经验丰富的开发人员都有帮助。它为编码器配备了一个简单的包装器函数,用几行代码管理与建模相关的任务。经验丰富的 ML 工程师欣赏这一功能,因为它允许他们专注于其他更需要思考的建模过程(如数据探索和特征工程)。
总的来说,H2O 是解决机器学习和数据科学问题的强大工具。即使是初学者也能从数据中提取价值,建立稳健的模型。H2O 继续发展并发布新产品,同时保持全面的高质量。
数据有效性
数据验证是检查数据质量的过程。在此阶段,您要确保集合中没有不一致或缺失的数据。数据验证工具自动化了这一常规过程,并提高了数据清理的质量。
13.Hadoop
Hadoop 是一组可免费再分发的实用程序、库和框架,用于开发和执行在集群上运行的程序。这种存储和处理大数据的基础技术是 Apache 软件基金会的顶级项目。
该项目包括 4 个主要模块:
Hadoop Common 是一组基础设施软件库和实用程序,用于其他解决方案和相关项目,特别是用于管理分布式文件和创建必要的基础设施。
- HDFS 是一个分布式文件系统
Hadoop 分布式文件系统是一种在各种数据服务器上存储文件的技术,其地址位于一个特殊的名称服务器上。HDFS 为分布在计算集群节点之间的大文件提供可靠的逐块存储。
- YARN 是一个任务调度和集群管理系统
YARN 是一组系统程序,提供分布式应用程序的共享、可伸缩性和可靠性。
这是一个用于编程和执行分布式 MapReduce 计算的平台,使用许多计算机组成一个集群。
今天,Hadoop 中有一个完整的相关项目和技术生态系统,用于数据挖掘和机器学习。
14.火花
Apache Spark 帮助你处理半结构化的内存数据。Spark 的主要优势是性能和用户友好的编程界面。
该框架有五个组件:一个核心和四个库,每个解决一个特定的问题。
这是框架的核心。您可以将它用于调度和核心 I/O 功能。
Spark SQL 是处理数据时方便使用的四个框架库之一。为了运行得更快,该工具使用数据帧,并可以充当分布式 SQL 查询引擎。
这是一个易于使用的流数据处理工具。它将数据分解为微批量模式。Spark 的创造者声称,性能不会因此受到很大影响。
这是一个高速分布式机器学习系统。在对交替最小二乘(ALS)算法进行基准测试时,它比其竞争对手 Apache Mahout 库快 9 倍。MLlib 包括用于分类、回归和推荐系统的流行算法。
GraphX 是一个用于可伸缩图形处理的库。GraphX 不适合以事务方式变化的图形,例如数据库。
Spark 是完全自主的,但是如果需要的话,它也可以与其他标准的 ML 工具兼容,比如 Hadoop。
参见: Apache Spark 教程
数据探索
数据探索软件是为自动化数据分析而创建的,可提供简化的模式识别和轻松的洞察力可视化。数据探索是一个认知密集型的过程,你需要强大的工具来帮助你跟踪和执行代码。
15.Jupyter 笔记型电脑
Jupyter Notebook 是一个开发环境,在这里你可以立即看到执行代码及其片段的结果。与传统 IDE 的不同之处在于,代码可以分成块,并以任意顺序执行。您可以将文件加载到内存中,单独检查其内容,也可以单独处理内容。
MLOps open-source tool: Jupyter Notebook | Source
通常当我们谈论 Jupyter Notebook 时,我们指的是使用 Python。但是,事实上,您可以使用其他语言,比如 Ruby、Perl 或 r。
在云中使用 Jupyter 笔记本最简单的方法是使用 Google Colab。这意味着您只需启动浏览器并打开所需页面。之后云系统会给你分配资源,允许你执行任何代码。
好处是你不需要在电脑上安装任何东西。云处理一切,你只需编写和运行代码。
数据版本控制系统
在您完成之前,将会有多个 ML 模型版本。为了确保不丢失任何东西,使用一个健壮的、可信赖的数据版本控制系统,其中的每一个变化都是可跟踪的。
16.数据版本控制(DVC)
DVC 是为管理 ML 项目中的软件版本而设计的工具。这对于实验和将模型部署到生产中都很有用。DVC 运行在 Git 之上,使用 Git 的基础设施,并且有相似的语法。
- 全自动版本控制
DVC 创建元文件来描述需要保存在项目的 Git 历史中的管道和版本控制文件。如果你在 DVC 的控制下转移一些数据,它将开始跟踪所有的变化。
- 基于 Git 的修改跟踪
您可以像使用 Git 一样处理数据:保存一个版本,发送到远程存储库,获取所需的数据版本,在版本之间进行更改和切换。DVC 界面直观清晰。
总的来说,DVS 是一个优秀的数据和模型版本化工具。如果您不需要管道和远程存储库,您可以为在本地机器上工作的特定项目版本化数据。DVC 可以让你快速处理数十亿字节的数据。
然而,它也允许你在团队之间交换数据和模型。对于数据存储,可以使用云解决方案。
17.迟钝的人
Pachyderm 是一个类似 Git 的工具,用于跟踪数据的转换。它跟踪数据沿袭,并确保数据保持相关。
厚皮动物是有用的,因为它提供:
您希望您的数据从原始数据到最终预测都是完全可追溯的。凭借其数据版本控制,Pachyderm 为您提供了一个完全透明的数据管道视图。这可能是一个挑战;例如,当多个转换器使用同一个数据集时,很难说为什么会得到这样或那样的结果。
Pachyderm 向数据科学模型的可重复性迈进了一步。你永远可以放心,你的客户在模型交给他们之后,也能得到同样的结果。
Pachyderm 将您的所有数据存储在一个中心位置,并更新所有更改。任何转变都不会被忽视。
测试和维护
ML 开发的最后一步是主要工作完成后的测试和维护。特殊的工具可以确保结果在长期内是可重复的。
18. Flyte
MLOps open-source tool: Flyte | Source
如果你正在寻找一种工具来跟踪和维护你的机器学习项目,看看 Flyte 。这是 Lyft 发布的一个维护机器学习项目的平台。
- 大型项目支持
Flyte 帮助他们执行对其业务至关重要的大规模计算。众所周知,扩展和监控所有的管道变更非常具有挑战性,尤其是当工作流具有复杂的数据依赖性时。Flyte 成功地处理了更高复杂性的任务,因此开发人员可以专注于业务逻辑而不是机器。
这个工具还可以帮助你确定你建立的机器学习模型的可重复性。Flyte 跟踪变更,进行版本控制,并将模型及其依赖项封装起来。
创建 Flyte 是为了支持 Python、Java 或 Scala 中的复杂 ML 项目。
在发布给公众之前,Flyte 已经在 Lyft 内部进行了测试。它有着管理 7,000 多个独特工作流的良好记录,每月总计执行 100,000 次。
开源的 MLOps 工具是必要的。它们帮助你自动化大量的日常工作,而不需要花费大量的金钱。成熟的平台为不同的目的提供了广泛的工具选择,可以满足您的任何技术需求。然而,在实践中,结果往往是您仍然需要将它们与使用起来更直观的专用工具集成在一起。幸运的是,大多数开源工具使集成尽可能无缝。
然而,关于开源工具需要理解的一件重要事情是,你不应该期望它们是完全免费的:基础设施、支持和项目维护的成本仍将由你承担。
原文:https://web.archive.org/web/https://neptune.ai/blog/best-practices-docker-for-machine-learning
可以使用 Docker 工具创建、部署和执行应用容器。它只是一个打包的应用程序代码包,以及运行它所需的库和其他依赖项。一旦被执行,一个 Docker 镜像就会变成一个容器,包含运行一个应用程序所需的所有组件。
然而,这样做有什么意义呢?作为一个数据科学家或者机器学习工程师,这有什么用?一个关键词,尤其是对数据科学家来说,就是可再现性。使用 Docker,可以开发一个基本的分类器,如果您的系统有一个没有更新的库和程序版本,并且由于您有在这些版本上运行的某些应用程序而无法更新,则该分类器可以保证很好的再现性。这是一个体面且简单的用例。
但是在我们深入探讨之前,让我们先从一些基础开始。
Docker 是一个使用容器开发和部署应用程序的工具。容器是基于这样一个概念构建的,您可以将您的代码及其依赖项捆绑到一个可部署的单元中。容器已经使用了很长时间。有些人声称它们是由 Sun Microsystems 创建的,并在 2005 年作为区域作为 Solaris 10 的一部分发布,而其他人则声称 BSD Jails 是第一个实现的容器技术。考虑用于联运的集装箱作为视觉解释的例子。
一旦您将产品(代码和依赖项)放入容器中,您可以通过船只或火车(笔记本电脑或云)发送它,当它到达目的地时,它将继续运行,就像发货前一样。
货船类比
Docker – cargo ship analogy | Source
有一个有用的比较可能有助于解释 Docker 是如何工作的。如你所知,这些物品是用不同的集装箱运输到世界各地的。此外,这种隔离很重要,这样一个集装箱中的商品就不会影响旁边集装箱中的商品。
为了运输不同的物品,集装箱可以是单一的尺寸和材料,也可以是不同的尺寸和材料,这取决于所运输的货物种类。
有一个经理通常负责登船、离船和维护船上的集装箱。在这个场景中,服务器上运行的 Docker 引擎充当管理器。
作为船主,你可以指示船舶经理在船上装卸集装箱。类似地,docker 也可以在服务器上执行、部署和关闭您的应用程序。
对于容器,您需要一张图片作为容器大小和内容的模板。正是在这里,你需要一个蓝图,即图像,从这里建立这个容器。Docker hub 是一个存储图像的好地方,服务器上的 Docker 引擎会处理剩下的事情。
Docker 中的再现性
无论是开发模型还是进行数据分析,尽可能准确地再现结果是非常重要的。考虑以下场景:您被要求对一个数据集合进行探索性的数据分析。创建一个包含数据集和一些 Python 库的本地环境,然后启动 Jupyter 笔记本。分析数据集并开发初步模型后,您决定与同事和朋友分享您的发现。
问题是你的同事要复制你的分析,他们也必须复制你的整个堆栈。Docker 允许您快速轻松地复制您的工作环境。它使得标准化项目中使用的库的版本、随机种子、甚至操作系统成为可能,这样,在不同的机器上工作的同事可以一次又一次地生成相同的结果。
Docker 中的便携性
作为一名数据科学家,能够从本地工作站平稳地转移到提供额外资源(如 CPU、RAM、GPU 等)的外部集群是非常有益的。此外,我们希望能够尝试社区正在创建和共享的新框架和工具。
Docker 使您能够将代码和依赖项打包到容器中,这些容器随后可以移植到各种计算机上,即使底层硬件、操作系统等与原始机器不同。移动性的另一个好处是能够相对简单地与各种不同的同事一起工作。
作为一名数据科学家,在您开始处理已建立的代码库之前,您不必花费一整天(或一周)来设置环境。如果项目已经被“归档”,你将能够立即开始工作。
在 Docker 中部署
Docker 的使用简化了部署机器学习模型的过程。这是一个你是否想和别人分享你的模式的问题。这很简单,只需利用 Kubernetes 技术将您的模型包装在 API 中,然后放入容器中。本节中省略了几个小步骤。回想一下,从 Docker 到模型部署的转换过程相当简单。容器管理技术和方法可以用于我们的模型部署。
Docker 中的集成
云提供商和物理服务器可以使用 Docker 云来构建 Docker 节点。在您的物理服务器上安装 Docker 云代理,或者安全地连接您的云提供商凭据。然后,您可以在几秒钟内“构建节点集群”。
AWS、Azure、DigitalOcean、Packet 和 Softlayer 都与 Docker Cloud 相连,用于供应和管理。要管理 Docker Cloud (Google Cloud,Rackspace)不支持的基础设施上的节点,您还可以管理连接到互联网的物理 Linux 系统上的节点。
1.构建 Docker 图像
什么是 Docker 文件?
Docker 文件是一个文本文档,包含生成特定图像所需的所有命令,Docker 可以读取这些命令来自动构建该图像。在使用 docker image build 命令创建映像时,应该尽可能少地进行设置或更新,以便可以随时暂停和/或销毁容器,并轻松地重新构建或替换容器。
什么是图像?
除了 Docker 之外,任何使用过虚拟机的人都很熟悉 Docker 映像的使用。在其他虚拟机设置中,映像通常被称为“快照”。它们是 Docker 虚拟机在特定时间和地点的快照。虽然虚拟机快照类似于 Docker 映像,但还是有一些不同之处。
首先,Docker 图像是不可变的。在你制作了一张唱片之后,你可以删除它,但是你不能改变它。如果需要新的快照,从头开始创建新的映像。
在 Docker 世界中,不变性(不改变的能力)是一个有价值的工具。一旦您设置了 Docker 虚拟机并创建了一个映像,您就可以确定该映像将一直运行。这使得在您的环境中试验新特性变得简单。
你可能会尝试新的应用程序或者重组你的文件。因此,您可以确定您的运行实例不会受到影响。您的 Docker 虚拟机将始终能够关闭并继续使用您当前的映像,就像什么都没有改变一样。
构建映像的最佳实践
- 使用官方图片:在项目中,如果你是 Docker 的新用户,建议你使用 Docker 官方图片。这些照片有全面的文档,它们鼓励最佳实践,同时也迎合了最广泛的潜在应用。
修改 Docker 图像的一个典型原因是减小图像的尺寸。当安装需要优化代码的模块时,一个完整的构建工具链包含在许多编程语言堆栈映像中。一个更有经验的用户可以创建一个定制的映像,其中只包含绝对必要的预编译库,从而节省磁盘空间。
- 为了获得最佳效果,使用一个可靠的基础映像:当你在一个不可信的或未维护的映像上构建容器时,你将继承该映像的所有缺陷和漏洞。所以作为一般的经验法则,你应该遵循以下规则:
- 可信的存储库和供应商应该优先于由身份不明的个人创建的图片。
- 使用自定义映像时,在构建您自己的基础映像之前,请检查映像源和 docker 文件。在公共注册表中发布的图像不能保证是从 docker 文件中生成的。不保证以后会更新。
- 。dockerignore :当我们运行 docker build 命令时,为了防止映像中包含不需要的文件和目录,我们可以创建一个. dockerignore 文件,其中包含我们不想在映像中包含的文件和目录。如果不包含这个文件,应用程序的处理时间可能会缩短。
- 容器必须是短暂的:短暂的容器应该由 docker 文件中指定的映像生成。当它在被重建和替换为新容器之前可以被停止和销毁时,它被称为临时容器,只需要最少的设置和配置。一次性容器,如短暂的容器,可能被认为是这样的。对于每个新的容器实例,与之前的没有任何联系。在创建 Docker 图像时,应该尽可能多地使用短暂的模式。
- 避免安装不必要的应用程序:由于承诺以后会用到它,安装比您需要的更多的应用程序可能很诱人,但是为了减小映像的大小和复杂性,只安装实际需要的。例如,在使用 curl 包之后,最好将其移除,因为在构建容器的过程中,很多时候只需要使用它一次。
- 将每个论点分成几行:以这种方式对论点进行排序有很多好处。您可以更容易地确定是否有修改,这有助于检测包中的重复。
让我们看看下面的例子是如何工作的!
例一
例二
没有顺序的行很难阅读。由于理解它们需要大量的脑力劳动和注意力,我们倾向于在代码评审时跳过它们。那么,你认为应该首选哪种方式呢?
- 利用 Docker 缓存:Docker 图像的一个迷人且有用的特性是图层。层用于构建 Docker 映像,每个层都有特定的用途。Dockerfile 指令与每一层相关,并描述了映像的文件系统在执行前和执行后的变化。为了节省构建时间,Docker 会缓存层。Docker 将简单地重用缓存中的现有层,而不是重新创建一个类似的层。
另一方面,添加不是绝对必要的层会增加工作量。因为 Docker 层是文件系统,所以许多不需要的层都有性能问题。用应用所有依赖性的单个 run 命令建立单个缓存比将其分成许多级更有效,因为每个 RUN 命令产生一个新层。通过找到并使用可缓存的图层,从长远来看,您将节省大量时间。
- 通过将您的断言压缩成一个来减少层的数量:docker 文件中的每条指令都向图像添加一层。指令和层的数量应保持在最低水平,因为这会影响性能和构建时间。因此,当执行运行、复制或添加命令时,请尝试用一句话来执行。
2.构建容器
什么是容器?
- 应用程序可能被打包在容器中,这些容器不过是孤立的环境。容器的目标是分离和支持跨多个平台的应用程序的移动性。
- 在容器中,映像提供了操作一组进程所需的所有文件。通过容器,应用程序与共享同一个内核的其他进程隔离开来,因此没有一个进程会影响其他进程的工作。
- 集群是容器的集合。在集群中,存储和处理能力等资源可以共享,这使得并发操作几十个甚至几百个容器变得可行。
- 容器在软件开发环境中非常有用。DevOps 方法基于它们的适用性,可以帮助运营和开发部门。当涉及到开发应用程序时,容器与环境的特性无关,例如操作系统,因此它们可以很容易地共享和访问,当涉及到在同一内核上运行应用程序时,它们不像虚拟机那样复杂。
- 尽管它们很相似,但容器不是虚拟机,因为容器可能与操作系统共享同一个内核,但虚拟机不能。
构建容器的最佳实践
- 每个过程一个容器
将容器视为可以同时运行几个不同方面的虚拟计算机是一个典型的错误。容器可能以这种方式工作,但是这减少了容器架构的大部分好处。例如,同时运行标准 Apache/MySQL/PHP 栈的所有三个组件是很诱人的。然而,建议的方法是利用两个或三个不同的容器:一个用于 Apache,一个用于 MySQL,如果您使用 PHP-FPM,可能还有一个用于 PHP。
由于容器的生命周期与其包含的应用程序相同,因此每个容器只能有一个应用程序。当一个容器被启动时,应用也是如此,当应用被关闭时,容器也是如此。下图描述了这种推荐做法。
建议每个容器只运行一个进程有几个原因:
- 假设您的应用程序架构中有两个 web 服务器和一个数据库。可以在一个容器中运行所有三个服务,但是最好在不同的容器中运行每个服务,这样可以更容易重用和扩展。
- 每个服务都有一个独立的容器,允许您横向扩展一个 web 服务器来容纳额外的流量。
- 将来您可能需要一个容器化的数据库用于另一个服务。在这种情况下,可以重用同一个数据库容器,而不需要两个额外的服务。
- 当容器被耦合时,日志记录变得更加困难。
- 由于要处理的外围应用面积更小,因此生成安全更新或解决问题要简单得多。
2。给你的容器贴上标签
说到维护图像,Docker 标记是一个非常有用的工具。它有助于维护 docker 映像的多个版本。下面是一个构建标签名为 v1.0.1 的 docker 图像的示例
您可以使用几个标签:
- 使用 稳定标签 来保留容器的基本图像。避免将这些标记用于部署容器,因为这些标记会经常改变,这可能会导致生产环境中的差异。
- 使用 唯一标签 进行部署。使用独特的标记,您可以轻松地将生产集群扩展到多个节点。它可以防止不一致,并且主机不会获取任何其他 docker 映像版本。
建议在部署的图像标记上禁用写启用。这可以防止部署的映像从注册表中意外删除。
3.在 Docker 中运行您的模型
为什么要在 Docker 中放一个机器学习模型?
挑战
- 构建一个在我们的 PC 上运行的机器学习模型的过程并不困难,但与一个希望在不同类型的服务器上大规模利用该模型的客户合作确实具有挑战性。可能会出现各种问题,包括性能问题、程序崩溃和糟糕的优化。
- 我们的机器学习模型可以用 Python 这样的单一编程语言实现,但应用程序将需要与用其他编程语言编写的其他应用程序进行通信,以进行数据输入、预处理、前端等。,这本身就是一个挑战。
使用 Docker 的好处
- 由于每个微服务可能使用不同的语言,docker 支持可伸缩性和独立服务的简单添加或删除。Docker 的优点包括可复制性、可移植性、易于部署、增量更新、轻量级和简单性。
- 数据科学家最大的担心是他们的模型不能准确反映现实生活的结果,或者当它与其他研究人员共享时。在某些情况下,模型不是问题所在;更确切地说,是复制整个堆栈的需要。使用 Docker,可以在任何系统上复制训练和操作机器学习模型所需的工作环境。
- 使用 Docker,代码和依赖项可以一起打包到可移植的容器中,这些容器可以在各种不同的主机上运行,而不用考虑硬件或操作系统。
- 训练模型可以在本地系统上构建,并简单地转移到具有更多资源(如 GPU、更多 RAM 或强大的 CPU)的远程集群。OpenShift 是 Kubernetes 的一个发行版,通过将模型封装到容器中的 API 中,并使用类似这样的技术部署容器,它使部署变得简单,并使您的模型对世界开放。
- 可以使用 Docker 跟踪容器映像版本,以及谁开发了它们,用了什么。版本也可以回滚。此外,即使您的机器学习应用程序所依赖的服务之一正在升级、修复或不可用,它也可能会运行。例如,如果必须更新包含在整个解决方案中的输出消息,则不需要与其他服务交互并更新整个程序。
4.跟踪模型的指标
即使在模型开发之后,机器学习(ML)的生命周期也远未结束;事实上,这仅仅是这一进程的开始。要将您的模型投入生产,下一步是部署和监控您的模型。为了最大限度地利用你的机器学习模型,只要你在使用它,你就需要密切关注它。
将 ML 模型监测视为频繁的健康检查。作为一项操作任务,模型建模可以帮助您确保您的模型以最佳状态工作。
模型监控的重要性
监控您的 ML 模型的错误、崩溃和延迟是机器学习生命周期中模型部署之后的操作阶段的一部分。
模型漂移,或模型在使用过程中的退化,是为什么需要模型监控的最直接的原因。一个模型的预测能力可能下降有几个原因-
- 以前未见过的信息:如果没有足够的标记数据或者训练有计算限制,就不可能避免你的机器学习模型产生错误或错误结果的数据样本。
- 变量连接和周围环境的变化 : ML 模型根据建立时的变量和参数进行优化。想想 20 年前开发的垃圾邮件检测算法现在有多有效。二十年前,互联网甚至还不存在!这种方法可能无法跟上垃圾邮件不断变化的本质,因此它是否有效值得怀疑。这个例子说明了环境的变化。
- 上游数据的变化:这是一个术语,用来描述对运行数据管道的修改。数据科学团队通常无法完全控制输入数据所来自的所有系统。虽然数据是以摄氏温度记录的,但一个完全独立的软件工程团队可能会将变量的测量值改为华氏温度。例如,如果有人试图确定平均温度,这可能会产生严重的影响。
ML 实验跟踪工具
出于上一节提到的原因,很明显,机器学习模型的登台环境永远不会等同于生产环境,因此您必须密切关注您投入生产的任何 ML 模型。
有很多技术可以帮助我们做到这一点。首先,我们有知名的工具,比如 MLFlow 、 TensorBoard 、海王星、 DVC 、*亚马逊 SageMaker、*等等。
为了更好地理解,让我们看一下 Neptune,看看一旦通过 docker 部署了模型,我们如何通过这个工具来检查我们的模型。
海王星的简短概述
Neptune 是 MLOps 的 元数据存储,为运行大量实验的团队而构建。
它为您提供了一个记录、存储、显示、组织、比较和查询所有模型构建元数据的单一位置。
Neptune 习惯了 for:
- 实验跟踪:在一个地方记录、显示、组织和比较 ML 实验。
- 模型注册:对训练好的模型进行版本化、存储、管理和查询,以及建模元数据。
- 实时监控 ML 运行:实时记录和监控模型培训、评估或生产运行
如果您想了解更多信息,请查看文档或探索应用中的示例项目(无需注册)。
海王星码头工人
让我们按照一步一步的过程来看看我们如何在容器化的 Python 脚本或应用程序中记录实验元数据。
第一步:将 Neptune 添加到您的代码中
让我们训练一个简单的线性回归模型,并将其放入 Docker 容器中。
为了观察我们的模型在不同数据下的表现,我们运行了 100 次,每次都使用 Numpy 的不同随机数据。RandomState()。因此,每一次,我们都会收到一个更新的度量值,这个值用。日志功能。
现在,lr 是我们的模型,test_mse 是我们的度量。我们如何让同样的结果在不同的机器上重现呢?我们用 Docker!
步骤 2:更新 requirements.txt 文件并创建 Dockerfile 文件
因为现在我们正在使用 Neptune 包,所以我们需要将它包含在我们的需求文件中。
现在创建一个 Dockerfile 文件,它将:
- 指定基本容器映像,我们将从该映像构建我们的
- 在更新的 requirements.txt 中安装依赖项
- 将我们的训练脚本复制到容器映像,并定义执行它的命令。
步骤 3:构建并运行 docker 容器传递 API 令牌
通过运行以下命令,从上一步中创建的 docker 文件构建 docker 映像:
现在,我们用我们的凭证运行容器。
运行 docker 容器后,您会在终端上看到一个链接。点击链接打开海王星跑步,观看您的模型训练直播。
Monitor model training runs live in Neptune
在我们的示例中,我们记录 MSE,这可以更改为对您的模型和用例有意义的任何指标。
互联网上的许多教程和文章只关注如何建模和理解度量。在科学过程中,一位杰出的科学家或一家小公司的雇员将不得不接受同行评议。
留意你的模型在新数据和变化下的表现。即使你对学习 MLOps 不感兴趣,你也无法从强化课程中获益。我希望这些材料对你的日常生活有所帮助!
这里有一些参考资料,可以帮助你更好地理解 Docker 最佳实践,以及机器学习从业者如何从中受益。
- 关于如何为你的机器学习模型构建和运行容器的更多信息,参见本文。
- 如果你是初学者,这篇文章将帮助你掌握模型监控的基础知识。
- 这篇文章有更多关于使用 Docker 进行深度学习应用的细节。
- 最后,这是一个关于机器学习 Docker 的 3 篇文章系列。
原文:https://web.archive.org/web/https://neptune.ai/blog/best-practices-for-data-science-project-workflows-and-file-organizations
自从 2012 年《哈佛商业评论》发表文章称数据科学是 21 世纪最性感的工作以来,这个领域已经席卷了所有行业。数据科学工作从来不会错过排名第一的最佳工作列表——一个工作列表每天可以收到 200-300 名申请人也就不足为奇了。福布斯的一篇文章称,“从 2010 年到 2020 年,世界上创建、捕获、复制和消费的数据量从 1.2 万亿千兆字节增加到 59 万亿千兆字节,几乎增长了 5000%”。按照目前的速度,我们完全淹没在数据中,各行各业的企业都在寻找利用数据的方法。
对一些人来说,这可能似曾相识,但对经历过软件工程繁荣时期的其他人来说,他们可能会看到一个熟悉的模式正在形成。实际上,每个从事软件工程的人都想保持或发展他们在市场中的竞争优势,因此他们决心向市场交付高质量的产品,这反过来导致了方法和所用工具的革命——一些例子包括敏捷、DevOps、CI/CD 等等。
然而,软件工程和数据科学的不同之处在于,软件工程师本质上是为了构建而学习,而对于数据科学家来说,学习通常发生在构建之后。尽管如此,这并不是说数据科学没有任何东西可以从它的表亲软件工程中学到。事实上,现实恰恰相反。
通常,工作流描述了人们执行任务以完成工作的方式。为了说明一个典型的工作流程是什么样子的,我们将使用图表或清单列出一系列应该按顺序完成的步骤。
工作流由编排好的可重复的业务活动模式组成,通过将资源系统地组织成转换材料、提供服务或处理信息的流程来实现。它可以描述为一系列操作,声明为一个人或一组人的工作,一个员工组织,或者一个或多个简单或复杂的机制【来源 : 维基百科
这是数据科学工作流的本质;数据科学工作流阐述了数据科学项目中采取的不同步骤。由于工作流的目的是说明如何完成工作,因此使用定义良好的数据科学工作流非常有用,因为它可以提醒所有团队成员哪些工作已经完成,哪些工作尚未完成。
“数据科学工作流来自哪里?”的简单答案是软件工程,但是和大多数事情一样,它真的没有那么简单。首先,软件工程师是工程师,因此无论何时他们学习新东西,目标都是构建。另一方面,数据科学家在成为工程师之前是科学家(如果他们有任何工程能力的话),因此,只有在他们学会之后才能进行构建。
因此,数据科学家与代码的关系不同于工程师。数据科学家很少会在做实验时考虑编码最佳实践,相反,他们希望从实验的见解中学到一些有价值的东西。因此,数据科学家利用代码从数据中获得洞察力,并得出项目开始时制定的有趣问题的答案。
尽管存在差异,数据科学团队使用的最佳实践实际上是从软件开发最佳实践中借鉴来的。尽管存在大量的开发工作流,但是它们之间的一个共同点是,它们通常都包括定义规范、编写代码、代码审查、代码测试、代码集成以及将系统部署到生产环境中的步骤,以便它能够为业务服务。
同样,数据科学工作流也有其自身的共性。
由于数据科学问题的本质——我们从一开始就不知道结果——很难定义一个在处理数据科学问题时应该普遍使用的具体模板。根据问题和数据的不同,您希望如何完成任务的路线图可能会有所不同,因此团队需要定义一个合适的结构。
尽管如此,当我们处理许多不同的问题时,不管数据集如何,我们都会看到非常常见的步骤。让我们来看看这些步骤。
注 :下面定义的过程绝不是线性的。数据科学项目是相当迭代的,许多阶段是重复和/或重新访问的。
定义问题
定义一个问题并不像看起来那么简单,因为有许多因素需要考虑,以确保解决正确的问题。定义问题时要考虑的问题如下:
- 我们试图解决什么问题?
- 我们的客户在使用我们的产品/服务时面临哪些挑战?
- 我们想更多地了解哪些见解?
- 我们目前面临哪些问题?
清楚地陈述问题的能力更像是一门艺术,但这是进行任何数据科学项目之前必不可少的第一步。如果没有一个团队所有成员都遵循的指南针,很容易花费大量时间做大量事情,而在增加业务价值方面没有太大进展。
数据收集
数据是工业数据科学项目中出现瓶颈最多的地方;很少有我们需要的所有数据都是现成的,因此,我们知道一些获取数据的技术是很重要的。这种现象被称为数据采集。
根据维基百科的描述,数据采集被描述为对测量现实世界物理条件的信号进行采样,并将结果样本转换为计算机可以操纵的数字数值的过程[ 来源 : 维基百科。
获取数据的方法有很多种,下面是一些想法:
- 公开日期
- 产品干预
- 数据扩充
- 从本质上讲,数据可以来自各种来源——这里有一些问题,但是详细描述它们超出了本文的范围。
数据探索
一旦收集的数据可供数据科学家访问,花时间熟悉这些数据是很重要的。
在这一阶段,在寻找模式和异常的同时,对数据进行假设是很重要的。你还想确定正在解决的问题的类型,例如,这是监督学习任务还是非监督学习任务?是分类任务还是回归任务?我们是在试图预测什么还是在推断什么?
监督学习包括建立一个模型,该模型学习基于输入-输出对的例子将输入映射到输出的函数。
- 无监督学习涉及建立一个从无标签数据中学习模式的模型。
- 分类是监督学习的一种形式,指的是模型输出为离散标签的建模问题。
- 回归是监督学习的一种形式,指的是模型输出连续的建模问题。
- 主要的要点是,我们希望足够好地理解我们的数据,以开发假设,当我们进入工作流的下一个阶段——数据建模时,我们可能会测试这些假设。
建模
一旦我们对数据进行了全面的研究,我们就会对我们所面临的问题类型有一个更好的了解,并且有希望在前一阶段产生一些我们可以尝试的假设。
由于数据科学是一门科学,我们可能需要测试各种不同的解决方案,然后才能得出我们希望如何推进项目的结论。每个实验或迭代将涉及 3 个阶段;
构建涉及使用训练数据学习和推广机器学习算法。
- 拟合涉及测量机器学习模型归纳为从未见过的与训练数据相似的例子的能力。
- 验证涉及使用来自训练数据的不同部分的测试数据来评估训练的模型。
- 阅读如何在专业视图中使用深入分析来比较 Neptune 中的多次运行。
传达结果
许多数据科学家在职业生涯的早期阶段沉迷于机器学习算法和艺术状态,然而,随着时间的推移,许多人开始意识到他们的注意力应该转移到所谓的软技能上。
清楚地传达您的结果是作为一名数据科学家最重要的技能之一,因为您将会做大量的工作。在这一阶段,数据科学家需要将发现、结果和/或故事反馈给各种利益相关者。在大多数情况下,这些利益相关者并不总是完全扎根于数据科学的人,因此能够改变您的信息以使您的受众能够理解是数据科学家工作流程中非常重要的一部分。
现有工作流程
Blitzstein & Pfister 工作流程
也被称为数据科学流程,Blitzstein 和 Pfister 为哈佛 CS 109 课程精心设计了一个数据科学工作流框架。Blitzstein 表示,该课程的目标是为决定参加该课程的人介绍数据科学调查的整体流程。
Blitzstein 和 Pfister 工作流由数据科学项目的 5 个关键阶段组成;
第一阶段:问一个有趣的问题
- 第二阶段:获取数据
- 第三阶段:探索数据
- 阶段 4: 对数据进行建模
- 第 5 阶段:沟通并可视化结果
- 如前所述,数据科学工作流不是一个线性过程,相反,它是一个非线性的、迭代性极强的过程。数据科学过程强调首先建立一个问题的重要性,该问题将指导您的工作流,以及迭代的重要性,这可以通过将每个阶段与下一个阶段和之前的上一个步骤链接起来的线条来看出。
CRISP-DM
CRISP-DM 是数据挖掘跨行业标准流程的缩写,是最受认可的数据科学工作流框架之一;CRISP-DM 的想法是创建一个可以跨行业使用的标准化流程。CRISP-DM 由 6 个迭代阶段组成,每个阶段都有应该完成的指定任务,以及一组可交付成果(即文档)。类似于 Blitzstein 和 Pfister 的工作流程,项目可以根据需要返回到之前的阶段。
如上述流程图所示,CRISP-DM 工作流程包括以下 6 个关键阶段:
第一阶段:业务理解
- 第二阶段:数据理解
- 第三阶段:数据准备
- 第四阶段:建模
- 第五阶段:评估
- 第六阶段:部署
- OSEMN
OSENM 最初是在希拉里·梅森和克里斯·维金斯 2010 年发表的一篇名为的博客文章中描述的,这是一种数据科学的分类法.) ,人们经常通过回忆 OSENM 听起来有多接近“possum”或“awesome”来记住这个框架。
然而,OSEMN 是一个首字母缩写词,代表着Ob ain、 S crub、 E xplore、 M odel 和 i N terpret。很可能大多数数据科学家对每个术语都很熟悉,并且在研究每个术语时应该会感到舒适。虽然数据科学将需要 OSEMN 的组合元素,但作者确定“O”和“S”任务需要更多的数据黑客技能,而“E”和“M”需要更多的机器学习技能,因此没有数据科学家会在每个步骤上都是专家。
由于没有图像说明,我将分解每个步骤。
#1 获取
为了执行数据科学,我们需要数据,因此该框架将“O”(获取)定义为工作流中的第一步。作者不赞成手动数据收集过程(即使用鼠标点击、从文档中复制和粘贴等)。)效率低下且不可扩展。
根据作者的说法,获取数据的最有效方法是采用一系列工具,这些工具将允许您针对您的问题自动获取数据。这些工具包括 unix 命令行工具、SQL、web 抓取和 shell 脚本。
注意: 另外,作者提到 API 对于访问数据至关重要
#2 擦洗
更常见的情况是,获得的数据会非常混乱——我们可以认为混乱的数据是被破坏的(即缺少值)。数据科学家经常在工作流程的这一部分花费大量时间,许多人会同意这可能是 21 世纪最性感工作中最不性感的部分。
对干净数据的简单分析可能比对嘈杂和不规则数据的复杂分析更有成效–数据科学的分类法
尽管如此,确保数据的干净、统一和一致可以在数据项目中获得极大的回报,因为你总是会得到你输入的内容——如果你输入垃圾,那么你可能会得到垃圾结果。
#3 探索
数据科学家通常将“探索”阶段称为探索性数据分析(或 EDA)。EDA 背后的想法是收集关于手边数据的情报。有了这种智能,数据科学家就可以收集想法,当我们进入数据科学工作流程的下一个阶段时,可以进一步测试这些想法。
在 Python 中执行 EDA 的一些有用工具有:
熊猫进行数据操作
- Matplotlib 用于数据可视化
- Jupyter 笔记本电脑易于使用的交互式数据科学环境
- 降维PCA 等方法
- 聚类算法寻找数据中的自然分组
- #4 型号
模型阶段是我们实施各种机器学习算法来预测某个结果的阶段。我们将最佳模型定义为最适合我们预定义的评估度量的模型。
“通常‘最佳’模型是最具预测性的模型”——数据科学的一种分类法
#5 解释
为了确定模型的表现如何,我们通常在训练期间模型不可用的新的看不见的实例上验证它的表现——想法是模型将很好地推广到新的看不见的实例。
根据作者的说法,模型的解释能力定义了模型建议接下来进行的最有用/最有趣的实验的能力(这是因为模型输出的解释应该提供对正在解决的问题的更多洞察)。
一个数据科学家读到这里可能会觉得工作流似乎是显而易见的,但是在开始一个项目之前定义一个工作流仍然有巨大的价值。因此,团队的所有成员都会确切地了解正在发生什么,需要做什么,并且让团队的其他成员相互负责。
组织您的数据科学项目
注:好奇的读者可能想读读 隐藏在机器学习系统 中的技术债。
“分层方法被认为是比整体实施协议更好的做法,因为分别实施概念上不同的问题有几个好处”Buschmann 等人(1996 年)
结构描述了数据科学项目开发中元素的预定义排列和组织。开始时可能会很耗时,但决定记录并遵循一个结构对数据科学团队来说非常有用——这往往会在整个项目过程中产生回报。
为什么结构很重要?
对于那些还没有被说服的人,这里有两个原因可以解释为什么在项目开始时花点时间来建立一个结构是非常有益的。
你未来的自己会感谢你
我们在本文前面探索的所有工作流本质上都是非常迭代的——仅此一点就足以证明可再现性的重要性。在将来的某个时候,我们可能需要重现我们在某个实验中做过的事情,但是作为一个从业者,这可能是你最不想去的地方。我们更关心下一步可以尝试什么实验,我们从当前的实验中学到了什么,什么有效,什么无效。
数据科学家参与快速实验、可视化和分析并不罕见,但是,这种类型的工作状态不适合结构性思维——实验是混乱的!
没有一个正式的结构,回到过去的实验/项目本身就是一个全新的挑战。作为脚本的创建者,如果不清楚最终的训练脚本是 train.py、new_train.py 还是 last_train.py,那么您现在必须花时间浏览每个脚本,以确定哪个脚本实际上执行了代码——时间花得不值得。
当你告诉某人你能做某事,而他们告诉你去证明它,而当你尝试时,它却不起作用,这有多尴尬?没错。当你无法重现自己的实验时,这是同样的感觉。当你不得不执行不可避免的任务,重温你过去做过的工作时,保持一个良好的结构将会节省你很多时间。
别人会感谢你
数据科学是一个团队的事情,成为一个好的团队成员的一部分包括通过尽自己的力量来减轻队友的负担;由于数据科学可能被视为一项团队工作,因此在某个时候可能会有人想要重温您过去完成的某些东西(例如,他们可能想要扩展它、验证它、展示它、学习它等等。).
这个人可能是一个当前的团队成员,一个刚刚被雇佣的人,或者是一个对组织内的项目完全陌生的人。通过保持良好的结构,你可以为将来可能需要使用你的作品的人节省大量时间。
拟议布局
数据
Image by Author
首先是数据目录,它存储了项目所需的所有数据。在整个项目过程中,我们会处理不同类型的数据,因此我们最好将它们分开,以避免在进行实验时出现任何复杂情况。下面是我们如何在父数据目录下对不同的数据目录进行排序:
Raw :存储数据的本地副本可以确保数据的稳定性——如果数据库每天更新,可能会干扰您对当前状态的数据执行的任务。该目录中的数据是不可变的,这意味着存储在该目录中的数据将始终保持其原始状态。
- 外部:从第三方来源提取的数据。存放在这个目录中的数据应该是不可变的(也就是说,您不应该将您以任何方式转换的数据保存到这个目录中)。
- 过渡:任何转换(即连接、合并等。)取得的原始数据和外部数据(如果有的话)将被存储在临时目录中。该目录中的数据是任何特征工程的数据。
- 已处理:当我们对数据执行了特征工程后,我们可以继续将数据存储到已处理的目录中。这里,数据处于准备由机器学习算法消费的状态(如果需要)。
- 模型
模型目录是我们在训练后存储序列化机器学习算法的地方。我们在训练后存储我们的模型,因为我们需要恢复它们用于推断。但是,存储模型也是一个好主意,以防我们将来决定构建一个合奏,并比较模型,因为我们很可能会在项目过程中构建许多模型。
笔记本电脑
笔记本是制作原型、探索和交流见解的更好方式。笔记本电脑缺乏的是可扩展性和可再现性。虽然上图中没有说明,但将笔记本电脑分成单独的子目录也是一个好主意,例如;探索、原型等。
注意 :使用好的命名约定将有助于将每台笔记本区分开来
科学研究委员会
Src 是源代码的缩写,所有的源代码都保存在这里。很难确切地知道我们需要什么样的脚本,但是作为一个通用的经验法则,您总是可以期望检索数据、执行特性工程和建模数据。
最后的想法
The best way to determine your team’s workflow and how to go about structuring projects is to assess the members of the team then come up with a set of practices that best fit the values and goals of the team – it may also serve as a good idea to assess existing frameworks and see what could be taken from them.
原文:https://web.archive.org/web/https://neptune.ai/blog/best-reinforcement-learning-tutorials-examples-projects-and-courses
在强化学习中,你的系统通过基本的做事和观察发生的事情来学习如何直观地与环境互动——但显然,还有更多。
如果您对 RL 感兴趣,本文将为您提供大量新内容来探索这个概念。在过去的几年里,人们在强化学习方面做了很多工作,我收集了一些最有趣的文章、视频和用例,展示了不同的概念、方法和手段。
在此列表中,您会发现:
- 强化学习教程,
- 在哪里应用强化学习的例子,
- 有趣的强化学习项目,
- 掌握强化学习的课程。
所有这些内容将帮助你从 RL 新手走向 RL 专业。
1。 RL 与马里奥兄弟——在这个独特的教程中了解强化学习,它基于有史以来最受欢迎的街机游戏之一——超级马里奥。
2。人类的机器学习:强化学习——本教程是电子书《人类的机器学习》的一部分。它解释了强化学习的核心概念。有无数的例子,对强化学习算法未来的下一步的指导,以及易于理解的形象化解释。
3。强化学习介绍——这里有很多知识,解释得非常清晰和热情。它从强化学习及其过程和任务的概述开始,探索不同的强化学习方法,并以深度强化学习的基本介绍结束。
4。强化学习从零开始——本文将带你领略作者从零开始学习 RL 的过程。作者在 Unity Technologies 工作时学到了很多深度强化学习的知识。即使是初学者也能理解他对强化学习核心概念的概述。
5。自动化股票交易的深度强化学习–在这里,您将找到使用强化学习的股票交易策略的解决方案,该解决方案优化了投资流程,并使投资回报最大化。文章包括对三种组合算法的适当解释:近似政策优化(PPO)、优势行动者-批评家(A2C)和深度确定性政策梯度(DDPG)。每个算法中的最佳算法被协调以提供优化股票交易策略的解决方案。
6。强化学习在现实世界中的应用——探索强化学习框架在设计决策模型时是如何被低估的。对现实项目中 RL 应用的详细研究,解释什么是强化学习框架,并列出其在现实环境中的用例。它将应用缩小到 8 个学习领域,包括机器学习、深度学习、计算机游戏等主题。作者还探讨了 RL 与其他学科的关系,并讨论了 RL 的未来。
7 .。实用 RL——这个 GitHub repo 是一个关于强化学习的开源课程,在几个大学校园里教授。维护回购是为了支持在线学生选择两种语言环境,即俄语和英语。该课程提供聊天室、评分、常见问题解答、反馈表格和虚拟课程环境等服务。课程大纲涵盖了从 RL 基础到讨论和实现不同的模型、方法等等。
8。 用 Tensorflow 进行简单的强化学习第 0 部分:用表格和神经网络进行 Q 学习——关于用 TensorFlow 进行强化学习的教程系列的第一部分。作者研究了 RL 算法家族中的 Q 学习算法。首先实现算法的简单表格查找版本。关于使用 Tensorflow Q 算法实现神经网络的详细指南绝对值得您关注。
1。火箭工程——探索强化学习在火箭发动机开发领域的应用。你会发现很多关于机器学习在制造业中的应用的有价值的信息。看看为什么在制造火箭发动机时,强化学习比其他机器学习算法更受青睐。
2。交通灯控制——该网站提供了多个研究论文和项目实例,突出了核心强化学习和深度强化学习在交通灯控制中的应用。它有教程、数据集和相关的范例论文,使用 RL 作为主干,这样你就可以做出自己的新发现。
3。营销和广告——看看如何让一个 AI 系统从一个预先存在的可能不可行或不可用的数据集学习,以及如何通过创建广告内容让 AI 实时学习。这是他们利用强化学习的地方。
4。市场营销中的强化学习|作者 deep thi A R——这个例子关注的是市场营销人员需要适应的不断变化的商业动态。配备了强化学习方案的人工智能可以从实时变化中学习,并帮助制定适当的营销策略。这篇文章强调了不断变化的商业环境是一个问题,强化学习是一个解决方案。
5。机器人——这个视频演示了强化学习在机器人技术中的应用。目的是展示机器人自主强化学习代理的实现。在机器人学中使用强化学习的主要例子。
6。推荐——推荐系统广泛应用于电子商务和商业网站的产品广告中。在许多流行的平台,如 YouTube、Google 等,总会有一个推荐区。如果没有强化学习,人工智能从实时用户交互中学习,然后向他们建议内容的能力是不可能的。本文展示了强化学习算法的使用以及在推荐系统中的实际实现。
7 .。医疗保健——医疗保健是一个庞大的行业,有许多尖端技术与之相关,人工智能的使用并不新鲜。这里的主要问题是如何优化医疗保健中的人工智能,并使其基于实时体验进行学习。这就是强化学习的用武之地。强化学习对医疗保健有着不可否认的价值,因为它有能力调节终极行为。利用 RL,医疗保健系统可以以更低的成本提供更详细、更准确的治疗。
8。 NLP 这个例子可能对从事自然语言处理和游戏解决方案的学习者有所启发。
9。交易——深度强化学习在股票交易市场上是一股不可小觑的力量。这里的例子演示了如何使用深度强化学习技术来分析股票交易市场,并提供适当的投资报告。只有配备了强化学习的人工智能才能提供准确的股市报告。
1。CARLA–CARLA 是一款用于自动驾驶研究的开源模拟器。CARLA 的主要目标是支持自动驾驶系统的开发、培训和验证。凭借一套开源代码和协议,CARLA 提供了免费使用的数字资产。CARLA 生态系统还集成了运行条件强化学习模型的代码,具有独立的 GUI,以增强带有交通灯和交通标志信息的地图。
2。深度学习 Flappy Bird——如果你想以有趣的方式了解深度 Q 学习算法,那么这个 GitHub repo 就是为你准备的。该项目使用深度 Q 网络来学习如何玩 Flappy Bird。它遵循强化学习家族中的深度 Q 学习算法的概念。
3。 Tensorforce 它建立在 Google 的 Tensorflow 框架之上。它包含高级设计实现,如基于组件的模块化设计、RL 算法和应用的分离以及完整的张量流模型。
4。Ray–Ray 的主要目标是为构建分布式应用程序提供通用的 API。这个项目利用了 RLlib 包,这是一个可扩展的强化学习库,可以加速机器学习工作负载。
5。Neurojs——JavaScript 流行,开发网站必备。如果您需要在 JS web 项目中加入强化学习,该怎么办?向 Neurojs 问好,这是一个在浏览器中使用强化学习进行深度学习的 JavaScript 框架。它也可以执行一些神经网络任务。
6。马里奥 AI——如果你正在寻找一个具有模拟游戏的强化学习算法的项目,这个项目肯定会引起你的兴趣。Mario AI 提供了一个编码实现来训练一个模型,该模型只使用原始像素作为输入,自动播放超级马里奥世界的第一关。所应用的算法是强化学习算法家族中的深度 Q 学习算法。
7 .。深度交易代理——为比特币提供基于深度强化学习的交易代理的开源项目。该项目利用 DeepSense 网络进行 Q 函数逼近。目标是使用优化深度 Q 学习代理的强化学习算法来简化交易过程。它可以成为知识的重要来源。
8。Pwnagotchi——如果你正在使用深度强化学习技术激活成功教程 Wifi 网络,这个项目会让你大吃一惊。Pwnagotchi 是一个系统,它从周围的 Wi-Fi 环境中学习,以最大限度地利用它捕获的可激活成功教程的 WPA 关键材料。与大多数基于强化学习的系统不同,Pwnagotchi 会随着时间的推移放大其参数,以更好地激活成功教程你所暴露的环境中的 WiFi 网络。
1。 【强化学习专业化(Coursera)——市场上最好的课程之一。总评分为 4.8 星,已有 21000 多名学生注册,本课程将帮助您掌握强化学习的概念。您将学习如何实现完整的 RL 解决方案,并注意其在解决现实问题中的应用。本课程结束时,你将能够将任务形式化为强化学习问题及其适当的解决方案,理解 RL 算法的概念,以及 RL 如何适应更广泛的机器学习。
2。Python 中的强化学习(Udemy)–这是 Udemy 提供的高级课程,价格为 29.99 美元。它的总体评级为 4.5 星,有超过 39,000 名学员注册。本课程是那些寻求通过 Python 编程中的强化学习来实现人工智能解决方案的人的学习平台。通过理论和实践实现,你将学会将基于梯度的监督机器学习方法应用于强化学习,众多强化学习算法的编程实现,也知道 RL 和心理学的关系。
3。 【实用强化学习(Coursera)——评分 4.2,37000+学习者,该课程是高级机器学习专业化的必备板块。你一定会了解 RL 算法的实际实现。您将深入了解强化学习方法的基础,并使用神经网络技术进行强化学习。一个有趣的部分是训练神经网络使用 RL 自己玩游戏。
4。理解强化学习的算法——如果你是强化学习领域的初学者,那么这可能是最适合你的课程。该课程在 PluralSight 平台中的总体评分为 4.0 星,持续时间近 3 小时,可以快速入门强化学习算法。您将获得关于强化学习算法、强化学习算法的基本原理、RL 分类和 RL 家族算法(如 Q-learning 和 SARSA)的深入信息。
5。佐治亚理工学院强化学习(Udacity)——最好的免费课程之一,由佐治亚理工学院通过 uda city 平台提供。该课程是为那些寻求从理论角度理解机器学习和人工智能世界的人制定的。它为最近关于强化学习的研究提供了丰富的见解,这将有助于您探索自动化决策模型。
6。强化学习冬季(斯坦福教育)——本课程由斯坦福大学提供冬季课程。对课程有一些基本的要求,比如 Python 编程的熟练程度,线性代数和微积分的知识,统计和概率的基础,机器学习的基础。本课程提供最新的讲座。最后,你将能够定义强化学习的关键特征,强化学习在现实世界问题上的应用,强化学习算法的编码实现,并对强化学习算法有深入的了解。本课程适合那些寻求 RL 生态系统高级学习资源的人。
7。高级 AI:用 Python 进行深度强化学习——如果你正在寻找一门关于强化学习的高级课程,那么这无疑是 Udemy 平台中最适合你的课程。这是一门标价为 29.99 美元的高级课程,评分为 4.6 星,为全球 32,000 多名学生提供娱乐。它不仅仅是基础级别的强化学习,还包括深度强化学习及其使用 Python 编程的实际实现。深度学习代理、Q 学习算法、深度神经网络、RBF 网络、具有深度 Q 学习的卷积神经网络的实际实现是本课程的主要内容。
8。实用强化学习——Coursera 提供的另一个热门课程,最适合那些寻找强化学习实用知识的人。它的总评分为 4.2 星,已有超过 37,000 名学生注册。
希望这些资源能帮助你深入理解强化学习,以及它在现实世界中的实际应用。
RL 是机器学习中令人着迷的一部分,值得你花时间在上面去掌握它。祝你好运!
克里斯萨纳瓦特·卡韦桑穆昂
阅读下一篇
10 分钟阅读|作者 Derrick Mwiti |年 5 月 25 日更新
在强化学习(RL) 中,智能体在一个奖励和惩罚机制上接受训练。代理人因正确的移动而得到奖励,因错误的移动而受到惩罚。在这样做的时候,代理人试图最小化错误的移动,最大化正确的移动。
在本文中,我们将看看强化学习在现实世界中的一些应用。
各种论文都提出了针对自动驾驶的深度强化学习。在自动驾驶汽车中,有各种各样的方面需要考虑,例如各个地方的速度限制,可驾驶区,避免碰撞——仅举几例。
一些可以应用强化学习的自动驾驶任务包括轨迹优化、运动规划、动态路径、控制器优化和基于场景的高速公路学习策略。
比如,可以通过学习自动泊车政策来实现泊车。可以使用 Q 学习来实现变道,而超车可以通过学习超车策略来实现,同时避免碰撞并在其后保持稳定的速度。
AWS DeepRacer 是一款自主赛车,旨在在物理赛道上测试 RL。它使用摄像头来可视化跑道,并使用强化学习模型来控制油门和方向。
Continue reading ->
原文:https://web.archive.org/web/https://neptune.ai/blog/best-software-for-collaborating-on-machine-learning-projects
在机器学习项目上的合作具有挑战性。它需要专注,注意细节,以及很强的分析能力。但这也需要工具。
当你独自做一个项目时,你在工作风格上有充分的灵活性。那么,当你和你的团队合作的时候,该怎么做呢?保持灵活性是可能的,但是没有合适的软件是不可能做到的。
在机器学习项目上有许多协作工具,但并不是所有工具都能增强工作。秘密在于特性。
这里有 9 个最好的软件,它们会让从事 ML 项目的人的生活变得更容易。
所有这些协作平台都被机器学习和数据科学从业者所使用,并且可以很容易地整合到敏捷项目管理的过程中。因此,如果你想改善你的 ML 团队的合作,你来对地方了。
注:如果你对数据科学协作的话题感兴趣,请查看本文“数据科学工作者如何协作?角色、工作流和工具。
Neptune 是个人和团队用于实验跟踪和模型注册的元数据存储。它为他们提供了一个中心位置来记录、存储、显示、组织、比较和查询机器学习生命周期中生成的所有元数据。
有了 Neptune,ML 团队可以合作研究他们的模型,跟踪他们的实验,并将历史数据存储在一个应用程序中。该流程定义明确,结构良好,最重要的是,标准化。
如果你是 ML 团队的一员,你可能最感兴趣的一件事是,Neptune 也很容易建立。 API 是与基础设施无关的,因此它将很好地适应您已经拥有的(或计划构建的)任何工作流。实际上几行代码就可以了,而与 ML 库的 25+集成让这变得更加容易。
“对我来说,海王星最重要的是它的灵活性。即使我在本地笔记本电脑上使用 Keras 或 Tensorflow 进行训练,而我的同事在虚拟机上使用 fast.ai,我们也可以在一个公共环境中分享我们的结果。”
Víctor Peinado, Senior NLP/ML Engineer
以下是 Neptune 的几个特别增强团队协作的特性:
- 用户管理功能,包括角色区分和访问管理,
- 分享按钮可以让你复制、发送电子邮件或发推文链接到 Neptune UI 中的任何页面
- 与项目成员和外部人员共享 UI 链接的可能性,
- 基于使用的定价 方案,允许您向团队工作区添加任意数量的成员,而不会影响基本费用
- 可扩展性运行数千次
u 003 cimg class = u 0022 lazy load block-blog-intext-CTA _ _ arrow-image u 0022 src = u 0022 https://Neptune . ai/WP-content/themes/Neptune/img/image-ratio-holder . SVG u 0022 alt = u 0022 u 0022 width = u 002212 u 0022 height = u 002222 u 022
GitHub 是最受开发者欢迎的平台。它被全球数以百万计的团队使用,因为它允许简单和无痛的协作。有了 GitHub,你可以托管和审查代码,管理项目,构建软件。
对于那些希望简化工作流程和方便地分享想法的机器学习项目团队来说,这是一个很好的平台。GitHub 让团队管理想法,协调工作,并与整个团队保持一致,以便在机器学习项目上无缝协作。
以下是一些主要特性您和您的团队会发现很有帮助:
- 在管理代码的同一位置,以您想要的方式构建、测试、部署和运行 CI/CD
- 使用动作自动发布新的包版本到 GitHub 包。在您的 CI/CD 工作流中安装 GitHub 包或您首选的记录注册表上托管的包和映像
- 该软件允许您使用漏洞警报来保护您的工作,以便您可以补救风险并了解 CVEs 如何影响您
- 内置的评审工具使得评审代码变得简单方便——团队可以提出变更,比较版本,并给出反馈
- GitHub 可以轻松地与其他工具集成以实现流畅的工作,或者您可以使用 GitHubGraphQL API 创建自己的工具
GitHub 是一个可以轻松访问所有文档的平台,所有的功能使它成为一个灵活开发软件的统一系统。
“根据我的经验,我发现 GitHub 在与团队成员合作进行 ML 项目时帮助很大。它提供了一个公共平台,在这里我们可以对我们的实验进行版本控制,编写文档,创建分支和分叉以避免意外。此外,GitHub 中大型 ML 项目库的可用性有助于快速实现代码/调试。”
Nishkam Shivam, Data Scientist at Bristlecone
u 003 cimg class = u 0022 lazy load block-blog-intext-CTA _ _ arrow-image u 0022 src = u 0022 https://Neptune . ai/WP-content/themes/Neptune/img/image-ratio-holder . SVG u 0022 alt = u 0022 u 0022 width = u 002212 u 0022 height = u 002222 u 022
吉拉对于敏捷团队来说是一个非常棒的软件,因为它允许全面的项目管理。这是一个问题和项目跟踪工具,因此团队可以计划、跟踪和发布他们的产品或软件,作为一个完美开发的“有机体”。
吉拉允许灵活的工作流程自动化。您可以通过将特定任务分配给人员、将 bug 分配给程序员、创建里程碑或计划在特定时间框架内执行特定任务来自由管理项目。
基于吉拉平台的产品和应用帮助团队计划、分配、跟踪、报告和管理工作。四个产品建立在吉拉平台上:吉拉软件,吉拉服务台,吉拉 Ops 和吉拉核心。每个产品都带有针对不同用例的内置模板,并且可以无缝集成,因此跨组织的团队可以更好地合作。
“我们使用 GitHub 和吉拉。GitHub 是我们维护所有代码/回购的地方,因为我们遵循敏捷模型,所以我们使用吉拉来维护我们的故事,并且还创建了一个 API,可以直接将我们的 GitHub 代码连接到吉拉(如果有人想看的话)。”
Akshat Shreemali, Principal Data Scientist at Capital One
吉拉是程序员、分析师、软件架构师和所有软件开发团队协作的绝佳解决方案。它有助于简化、组织和构建工作流。
u 003 cimg class = u 0022 lazy load block-blog-intext-CTA _ _ arrow-image u 0022 src = u 0022 https://Neptune . ai/WP-content/themes/Neptune/img/image-ratio-holder . SVG u 0022 alt = u 0022 u 0022 width = u 002212 u 0022 height = u 002222 u 022
Slack 是最受欢迎的通信应用之一。它还可以增强从事机器学习项目的人的工作。
Slack 是将电子邮件转换成消息,将人员、信息和工具放在一个地方。
通过将人、应用程序和数据结合起来,它有效地取代了电子邮件和又长又乱的线程。此外,它让人们看到一个更大的画面,这样每个人都可以看到公司内部发生的事情,并保持在循环中。
Slack 使跟踪对话或在易于搜索的档案中查找重要信息变得简单。因此,当一个团队在一个 ML 项目中工作时,他们总是知道发生了什么,并且能够简化流程。
Slack 主要功能汇总:
- 工作区–您可以为不同的项目或团队创建多个工作区
- 频道–私人或公共,与客户共享,让您快速与其他人交流
- 直接和群组消息
- 公司的关键信息–线索、提及和反应、已保存的项目和人员都在您的手边,因此您可以在应用程序中快速导航
- 应用程序(Apps)——众多工具的清单让你可以将 Slack 与其他流行的工具整合在一起
- 文件——一个空间,你和你的团队以及整个公司可以在这里存储文件,并通过搜索选项轻松访问它们或上传新文件
保存草稿 - 历史记录和搜索让您可以快速、轻松地搜索您想要的东西
- 屏幕共享视频通话
- 创建自动化日常操作和通信的工作流
- 邮件和文件可以加密,您可以联系销售团队获得更多安全选项
Slack 是一个强大的沟通和协作工具,它小巧的特性允许团队以敏捷的方式工作。
概念是一个协作工具,让你写,计划,合作,并组织团队合作。
它由四个模块组成,每个模块具有不同的功能:
- 笔记、文档–文本编辑器,为不同格式的文件、笔记提供空间;你可以添加图片、书签、视频、代码等等
- 知识库–在这个模块中,团队可以存储关于项目、工具、最佳实践以及开发机器学习项目所需的其他方面的知识
- 任务、项目–任务和项目可以组织在看板、日历和列表视图中
- 数据库–该模块可以有效地取代电子表格,并以方便的方式记录重要数据和独特的工作流程
此外,每个团队成员都可以使用个人使用的概念来记录与工作相关的活动和信息,例如,每周议程、目标、任务列表或个人注释。
其他小功能包括 #markdown。/Slash 命令、拖放功能、评论和讨论,以及与 50 多个流行应用程序的集成,如 Google Docs、Github Gist、CodePen 等
所有模块创建一个连贯的系统,作为工作管理和项目规划的统一中心。这是一个适合敏捷团队的轻量级工具。
“观念是研究和实验过程的一部分。部分实验文件保存在那里。Jupyter 笔记本是我们在研究过程中使用的主要 IDE,因为它简化了结果可视化和知识共享。
Github,我们主要用于产品开发。在有了研究答案之后,我们确信开发应该被集成到主产品中,这就是我们使用 Github 的时候——从版本控制到 git 管道。
吉拉:我们用它来定义研究路线图和产品本身。
Slack 和 Zoom 是聊天和视频支持,可用于任何思想交流或深入讨论。"
Fabiana Clemente, Founder and Chief Data Officer at YData
Confluence 是由 Atlassian 开发的协同工作空间。它已经存在了很长时间(17 年),并根据社区不断变化的需求进行了相应的改进。今天,confluence 主要用作远程协作的工作空间。
它支持维护单一真实来源,并允许用户通过高级搜索功能快速找到特定信息。Confluence 有几个协作特性,这使它成为企业协作的一个非常有用的工具。其中一些包括实时编辑、聊天、通知、评论、注释、标签、页面树、项目层级和访问控制。
Confluence 拥有超过 75,000 名客户,并且还在继续增长。Confluence 非常适合协作工具的生态系统。由于可以与 Slack、吉拉、Dropbox、G-Drive 和 Trello 等常用应用程序集成,这使得它成为一个受欢迎的选择。
“我合作过的团队通常使用 Gitlab 来托管存储库。我也使用过 JIRA、Trello 和 Azure Board 进行项目管理,公司或团队通常会选择这些工具中的一个。我也曾使用 Confluence 进行文档处理,但最近我一直在使用 Dropbox 或 box 的授权版本,这取决于公司的选择。为了交流,我用过很多工具,包括 Slack、Matterport 和公司内置的聊天应用。
我之前的团队也使用过 Tableau 和其他类似的仪表板应用程序。我们广泛使用 Docker 来开发和部署容器化的应用程序,以及商业云平台,如 Azure/AWS for compute。"
Tanmana Sadhu, AI Researcher @ LG Toronto AI Lab
Source
Google Meet 是最流行的电子会议平台之一。这对在机器学习项目上合作的远程团队尤其有帮助。Google Meet 允许团队以冲刺、会议、个人聊天或任何其他首选形式会面。
使用您的浏览器,您可以与队友和客户分享您的视频、桌面和演示文稿。
Google Meet 与 G Suite 的 Google Calendar 和 Gmail 集成在一起,因此您可以看到参与者和预定会议的完整列表。
您可以轻松快速地安排会议,并提前为团队成员设置,以便他们稍后可以通过自动生成的链接加入会议。
如果您的公司使用 G Suite,您可以通过拨打给定会议的电话号码来访问会议。它可以单独用于音频会议或视频会议,因为它允许用户关闭摄像头或静音麦克风,以便人们可以专注于正在发言的人。
u 003 cimg class = u 0022 lazy load block-blog-intext-CTA _ _ arrow-image u 0022 src = u 0022 https://Neptune . ai/WP-content/themes/Neptune/img/image-ratio-holder . SVG u 0022 alt = u 0022 u 0022 width = u 002212 u 0022 height = u 002222 u 022
即使你和 AI/ML 社区没有什么联系,你也会和 Jupyter 笔记本一起工作或者至少听说过它。它在刚刚开始机器学习之旅的初学者中特别受欢迎,但也同样被专家用作强大的合作工具。
Jupyter notebook 是一个网络应用程序,用户不仅可以编码,还可以维护极其详细的文档,包括视觉效果、结果、时间细节、序列、日志等等。在某种程度上,它促进了现有的最好的编码类型——伴随文档而来的那种。
Jupyter 笔记本支持超过 40 种语言,并且广泛用于 Python。它还支持 ML 友好的语言,如 R、Matlab 和 Scala,以及流行的编程语言,如 Java 和 C++。
由于易于使用和理解,Jupyter 笔记本是为门外汉分解复杂过程、为 AI/ML 平台创建用户友好的教程或记录实验的首选。
u 003 cimg class = u 0022 lazy load block-blog-intext-CTA _ _ arrow-image u 0022 src = u 0022 https://Neptune . ai/WP-content/themes/Neptune/img/image-ratio-holder . SVG u 0022 alt = u 0022 u 0022 width = u 002212 u 0022 height = u 002222 u 022
Google Docs 是组织文件和实时协作的最佳解决方案之一,无论有多少用户在处理这个文件。
甚至我是用谷歌文档写这篇文章的,所以参与发表的其他人可以很容易地合作。
Google Docs 有有用的功能,方便团队的工作:
- 根据需要创建尽可能多的文件,根据需要调整它们
- 使用模板库中的模板
- 加载项允许用户定制文档,以便更灵活有效地工作
- 智能编辑和样式工具有助于轻松设置文本和段落的格式——您可以从数百种字体中进行选择,添加链接、图像和绘图
团队成员可以通过手机、平板电脑或电脑访问、创建和编辑文档 - 每个人都可以同时在同一个文档中工作
所有的更改都会自动保存——无需将文件保存在本地计算机或其他设备上 - 您可以使用修订历史来查看同一文档的旧版本,按日期和更改者排序。
Google Docs 是机器学习项目协作的必备工具。
当选择用于 ML 项目协作的软件时,确保它符合您团队的偏好、工作风格,并且可以轻松地与您当前使用的应用程序集成。
这是确保项目一致性、无缝工作流和安全性的最佳方式。
合作愉快!
原文:https://web.archive.org/web/https://neptune.ai/blog/best-tools-for-model-tuning-and-hyperparameter-optimization
我清楚地记得两年前我参加的一次机器学习黑客马拉松,当时我正处于数据科学职业生涯的初期。这是尼日利亚数据科学组织的训练营的资格预审黑客马拉松。
该数据集包含某些雇员的信息。我必须预测一个员工是否应该得到晋升。经过几天努力改进和设计功能,该模型的准确性似乎在 80%左右波动。
我需要做些什么来提高我在排行榜上的分数。我开始手动调整模型——得到了更好的结果。通过改变一个参数,准确率提高到了 82%(这一步非常重要,任何参加过黑客马拉松的人都可以证明!).兴奋之余,我开始调整其他超参数,但结果并不都很好。我已经精疲力尽了,想象一下连续工作 7 个小时来改进一个模型。挺累的。
我知道 GridSearchCV T1 和 T2 randomsearccv T3。我试用了 GridSearchCV,花了 3 个多小时才从我提供的一系列值中得出结果。更糟糕的是,来自 GridSearchCV 的结果并没有更好。沮丧之余,我决定试试 RandomSearchCV。这带来了一点喜悦,我的准确率从 82%上升到了 86%。
经过大量的试验,没有改善,我回到手动调谐,看看我能得到什么。在黑客马拉松结束时,我达到了 90%的准确率。我希望我已经知道了更快优化超参数的工具!幸运的是,尽管我没有进入前 50 名,我仍然有资格参加训练营。
那是过去的事了。现在,我知道有很好的超参数调优工具我可以使用,我很高兴与您分享它们。
在开始超调之前,请确保完成以下工作:
- 获得基线。您可以通过较小的模型、较少的迭代、默认参数或手动调整的模型来实现这一点。
- 将您的数据分成训练集、验证集和测试集。
- 使用提前停止周期来防止过度拟合。
- 在培训前设置好您的完整模型管道。
现在,我想讨论一下我将在文章中使用的一些术语:
- 模型参数–模型参数是您的模型从数据中学习的参数,如特征、关系等。,不能手动调整(不是特征工程)。
- 模型超参数–超参数是您可以从模型本身手动调整的值,如学习率、估计器数量、正则化类型等…
- 优化–通过使用优化技术之一,调整超参数以最小化成本函数的过程。
- 超参数优化–超参数优化只是一个搜索,以获得最佳超参数集,从而在特定数据集上给出模型的最佳版本。
- 贝叶斯优化–一类基于模型的顺序优化(SMBO)算法的一部分,用于使用之前实验的结果来改进下一次实验。
- 超参数采样–简单指定在超参数空间使用的参数采样方法。
我不反对使用 GridSearchCV。这是一个很好的选择,只是它非常耗时,计算量也很大。如果你像我一样,日程繁忙,你一定会找到更好的选择。
更好的替代方法是 RandomSearch CV,它使用随机超参数值来挑选最佳超参数。这比 GridSearchCV 快多了。这里的缺点是,由于它采用随机值,我们不能确定这些值是最佳组合。
但是说真的,我什么时候知道我需要做超参数优化?
作为数据科学家,我们经常犯的一个错误是使用模型的默认参数。根据您使用的默认参数,您可能没有使用模型的最佳版本。
有时,当您的模型过度拟合(在训练集上表现良好,在测试数据集上表现不佳)或欠拟合(在训练数据集上表现不佳,在测试数据集上表现良好)时,优化您的超参数确实会有所帮助。一点小小的调整就能带来很大的不同,从 60%的准确率到 80%的准确率,甚至更多!
好了,让我们结束介绍。在本文结束时,您将了解到:
- 最好的超参数调优工具,
- 各种开源服务(免费使用)和付费服务,
- 它们的特征和优点,
- 他们支持的框架,
- 如何为你的项目选择最好的工具,
- 如何将它们添加到您的项目中。
我们从一个 TL 开始。下面讨论的所有工具的灾难恢复比较。
如果您时间紧迫,这张表可以帮助您选择一个好的工具,在您的用例中进行尝试。有关每个工具的详细描述,请继续阅读下表。
接下来,我将从一些开源工具开始。每个工具将按以下方式描述:
- 工具简介,
- 工具的核心特性/优势,
- 如何使用该工具的步骤,
- 关于如何在项目中使用该工具的其他链接。
1.射线调谐
Ray 为构建分布式应用程序提供了一个简单、通用的 API。Tune 是一个 Python 库,用于任何规模的实验执行和超参数调整。Tune 是 Ray 众多包中的一个。Ray Tune 是一个 Python 库,它通过大规模利用尖端的优化算法来加速超参数调整。
为什么应该使用 RayTune?
下面是一些的特点 :
- 它很容易与许多优化库集成,如 Ax/Botorch 和hyperpt。
- 缩放可以在不改变代码的情况下完成。
- Tune 利用各种尖端优化算法,如 Ax/Botorch 、hyperpt和贝叶斯优化,使您能够透明地扩展它们。
- Tune 跨多个 GPU 和多个节点并行化,因此您不必构建自己的分布式系统来加速训练。
- 你可以用 Tensorboard 之类的工具自动显示结果。
- 它为优化算法提供了一个灵活的接口,您可以用几行代码轻松实现和扩展新的优化算法。
- 它支持任何机器学习框架,包括 Pytorch、Tensorflow、XGBoost、LIghtGBM、Scikit-Learn 和 Keras。
使用它需要五个简单的步骤(我假设您已经对数据进行了预处理):
无论您想在 ML 项目中使用 Tensorflow、Pytorch 或任何其他框架实现 Ray Tune,都有很多教程可供选择。以下是一些可供参考的例子:
您可以从本文中了解更多关于配置光线调节及其功能的信息:“光线调节:一个超参数库,可在任何比例下快速调节超参数”。
2.奥普图纳
Optuna 是专门为机器学习设计的。这是一个黑盒优化器,所以它需要一个目标函数。这个目标函数决定在即将到来的试验中从哪里采样,并返回数值(超参数的性能)。它使用不同的算法,如网格搜索,随机搜索,贝叶斯和进化算法来寻找最佳的超参数值。
一些特征是:
- 高效的采样和剪枝算法。
- 易于安装,要求不高。
- 比远视更容易使用。
- 使用分布式优化。
- 您可以使用 Python 语法定义搜索空间,包括条件和循环。
- 您可以直观地分析优化结果。
- 简单的可伸缩性,很少或不需要修改代码。
Optuna 使用修剪算法。修剪是一种在机器学习和搜索算法中使用的技术,通过删除树中对分类实例来说非关键和冗余的部分来减少决策树的大小。
Optuna 中的修剪会在训练的早期阶段自动停止没有希望的试验,您也可以称之为自动提前停止。Optuna 提供了以下修剪算法:
我将重点介绍使用 Optuna 所需的简单步骤:
- 首先,用“pip install optuna”安装 Optuna,如果它还没有安装的话。
- 定义你的模型。
- 选择要优化的参数。
- 创建一个研究。
- 定义目标函数。
- 优化。
- 检查试验结果。
要查看的教程和示例代码:
您也可以阅读此文章:“Optuna 指导如何监控超参数优化运行”,以更好地了解 Optuna 如何优化您的超参数。
可能有用
检查如何使用 Neptune + Optuna 集成来跟踪您的超参数优化过程。
3.远视
从官方文档来看, Hyperopt 是一个 Python 库,用于在笨拙的搜索空间上进行串行和并行优化,搜索空间可能包括实值、离散和条件维度。
Hyperopt 使用贝叶斯优化算法进行超参数调整,为给定模型选择最佳参数。它可以优化具有数百个超参数的大规模模型。
Hyperopt 目前实现了三种算法:
- 随机搜索,
- Parzen 估计量树,
- 自适应 TPE。
Hyperopt 的设计是为了适应基于高斯过程和回归树的贝叶斯优化算法,但不幸的是,它们目前还没有实现。
远视的特征:
超视需要 4 个基本组件来优化超参数:
- 搜索空间,
- 损失函数,
- 优化算法,
- 用于存储历史(分数、配置)的数据库
在您的项目中使用 Hyperopt 的步骤:
- 初始化要搜索的空间。
- 定义目标函数。
- 选择要使用的搜索算法。
- 运行远视功能。
- 分析存储在 trials 对象中的评估输出。
这里有一些实践教程,你可以看看:
这里还有一款不错的 kaggle 笔记本你可以试试。
4.sci kit-优化
Scikit-Optimize 是 Python 中超参数优化的开源库。它是由 Scikit-learn 背后的团队开发的。与其他超参数优化库相比,它相对容易使用。
它有基于模型的连续优化库,称为贝叶斯超参数优化(BHO)。BHO 的优势在于,他们可以在更少的迭代中找到比随机搜索更好的模型设置。
贝叶斯优化到底是什么?
贝叶斯优化是一种用于黑盒函数全局优化的顺序设计策略,它不采用任何函数形式。它通常用于优化计算量大的函数。至少维基百科是这么说的。
但是,简单地说,BO 评估了从过去的结果看起来更有希望的超参数,并找到了更好的设置,而不是使用迭代次数更少的随机搜索。过去超参数的表现影响未来的决策。
sci kit-Optimize 的特性:
- 基于顺序模型的优化,
- 构建于 NumPy、SciPy 和 Scikit-Learn 之上,
- 开源,商业可用,BSD 许可。
Scikit-Optimize 使用高斯过程的贝叶斯优化基于一种叫做 gp_optimize 的算法。你可以在这里了解更多。如果你对如何从零开始构建自己的贝叶斯优化器感兴趣,你也可以看看这个教程:“如何用 Python 从零开始实现贝叶斯优化”。
以下是使用 Scikit-Optimize 需要遵循的简单步骤:
- 如果尚未安装 skopt,请使用 pip install skopt 安装 skopt。
- 定义模型。
- 决定要优化的参数。
- 定义搜索空间。
- 定义目标函数。
- 运行优化。
以下是在您的项目中实现 Scikit Optimize 的教程列表:
关于 Scikit 优化特性的深入解释,请查看本文。
可能有用
检查如何使用 Neptune + Scikit 优化集成跟踪您的超参数优化过程。
5.微软的 NNI (神经网络智能)
NNI 是由微软开发的免费、开源的 AutoML 工具包。它用于自动化特征工程、模型压缩、神经架构搜索和超参数调整。
它是如何工作的?
该工具调度并运行由调整算法生成的试验作业,以在不同的环境(如本地机器、远程服务器和云)中搜索最佳的神经架构和/或超参数。
微软的 NNI 支持 Pytorch、Tensorflow、Keras、Theano、Caffe2 等框架。,以及像 Sckit-learn、XGBoost、CatBoost 和 LightGBM 这样的库。
NNI 的特色 :
- 很多流行的自动调谐算法(像 TPE 、随机搜索、 GP 调谐器、 Metis 调谐器等等)和提前停止算法 ( Medianstop 、 Curvefitting assessors)。
- NAS(神经架构搜索)框架,用户可以轻松指定他们想要使用的神经架构。
- 通过 NNI 试用 SDK 支持 NAS 算法,如 ENAS(高效神经架构搜索)和飞镖(可区分架构搜索)。
- 通过 NNI 试用软件开发工具包的自动特征工程:您不必创建一个 NNI 实验,只需在您的试用代码中导入一个内置的自动特征工程算法并运行!
- 命令行工具和 web UI 来管理培训实验。
- 可扩展的 API 来定制您的自动 ML 模型。
- 它可以在本地机器、远程服务器、Azure 机器学习、基于 kubernetes 的服务(如 Kube Flow、Adapt DL、Open pal 等)上进行训练…
- 它具有用于超参数调整的方法,包括穷举搜索、启发式搜索、贝叶斯优化和基于 RL。
- 它的一些贝叶斯优化算法的超参数调整是 TPE,GP 调谐器,Metis 调谐器,BOHB,等等。
以下是使用 NNI 时需要遵循的步骤:
- 在 Windows 或 Linux 上安装 NNI 并验证安装。
- 定义和更新模型。
- 启用 NNI API。
- 定义搜索空间。
- 定义你的实验。
- 准备庭审。
- 准备调谐器。
- 准备配置文件。
- 进行实验。
要了解更多关于这些步骤的信息,请查看 NNI 的官方文档。你也可以从 Github 了解更多关于微软的 NNI 算法。
寻找如何在您的项目中实现这一点?看看这个教程:“如何将微软的 NNI 添加到你的项目”。
6.谷歌的 Vizer
AI 平台 Vizier 是一个黑盒优化服务,用于调整复杂机器学习模型中的超参数。
它不仅通过调整超参数来优化模型的输出,还可以有效地用来调整函数中的参数。
它是如何工作的?
- 通过设置结果和影响结果的超参数来确定研究配置。
- 根据已设置的配置值创建研究,使用它来执行实验以产生结果。
为什么要用 Vizer?
- 很好用。
- 需要最少的用户配置和设置。
- 托管最先进的黑盒优化算法。
- 高可用性。
- 可扩展到每项研究数百万次试验,每项研究数千次平行试验评估,以及数十亿项研究。
按照以下步骤使用 Vizer:
在文档页面中,显示了如何使用 curl 进行 API 请求的步骤。
7.AWS Sage 制造商
AWS Sage Maker 是一款完全托管的机器学习服务。使用 SageMaker,您可以快速轻松地构建和训练机器学习模型。您可以在构建后直接将它们部署到生产就绪的托管环境中,就像一个完整的包一样。
它还提供了机器学习算法,这些算法经过优化,可以针对分布式环境中的海量数据高效运行。 SageMaker 本身支持自带算法和框架,还提供灵活的分布式培训选项,以适应您的特定工作流程。
SageMaker 使用随机搜索或贝叶斯搜索进行模型超参数调整。对于贝叶斯搜索,它要么使用接近来自最佳先前训练作业的组合的超参数值的组合来提高性能,要么选择远离它所尝试的那些超参数值的一组超参数值。
为什么要使用 AWS?
AWS Sagemaker 负责提取完成任务所需的大量软件开发技能,同时保持高效、灵活和成本效益。您可以专注于更重要的核心 ML 实验,SageMaker 用类似于您现有工作流程的简单抽象工具补充了剩余的必要技能。您的所有工具都在一个地方,因此您可以在一个平台上轻松地从数据预处理转移到模型构建和模型部署。
简而言之,你可以使用 SageMaker 的自动模型调优,内置算法,自定义算法,以及 SageMaker 为机器学习框架预先构建的容器。
在这些教程中了解更多信息:
👉也检查一下 SageMaker 和 Neptune 之间的比较。
7.Azure 机器学习
Azure 由微软开发,利用其不断扩张的全球数据中心网络。Azure 是一个云平台,可以在任何地方构建、部署和管理服务和应用。
Azure Machine Learning 是一个独立的现代化服务,提供完整的数据科学平台。从数据预处理到模型构建、模型部署和维护,整个数据科学之旅都在一个平台上完成。它支持代码优先和低代码体验。如果你喜欢很少或不喜欢代码,你应该考虑使用 Azure Machine Learning Studio。
Azure Machine Learning Studio 是一个关于 Azure Machine Learning 的门户网站,包含用于项目创作和资产管理的低代码和无代码选项(拖放)。
Azure 机器学习支持以下超参数采样方法:
- 随机抽样用于为每个超参数随机选择一个值,该值可以是离散值和连续值的混合。它还支持低性能运行的提前终止,就像基于树的模型中的提前停止一样。
- 仅当所有超参数都是离散的时,才可以采用网格采样,并且网格采样用于尝试搜索空间中参数的每个可能组合。
- 贝叶斯采样基于贝叶斯优化算法来选择超参数值,该算法尝试选择将导致先前选择的性能提高的参数组合。
对于一个非常大的超参数搜索空间(数百个超参数或更多),将需要很多次迭代来尝试每一个组合。为了节省您的时间,您可以将早期迭代停止设置为那些结果比早期差的实验(迭代)。Azure 有提前停止策略来帮助你:
- 土匪政策。如果目标性能指标的表现比迄今为止的最佳运行差了一个指定的差值,您可以使用 bandit 策略来停止运行(实验或迭代)。
- 中位数停止策略。像 bandit 策略一样,它放弃目标性能度量比所有运行的运行平均值的中值差的运行。
- 截断选择策略。如果百分比低于您指定的截断百分比值,截断选择策略将取消每个评估间隔的所有运行。
如何在项目中开始使用 Azure 进行超参数调优?
- 定义搜索空间。
- 配置采样。您可以选择格网外采样、贝叶斯采样或随机采样。
- 配置提前终止。您可以使用 Bandit 策略、中值停止策略或截断停止策略。
- 运行一个超调训练实验。
查看微软的这个教程模块:“用 Azure 机器学习调优超参数”。
我希望我能够教你一两件关于超参数工具的事情。不要只是让它停留在你的脑海里,尝试一下吧!请随时联系我,我很乐意了解您的意见和偏好。感谢阅读!
还可以查看其他资源:
文米·阿基雷米
一位热爱为移动设备构建 AI 解决方案的数据科学家和 Android 开发人员。我是一个有抱负的演讲者,对关于人工智能的技术演讲感兴趣。我从事过各种项目,包括图像分类、文本生成、聊天机器人、回归和分类问题。我也写科技文章和博客。
阅读下一篇
卡米尔·卡什马雷克|发布于 2020 年 7 月 1 日
机器学习算法可通过称为超参数的多个量规进行调整。最近的深度学习模型可以通过数十个超参数进行调整,这些超参数与数据扩充参数和训练程序参数一起创建了非常复杂的空间。在强化学习领域,您还应该计算环境参数。
数据科学家要控制好 超参数 空间,才能使 进步。
在这里,我们将向您展示最近的 实践,提示&技巧,和工具以最小的开销高效地跟踪超参数。你会发现自己掌控了最复杂的深度学习实验!
几乎每一个深度学习实验指南,像这本深度学习书籍,都建议你如何调整超参数,使模型按预期工作。在实验-分析-学习循环中,数据科学家必须控制正在进行的更改,以便循环的“学习”部分正常工作。
哦,忘了说随机种子也是一个超参数(特别是在 RL 领域:例如检查这个 Reddit )。
让我们逐一回顾一下管理超参数的常见做法。我们关注于如何构建、保存和传递超参数给你的 ML 脚本。
Continue reading ->
原文:https://web.archive.org/web/https://neptune.ai/blog/best-tools-for-nlp-projects
自然语言处理 (NLP)是人工智能极其重要的子集。在智能设备使用(也称为人机通信)的增加、自然语言处理在医疗保健领域的进步以及基于云的解决方案的采用等因素的推动下,自然语言处理在企业中得到广泛采用。但是 NLP 到底是什么,为什么它很重要?
NLP 处于语言学、计算机科学和人工智能的交汇点。NLP 的应用程序处理和分析大量自然语言数据——人类所说的所有语言都是自然语言,无论该语言是英语、法语还是普通话——以便以类似人类的方式模仿人类之间的交互。一个好的 NLP 系统能够理解文档的内容,包括其中的细微差别。
我们比以往任何时候都更依赖于机器,这在很大程度上要归功于它们比我们更准确的能力,以及让我们更高效的能力。他们不会累。他们没有抱怨。他们从不感到无聊。然而,对于 NLP 任务,有一个主要的障碍…
对于人类来说,掌握一门语言相对简单,但对于机器来说,掌握自然语言是一个很大的挑战。自然语言的创造性和语言的模糊性使得自然语言处理成为一个高要求的领域。解决问题意味着,对于我们的问题,我们提出了一个解决语言创造性和模糊性问题的解决方案,因此,我们向被视为非结构化的数据添加了结构(即,文本没有模式,不像商店中的交易历史记录)。
NLP 可以执行许多不同的任务,但是有一组基本任务在各种 NLP 项目中经常重复出现。由于它们的重复性,这些任务比其他 NLP 任务得到了更深入的研究。这些基本的 NLP 任务是:
语言建模
语言建模(LM)是给任何单词序列分配一个概率。本质上,在语言建模任务中,我们试图预测序列中出现的下一个单词,给定之前出现的单词的历史。LM 在 NLP 的各种应用中至关重要,是机器能够理解定性信息的原因。语言建模的一些应用包括:语音识别、光学字符识别、手写识别、机器翻译和拼写纠正。
文本分类
文本分类根据文本的内容将预定义的类别分配给文本。到目前为止,文本分类是 NLP 最受欢迎的应用,用于构建各种工具,如垃圾邮件检测器和情感分析机器人。
信息提取
信息抽取(IE)是从非结构化和/或半结构化的文本文档中自动抽取相关信息。这些类型的文档包括电子邮件中的日历事件,或社交媒体上帖子中提到的人名。
信息检索
每个在线的人都与某种信息检索(IR)系统互动,例如谷歌搜索。信息检索的任务是从大量的文档集合中找到与用户查询相关的文档。
对话代理
对话式智能体属于对话式人工智能。对话式人工智能包括建立对话系统,模仿人类在对话方面的互动。对话式人工智能的流行例子包括 Alexa、Siri、Google Home 和面向 Windows 爱好者的 Cortana。像聊天机器人这样的技术也是由对话代理驱动的,并且在企业公司中越来越受欢迎。
文本摘要
自动摘要是通过计算缩短一组数据的过程,以创建代表原始内容中最重要或最相关信息的子集[来源:维基百科 ]。
问题回答
问题回答的任务是构建能够自动回答人类用自然语言提出的问题的系统。
机器翻译
机器翻译(MT)是计算语言学的一个分支,涉及将一段文本从一种语言转换成另一种语言。这种类型的一个流行应用是谷歌翻译。
主题建模
主题建模是一种无监督的机器学习技术,它揭示了大量文档集合的主题结构。NLP 的这种应用是一种非常常见的工具,用于各种领域,如文学和生物信息学。
虽然这些任务各不相同,但是牢牢掌握这些任务足以让任何有抱负的 NLP 实践者具备构建各种 NLP 应用程序的良好基础。掌握这些应用程序的一部分包括学习在解决问题时可以用来提高生产力的技术。
有各种开源工具可以在非结构化文本(或其他形式的自然语言)中找到有价值的见解,并解决各种问题。下面提供的框架列表绝不是详尽的,但是它们是一个很好的开始,使得自然语言处理对于企业或者任何希望在他们的项目中使用 NLP 的人来说都是可行的。事不宜迟,这里列出了自然语言处理(NLP)项目中最常用的框架。
我是 NLTK
自然语言工具包(NLTK)是构建 Python 程序来处理和分析人类语言数据的领先平台之一。 NLTK 文档声明“”提供了 50 多个语料库和词汇资源(如 WordNet)的易用接口,以及一套用于分类、标记化、词干化、标记、解析和语义推理的文本处理库、工业级 NLP 库的包装器和一个活跃的讨论论坛。’
像编程世界中的大多数事情一样,掌握 NLTK 需要一些时间。幸运的是,有很多资源可以帮助你掌握这个框架,比如 NLTK 的创造者自己写的《用 Python 进行自然语言处理》一书——这是一种非常实用的自然语言处理任务编程方法。
*可以用 NLTK 执行的一些任务的例子包括标记化、标记、词干化、词汇化、解析、分类等等。看看下面来自 NLTK 文档的代码片段。
空间
SpaCy 的首次发布是在 2015 年 2 月,使其成为 Python 自然语言处理应用程序的最新开源框架之一。与 2001 年创建的 NLTK 相比,SpaCy 的创建者有足够的时间来学习 NLTK 并了解它的不足之处。与 NTLK 相比,最显著的改进之一是性能增强,因为 SpaCy 使用了一些最新最好的算法。
此外,SpaCy 有很好的文档记录,并被设计为支持大量数据。它还包括一系列预训练的自然语言处理模型,这使得学习、教学和使用 SpaCy 进行自然语言处理变得更加容易。
注意 : 如果你希望将深度学习算法应用于你的非结构化数据,SpaCy 可能是你要使用的库——提取任务也是如此。
下面是 SpaCy 文档中 SpaCy 功能的一个例子。
斯坦福·科伦普
CoreNLP 是一个非常受欢迎的用于自然语言处理任务的库,由斯坦福 NLP 社区构建——他们也积极维护该框架。与分别用 Python 或 Cython 编写的 NLTK 和 SpaCy 相反,CoreNLP 是用 Java 编写的——这意味着你的计算机需要有 JDK(但它有用于大多数编程语言的 API)。
在 CoreNLP 主页上,开发者将 CoreNLP 描述为“Java 自然语言处理的一站式商店!CoreNLP 使用户能够导出文本的语言注释,包括标记和句子边界、词性、命名实体、数值和时间值、依存和选区解析器、共指、情感、引用属性和关系。CoreNLP 目前支持 6 种语言:阿拉伯语,中文,英语,法语,德语和西班牙语。
CoreNLP 的主要优势之一是它的可伸缩性,这使它成为复杂任务的首选。另一个因素是,它在建造时就考虑到了速度——它已经过优化,速度极快。
Gensim
Gensim 是一个专门的开源 Python 框架,用于以最有效、最轻松的方式将文档表示为语义向量。作者设计了 Gensim 来使用各种机器学习算法处理原始的、非结构化的纯文本——因此使用 Gensim 来处理主题建模等任务是一个好主意。此外,Gensim 在识别文本相似性、索引文本和导航不同文档方面做得很好。
在文档中,作者明确指出 Gensim 是从零开始构建的,原因有三:
- 实用性–作为行业专家,我们专注于解决实际行业问题的久经考验的算法。更多关注工程,更少关注学术。
- 内存独立性–不需要在任何时候将整个训练语料库完全驻留在 RAM 中。它可以使用数据流处理大型网络规模的语料库。
- 性能–使用 C、BLAS 和内存映射对流行的向量空间算法进行了高度优化。
下面是 Gensim Word2Vec 教程文档页面上的一些代码示例。
TensorFlow & PyTorch
尽管是两个非常不同的框架,我认为最好列出这两个框架,因为它们都被认为是深度学习的流行框架。Tensorflow 是较早的一个,它是由谷歌的大脑团队开发的——他们也积极地将该框架用于研究和生产级别的项目。另一方面,Pytorch 是一个基于 torch 库的开源库,主要由脸书的 AI 研究(FAIR)实验室开发。
关于 Tensorflow 或 PyTorch 的争论由来已久,这绝对超出了本文的范围。我给那些不确定学习哪一个的人的建议是学习你的组织使用的,或者你想为之工作的组织。如果他们还没有完全采用深度学习,那么我会说 PyTorch 有一个更容易的学习曲线。
下面你可以看到如何使用这两个框架建立一个 LSTM 模型。首先是 tensor flow——完整的源代码,请访问 Christian Versloot 机器曲线博客。
这是 PyTorch 中的一个 LSTM——要获得完整的运行和源代码,请访问 PyTorch 文档中的序列模型教程。
了解如何使用 TensorFlow + Neptune 集成或 PyTorch + Neptune 集成来跟踪模型训练元数据。
拥抱脸
近年来,变压器模型极大地推进了 NLP。它本质上是一种新颖的架构,在解决序列间任务时考虑了长期依赖性。在大多数情况下,NLP 模型非常大,需要大量的计算才能得到一个像样的工作模型。拥抱脸 Python 框架为各种 NLP 任务提供了对大量预训练模型的访问。甚至像亚马逊,谷歌人工智能和脸书人工智能利用这个包。
下面是一个用于情感分析的拥抱脸管道的例子——你可以在文档中读到更多相关信息。
与传统的机器学习项目类似,NLP 项目是高度迭代的。在项目生命周期的旅程中,迭代特定的部分直到 NLP 系统满足一些期望的内在性能水平是很常见的。内在评估更关注中间目标,例如 NLP 组件如何在定义的子任务上执行。
一旦项目被部署到生产环境中,它还远远没有完成。现实世界中的交互、反馈和变化会改变当前 NLP 组件的需求,这意味着循环回到项目生命周期中的早期步骤来更新(或改进)它。
为了让你的 NLP 项目上线,有各种各样的工具不仅可以帮助开发人员,也可以帮助那些不太懂技术的 AI 团队成员。这些工具包括消息应用、实验管理工具、跟踪工具等等。这里有一个有价值的项目管理工具的列表,你可能想用在你的 NLP 项目中:
海王星 AI
海王星。AI 是一个轻量级的实验跟踪和模型注册。它极大地促进了合作,并且可以跟踪你所有的实验。它非常灵活,可以很好地与许多框架集成(包括上面提到的那些)。使用该工具,您可以记录、存储、显示、组织和查询您的所有机器学习操作(MLOps)元数据。
海王 AI 提供了什么?
- 记录和显示机器学习模型的元数据
- 组织实验和模型训练运行的中心
- 轻松比较实验和机器学习模型
- 观看您的机器学习实验实时运行
- 可重复的实验和模型训练运行
- 与队友分享可视化效果的特殊链接
- 以编程方式查询实验和模型训练元数据
- 从任何地方运行您的代码(笔记本电脑、云基础设施或集群)
MLFlow
MLFlow 的一个很酷的地方是,您可以将它用于任何机器学习库和任何编程语言,因为所有可用的函数都是通过 REST API 和 CLI 访问的。除了从技术角度来看的可访问性之外,MLflow 文档编写得非常好,易于理解。文档声明:
“MLflow 是一个管理端到端机器学习生命周期的开源平台。它处理四个主要功能:
- 跟踪实验以记录和比较参数和结果( MLflow Tracking )。
- 以可重用、可复制的形式包装 ML 代码,以便与其他数据科学家共享或转移到生产中( MLflow 项目)。
- 从各种 ML 库中管理和部署模型到各种模型服务和推理平台( MLflow Models )。
- 提供一个中央模型库来协作管理 MLflow 模型的整个生命周期,包括模型版本化、阶段转换和注释( MLflow 模型注册中心)。"
这基本上概括了 MLflow 提供的一切—我告诉过你他们的文档写得很好。
另请阅读:最佳物流替代方案(2021 年更新)
开源代码库
Github 是面向开发者的社交网站。它为全球超过 5600 万开发者提供互联网托管以及使用 Git 的版本控制。Github 使协作变得简单而不费力,其特性允许代码托管和审查、全面的项目管理和方便的软件构建。通常,项目经理和开发人员利用 Github 在单一环境中协调、跟踪和更新他们的工作。
平台有很多特性,每个特性都是多方面的。总的来说,Github 提供的功能分为七类:
- 协作编码
- 自动化和持续集成/持续开发(CI/CD)
- 安全性
- 客户端应用程序
- 项目管理
- 团队管理
- 社区
彗星 ML
彗星的主页。ML 的网站上写着“彗星。ML 允许数据科学家和开发人员轻松地监控、比较和优化他们的机器学习模型——没有比这更清楚的了。其中最受欢迎的功能是他们的现场实验图表;彗星。ML 为您提供了一个引人注目的仪表板,它将您的 ML 实验代码及其结果绑定在一起,还提供了一些功能,帮助从业者通过调整超参数来优化他们的模型。
NLP 项目在许多方面类似于传统的软件应用程序,但也有很大的不同。这是相似的,因为两个应用程序都是在受控的开发环境中制作的。这是不同的,因为 NLP 和机器学习项目通常还包括来自一个永无止境的来源,称为现实世界的数据,因此我们用来构建应用程序的数据也必须被跟踪。
这就是彗星。ML 进来了。彗星。ML 允许用户:
- 追踪数据集,
- 跟踪代码的更改,
- 跟踪实验历史和机器学习见解。
另外彗星。ML 为从业者更快地构建更好的模型提供了有价值的见解和数据,同时也提高了生产率、协作性和可解释性。
另请阅读:最佳 Comet.ml 替代方案
松弛的
想想 WhatsApp,Facebook Messenger,或者 iMessage……现在给它吃类固醇吧。那是懈怠。Slack 是一个面向团队和整个工作组织的消息应用程序。它可以跨各种不同的设备和平台使用。该应用程序具有许多强大的功能,可以让个人在各种聊天室以及一对一的房间中进行交流——自从全球疫情大受欢迎以来,Slack 已经成为企业和团队的一个宝贵工具。
为了让团队的所有成员保持一致,有各种功能,例如:
- 频道——对话的中心空间。各种主题可能有多个渠道(如资源、支持、项目 1)。
- Slack Connect–与来自不同公司的团队合作(对于参与 B2B 服务的公司来说非常好)
- 语音和视频通话
Slack 有许多应用程序和集成,可以全面提高生产率。我个人最喜欢的是 Google Drive 集成,它允许用户共享和管理对文件的访问,以及接收更新等,所有这些都在 Slack 中完成。还集成了其他常见应用程序,如 OneDrive、Zoom 和 Outlook。
吉拉
吉拉是由 Atlassian 开发的,用于专有问题跟踪,使它成为团队以灵活和自动化的方式规划项目、跟踪项目和发布产品或软件的伟大工具。这个工具非常适合敏捷团队,因为它包含了项目管理。用户可以自由地管理他们的项目,给团队成员分配任务(包括给程序员分配 bug),创建里程碑,计划有指定期限的任务。
吉拉的一些功能包括(在吉拉功能页面上阅读关于这些功能的更多信息):
- Scrum 板
- 看板板
- 路线图
- 敏捷报告
吉拉很受欢迎,是 NLP 项目非常合适的解决方案,因为它促进了协作以及简化、组织和结构化工作流。
数据科学家、人工智能团队和企业可以使用大量优秀的工具来简化 NLP 项目。
重要的是,您找到了最适合您需求的工具,并且集成了让您的项目顺利完成所需的功能。
感谢您的阅读,祝您的项目好运!*
到此这篇电脑有什么好的笔记软件(电脑上有什么好的笔记软件)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-zyjn/26401.html