MLOps,机器学习的DevOps。它可以帮助企业或组织更好地管理生产中机器学习模型的复杂性,从而使机器学习项目能够更快、更可靠地推向市场。在本文中,我们将回顾OSSInsight.io的2022年5大最热门开源MLOps工具列表。MLOps的最大优势之一是它使AI研究人员和软件工程师能够更紧密地协作。人工智能研究人员可以专注于开发模型,而软件工程师可以专注于实现模型。这种协作有助于确保快速高效地部署模型并满足业务需求。MLOps的另一个优势是它有助于自动化模型开发和部署过程。这意味着AI研究人员可以花更少的时间执行重复性任务,而将更多时间用于开发新模型。自动化还有助于确保以一致且高质量的方式部署模型。MLOpsCommonPracticesMLOps仍然是一个相对较新的领域(正如您在下面看到的,以下五个工具中的大多数都是在2018年首次发布的),并且没有通用的实现方法。但是,也有许多常见的做法。例如,使用Pipeline,它有助于自动化构建、测试和部署机器学习模型的过程。另一种常见的做法是使用Docker等容器化技术将机器学习模型打包,以便模型可以轻松部署在不同的环境中。最后,许多MLOps从业者使用监控和日志记录工具来跟踪生产中机器学习模型的性能。这可以及早发现问题并有助于提高模型的整体质量。2022年5种最佳MLOps工具实施MLOps可能具有挑战性,但好处是显而易见的。采用MLOps实践的组织可以提高机器学习模型的质量并加快开发和部署过程。在本文中,我们选出了OSSInsight.io2022年最受欢迎的5款开源MLOps工具,分别是Jina(第1名)、MLFlow(第2名)、NNI(第3名)、Kubefliow(第4名)和标签工作室(第5名)。排名基于2022年Github上的星级、拉取请求、PR创建者和问题。OSSInsight是一个强大的洞察工具,可以帮助人们深入分析单个GitHub存储库/开发人员,使用相同的指标比较任意两个存储库,并提供全面、有价值和趋势的开源洞察。上图显示了仓库排名自2011年以来每年的变化情况。仓库按Star、PullRequest、PRCreator和Issue排名。排名前5位的工具是Jina、MLFlow、NNI、Kubeflow和LabelStudio。MLOps排行榜01JinaAI根据OSSInsight,JinaAI的同名核心产品Jina是目前最流行的MLOps开源工具。Jina是一个用于多模式AI的MLOps框架。它简化了在云中构建和部署神经搜索和创造性AI。Jina大大简化了基础设施AI的复杂性,开发者可以直接使用Jina封装的先进解决方案工程和云原生技术,轻松将PoC升级为生产就绪服务。地址:https://get.jina.ai/JinaAI的MLOps涵盖了从原型设计、服务器化、部署、微调、监控等整个开发流程,Jina提供最前沿的云原生功能,先进的解决方案,学习Jina不过很简单。只要掌握Jina的三个基本概念:Document是最基本的数据结构。(目前该项目属于Linux基金会,JinaAI官方将DocArray捐赠给了Linux基金会)Executor是一个Python类,使用Document作为IO函数。Flow将执行器连接到管道中。有了这三个概念,45行代码就可以轻松构建基于语义的文本搜索和分片!'frompprintimportpprintfromjinaimportFlow,requests,DocumentArray,Document,ExecutorclassMyFeature(Executor):@requestsasyncdeffoo(self,docs,**kwargs):docs.apply(Document.embed_feature_hashing)classMyDB(执行器):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)self.db=DocumentArray()@requests(on='/index')defindex(self,docs,**kwargs):self.db.extend(docs)@requests(on='/query')defquery(self,docs,**kwargs):returnself.db.find(docs,metric='jaccard',use_scipy=True)[0][:3]classMyRanker(Executor):@requests(on='/query')asyncdeffoo(self,docs,**kwargs):returnDocumentArray(sorted(docs,key=lambdax:x.scores['jaccard'].value))d=Document(uri='https://www.gutenberg.org/files/1342/1342-0.txt').load_uri_to_text()da=DocumentArray(Document(text=s.strip())forsind.text.split('\n')ifs.strip())if__name__=='__main__':f=(Flow().add(uses=MyFeature).add(uses=MyDB,shards=3,polling={'/query':'ALL','/index':'ANY'}).add(uses=MyRanker))withf:f.post('/index',da,show_progress=True)pprint(f.post('/query',Document(text='shesmiledtoomuch'))[:,('text','scores__jaccard__value')])f.plot()实现Flow可视化"title="调用f.plot()实现Flow可视化">使用ExecutorHub,用户可以轻松使用LLM或HuggingFace上的预训练模型来嵌入文档此外,在实践中,如果没有适当的领域采用或知识转移,性能往往不是最优的。微调是提高神经搜索和嵌入性能的有效方法相关任务的解决方案。JinaAI还提供了Finetuner工具,通过简化工作流程并在云端处理所有复杂性和基础设施,使微调更容易、更快和更高效。最后,JinaAI还为Jina项目提供免费托管服务,你sers可以使用基于CPU/GPU的JinaFlow部署,使用Kubernetes中的自动配置功能。现已进入公测阶段,提供免费托管服务。总体而言,JinaAI提供了一系列强大的工具和资源。关注公众号,了解最新的MLOps趋势和最佳实践。02MLFlow地址:https://github.com/mlflow/mlflowMLflow在榜单中排名第二。与专门针对神经搜索和多模式AI应用程序的Jina不同,MLflow是一个更通用的平台,旨在简化机器学习开发,包括跟踪实验、将代码打包成可重新运行的代码以及共享和部署模型。它提供了一组轻量级API,可以与任何现有的机器学习应用程序或库(TensorFlow、PyTorch、XGBoost等)一起使用,无论您当前在哪里运行ML代码(例如在笔记本、独立应用程序、或在云端))。MLflow的当前组件是:MLflowTracking:用于记录机器学习实验中的参数、代码和结果,并使用交互式UI对它们进行比较。MLflowProjects:一种可重新运行的代码打包格式,使用Conda和Docker与他人共享ML代码。MLflow模型:一种模型打包格式和工具,可让您在Docker、ApacheSpark、AzureML和AWSSageMaker等平台上轻松部署相同的模型(来自任何ML库)以进行批处理和实时评分。MLflow模型注册表:一个集中式模型存储、一组API和一个UI,用于协作管理MLflow模型的整个生命周期。MLflow项目为打包可重用的数据科学代码提供了一种标准格式。每个项目只是一个包含代码或Git存储库的目录,并使用描述符文件来指定其依赖项以及如何运行代码。MLflow项目由MLprojects的简单YAML文件定义。名称:我的项目conda_env:conda.yamlentry_points:main:parameters:data_file:pathregularization:{type:float,default:0.1}command:"pythontrain.py-r{regularization}{data_file}"validate:parameters:data_file:路径命令:“pythonvalidate.py{data_file}”项目可以通过Conda环境指定它们的依赖项。一个项目也可能有多个调用运行的入口点,带有命名参数。您可以使用mlflowrun命令行工具从本地文件或Git存储库运行项目:mlflowrunexample/project-Palpha=0.5mlflowrungit@github.com:databricks/mlflow-example.git-Palpha=0.5MLflow会自动为项目设置正确的环境并运行它。03NNI地址:_https://github.com/microsoft/...微软的NNI(NeuralNetworkIntelligence)是一个轻量级但功能强大的工具包,可以帮助用户自动化特征工程、神经架构搜索、超参数调优和深度学习模型压缩。NNI简化了扩展和管理AutoML实验的工作。与Jina更侧重于推理不同,NNI侧重于模型训练和实验。它提供了一个功能强大且易于使用的API,用于促进AutoML等高级培训。自动神经架构搜索在寻找更好的模型方面发挥着越来越重要的作用。最近的研究证明了自动化NAS的可行性,并产生了优于许多手动设计和调整模型的模型。代表作有NASNet、ENAS、DARTS、网络形态与演化等。神经架构搜索的过程类似于超参数优化,只是目标是最好的架构而不是超参数。一般来说,神经架构搜索通常包括三个任务:搜索空间设计、搜索策略选择和性能评估。这些任务很麻烦,但在NNI中很容易解决:#definemodelspaceclassModel(nn.Module):self.conv2=nn.LayerChoice([nn.Conv2d(32,64,3,1),DepthwiseSeparableConv(32,64)])model_space=Model()#searchstrategy+evaluatorstrategy=RegularizedEvolution()evaluator=FunctionalEvaluator(train_eval_fn)#runexperimentRetiariiExperiment(model_space,evaluator,strategy).run()04Kubeflow地址:_https://github.com/kubeflow/k...Kubeflow是Kubernetes的机器学习工具包。它最初是作为在Google内部运行Tensorflow的一种开源方式。它最初是一种在Kubernetes上运行TensorFlow作业的简单方法,但后来扩展为能够运行端到端机器学习工作流的多架构、多云框架。上图显示了Kubeflow作为在Kubernetes之上安排ML系统组件的平台。Kubeflow努力使ML工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是再次创建额外的服务,而是提供一种简单的方法来在不同的基础设施上部署用于机器学习的开源系统。您应该能够在Kubernetes运行的任何地方运行Kubeflow。与Jina、MLFlow和NNI相比,Kubeflow涵盖了最完整的ML生命周期,包括:TrainingAutoMLDeploymentServingPipelinesManifestsNotebooks与Jina的“Flow”和MLFlow的“Project”概念相比,Kubeflowpipeline涵盖的内容更多。KubeflowPipelines是一个平台,用于构建和部署基于Docker容器的可移植、可扩展的机器学习(ML)工作流。具体来说,它包括:用于管理和跟踪实验、作业和运行的用户界面(UI)。用于安排多步骤ML工作流程的引擎。用于定义和操作流程和组件的SDK。用于使用SDK与系统交互的笔记本。KubeflowPipelinesUI中示例流程的运行时执行图05LabelStudio地址:_https://github.com/heartexlab...LabelStudio是Heartex开发的一款开源工具,专注于机器学习生命周期的早期阶段:数据标签。数据注释是将标签添加到数据集的过程,以便它可用于训练机器学习模型。数据标注非常重要。首先,它创建了更高质量的数据集。如果数据集未标记,机器学习模型可能很难从中学习。其次,数据标注有助于加快训练过程。第三,数据标注可以改善机器学习模型的结果,使其更加准确。数据标记通常是手动完成的,这是一个耗时且昂贵的过程。LabelStudio让您可以使用简单的UI来标记音频、文本、图像、视频和时间序列等数据类型,并将它们导出为各种模型格式。它可用于准备原始数据或改进现有训练数据以获得更准确的ML模型。您还可以将LabelStudio与机器学习模型集成,以提供标签预测(预标记)或持续主动学习。LabelStudioML后端是一个SDK,可让您包装机器学习代码并将其转换为网络服务器。然后可以将该服务器连接到LabelStudio实例以执行2个任务:根据模型推理结果动态预注释数字。根据最近注释的数据重新训练或微调模型。例如,根据示例脚本初始化ML后端。Label-studio-mlinitmy_ml_backend--scriptlabel_studio_ml/examples/simple_text_classifier/simple_text_classifier.pylabel-studio-mlstartmy_ml_backend定义加载程序后,您可以为模型定义两种方法:推理调用和训练调用。您可以使用推理调用即时从模型中获取预标签。示例ML后端脚本中的现有预测方法必须更新以适用于您的特定用例。defpredict(self,tasks,**kwargs):predictions=[]#先获取注解标签,从labelingconfig中提取from_name/to_name键进行预测from_name,schema=list(self.parsed_label_config.items())[0]to_name=schema['to_name'][0]fortaskintasks:#对于每个任务,以“选择”预注释的形式返回分类结果predictions.append({'result':[{'from_name':from_name,'to_name':to_name,'type':'choices','value':{'choices':['MyLabel']}}],#你可以选择包含预测分数,你可以用它来排序任务并进行主动学习'score':0.987})returnpredictions编写您自己的代码来覆盖predict(tasks,**kwargs)方法,该方法采用JSON格式的LabelStudio任务并以LabelStudio接受的格式返回预测。通过覆盖fit(annotations,kwargs)方法编写您自己的训练调用以使用新注释更新您的模型,该方法接受格式化为JSON的LabelStudio注释并返回可以存储有关所创建模型的信息的任意字典。deffit(self,completions,workdir=None,**kwargs):#...做一些繁重的计算,获取模型并存储检查点和资源return{'checkpoints':'my/model/checkpoints'}#<--如果您只想在不重新训练模型的情况下预先注释任务,则可以在后续调用中将此字典检索为self.train_output,则无需在代码中使用此调用。但如果你真的想根据LabelStudio的注释重新训练模型,请使用fit(annotations,kwargs)方法。在使用类包装模型代码、定义加载器和定义方法后,您就可以将模型用作LabelStudio的ML后端。很难否认,任何机器学习模型的成功在很大程度上取决于其训练数据的质量。这就是LabelStudio在2022年排名靠前并在MLOps中发挥至关重要作用的原因。内部采用MLOps的公司作为机器学习的重要组成部分,MLOps在过去的一年里被越来越多的公司采用。我们发现越来越多的公司采用MLOps实践并分享了他们的经验。特别是,MLOps有两种主要方法:集中式方法和分散式方法。集中式方法的典型例子是谷歌和Facebook,它们有集中的团队负责开发和管理整个ML流程。集中式方法的优势在于能够在内部开发和管理整个ML流程,从而实现更好的控制和透明度。但缺点是它可能变得非常隔离,不同的团队彼此独立工作。去中心化方法的典型例子是Amazon和Netflix,它们有分散的团队,每个团队管理ML过程的一部分。分散式方法的优势在于能够更快、更灵活地移动,因为每个团队只负责ML管道的一部分。但缺点是透明度较低,更难追踪问题。到2022年,最佳MLOps设置具有集中式和分散式两种方法,具体取决于公司的需求。例如,一家公司可能有一个集中的团队负责开发ML算法,还有一个分散的团队负责训练和部署模型。迈向2023年!展望2023年,我们预计会有更多公司采用MLOps实践,并且MLOps的好处将变得更加明显。尤其是在多模态AI的范式转变中,更多的文本、图像、视频,甚至3D模型数据,我们将看到数据集变得更加复杂,自动化数据管道和机器学习管理过程的需求将变得更加关键。到2023年,最成功的MLOps配置将是那些在人员、流程和工具之间找到适当平衡的配置。我们预计最流行的开源MLOps工具将是那些提供易于使用的界面并允许定制以满足特定需求的工具。本文中提到的工具和平台将不断发展,变得更加用户友好,让它们可供更广泛的用户使用。我们还期望看到新平台的出现,以及添加到现有平台的新特性和功能。在具体工具方面,我们认为版本控制工具对于管理ML代码和模型将变得越来越重要。随着对高质量训练数据的需求变得更加明显,数据注释和标记工具也将越来越受欢迎。最终,模型管理工具将是管理生产中部署的各种机器学习模型所必需的。总的来说,我们希望MLOps领域变得更加多样化,提供更多工具来满足不同组织的需求。在2023年,MLOps是任何想要在不断变化的机器学习环境中保持竞争力的公司的重要组成部分!让MLOps加速您的成长,构建机器学习能力,让您在竞争中脱颖而出!原文链接https://jina.ai/news/seo-is-d...更多技术文章JinaAI创始人萧寒博士解读多模态AI语音生成图像任务的范式转变|模型精-调优神器FinetunerDocArray+Redis:即将飞起的推荐系统JinaAI,正式将DocArray捐赠给Linux基金会
