云深度学习平台定义什么是云深度学习?随着机器学习的发展,存在缺乏资源隔离、无法动态扩展运行在单机上的机器学习任务等问题,因此使用基于云的基础设施服务。云机器学习平台并不是一个新概念。谷歌、微软、亚马逊等都有相应的服务。下面举几个典型的例子。第一个是谷歌云机器学习引擎。它的底层托管在谷歌云上。上层封装了Training、Prediction、ModelService等机器学习应用的抽象。上层支持谷歌官方的TensorFlow开源框架。亚马逊还推出了Amzon机器学习平台,该平台基于AWS的Iaas架构,在Iaas上提供两种不同的服务,即可以运行MXNet等框架的EC2虚拟机服务,以及各种图像、语音和自然语言处理SaaSAPI。此外,微软还提供AzureMachineLearningStudio服务。底层也是基于自身的可伸缩和可扩展的MicrosoftAzureCloud服务。上层提供拖放式更易用的Studio工具,上层支持微软官方的CNTK等框架。此外,微软还有各种感知服务、图像处理等SaaSAPI。这些服务都运行在Scalable的基于云的平台上。相关厂商内容基于卷积神经网络实现移动端文档检测阿里巴巴集团千亿级门店系统架构平台技术实践业务与100+国内外技术专家共同探讨2017前瞻热点技术。这些都是业界比较成熟的云端深度学习平台。在真实的企业环境中,为什么还要实现CloudMachineLearning服务呢?第一,国外基础设施国内企业不一定直接使用。如果TensorFlow仅安装在本地,则只能在裸机上进行训练。本地默认没有资源隔离。如果同时运行两个训练任务,需要自己解决资源冲突。问题。因为没有资源隔离,就做不到资源共享。即使你有多节点的计算集群资源,也需要人工约定来保证任务不会冲突,无法充分利用资源共享带来的便利。另外,开源机器学习框架没有集群级的编排功能。例如,当你想使用分布式TensorFlow时,你需要在多台服务器上手动启动进程,而没有自动故障转移和缩放。因此,很多企业已经有了机器学习业务,但由于缺少CloudMachineLearning平台,仍然存在部署、管理、集群调度等问题。那么如何实现CloudMachineLearning平台呢?我们对云深度学习服务进行了分层。第一层是平台层,类似于谷歌云、Azure、AWS等IaaS层。企业也可以使用一些开源的解决方案,比如容器编排工具Kubernetes或者虚拟机管理工具OpenStack。有了这一层,我们还需要支持机器学习相关的功能,比如训练、预测、模型上线、模型迭代更新等,我们在机器学习层抽象这些功能,并实现相应的API接口。最上面是模型应用层,可以基于一些开源的机器学习库,比如TensorFlow、MXNet等。整个CloudMachinelearning运行在可扩展的云服务上,包括模型开发、模型训练、模型服务,形成完整的机器学习工作流程。但这不是一个闭环。我们在实践中发现在线机器学习模型具有时效性。例如,新闻推荐模型需要及时更新热点新闻的样本特征。这时候就需要打开闭环,将线上的预测结果加入到离线的训练任务中,再通过在线学习或者模型升级,实现一个完整的机器学习闭环,这是通过网络无法实现的一个独立的机器学习平台。构建云端深度学习平台主要包括以下几个部分:第一,客户端访问的APIService。作为服务提供者,我们需要提供标准的RESTfulAPI服务。后端可以接入Kubernetes集群、OpenStack集群,甚至是自研的资源管理系统。客户端请求API服务后,平台需要分析机器学习任务的参数,通过Kubernetes或OpenStack创建任务,调度到后端真正执行计算的集群资源。如果是训练任务,可以使用训练任务容器,预装TensorFlow或MXNet运行环境。通过这几层抽象,可以将单机版的TensorFlow训练任务提交到Kubernetes管理的计算集群中运行。模型训练完成后,系统可以导出模型的相应文件,请求云端深度学习平台的API服务,最终转化为Kubernetes可以理解的资源配置请求,启动TensorFlowServing等服务在集群中。另外,GoogleCloud-ML最新的API增加了Prediction功能,预测时可以同时启动在线服务和离线Prediction任务。平台只需要创建对应的Prediction容器进行Inference,保存预测结果即可。通过这种简单的封装,可以实现类似于GoogleCloud-ML的基础设施。架构分层抽象,实现只需三步。第一步是创建Docker镜像。以下Dockerfile示例截取自TensorFlow项目。官方提供了可以运行的Docker镜像。通过添加自定义启动脚本,可以实现开发环境、模型训练和模型服务。和其他功能。第二步是实现标准的API服务。下面是一个Python实现的例子。用户发送开始训练任务的请求。服务端可以解析请求的参数和内容,将任务提交给后端集群如Kubernetes。第三步,生成Kubernetes需要的文件格式。在GitHub中也可以找到如下JSON文件,实现了将分布式TensorFlow任务提交到Kubernetes集群运行。我们可以通过三个简单的配置,完成机器学习任务从本地到云端的迁移过程,即实现CloudMachineLearning服务。前面提到,云端深度学习平台需要支持资源隔离和资源共享。如何做到这一点?其实Kubernetes本身就有这个抽象。用户在请求时可以声明需要的CPU、内存甚至GPU资源,通过cgroups、namespace等Container技术实现资源隔离,而kube-scheduler实现资源调度、资源共享等功能。实现自研或公有云CloudMachineLearning平台,开发者可以轻松提交训练任务、创建模型服务等,但在真实的机器学习场景中,解决计算资源的隔离和调度是远远不够的。我们还需要重新思考如何整合数据处理、特征工程等问题。重新定义云端深度学习平台TensorFlow是一个可用于深度学习的数值计算库。基于TensorFlow可以实现MLP、CNN、RNN等机器学习模型。但是有了它,Spark是不是就不需要了呢?他们是什么关系?在生产环境中,我们发现TensorFlow并没有完全取代现有的大数据处理工具。我们需要使用Spark进行数据分析和特征工程,还需要数据仓库等服务来存储和查询结构化数据。TensorFlow是一个非常优秀的深度学习框架,但是在实际场景中,用户还需要一些PowerGraph处理过的图关系特征作为输入,这不是单一框架可以解决的。对于如何组织用户的建模过程,如何进行数据清洗,如何进行特征提取,如何启动训练好的模型,如何预测模型的效果,这些都可以使用AzureMLStudio工具来完成,它TensorFlow中缺少。前面我们介绍了CloudMachineLearning,它可以实现类似Google的分布式、高可用、集群组织的计算平台,但这还远远不够,因为我们还需要用到大数据处理框架,包括MapReduce、流处理、图计算和其他框架。TensorFlow只是整个机器学习过程中模型训练的一部分。我们可能还需要Kubernetes来管理和调度CPU和GPU。如果我们要完成一个机器学习业务,需要同时掌握TensorFlow、Spark、Hadoop、Hive、Kubernetes等框架的原理和应用,而不是仅仅提供一个GoogleCloud-ML或者AWS服务,这是我们想要什么Reasons重新定义CloudMachineLearning。客观上,我们需要那么多知识,但主观上,我们要的是什么?我们希望有一个从数据处理到模型训练到模型上线的全闭环服务,而不仅仅是一个机器学习框架或者通用计算平台,我们希望特征提取可以不用写代码,我们希望工作流程无需编写代码即可轻松描述机器学习。我们需要一个非常灵活的基础设施,能够支持各种异构的计算资源,我们希望平台是可扩展的,能够实现自动故障转移和伸缩。除了上面提到的谷歌、微软、亚马逊做的云机器学习平台,我们还需要从IaaS、PaaS、SaaS多个维度提供用户界面,满足不同层次用户的需求。另一方面,这应该是一个低门槛。任何领域专家都可以轻松使用的产品服务。后面会介绍如何在真实场景中改造CloudMachineLearning平台,介绍第四范式提供的低门槛、分布式、高可用的预言机机器学习平台。第四范式云端深度学习实战经验第四范式先知平台是一款基于云端的全流程机器学习产品。用户可以通过Web登录Prophet平台使用模型研究和估计服务等功能,并可以使用拖放的方式描述机器学习的工作流程。它的使用步骤如下。第一步是数据预处理。用户不需要写Spark代码,只需要拖拽一个图标,我们称之为算子,然后提交数据清洗等数据预处理任务。通过拖动数据拆分算子,可以将数据集拆分为训练集和测试集两部分,左边留下一部分用于特征提取。一般来说,Spark、Mapreduce等开源工具也可以用于特征提取,但对编程能力和工程能力有一定的要求。通过定义特征提取的配置或脚本,用户可以实现原始的数据集特征工程。然后,连接我们自研的高维逻辑回归、高维GBDT等模型训练算子,也连接基于TensorFlow或MXNet等开源框架的算法。最后,模型训练得到模型文件后,使用刚刚拆分的测试集进行模型预测,也可以使用通用的模型评估算子进行AUC、ROC、Logloss等指标的可视化展示。在Prophet平台上,用户只需搭建流程图即可实现数据处理、模型训练等功能,真正解决机器学习业务在真实场景中的问题。在最新版本的Prophet平台中,提供了高效生成特征工程配置脚本、获取自研LR和GBDT算法最佳参数等AutoML特性。这些特性可以大大减少在获得有效建模方案过程中的重复劳动,也可以有效地辅助数据科学家获得对数据的初步理解。在某些场景下,可以达到媲美甚至超越专家建模的效果。目前,Prophet平台主要解决以下目标场景:简化数据导入。平台不需要数据使用分布式存储,也可以直接从RDBMS等SQL数据库中导入训练样本数据。为简化数据拆分,用户无需编写Spark代码,只需要提供数据拆分后的存储路径,支持按比例拆分或按规则拆分。简化特征提取。该平台支持连续特征和离散特征的提取和组合。对于连续特征,支持自动多桶算法。我们还将总结常见的特征提取方法,并将其封装到脚本或配置中。用户只需要了解相应的配置即可。您不需要自己编写代码来实现特定的逻辑。平台还可以根据已有的特征配置,自动扩展特征组合,提升模型效果。为简化模型训练,平台可支持开源机器学习算法和第四范式自主研发的超高维LR算法的实现。这种LR算法实现了参数服务器可以解决数十亿或数百亿特征维度的高速分布式训练问题。.对于学习率、正则化参数等,可以自动调优。此外,该平台还提供了线性分形分类器等扩展算法,无需人工干预即可更有效地利用数值特征。简化模型评估。得到模型的估计结果后,我们可以计算模型的ROC、Logloss、K-S等指标。不同机型的计算方式大同小异,用户无需重复编写实现代码,直接拖动算子调用即可。以上就是Prophet平台解决的问题。简化模型上线。对于常见的高维LR/GBDT模型,可以一键发布为在线服务实例,不仅简化了模型的部署和运维,还包含了大部分的特征工程逻辑,无需人工重新构建-development特征处理逻辑的在线版本。目前,Prophet平台已成功应用于银行、金融、互联网等各个行业。基于“先知平台”的反欺诈模型可以帮助银行在毫秒级识别可疑交易。同时,在新闻、视频、音频等内容推荐场景,“先知平台”也成功显着提升关键业务指标。此外,在赋能企业使用机器学习提升运营效率的同时,更有意义的是“先知平台”还大大降低了机器学习的使用门槛。Prophet作为机器学习业务全流程的人工智能平台,封装了从数据处理、模型训练到模型上线和反馈更新的系统闭环,用户不再需要强大的编程能力和工程能力,领域专家和业务人员都可以可通过推拉方式建模上线,帮助企业快速实现从数据采集到商业价值提升的最终目标。随着专利算法的不断更新和更加实时高效的极限工程优化,未来先知平台将进一步降低人工智能行业应用的门槛,帮助越来越多的企业享受人工智能服务。
