工程架构能力对于做好机器学习重要吗?

简介: 做好机器学习到底对工程架构能力有要求吗?看看技术大牛如何说?

工程架构能力对于做好机器学习到底重要吗?可能很多技术人员对于这个问题都有一些自己的看法。中国科学院计算技术研究所严林在知乎上分享了他对于中国问题的看法,本文转发已被授权。在面试中,多多少少会问一些机器学习方向候选人工程架构方面的问题。不少做机器学习的候选人表示,我是做算法的,不需要了解这些工程架构的问题,甚至有表示,了解工程架构就是浪费做算法的时间。我认为,这种想法有些片面和狭隘。从我这几年一些浅薄的经验来看,工程架构能力对于机器学习从业者,不仅重要,而且是必备能力之一。

1e0389b5d649195ff17edaac3cb1a463f685e616

计算机科学是一门实验科学,不管多么厉害的算法,都是需要落地到应用的。一个好的机器学习算法,更是离不开好的工程实现。

举个例子,FFM算法在各种Kaggle比赛中大放异彩,我们来想想在不借用开源工具的情况下,怎么实现它。首先,核心计算逻辑,本质是不同特征的分成不同field的向量做乘法,那么怎么实现最高效?采用for循环肯定不是一个最优解法,这里就需要知道工程实现上的SIMD了;选哪一种SIMD,首先得知道手上的服务器支持哪一种,这里假设sse和avx都支持,那sse和avx除了数据流位宽有区别,还有什么其他区别吗,同一个语义可能有两种实现选哪一种等等,都离不开工程实现上的理解。假如这部分已经解决了,但是并行度还是不够,希望利用现代CPU多核并行的优势,那么是使用openmp还是自己搞一个线程池,发现使用多线程之后,加速比并不理想,那该怎么排查,是数据上的false sharing还是cache miss不符合预期,如果是如何调整数据,如何做预取,这些都是需要工程思考的。这还没有完,这仅仅是计算,如果并行度足够了,但是发现数据放不进内存(通常都是这样),从磁盘读取的速度还跟不上训练,那怎么实现异步磁盘预取,怎么进行更多地优化,都跟实现紧密相关,因为你不仅需要知道代码怎么写最高效,还需要知道硬盘(HDD和SSD)的特性,对症下药;就算模型训练好了,怎么样把模型dump下来放到线上去,线上去的服务与训练逻辑相比没有了梯度更新,可以做的更快吗;流式更新发现很有帮助,怎么做?这些问题的解决无一不需要对工程的深入了解和掌握。

可能有同学会说,那么多开源的工具,我只需要拿过来会用就行。事实上真会这么容易吗?未必!开源的工具,往往是从通用的角度出发,没有针对特定的业务进行适配,那如何结合自己的业务场景和服务架构做整合,这也是算法人员必须要考虑的一个问题。在实际工作中,开源工具往往不能完全满足自己的需求,需要再在现有的代码做一些开发,那么至少需要了解面对的开源工具的工程架构设计,才能获得一个靠谱的解决方案。以上面说到的FFM举个例子,相信不少同学都听过甚至用过开源实现libffm,现在业务上数据太大(比如1PB),单机搞不定,需要扩展到分布式环境中去,参数也要通过parameter server来存储,这些都是libffm不支持的,那怎么实现呢?首先,从分布式机器学习架构上讲,先确定数据并行还是模型并行,再层级分解问题,到数据通信、parameter server数据组织和并行训练,包括其中一些关键的设计,比如这个分布式算法使用哪种一致性模型,无一不需要了解工程架构。即便就是单机能够搞定,那么serving部分的服务往往也是需要自己实现的。以XGBoost为例,训练好了模型,调用XGBoost预估,如果在多线程场景下,至少需要知道XGBoost这部分code是不是可重入的,如果不是怎么改进,更需要工程基础了。很多时候,使用开源的工具,其成本并不比自己开发一个低多少。

事实上,一个优秀的算法人员,首先必须是一个优秀的工程实现人员。我一直认为,一个算法人员的工程能力,决定了做算法的天花板。工程是算法的基础,基础不够扎实,怎么登高远望呢?大明宫含元殿能够俯瞰京师长安,那是光地基就有15米呀。大家所熟悉的这个领域的各种大牛,不仅仅是算法厉害,工程能力也是了得的。Google Brain的Jeff Dean,这个只要是搞CS的,相信都听过,架构背景自不用多说,Google内部一系列基础的Infrastructure都是他参与的,比如BigTable等等;也正是有这样的工程能力,Google内部的算法迭代能力一直都非常强悍,『天下算法,唯快不破』,人家不仅是聪明,还快!同样的时间,一般人只能做一次迭代,但人家能够迭代五次,探索空间是一般人的五倍,做出来的算法自然很优秀,所以当GNMT出来的时候,大家很震撼,意料之外情理之中嘛,也很有Google的风格:工程真强!这样的case还很多,PS-lite的作者李沐,XGBoost的作者陈天奇,Caffe的作者贾扬清等等。

算法人员任何加强自己的工程架构能力?多写代码只是基本,最重要的是心态和意识。也就是说,要主动意识到工程的重要性。有了这个心态和意识,就会主动的去关注留意相关的知识,获取相关的信息,自发的学习,事半功倍。在这里,推荐看过的马超同学的一个回答,个人觉得不错。

https://www.zhihu.com/question/23645117/answer/124708083

另外三年前,我也整理一个分布式文的列表,时间长了点,但仍可参考一二。

https://www.zhihu.com/question/30026369

有了一定的理论基础之后,就应该动手实验一下了,这里还是要推荐MIT 6.824这门课,里边的lab非常不错,过一遍绝对收益颇多。然后,可以尝试把一些常用的算法,比如LR,尝试做成一个分布式的版本,尝试解决中间遇到的问题;在换个大一点数据集上测试一下,看看有没有一些新问题。如果这些都解决的不错的话,祝贺你,赶紧到实际工作中去提高业务吧。

工程和算法,是一对亲密的兄弟,很多时候,看似算法的问题,抽丝剥茧后发现,本质其实是一个工程问题。人工智能最近两年异常火爆,各种实际应用层出不穷,希望有志于此的同学,工程和算法,两手都要抓,两手都要硬。一家之言,寥寥数语,不知所言。

本文由中国科学院计算技术研究所严林贡献,著作权归作者所有,本文经严林老师授权转发!

相关文章
|
26天前
|
缓存 前端开发 JavaScript
前端的全栈之路Meteor篇(二):容器化开发环境下的meteor工程架构解析
本文详细介绍了使用Docker创建Meteor项目的准备工作与步骤,解析了容器化Meteor项目的目录结构,包括工程准备、环境配置、容器启动及项目架构分析。提供了最佳实践建议,适合初学者参考学习。项目代码已托管至GitCode,方便读者实践与交流。
|
2月前
|
负载均衡 数据库 开发工具
|
3月前
|
安全 IDE Java
从0到1探索淘宝短视频流的架构再设计和工程重构
随着视频流业务的发展,业务的复杂性越来越高,视频流老工程在架构设计、代码质量、工程能力等方面的问题也逐渐凸显。本次重构是一次对大型业务工程进行架构再设计和重构的探索,本文是对这次探索的一次梳理与总结。
|
3月前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
128 2
|
4月前
|
机器学习/深度学习 算法 文件存储
使用Python实现深度学习模型:神经架构搜索与自动机器学习
【7月更文挑战第5天】 使用Python实现深度学习模型:神经架构搜索与自动机器学习
79 2
|
4月前
|
中间件 BI 测试技术
【实践篇】领域驱动设计:DDD工程参考架构
领域驱动设计(DDD)参考架构旨在为团队提供DDD实践的起点,强调业务与技术的分离,考虑多种架构风格如分层、六边形等。它包括多限界上下文结构,每个上下文内有应用层(不含领域逻辑)、领域层(含领域模型和事件)和网关层。接入层负责外部请求的处理,业务层协调不同上下文。组件包括Start(启动)、Common(通用)、API、Facade、Application Service、External API、Query、Domain和Gateway,各组件有明确的职责和依赖关系,如Gateway处理技术细节并作为系统与外部的接口。架构设计是多因素权衡,适应实际工程需求。
217 0
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】自然语言引导下的单目深度估计:泛化能力与鲁棒性的新挑战
【机器学习】自然语言引导下的单目深度估计:泛化能力与鲁棒性的新挑战
67 0
|
5月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习】CLIP模型在有限计算资源下的性能探究:从数据、架构到训练策略
【机器学习】CLIP模型在有限计算资源下的性能探究:从数据、架构到训练策略
336 0
|
6天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
22 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024