推荐一些机器学习系统MLSys中的值得研究的方向

简介: MLsys不能算是一种方向,而是一种思路。比如对于system研究者来说,可以把ML作为我们开发的系统要适配的一种benchmark,就像transaction对于数据库、某种文件场景对于File System的意义一样。这样一想可做的空间就宽广多了

MLsys不能算是一种方向,而是一种思路。比如对于system研究者来说,可以把ML作为我们开发的系统要适配的一种benchmark,就像transaction对于数据库、某种文件场景对于File System的意义一样。这样一想可做的空间就宽广多了。

下面简单推荐一些坑比较少得方向,希望大家可以适应这个潮流。

1. 分布式机器学习(Distributed DNN Training)

这个又可以分为两个方面:from ML / system perspective。

ML

从ML的角度做,主要是发明或改进分布式训练算法,保证在分布式加速的同时,仍然能达到原来的学习效果(loss/accuracy)。因此很多工作也被投在像ICML、NIPS这种专业ML会议上。主要用到的方法包括优化(optimization)和统计学习理论(statistical learning theory)。

还有一类工作涉及到如何把单机算法改造成分布式[ch9],比如同步/异步SGD等。这里主要涉及到的问题是如何降低分布式环境下的通信开销,提高加速比。

System

还有一个就是从System的角度做。从分布式计算的角度来看,可以把相关工作分为以下几类

  1. 对于计算量太大的场景(计算并行),可以多线程/多节点并行计算,多节点共享公共的存储空间。常用的一个算法就是同步随机梯度下降(synchronous stochastic gradient descent),含义大致相当于K个(K是节点数)mini-batch SGD
  2. 对于训练数据太多,单机放不下的场景(数据并行,也是最主要的场景),需要将数据划分到多个节点上训练。每个节点先用本地的数据先训练出一个子模型,同时和其他节点保持通信(比如更新参数)以保证最终可以有效整合来自各个节点的训练结果,并得到全局的ML模型。
  3. 对于模型太大的场景,需要把模型(例如NN中的不同层)划分到不同节点上进行训练。此时不同节点之间可能需要频繁的sync。这个叫做模型并行。
  4. Pipeline Parallelism:这是去年(SOSP19 PipeDream)才出现的概念。Pipeline Parallelism相当于把数据并行和模型并行结合起来,把数据划分成多个chunk,也把训练模型的过程分成了Forward Pass和Backward Pass两个stage。然后用流水线的思想进行计算。

大致涉及以下几个点:

  • 分布式ML系统设计
  • Edge Computing
  • 大量计算资源的Scheduling / device placement
  • communication相关

2. 深度学习模型压缩/加速

对DL model进行压缩主要考虑两个角度:减少计算量(例如conv层的计算量) / 内存占用(NN的参数数量)。不仅要考虑ML上的metric,也要考虑system层面的performance(例如latency / throughput / 功耗。有时候这些比ML模型的accuracy还重要)

2.1 通过Quantized(量化)降低计算精度要求

量化的含义是将卷积层(the weights and / or activations of a CNN)通常要用到的32位浮点数用更低位的数来表示,如int32, int16, int8等等,来降低资源占用(float32无论是计算还是存储都是很吃资源的..)。量化之后无疑会损失一部分精度,但神经网络对噪声并不是特别敏感,因此控制好量化的程度之后对ML任务的影响可以很小。

2.2 新硬件 / DL Acclerator

在纯硬件方面针对DL workload的工作也有很多,这里来看几个parallel相关的技术。最近Data-Level Parallelism不仅在深度学习中,在其他一些领域(比如数据库)也有了越来越多的应用。

CPU、SIMD、VLIW、GPU、系统结构、专用硬件等。

2.3 矩阵算子优化

神经网络中的很多运算本质上就是对矩阵运算,因此可以用一些矩阵乘法优化方案来加速。

3. 深度学习框架/系统设计

和Distributed Training的区别是这里更关注一些工程上的东西(框架设计、API设计等等)

几个关键要素:

  • 支持各种算子(op) 和 tensor (data)
  • 计算图的定义方式(动态 v.s. 静态)
  • Auto Diff
  • Optimizer(例如Adam)
  • 各种加速和优化的库:cudnn, openblas,mkl等

4. 用ML优化传统的system问题

用ML去优化一个传统system问题中,一些需要人工经验调整、或者说可以从历史情况learn到一些东西的模块。比如数据库参数操作系统页表数据库索引等等。一个模块可以被ML化的前提是它必须是empirical的,参考它在页表(OS的工作集原理)、数据库(DBA是个很吃经验的活...)中的应用。

基本就这4个方向,如果想做这些东西,需要掌握一定基础知识点才能更好的入门及应用。

  • 工程基础:C/C++、OO programming。阅读源码是个很好的学习方式
  • OS
  • 分布式系统
  • 编译原理。特别是编译器优化技术、LLVM、memory optimization。Parser之类不喜欢也可以不看
  • Computer Architecture。另外还需要了解:1.GPU架构,例如显存分配机制、CPU与GPU交互。 2.CPU、存储系统相关的新技术。 3.有条件可以了解下深度学习专用硬件。
  • 常见的并行计算框架,例如MPI/OpenMP/CUDA
  • 机器学习基础
  • 常见的分布式机器学习算法、DL模型压缩、模型加速方法(根据具体方向而定)

这里需要注意的是,如果想研究的比较有深度,有时间多阅读一下别人的源码,比较有利于个人能力的提升,多动手记的比较牢靠一点。

机器学习是个很大的领域,也是个很成功的领域:从纯学术角度来说,这个领域“坑”大,维度很广,不管是算法、理论,还是模型、系统,有非常多值得探索和研究的问题;从工业应用来说,这个领域相比其他某些领域与工业和实际应用贴的更近,所以这个领域的成果相比其他一些领域也更容易被部署到开发过程和产品中。

机器学习是一个多维度(multi-dimensional)的研究领域,也是一个跨领域(cross-domain)的研究领域,上到理论证明,算法设计,下到模型设计、应用、系统设计和研究。

这种学习如果想出成果,还是离不开老师和同事们的协助,有那种氛围比较容易解决问题,不用自己一个人钻牛角尖,这里有一些名校及比较好的老师推荐一下:

牛X的名校

北美:业界当然是Google Brain和MSR最有影响力。CMU的Catalyst,除了大家比较熟悉的陈天奇(TVM,XGBoost,MXNet),Zhihao Jia的研究也很promising(TASO),另外两位senior的老师都已经很有名了。

欧洲:MSR Cambridge。ETH Systems Group几位AP做MLSys,拓展宽一些的话,Arch背景的Onur Mutlu和HPC背景的Torsten Hoefler都很厉害有MLSys的项目。PARSA at EPFL。德国马普所软件系统所MPI-SWS实力也很强。


国内:工业界里面MSRA的系统和网络组可能是做的最好的,字节、阿里、亚马逊ASAIL也都在特定领域里面有一些影响。

硬核的老师

1.UTK,Jack Dongarra的ICL。代表作大家耳熟能详,起草了BLAS,LAPACK,open MPI。包括大家今天以dag为基础的tensorflow,其实icl早就有相应的包给大规模hpc系统了(PARSEC,类似还有斯坦福的legion)。这个实验室,发paper一般,学校一般,但是做东西极其底层和硬核,一直是我非常尊敬的实验室之一。

2.Berkeley James Demmel和他在新加坡国大的学生You Yang。James做的比较偏算法一些,最近几年跟尤洋弄大batch分布式机器学习挺火热的。

3.斯坦福的keith winstein。serverless computing那些应用做的非常有意思.


找到有相近价值观的人共同推动这个领域的发展,因为现在机器学习已经不单单是个算法问题,很多创新横跨算法系统乃至结合硬件设计,那么有不少好工作很容易在各自领域遭遇敌意。比如系统领域喜欢改变领域mindset的相对通用的topic,对于前沿算法带来的新系统设计带着偏见;


对于比较喜欢ML的同学,我还是比较推荐大家可以考虑使用已有的系统提升各种ML算法,非深度学习算法是个性价比很高的事情,因为这个方向对于很多工业界都有很重要的里程碑意义,主要是因为这个东西做的人比较少,毕竟它不仅仅需要了解一些系统知识,更重要的你需要对机器学习算法的深刻理解。最后祝大家都能学有所成,乘风破浪。

本期内容就分享到这里,我们下期见!

目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
104 4
|
14天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
20 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于python 机器学习算法的二手房房价可视化和预测系统
文章介绍了一个基于Python机器学习算法的二手房房价可视化和预测系统,涵盖了爬虫数据采集、数据处理分析、机器学习预测以及Flask Web部署等模块。
基于python 机器学习算法的二手房房价可视化和预测系统
|
2月前
|
机器学习/深度学习 数据可视化 数据处理
Python vs R:机器学习项目中的实用性与生态系统比较
【8月更文第6天】Python 和 R 是数据科学和机器学习领域中最受欢迎的两种编程语言。两者都有各自的优点和适用场景,选择哪种语言取决于项目的具体需求、团队的技能水平以及个人偏好。本文将从实用性和生态系统两个方面进行比较,并提供代码示例来展示这两种语言在典型机器学习任务中的应用。
59 1
|
2月前
|
机器学习/深度学习 算法
【Deepin 20系统】机器学习分类算法模型xgboost、lightgbm、catboost安装及使用
介绍了在Deepin 20系统上使用pip命令通过清华大学镜像源安装xgboost、lightgbm和catboost三个机器学习分类算法库的过程。
32 4
|
2月前
|
机器学习/深度学习 存储 分布式计算
Hadoop与机器学习的融合:案例研究
【8月更文第28天】随着大数据技术的发展,Hadoop已经成为处理大规模数据集的重要工具。同时,机器学习作为一种数据分析方法,在各个领域都有着广泛的应用。本文将介绍如何利用Hadoop处理大规模数据集,并结合机器学习算法来挖掘有价值的信息。我们将通过一个具体的案例研究——基于用户行为数据预测用户留存率——来展开讨论。
77 0
|
3月前
|
机器学习/深度学习 数据采集 运维
智能化运维:利用机器学习优化系统性能
在当今快速发展的信息技术时代,传统的运维方式已难以满足日益增长的业务需求和复杂性。本文将探讨如何通过机器学习技术来提升运维效率,确保系统的高可用性和性能优化。我们将深入分析机器学习模型在预测系统负载、自动故障检测与响应以及资源分配中的应用,并讨论实施这些策略时可能遇到的挑战和解决思路。
|
3月前
|
机器学习/深度学习 数据采集 人工智能
智能运维:机器学习在系统维护中的应用与挑战
本文深入探讨了机器学习技术在IT运维领域的应用,并分析了其带来的优势及面临的主要挑战。文章首先概述了智能运维的发展历程和当前趋势,随后详细讨论了机器学习技术如何优化故障预测、自动化处理流程以及增强安全监控。最后,文中指出了实施过程中可能遇到的技术和管理难题,为读者提供了对智能运维未来发展方向的深刻见解。
|
4月前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
298 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
3月前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在系统维护中的角色与影响
随着技术的不断进步,机器学习已成为推动智能运维发展的关键力量。通过分析历史数据、模式识别和预测性维护,机器学习不仅优化了传统运维流程,还极大地提高了效率和准确性。本文将探讨机器学习在智能运维中的应用,包括故障预测、自动化响应和资源优化等方面,旨在为读者提供深入的理解和可行的应用建议。
下一篇
无影云桌面