上文对机器学习平台及其要考虑的功能做了大致的介绍。可以看出,建设一个完整的机器学习平台有很大的投入。每个团队、业务需要根据自己的需求来有所取舍、有先有后,不是什么都要有、马上就要。本章会从多个角度帮助团队,分析应该建设什么样的机器学习平台,来支持业务需求。
技术最终服务于业务。即使是纯粹的软件公司,也要思考软件的用户需要什么。全方位的理解了业务,在每次进行技术决策时,能够从问题的源头出发,做出对当前、中长期的最佳决策。
对于小团队、小公司来说,理解业务相对容易。但业务也可能随时发生变化。对于中大型公司来说,特别是刚刚开始进行机器学习投入的公司,还处于探索阶段。机器学习平台支持的业务可能随时发生变化,要从公司业务、机器学习可能的应用来理解业务。
理解业务,首先要了解目标客户,要思考机器学习平台的用户是谁。建设的平台是否直接给外部用户使用?如果是的话,是每个客户部署一个平台,还是在同一个平台上服务所有的客户?或者只给用户提供端到端的服务,平台给自己的团队使用?平台的使用者是数据科学家还是开发人员?
业务规模以及发展速度的预期,决定了机器学习平台硬件投入的时间点以及成本的规划。如果业务规模较大,初期就要规划足够的算力、部署。如果团队强大,就要在运维、易用性上多下功夫。但也要注意,资源永远是有限的,要把好钢用在刀刃上,精力上要有所集中,解决当下最重要的痛点。
定位,在机器学习平台建设时,要确定平台的目标,制定向此方向发展的路径。首先要确定团队服务的业务是某个垂直方向的应用,还是有可能成为跨业务的机器学习平台?如果是跨业务的,是要做成通用的机器学习平台解决底层架构问题,还是要做好某些专业方向,直接解决业务问题?定位以后,平台、开源工具的选型等工作就有了依据。
当前的机器学习虽然在飞速发展,但能做的仍然有限,远远赶不上人类智能。媒体、业界对机器学习能做到的事情期待未免过高。机器学习从业者,包括数据科学家、应用开发者,应该帮助整个公司、业务部门都认识到机器学习的局限性。在业务模式设计上,不能将机器学习放在会有重大影响的决策位置,而是应该辅助人类做决策。
比如,车辆驾驶中的车道自动保持功能,在启动时也会同时检测用户是否手握方向盘,在用户没有握住方向盘时警告。这样,在设计上就对功能有合理的期望,同时也管理好了用户的期望,就保证了安全。再比如,不少机器学习模型已经能帮助分析医学影像了,但仍然只能作为医生的辅助,不能直接给出定论,做出诊断。
随着数据、特征工程的不断演进,机器学习模型效果会越来越好,同时也要看到,随着模型效果的提升,成本的投入也在指数级的增加。但无论如何,如果人不能做到100%准确的事情,机器学习模型也做不到。期望机器学习模型完全的解决某个问题,还是一个世界难题。比如,在手写识别的数字数据集中,即使人也很难分辨一些图片到底是什么数字,更不能期望机器学习模型能100%的识别正确。
机器学习平台要对当前和预期的服务规模做好预测。以此为依据,就能决定运维需求是否强烈、紧急。如果计算出来一两台服务器即可满足需求,而且不需要进行高可用、灾备的投入。那么手工搭建一两台服务器即可满足需求。待业务量有了数量级的增加后,再寻求自动化的运维解决方案。
在估算服务规模时,也要以发展的眼光来看。如果是自建研发团队,可以在性能目标上稍稍超前6个月左右,不要太超前,也不能只满足当下。留出一定的时间,是为了给团队留出足够的设计演进的时间。如果是将系统进行外包,每次交付都有明确的目标,交付周期也较长,可设定更高的性能目标,这样能够有更多的时间来做好项目管理。
数据是机器学习重要的外部输入,其特点会影响许多技术决策。
数据来源。数据是否为企业内部数据,如果是的话,是否有很强的保密需求?如果不是的话,数据从何而来,是否有保密需求?如果数据有保密需求,一般是存储在企业内部平台上,不放到云中。如果数据在其它企业中,有可能整个系统都要构建在对方企业中。
如果数据是通过网络抓取的,并在云平台中运行数据采集。那么,带宽、服务器等方面扩容较容易。进行私有部署时,就要从带宽、成本、机房大小来评估一下平台容量的瓶颈。
数据量。 数据量大概有多少?产生新数据的速度如何?数据采集、加工时的传输带宽需要多少?访问频率如何?
如果数据量较大,需要建设较大的存储容量。如果自建机房,成本会较高,性能也不好保障。云平台可以按需建设,一次性投入也较小。如果数据访问频率很低,或几乎不访问,云平台中的冷数据存储的成本会更低。
如果数据需要在企业和云平台之间大量的传输,就不得不考虑到带宽是否满足需求,成本是否可控。如果带宽、网络延迟无法满足需求,可能就无法使用云平台。
数据格式。数据是结构化的还是非结构化的?存储在数据库中还是文件系统中?
如果当前的数据格式是非结构化的,没有标记信息,就要进行人工标记工作,建立样本数据库。如果现有数据已经有了足够的标记数据,可直接转换为机器学习直接可用的形式。
数据格式也涉及到数据加工流水线的对接工作。如果已经有了大数据平台,尽可能重用现有平台能够减小开发和维护成本。但是,重用现有平台会带来更多的系统关联问题,如果现有平台不够稳定,会影响新的机器学习平台的稳定性。
云服务已经占领了服务器市场很大一部分,不管是中小型企业还是一些大型企业,都开始将自己的整个业务构建到云上。有些云服务商直接提供了机器学习平台,有的提供了交互编程的云服务资源,还有的云服务商直接提供了GPU的虚拟机供使用。下面介绍机器学习平台所涉及到的服务和部署形式。
云虚拟机。即在云平台中构建的虚拟机,资源隔离性和自由度非常高。云虚拟机是当前云服务中最常用的一种。在云虚拟机里能安装任何软件和服务,通过虚拟网络、防火墙等功能也能达到很高的安全性。资源可以按需申请,随时增减。还可以通过云服务的网关等来组合实现高可用、灾备的功能。因此,云虚拟机自由度非常高,但需要自己来搭建,需要一定的运维经验才能很好的使用。
GPU等计算型虚拟机。即安装有GPU等高性能计算硬件的云虚拟机。随着机器学习的深入发展,大部分云服务商都提供了安装了GPU等的虚拟机。Nvidia的GPU是最流行的,云平台中的GPU服务器,大都采用了Nvidia的专业机器学习GPU,采购成本较高,使用成本也较高。云平台可以按用量计费。如果团队模型训练的时间不多,可以按小时租用,训练完成后立即回收,这样才能有效节省成本。
云机器学习平台。云机器学习平台一般是为数据科学家进行模型试验、训练准备的。有的云机器学习平台也实现了一键部署等产品化的功能。不少云服务商提供了机器学习平台,提供的功能差异也较大。有的能进行分布式计算,有的提供了图形界面的模型创建工具,有的还提供了交互式的脚本编辑执行体验。云机器学习平台在使用上会比较简单,团队也可以避免开发机器学习平台的投入。但是,云平台的功能较固定,使用上如果遇到不支持的功能,一般不能扩展。
云认知服务。如果团队没有数据科学家,或者初期想要验证概念。可使用一些已经做好的云服务,如图像识别、人脸识别、语音文本转换、语言理解、聊天机器人等服务。这样团队能将重点放在打造业务上。准备好数据,云认知服务也能给出较好的结果。但云认知服务提供的种类有限,不能覆盖所有行业的应用。云服务一般也不支持离线使用,需要联网才能调用。
基于多云服务商的混合部署。在一些深度使用云服务的场景下,希望最大化服务的稳定性,灵活调整成本。这种需求下,可在多个云服务商申请资源,将其整合使用。结合自动化脚本以及配置化的管理,还能做到根据使用情况灵活调整在各家云服务商的资源规模。这样,不仅能够有效管理成本,还能规避某家云服务商的临时故障等问题,保障自己的服务质量。这种方式对运维能力有较高要求,如果资源使用不多,对资源价格不敏感,也不必采用此种方式。
服务器托管。即自购服务器,并存放于专业的机房中,属于私有部署。专业机房有良好的基础设施建设,对断电有备案。一般也会接入多家网络运营商,并提供智能路由对访问加速。物理安全上也控制非常严格,防止非授权进入机房。这种方式相对于云服务成本较低。但安全性、运维上也需要团队自己操作。如果遇到服务器硬件损坏等问题,需要人工去机房解决。
自建机房。即自购服务器,并自建机房存放服务器。这种方式的成本最低,物理管理也较方便。但需要从基础设施层进行运维,包括温度控制、布线、不间断电源、网络连接等等问题都需要解决。如果机房建设在团队的办公楼内,电源、网络保障上都没有专业机房高。网络带宽也无法灵活调整。
云平台与私有部署的混合部署。一些企业会有私有部署的内部信息系统。依靠私有部署,企业员工访问内部系统会很快,对服务器的安全也会多一层企业网络的保障。同时,企业还会依靠云平台对外提供服务。企业内部和外部会有数据同步、传输等功能。云平台和私有部署的优缺点都在前面进行了分析,根据不同场景来决定业务部署在何处即可。
决定私有部署还是用云服务商时,除了上一节定位时思考的问题,还有成本问题。私有部署是先投资后使用,还有不短的选址和机房建设周期,但后期使用上成本比较低。云服务比较灵活,使用多少,花多少钱。如果将时间线拉长,云服务的直接成本会比私有部署高。云服务有自己的管理、开发成本,但同时也提供了更高的高可用、灾备、安全等运维能力。出问题的概率较低,遇到问题一般也有较好的支持。所以,现在不仅是希望降低初期投资成本的中小企业在选择云服务,一些非专业信息产业的大企业也选择云服务,而不是私有部署。
在机器学习平台用作训练时,私有部署的成本优势会很明显。如果团队包含数据科学家,并有很高的算力需求时,私有部署比较经济。如果建设好了机器学习平台的集群管理能力,实际上并不需要云平台中的高可用、灾备能力。如果有某台服务器出了问题,只是部分算力浪费了,重新训练即可,损失不大。另外,云平台中为了稳定,通常选用了高端的机器学习专用GPU等硬件,而自建机器学习平台可选用消费级的GPU,成本也会大幅降低。因此,可以考虑机器学习平台的建模试验部分自建机房进行,而推理服务部分放在云服务平台中。但实际情况千差万别,如果因此造成很大的数据传输量,可能会得不偿失。
机器学习平台如何建设,和它的用户有直接关系。如果团队是机器学习平台主要的用户,就要考虑到团队的规模与分工。如果机器学习相关的应用开发一共就两三个人,平台在共享合作上就没有太大的价值。如果团队没有数据科学家,那么也不需要进行模型试验部分的建设,使用预构建的云认知服务即可。
团队也有发展的过程,不是一蹴而就的。在团队发展初期,做好技术决策是重点,可以基于现有的机器学习平台来开发或直接使用。随着团队和业务的发展,对机器学习平台的需求会更明确,也会有一些强烈的需求。这时,如果团队有精力了,可以推倒重来,或者接着演进和重构。
如果有外包参与,可根据和外包团队的分工,定义好接口及指标,机器学习平台可只建设团队需要的部分,以免双方有过多沟通上的成本。
在是否建立数据科学家团队上,有较多的考虑。可以先从现有的云平台的预构建认知服务开始了解,看看是否已经满足了业务场景的需求。如果满足需求,可先构建出业务系统,并丰富数据。如果数据不能改进模型,或者云平台的预构建认知服务不能满足需求,就需要考虑建立自己的数据科学家团队。
很多技术决策都会和成本相关。对于大中型企业,成本预算方法比较成熟时,直接按照计划对团队、服务器等资源投入做好规划即可。对于创业公司及小团队,要根据业务、资金情况量入而出,做好团队、平台建设。关于团队人员预算建设方面,根据市场情况决定即可,不再详述。
部署上,初期可以先从云平台开始,不进行私有部署。大部分云平台都会有详细的定价策略,可以根据算力、存储、带宽的使用来预估大致的价格。在开发机器学习平台时,做好关键节点的横向扩容能力,即可满足初期的负载伸缩性需求。