使用百度easydi训练tensorflow模型训练前需要做什么

深度学习从16年开始,在国内资本市场火热,到如今(2023年)已经有7个年头了。而我正好16年作为计算机算法研究生入学 ,三年毕业后做了半年算法工程师,然后转行为AI产品经理,到现在一直在做AI平台产品相关的工作。整体也是很幸运,顺势而为。目前国内外主流的AI一站式平台被几个大厂占据,并且结合自身的云计算技术能力,为个人或组织提供公有云的AI业务研发平台;不过,同时也会针对特定场景提供定制化的私有云版本。另外,在AI业务生产流程的各个垂直领域,有很多小厂有出色的发挥,能给我们非常多的启发,不过大多集中于国外产品。各个平台自己的文档加上各种技术同学的体验分享在网络上都很容易找到,也有很多从商业角度介绍总结的文章。但是,很少有从产品经理的视角去看待他们的分享,其主要原因可能是:B端产品在国内的产品性向来不太被重视,更多注重商业模式、渠道能力;特别是交付型toB项目,往往以交付为第一目的,可以从产品的角度聊的亮点少之又少;AI平台相关的产品经理,尤其模型训练阶段相关的产品经理,对其技术知识要求很高,如果不是算法技术出身,很难做好基本的操作设计,更别说进一步的需求、市场、大型模块规划。就算是技术出身,以目前AI平台的复杂度,能做好的人也少之又少。业界现在合格的AI平台类产品经理凤毛麟角,导致招聘时往往求大于供,虽然近几年有很多产品经理涌入AI领域,但是往往都无法达到可承担这类工作的要求,副作用明显。最后导致很多有名的平台甚至没有产品经理参与(比如阿里PAI,作为启动很早的产品,研发过程没有产品经理参与)。因此,希望能够从产品的视角看看这些平台,毕竟看着人工智能目前的发展态势,这个方向基本上还有很多年的发展前景,各个产品模块、流程也会越来越专业化、标准化。到那时,该领域优秀的产品经理也会越来越多。主流产品国内一站式AI生产平台:阿里巴巴:阿里PAI;华为:Model Arts;百度:BML,EasyDL;腾讯:TI-ONE;字节:火山引擎机器学习平台(公测中)。在训练实验模块做得非常出色其他产品:Weight & Baise:非常优秀的实验可视化工具;MLflow:非常优秀的训练实验管理工具;Tensorboard:非常经典的实验可视化工具,由Tensorflow团队提供;以上列出的代表性的产品,均只针对AI业务的训练模块部分。国内外还有很多优秀的相关产品,但是和以上产品都有很大的相似性。基础概念(如果是算法出身的同学可跳过)1、啥是人工智能?人工智能是一个构建能够推理、学习和行动的计算机和机器的科学领域,这种推理、学习和行动通常需要人类智力,或者涉及超出人类分析能力的数据规模。 AI 是一个广博的领域,涵盖许多不同的学科,包括计算机科学、数据分析和统计、硬件和软件工程、语言学、神经学,甚至哲学和心理学。——Google Cloud以上是来自于google cloud对“人工智能”的解释。但说实话,即使我读了三年的人工智能研究生,并且从事相关工作3年多,如果一个人突然问我“什么是人工智能?”,我也可能一下子很懵逼该怎么解释。从我现有的理解下,似乎:人工智能 = 一切通过机器,并具备学习、分析、决策的能力都是人工智能其中,最典型、落地场景最多的就是购物网站的物品推荐、短视频平台的推荐算法。2、啥是机器学习?机器学习是人工智慧的一个分支。人工智慧的研究历史有着一条从以“推理”为重点,到以“知识”为重点,再到以“学习”为重点的自然、清晰的脉络。显然,机器学习是实现人工智慧的一个途径之一,即以机器学习为手段,解决人工智慧中的部分问题。机器学习在近30多年已发展为一门多领域科际集成,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。——维基百科机器学习往往会被称之为人工智能的一个分支,而我在读研时,以机器学习为名称的课程都会涉及到具体算法,而以人工智能为名称的课程往往偏向于通识类,范围要大很多。在大众领域、媒体界,往往用人工智能比较多,而如果用机器学习就似乎会要特别描述某种具体技术。PS:其实如果都是计算机学科的学生互相介绍,我很少听到有人说“我是学人工智能的研究生。”但是,说”我专业是机器学习。“的会多很多。3、啥是深度学习?深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对资料进行表征学习的算法。深度学习中的形容词“深度”是指在网络中使用多层。 早期的工作表明,线性感知器不能成为通用分类器,但具有非多项式激活函数和一个无限宽度隐藏层的网络可以成为通用分类器。深度学习的定义要清晰很多,不管是技术界还是大众媒体界,其实只需要一条判断:有没有用神经网络这类结构构建算法。记得16年刚上研究生是,我的上一届师兄师姐基本上是第一届开始用深度学习算法来处理问题的学生,在这之前都是用传统方法(非深度学习类算法);而到我们这届,就全面拥抱深度学习了,一直到现在。4、什么是算法?可以用来干什么?算法(英语:algorithm),在数学(算学)和电脑科学之中,指一个被定义好的、电脑可施行其指示的有限步骤或次序[1],常用于计算、数据处理和自动推理。算法是有效方法,包含一系列定义清晰的指令[2],并可于有限的时间及空间内清楚的表述出来[3]。——维基百科其实任何被定义好的步骤都可以被叫做算法,甚至你今天出门,以节约时间为目标,先到工位,再麦咖啡;还是先买咖啡,再到工位。都是一种算法。对于”算法“的理解,通常我都将其作为解决确定问题,或达到特定目标的方法。比如,短视频平台需要能够给你推送感兴趣的视频,那么”对不同的人,推送感兴趣的视频“就是一个目标,而背后达到这个目标的工具就是算法。5、什么是一站式AI生产平台?算法本身是理论,比如要给用户推送感兴趣视频的算法,可以被表达为一系列的数学表达式,但表达式仅仅是定义规则而已,如果要将其落地,那么它本身会变成一个复杂的工程问题。它会涉及到服务器,程序员编码,app调用,用户交互等等问题。也就是说,如果现在公司老板说:”我需要给我们的app主页加个‘猜你喜欢’的列表。“,那么需要设计推荐算法,收集数据,训练模型并将其部署为服务,然后让app相关功能调用服务的处理能力,每次返回列表。以上过程,就是一个完整的AI业务开发上线流程,那么一站式的AI生产平台就是:针对AI业务生产的全生命周期,针对数据集、模型编码、模型训练、模型优化、模型推理服务部署等步骤,提供相关的工具,助力用户低成本生产高质量的AI业务。6、一个AI业务的生产一般需要经过什么步骤?通常的,目前绝大多数落地模型算法都属于监督学习。因此都需要足够的特定任务的训练数据集,对模型进行训练。因此,一个AI业务的生产一般要经过以下步骤:以上的的每个步骤都有各种复杂的实现和产品细节,但是总体来说,主要分为三个大的模块:数据集模型训练模型部署7、小白如何理解模型、模型训练、模型部署?算法不管是深度学习算法,还是传统算法,本质上可以利用数学将其抽象为一个函数F(x)。比如:f(x)=ax^{b}+cx+d 是一个简单多项式函数,同时也是一个算法,因为如果参数a,b,c,d固定,那么函数确定。将该函数在空间中进行绘制,我们会发现函数会将空间中的(x,y)进行分割,不同区域的(x,y)即表示不同的类别。函数图比如上图为 x^{2}+2x+1 的函数图像,那么该二维空间中该函数将空间分为不同的区域,我们定义不同区域为不同类别,那么我们就可以得到一个分类函数:Y(x)=f(x)-x^2-2x-1 我们可以知道,对于一个样本(x,f(x)),如果它的值大于0,那么它属于B区域;如果它的值小于0,那么它属于A区域。深度学习算法只不过是一个非常复杂的f(X),而模型训练就是指通过某种迭代策略,通过训练数据集(样本和标签),确定这个复杂f(X)的参数的过程;确定好的参数量级很大,保存为特定文件之后叫做模型。我们将得到的f(x)部署为一个服务,下游应用通过接口(http等)调用这个函数,叫做模型部署。此外,我们常常听到算法领域说,新推出了什么模型,其实就是新推出了一种f(x)结构;同一个f(x)因为业务场景不同,喂给它不同的数据,就可以训练得到针对不同业务场景的模型。训练模块为什么先讲训练模块呢?其一是它算是我最熟悉的模块之一;另外,在工具简陋的情况下,训练模块的范围可以包含在线编码、数据集处理等;尤其很多科研工作者,或对于某些算法工程师来说,对数据集采集、处理,模型优化、模型服务部署都了解很少,很多工作在调整模型策略、训练模型。它不一定是算法工程师花时间最多的步骤(因为有的时候花时间最多的步骤是数据集处理),但基本上是算法工程师最熟悉的步骤。训练模块的目标目标用户:算法研究员(算法工程师),简单来说就是设计算法,并且生产模型的人。目标场景:使用计算资源(通常重度依赖GPU),发起训练任务;通过尝试不同的训练策略(比如不同的超参数),对实验结果进行分析,得到最优的模型。用户使用训练模块的一般过程从我了解到的,至少国内的AI业务生产工作环境来说,即使是大厂(虽然有内部平台的加持),尤其是训练实验步骤上都比较原始,基本上各个公司,各个组都有自己的习惯,且没有统一(虽然近些年,大厂都极力推自己的内部平台,以实现降本增效),但确实还需要很多时日。我认为可能的原因是:AI业务生产的发展年限较短,随之的AI平台更是起步到现在没几年的时间;训练实验模块,本身就是各种AI框架的必争之地,分为各种流派,各家有各家的喜好,暂未形成统一的认识;(虽然我认为最终会统一)AI这些年发展迅速,生产范式在大方向上虽然趋于固定,但细节上在不断调整。虽然,不同人在不同方向上有侧重点,但由于基础设施的限制、算法技术能力上的限制,我们还是能够总结出目前算法工程师在训练实验模块的一般操作过程。最原始,也是目前最多的生产模式目前绝大多数公司,在没有成熟的内部AI生产平台的情况下,工作环境基本上就是:(1)物理机器的方式提供计算资源,算法工程师通过ssh连接物理机,使用GitLab管理代码,使用物理机的磁盘存储数据集;(2)更豪横一些的公司,会使用google cloud等云服务公司提供的计算资源,但使用方式上也基本上是当作物理机来使用。以上方式大量存在的主要原因是:(1)构建成本低,公司购置物理机,运维同学组建机房进行管理即可;(2)灵活度高,对于较小的团队,组员可以自由管理自己的开发环境,并且使用自己想要的工具;一个训练实验的必要元素不论是物理机方式训练,还是依靠优秀的AI平台工具进行训练,对于一个训练实验来说,以下元素都是必须的:训练代码;训练环境依赖;数据集;计算资源(GPU,Memory,GPU,磁盘存储);Entry Point:训练代码启动命令。拥有以上的元素,用户即可发起一个训练任务。典型痛点在训练模型的过程中,算法工程师面临一些典型的痛点。(1)资源:训练资源永远都是不够的,尤其当要面对一堆算法工程师的时候,如何合理分配资源,使用足够优秀的资源调度策略,实现最少的资源干最多的活;(2)环境:不同训练实验需要的环境配置可能相差较大,而算法工程师往往对复杂的环境配置熟悉度不够,如何为他们提供开箱即用,并且能简单实现个性化配置的环境非常重要;(3)实验管理:每个训练任务都作为一个实验,算法工程师通过尝试不同策略,并对实验结果进行分析、对比得到最好的策略和模型。 因此,我们应该为其提供实验信息记录、丰富的结果可视化工具,方便其做实验分析;(4)可复现性:AI业务的生产流程较长,经过多个步骤,且往往经手多个不同的用户角色,当作为模型上线后,如果希望基于其生产策略进行迭代,往往需要追溯其生产流程。但只要生产流程中某个细微的变化,都可能导致最终的产物发生较大变化,因此我们需要为工程师们提供优秀的可复现性。所有在平台上所做的正式生产,都应该被记录关键信息,并且可以轻松复现;(5)数据集使用:如今AI业务越来越复杂,模型越来越大,并且为了可以训练大模型,数据集的规模也非常的庞大。对于大型的数据集的读取、使用,如果没有针对性的加速、使用方式上的优化,那么数据集处理和读取会成为训练速度上很大的瓶颈。并且,算法研究员通常对数据工程化方面的技术并不了解,需要依托相关的技术专家,提供技术上的解决方案。要知道的是:10GB的数据集和10TB的数据集,那会是两个完全不同的技术问题。其实从上述典型痛点可以看出,由于如今AI业务的复杂度,痛点往往由两个方面导致:(1)算法研究员(工程师)的技术背景:往往精通于算法设计,调参理论,对其他工程化的内容了解很少;(2)实际落地业务生产中,需要面对复杂的生产环境。面对典型痛点,大家的做法资源问题对于一站式的AI生产平台来说,通常底层都有大厂的云计算技术加持。在海量的计算资源上,通常使用K8s技术作为资源调度层,将所有训练任务作为k8s的实例进行管理,依据不同平台的定位,会制定不同的资源调度策略,以实现最大的收益。此外,AI平台其最大的运营成本往往都来自于算力,且算力不管在哪里都是稀缺资源。因此,对于拥有云资源的厂商来说,旗下的AI平台最核心的商业模式就是卖算力,通过提供AI平台工具辅助用户开发AI业务,通过售卖计算资源收取用户费用。因此,对于这类平台产品来说,基于优秀的资源调度策略,实现使用最少的资源,在不影响用户使用的情况下,得到最多的收益是其产品核心目标之一。阿里巴巴:阿里PAI阿里的机器学习平台基于阿里云的强大云计算资源,通过资源套餐+使用时长的方式向用户收费。平台提供容器训练(DLC),用户可以选择不同的计算资源套餐,作为训练容器的资源,在容器中平台启动用户的代码,使用该训练资源进行模型训练。这种方式下,用户无需关心资源的调度细节,只需要知道我的训练需要什么样的资源即可。华为:Model ArtsModel Arts提供训练任务模块,与阿里PAI一样,也是容器化提交的方式,用户通过选择资源套餐,实现资源挂载使用。百度:BML百度BML提供自定义作业模块,方式与前两者相同。百度 EasyDL百度BML提供训练模型模块,方式与前者相同。字节:火山引擎机器学习平台(公测中)火山引擎机器学习平台提供自定义任务模块,用法与前者产品相同。我们可以很容易总结出:至少目前国内的一站式AI生产平台,对待训练实验任务的基本操作和实现方式如出一辙,基于自己的云算力技术,为用户提供托管式的训练任务服务,用户选择不同的计算资源而付费,构建基本的商业模式。但需要注意的是,该模块用户能够使用和看到的资源配置操作并不是核心,真正核心有价值的设计是其背后的资源调度机制。在设计合适的资源调度的时候,需要考虑各种场景:(1)计算资源型号的不同,其计算能力不同,成本也不一样,需要有一套完整合理的计费体系,将不同型号的计算资源都用同一种货币计费;通常来说,平台会根据物理机器的真实采购价格按时间进行折旧均摊,加上运维和运营费用,为计算资源统一定价。(2)用户付费的不同,也会导致任务优先级不同,需要设定用户和平台都能接受的任务优先级策略、任务排队系统;一般的,平台会为用户或同一个用户组提供平等的排队系统;当然,也会支持用户对自己的任务设定优先级。此外,为了充分利用空闲计算资源,对于一些优先级不敏感,且希望用低成本获取资源的用户, 可以提供被抢占业务,比如对于空闲资源可以低价出售,但是如果有高价付费用户要使用资源,那么资源将被抢占。(3)实现超卖:假设你的集群有10块GPU,并且给出的套餐是1块GPU一份,那么其实你并不能只卖十份,因为实际生产过程中,很少有10个用户同时来跑任务。就像健身房,往往会员数量要远远超过健身房可以容纳的人数总量。现实中的超卖策略,往往需要根据真实的计算资源使用的详细数据,做数据分析来设定具体的值,且该值也会在不同时间段发生变化,对于公有云平台来说,它更多的是一个运营问题。(4)资源碎片:云计算平台的基本思路是将大量的物理机器构建到一起,实现资源池化,用户无需关心资源调度的细节。但不管如果池化资源,其底层都还是物理机器组成。假设你的云有两台机器,并且每台机器配置都是4块GPU,256GB内存,48cores的CPU,2TB的存储,那么作为平台来说,你需要非常小心地制定资源套餐的大小,使其既能实现用户需求,达到最多付费,并且能将资源充分拿光。为什么会拿不光资源呢?假设我设定套餐为:3GPU
200GB内存
28 Cores
2TB存储,那么我永远只能同一时间卖出一份资源,剩下一块GPU和相关资源永远将被闲置。(5)资源回收:虽然公有云平台往往通过使用时常付费,用户试用越久,付费越多。但是,为了更好的用户体验,并且能够充分售卖资源,平台都会有资源回收策略。最简单的,用户在训练任务启动时就可以设定任务的运行时间,时间一到资源便被收回,也不会再计费。或者,更常见的做法是平台会检测entry point的命令是否执行完成,执行完成之后便会收回资源,停止计费。以上的这些问题,其实并不是AI业务生产平台的问题,本质上是云服务平台的问题,只是在机器学习的场景下,需要考虑机器学习生产的特异性。环境依赖问题环境依赖,其实就是支持训练任务的运行环境。不同的业务,不同的算法工程师往往有各自的偏好,而环境配置对算法工程师来说,由是一件麻烦,且容易出错的事情。绝大部分算法工程师,都希望能够使用平台时开箱即用,代码能够直接跑得起来。深度学习发展到今天,涌现了各种各样的AI框架,及各种配套的底层或高级依赖库,它们之间错综复杂的依赖关系,往往可能导致环境配置时出现诡异的问题,使得大家头疼不已。另外,如果一个团队共享一台物理机器,那么环境管理会变得更加困难,成员之间的需求可能并不兼容,这时会引入conda,docker之间的工具,对算法工程师来说造成额外的负担。对于一站式AI平台来说,通常采用镜像的方式来管理不同的运行环境。阿里巴巴:阿里PAI在阿里PAI中,提供镜像模块,为用户提供丰富的官方预置镜像,针对典型的AI框架,配置好了其对应的环境,使得大部分用户可以实现开箱即用。此外,用户也可以上传自己的镜像,实现高度的环境自定义。华为:Model Arts在华为Model Arts中,也同样如此,为用户提供预置框架(官方镜像),并且也支持用户上传自定义镜像。百度:BML百度BML中,同样提供算法框架(官方镜像),但是要注意它并不提供自定义镜像。百度 EasyDL对于Easy DL,因为其定位为小白用户,甚至完全不懂机器学习的用户,因此,支持用户直接选择算法模型,并且隐式地提供了配套地训练环境,用户无需关心。字节:火山引擎机器学习平台(公测中)与阿里PAI一样,提供官方镜像,并用户可以自定义镜像。环境依赖的管理,依据产品目标和定位的不同可能呈现出不同的形式:直接用镜像表示用AI框架表示隐藏于算法选择中等等但是其底层都是镜像管理技术,其要解决的核心问题都是:用算法工程师开箱即用,并且能够提供灵活、简易的自定义配置方式,使得环境配置一劳永逸。我们可以总结它们的一般做法:虽然用户的环境依赖要求各有不同,但是因为主流AI框架的马太效应,其环境依赖基本可以被枚举;因此,平台通常依据AI框架的种类和版本,为用户提供预置的官方镜像;官方镜像中通常要安装好一些用户难以自己安装的库,比如Cuda等;支持自定义镜像:通常对于工程化能力较弱的用户,支持其在官方镜像的基础上,使用pip、apt等工具安装简易的包,实现自定义配置;对于工程化能力较强的用户,可以提供dockerfile构建的方式,非常自由地构建自己的镜像。对于自定义镜像需要注意的是,要想其镜像能够在平台顺利运行,其dockerfile格式往往会有要求;对于需要经典算法的用户,可以直接提供对应的镜像环境,用户使用平台经典算法的代码,运行训练任务,无需关心环境问题。总之,依照产品定位和目标的不同,对于镜像提供的丰富程度和形式都会有所不同。因此,需要针对你所面对的用户的具体需求,做相关设计。实验管理训练任务本质上是一个实验,如果用户使用物理机这种原生的方式做生产,那么需要自己管理文件夹,并认真记录好每次实验的输入输出,并对其进行各种操作后分析。整个过程在没有对应工具的辅助下,往往非常麻烦。且对于团队合作来说,更是需要默契地遵守各种生产规则,万一不小心操作失误,就可能导致管理混乱。实验管理主要有两个方面:实验任务的信息展示,及轻松的管理;实验结果的信息可视化,辅助用户进行实验分析。阿里巴巴:阿里PAI阿里PAI对于每个训练任务,简单记录其基础配置,运行时间等。并且实时展示它的运行状态,用户可以对任务进行简单的操作:复制,启动,停止,删除等。对于提交的训练任务,提供实时的日志、事件、资源使用、Tensorboard服务等,协助用户对实验进行调试分析。华为:Model Arts与阿里PAI基本一致,对训练任务进行管理。对于提交的任务,记录并展示用户配置,并且提供日志、事件、资源使用情况等工具,协助用户调试和分析实验。百度:BML与上述平台的方式基本一致。字节:火山引擎机器学习平台(公测中)与阿里PAI,华为Modelart基本一致。百度 EasyDLEasyDL与前者不同的是,因为为用户提供了完整的训练代码,因此可以做丰富的自动化的结果分析。比如,评估指标结果展示、错误样本展示、优化建议等等。由上述一站式AI云平台的实验管理模块可以总结,对于训练实验管理我们至少需要做到:提供训练任务提交、配置;对提交的训练任务提供基本的配置信息记录;提供任务运行信息,用户可对其进行简单的管理操作;提供日志、事件等模块,用户尤其依靠日志输出来分析训练任务的情况;有了以上的基础功能,用户即可使用你的平台完成训练任务,并对训练任务进行基本的管理。但是,仅仅通过日志输出,来分析模型的训练情况是一种非常原始的做法。如今对实验的结果分析,有非常多丰富的辅助工具。TensorboardTensorboard是非常经典的实验可视化工具,由Tensorflow团队提供;尤其是使用tensorflow的算法工程师,对其一般比较熟悉,且常常用其来对信息的各种维度进行可视化。Tensorboard本质是上一套SDK,采用代码强入侵的方式,用户通过简单的信息记录,可以对其进行展示。Weight & Baise除了Tensorboard外,针对完整的实验管理及可视化,Wandb提供了一个非常出色的范例。同样是代码强入侵的方式,但是支持所有的AI框架和环境,并且使用上异常简单。Wandb可以算是目前实验结果可视化的标杆,后续的绝大多数工具,在设计上基本上都可以看到它的影子。MLflow非常优秀的训练实验管理工具。Wandb注重实验结果可视化,而MLflow则注重实验管理。它严格定义项目的概念,并且提供规定的format,以协助用户在AI生产的全生命周期中自动化地完成一些工作。以上工具中,区别于一站式AI生产平台地是:它们都是SDK工具,且侧重于某个点,并将整个方向做得精良。并且,由于SDK工具不出售算力,所以其用户体验成为其核心产品价值之一。我们可以总结的是,对于实验管理,除了基础的信息记录之外,还需要提供使用成本低、优质的辅助用户做实验结果分析的工具。可复现性实验的可复现性,其实是实验管理的高级目标之一。在实验管理中,除了记录基础信息之外,还应该考虑清楚到底什么因素的变化会导致实验结果的变化,这些因素都被记录才可以实现真正的可复现。对于阿里PAI,Model Arts,百度BML,Easy DL,字节机器学习平台这种一站式AI生产平台来说,对实验可复现性的关注往往不够多,我认为可能的原因是:(1)可复现性是较为高级的目标,这方面要做得好很不容易,对产品设计和技术上的要求都很高;(2)以出售云算力为收益的模式下,更加在意算力收益,实验可复现性不影响其核心价值;(3)算法工程师的实际生产习惯未被规训,大家习惯了很原始的工作方式,可复现性往往需要用户配合付出更多成本。不过,随着市场对AI业务的需求,行业发展越来越成熟,算法工程师对于标准化的生产流程有越来越多的期待;尤其大型的团队,标准化的流程会带来显著的降本增效。为了达到实验可复现性,需要记录的信息:训练代码:可以使用Git进行版本管理;运行环境:使用镜像进行版本管理;数据集:需要进行版本管理;模型训练的超参数配置:比如,学习率、batch size等等;产出的模型;评测指标结果:通常对不同的任务都有其经典的评价指标,用户通常关注其在测试集上的效果,指标结果,性能结果等;资源配置;在这个方面,Wandb,MLflow等工具就做出了很多的努力。Weight & Baise在Wandb中,用户可以通过SDK中提供的函数进行关键信息的记录,包括但不限于:数据集,超参数,模型,结果指标等等。并且,在运行过程中对不同的数据进行配套的可视化展示,当用户希望再次生产相同的模型时,可以依据记录的各种信息,生成一个新的训练实验任务。MLflow在MLflow中,也有类似的SDK,以帮助用户记录各种配置参数。不过,MLflow在定义Project方面做了更多的工作,它将一个实验定义为一个Project,并且提供一个规范的配置文件,用户可以通过配置文件来定义自己的实验,里面记录了一个实验的关键信息。当用户需要重新启动一个相同的实验时,只需要使用SDK载入该配置文件即可。数据集使用数据集的管理其实是AI业务生产中非常重要的模块,我将会在后续的文章中将其作为独立主题进行讨论。而在训练实验模块中,使用数据集通常要面临这样的一些问题:使用怎样的技术方案存储数据集?用户需要通过怎样的操作方式来读取数据集,进行模型训练?以上的问题其实都和数据集类型、规模有很大的关系。比如,大型单文件数据集、大型海量小文件数据集、小型数据集等,他们要使得用户有较为统一的使用体验,需要采用非常不同的技术。阿里巴巴:阿里PAI在阿里PAI中,可以将数据集存储在OSS对象存储或NAS弹性存储中,然后以挂载的形式挂载到训练任务的实例里,用户像对待一般文件夹一样对待它就好。华为:Model Arts在ModelArts中,提供对象存储的方式存储数据集,同样支持挂载的形式将其挂载到训练任务实例中。百度:BML百度BML中,同样是对象存储的模式。字节:火山引擎机器学习平台(公测中)在火山引擎机器学习平台中,同样支持对象存储,弹性存储等来存储数据集,也是挂载方式将其挂载到训练任务实例中。可以总结的是,通常采用对象存储或者弹性存储(文件系统)的方式来存储数据集,而其底层的具体技术方式可能多种多样。需要注意的是,用户如果使用对象存储操作数据集,那么体验会有点像网盘,可以提供较为方便的交互界面;而如果是弹性存储(文件系统),通常只能是挂载的方式,挂载到某个实例后,才能被操作和浏览。对于以上的方式,通常支持的是较小型的数据集,并且数据集下文件个数也不会是海量。(通常存储服务会对文件个数有限制)云平台可能提供不同种类的存储方式,以满足不同用户场景的需要,比如阿里PAI。而对于超大型的数据集(比如几十TB以上,上千万文件个数),平台往往会提供dataloader SDK,用户需要采用SDK的方式读取数据集,平台会对dataloader底层做很多优化,加速,使得大型数据集的使用成本低,效率高,这个部分往往不仅仅是个产品问题,更多的是技术问题。总结AI业务生产平台的训练模块其实还包含很多细节,比如如何支持分布式训练等等,每个问题深挖的话,都会有各种细节需要思考和处理,业界也有越来越多的解决方案。但是,我们从产品设计的角度去分析的话,一定是要从产品目标出发,清楚定义用户群体和产品目标之后,我们才会知道模块的侧重点是什么,各种设计需要怎么取舍,不然功能的堆砌只会带来失败的结果。对于本文中涉及到的产品的使用细节,还是希望大家自己到各个工具的官网去看官方文档,并且主动用一用,了解其设计的目标,定位的群人后,才能真正了解到它们的优劣。而本文定位上,只希望能够讨论一些有总结性质的结论,帮助我自己和大家理清重点。

我要回帖

更多关于 tensorflow模型训练 的文章

 

随机推荐