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

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

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

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,尝试做成一个分布式的版本,尝试解决中间遇到的问题;在换个大一点数据集上测试一下,看看有没有一些新问题。如果这些都解决的不错的话,祝贺你,赶紧到实际工作中去提高业务吧。

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

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

相关文章
|
6月前
|
人工智能 算法 网络安全
基于PAI+专属网关+私网连接:构建全链路Deepseek云上私有化部署与模型调用架构
本文介绍了阿里云通过PAI+专属网关+私网连接方案,帮助企业实现DeepSeek-R1模型的私有化部署。方案解决了算力成本高、资源紧张、部署复杂和数据安全等问题,支持全链路零公网暴露及全球低延迟算力网络,最终实现技术可控、成本优化与安全可靠的AI部署路径,满足企业全球化业务需求。
|
6月前
|
监控 NoSQL 算法
百万级URL重定向工程:大规模网站架构设计与性能优化实战
本文深入探讨了大规模重定向系统的核心挑战与解决方案,涵盖技术瓶颈分析、分布式架构设计、十亿级URL处理策略、全球化部署方案及全链路监控体系。通过数学建模与性能优化,提出三层架构模型,并结合一致性哈希分片算法实现高效路由。同时,对比不同架构的吞吐量与容灾能力,分享某电商平台实践案例,展示性能显著提升。最后展望重定向即服务(RaaS)未来趋势,包括AI动态路由、量子安全跳转和边缘智能等关键技术,为企业提供扩展性强、稳定性高的系统设计参考。
179 25
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
230 6
|
7月前
|
运维 安全 弹性计算
基于阿里云的开源应用智能管理架构设计与工程实践
本文以Websoft9技术方案为例,探讨企业级应用管理的范式。通过解析开源应用管理面临的部署复杂性、运维低效性和知识碎片化三大挑战,提出基于阿里云的三层架构:智能应用管理门户、核心功能层和基础设施层。文章详细阐述了应用编排标准化(IaC实践)、智能运维体系构建及知识资产数字化的技术实现路径,并结合金融与制造行业的案例,展示解决方案的实际效果。最后提供开发者资源与工具链支持,助力企业高效管理应用。
241 1
|
12月前
|
缓存 前端开发 JavaScript
前端的全栈之路Meteor篇(二):容器化开发环境下的meteor工程架构解析
本文详细介绍了使用Docker创建Meteor项目的准备工作与步骤,解析了容器化Meteor项目的目录结构,包括工程准备、环境配置、容器启动及项目架构分析。提供了最佳实践建议,适合初学者参考学习。项目代码已托管至GitCode,方便读者实践与交流。
200 6
|
负载均衡 数据库 开发工具
|
安全 IDE Java
从0到1探索淘宝短视频流的架构再设计和工程重构
随着视频流业务的发展,业务的复杂性越来越高,视频流老工程在架构设计、代码质量、工程能力等方面的问题也逐渐凸显。本次重构是一次对大型业务工程进行架构再设计和重构的探索,本文是对这次探索的一次梳理与总结。
|
5月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
|
11月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1054 6
|
6月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。