项目的基本概念
本文的整体目标是偏向于 ML 的项目落地应用和交付,所以在正文的开篇,我觉得有必要先解释下“项目”和“项目管理”等知识点的基本概念,这样方便后续在一个语境内理解相关内容。
什么是项目
国际项目管理学(PMI,PMP 考试就是 PMI 的认证)对项目的定义:项目是为创造独特的产品、服务或成果而进行的临时性工作。
简短一句话,有几个重要的概念一定需要理解,否则很难理解项目管理的一些东西为什么那么要求。
独特性:正如没有两个片雪花是一样的,也没有两个项目是完全一样的,最直观的就是:客户、需求的不同。项目是需要交付特定的成果或者服务的,也就是说,项目是必须有目标的。
临时性:一定具有明确的“开始时间”和“结束时间”是项目的重要属性,所以项目不是一项持续不断的工作。当项目的目标实现,或者项目的目标已经明显无法实现,或者项目需求已经不复存在时,就意味着项目的结束。所以项目一定是三个结果:完成,失败,取消。需要注意的是,虽然项目是临时性工作,但项目但交付成果可以在项目结束后存在。
渐进性:因为项目需要交付的成果或者服务事先是不可见的,即使在项目前期“明确了项目目标”,但对于具体细节、成果、计划等内容的定义依然是“依靠经验粗略定义”,随着项目的推进,这些细节才能逐渐完善和明确。这一点对于项目的重要意义就是:项目过程中的变更是一定存在的。
什么是项目管理
PMI 对于项目管理的定义:将知识、技能、工具与技术应用于项目活动,以满足项目的要求。项目管理通过合理运用与整合特定项目所需的项目管理过程得以实现。项目管理使组织能够有效且高效地开展项目。
简单的理解就是:运用合理的资源,确保项目能够在规定时间内完成,并交付规定的可交付成果的过程。
所以,一般认为项目管理三要素是:时间、成本、质量 ,也可以增加 范围 变为四要素。
项目管理过程组
PMI 的定义:启动过程组、规划过程组、执行过程组、监控过程组、收尾过程组。
项目经理进行项目管理的过程,就是依据 PMBOK 定义的五个过程组,并运用十个知识领域的 49 个知识点进行管理的过程。
PMI 的 PMBOK 经过多年的修订改版,目前为第六版。五个过程组没有变化,知识领域增加“项目相关方管理”从九个变为十个,“相关方”在过去的版本里称之为“干系人”;对应的知识点也从经历了 44 个到 47 个到目前的 49 个变更过程。
项目生命周期
对项目过程一般通识定义为:项目前期 --> 项目开始 --> 项目组织与准备 --> 项目执行 --> 项目完成 。
由于“项目前期”的主要工作是项目需求评估与论证,评估的结果有可能是项目不予立项,那么就没有后续的工作内容了,所以一般的对项目生命周期的定义为:项目开始 --> 项目组织与准备 --> 项目执行 --> 项目完成 。
可能细心的朋友会发现:项目管理过程组有五个,而项目生命周期为何只有四个环节?原因其实非常简单,因为“监控过程组”是贯穿项目整个生命周期的。
基于上述对“项目”的基本概念的介绍,下面我们来看看机器学习的项目生命周期。
Lifecycle Of a ML Project
约定
本文探讨的是机器学习项目的落地过程,在继续之前需要做如下约定:
对项目的目标设定为:算法与软件集成的整体软件产品交付,而非仅交付model(s)或者APIs。
软件项目的交付,相关知识与方法已经非常成熟,本文仅对ML与软件的关键集成相关内容进行说明,不会过多涉及其他软件部分相关的项目过程;
同样,对于DevOps相关内容,如非必须也不会过多涉及;
项目过程综述
如下图所示,黑虚线框中部分为项目中软件部分,如约定所述,此部分仅包含对关键内容的概括;红色虚线框中部分为项目中机器学习部分,也是本文关注的部分。
可以看到,项目过程分为四个阶段,分别是:项目启动、数据收集、模型训练与调试、交付部署。
事实上,在项目启动前还有“项目前期”这个阶段,依据不同的项目类型,具体内容会稍有不同。如果是内部应用项目,那么项目前期一般需要做需求可行性论证、效益分析、商业论证等项目立项准备工作;如果是向 B/G 客户交付的项目,那么项目前期一般是项目售前咨询、招投标等工作。
对于内部应用项目,各企业的管理风格、资金储备、商业模式等的不同,项目立项的准备工作会相差比较大。对于内控严、合规性要求高的公司,一般会有严谨的流程去遵照执行;大多数公司可能会做一些讨论以及头脑风暴,再了解下同业公司的情况之后,做出决定;而对于有些公司,可能就是某个领导的“要求”,就会有部分精于企业生存之道的投机者去组织执行。所以,对于此类项目前期工作,本文不做讨论。
对于需要向客户(最终用户)交付的项目,前期阶段的相关工作内容,如:项目售前咨询一般的过程、一些通用的方法、需要注意及规避问题、售前 PPT 的制作、演讲技巧,以及解决方案的如何编写等内容,会在本文第五章中详细介绍。
1.项目启动
一般来说,在项目启动后,企业内部需要做的第一件工作是:“确定项目经理”,因为项目启动后所有的工作都需要由项目经理去牵头、协调完成。对于“大(金额大、意义重大)项目”,一般还会同步成立 PMO(Project Management Office)并设立“项目领导小组”。
特别的,对于一些B/G项目,尤其是 G 类的项目,一般在“投标阶段”就需要在投标文件中明确投标人选定的“项目经理”及“技术经理”人员及资质(简历)。中标后,也会将此项内容写入合同或技术协议文本中,并会对乙方(“投标人”、“乙方”这些属于标准名词:在投标阶段是投标人,中标签署合同后是乙方。)更换项目经理、技术经理的流程进行约定,一般原则都是可以“向上”更换。意思就是,乙方要换人可以,但是你要换的人必须是比合同中确定的人员资质、能力更高才行。为什么这么规定呢?这都是政企客户用“血泪教训”买来的经验:投标把公司最牛的人列为项目经理,以证明公司技术实力,中标后,项目经理甚至连项目启动会都没开,就换人了。
考虑到人工智能领域的公司,大多为初创公司,处于产品孵化阶段的居多,也未成立专职的项目交付团队,由产品经理兼任或者转岗项目经理是比较合理的。所以,对于项目经理的工作内容一部分介绍会在本文第四章中与产品经理的工作内容共同说明。
产品经理去做项目经理这种安排,并无什么不妥,希望广大产品经理看见后不要有什么意外,也不要担心,做好相关知识储备就好。
说说我个人的经历吧:上午还在客户现场改PLC的代码逻辑和调试,中午接到电话让我立即回公司另有工作安排;回到公司后变成产品经理,去参与公司准备自主开发的软件产品的需求工作;产品需求完成后,开始配合研发完成产品测试;产品具备销售条件后,按公司新安排去做售前顾问,配合销售去“拿”项目;项目中标后,公司第一个自主产品的软件项目,产品我最熟悉,毫不意外我又变成了项目经理;然后在项目现场,借客户的会议室组织公司内部培训,培训销售经理、售前顾问、项目经理,中间还要溜出去带着“徒弟”去做售前;中标的项目多了,多个项目并行展开之后,我就“升职”为PMO,同时兼顾多个项目了。
总体来说,在项目启动阶段,在完成项目经理遴选后,主要的任务有如下五项。
1.1 - 定义项目目标
按照“项目”定义,项目是必须有目标的。所以,在项目启动之后,我们的第一个任务就是确定项目目标。对于政企(就是 to B/G 的项目,以下会依据上下文的语境,两种描述方式选择使用)类项目,项目目标其实说出来挺无聊的,那就是:合同内容。
一般的,合同及技术协议文本都是非常严谨的,大到模块,小到功能点的描述,细到具体的技术指标,都会写的清清楚楚。估计会有人有这样的迷惑:“白纸黑字的合同都签了,照着做就是了,还定义什么目标?”,对于这样的疑惑,我只能说:小同学,还是太年轻了,把事情想简单了。一般而言,为了中标签合同(没有合同就没有收入,没有收入哪里有钱发工资,VC 的钱总有烧完的那一天!)从售前到合同签定过程中,多少都会有一些内容是“不当承诺”,大白话就是“吹牛 B”。在合同执行阶段,对于项目经理来说,这些“不当承诺”都属于风险管理中要严防死守的内容。
“项目”的定义中,另一个重要的属性就是有明确的开始时间和结束时间。所以,不要奢望“等我做出来再交付”,时不我待只争朝夕,从项目开始第一天,就要有紧迫感。一方面,有上述的“不当承诺”的可能,另一方面,合同中要求的功能,公司内部不可能一点没有(啥都没有,正常操作,别想中标!非正常操作,也能中标,我什么都不知道,别问我为什么又能中标了),但是也不会全部都有。
所以,定义项目目标的工作,就要从梳理合同、技术协议,厘清需求,定义优先级开始。
1.2 - 评估基线
在明确了机器学习任务后,首要需要考虑的应该就是“baseline”的问题。如果恰好有同类任务,那么这个任务的 State-of-the-art 就是基线,如果没有,那么就找类似的任务,让我们的技术专家,确定一个基线。
1.3- 定义指标
在对 ML 任务的基线有了认识后,建议结合合同中的条款“理智”的定义项目指标。
为什么要“理智”?一方面 State-of-the-art 就是这样,你要超越,需要付出多少代价?另一方面,即便我们的 metrics 不是要超越 State-of-the-art,为了多一个“9”需要付出多少代价?而且,这种代价显然不是线性的。
而且,考虑到先阶段 ML 的特定领域的迭代速度是以月为单位的,也许运气好,我们定义的指标虽然“保守”,但是在后续训练过程中,来了一篇神论文,就帮了大忙。
另外,对于生产部署,一定会有 inference 相关的技术指标,比如并发、速度,如果是实时视频的推理,还会有 FPS 的要求等。如果合同内明确了部署环境的说明,那么这些指标的可实现性就有明确的测算依据。如果,对于部署、推理环境没有明确说明,那么一定要提前沟通,不一定一次沟通就能定下来,但是大方向要清晰。GPU 还是 CPU 还是 FPGA,具体型号,配置。如果是实时视频的推理,还要明确是 1080 还是 720 或者更高,结合并发要求,测算一下网络环境的上行带宽够不够。不要等到交付部署了,前期测试也一切正常,正式使用了,发现网络给你一个小水管,还要你大并发。
温习一下项目成功的四要素:范围、时间、成本、质量,所以,请时刻保持成本意识。杠精们也不需要抬杠,有没有不计成本的项目?肯定有,比如“Project Apollo”,这种国家意志驱动的项目,咱们不好比。记住,咱们是企业,企业就是要赚钱的,特殊项目,可以不赚钱,可以小赔本,但是总体上要赚钱这个事情天经地义,对于合理利润,没有什么不好意思说出来的。
1.4- 项目计划
项目内容和优先级明确了,关键指标也明确了,项目的时间合同上就已经明确了,是时候做项目计划了。如果计划出来后,发现“难度大,时间紧,任务重”,怎么办?
成本允许范围内,多上人呗,能并行的就并行。
刚从产品经理转到项目经理,不会排项目计划或者怕排的计划不科学怎么办?好办啊,做计划最简单的办法就是“倒推法”。一个团队中总有在不同领域“经验丰富”的选手,按照合同约定的项目交付时间,按照项目阶段,从后往前排就是了。每个阶段的持续时间怎么定?请教“经验丰富”的同事后,合理的“拍脑袋”呗。
反复“拍脑袋”讨论之后,相信制定的项目计划已经具备很大的可执行性了。有些任务是可以并行的,有些任务是必须串行的,那么依据每个阶段的任务,尤其是串行任务容易变成“卡脖子”节点,那么就需要合理安排资源,是时候成立项目组了。
1.5- 成立项目组
项目组成立后,任务明确,计划明确,合理分工,责任到人,该睡地板就睡地板,该 996 就 996,项目就是这样,Deadline 就在那里默默的看着你。你选择无视他,他就会让你后悔;你选择重视他,他也许会“隐身”。
有关项目团队成员组成的更详细的说明,在第三章做进一步解释。
有关项目启动先到这里,部分更详细的介绍在第六章
评论