整理一下看过的论文

还是得多看别人的论文,看多了等自己有东西能写的时候才能写得出来。

迷迷糊糊地就发出去第一篇 Paper 了。。。回想起来也算是幸运吧。

把以前看过的论文都理一理,共享在 OneDrive 上了(似乎被墙了):

【My Paper Reading List - OneDrive】


RDMA

这几篇文章主要都是我改 RDMA 版 TensorFlow 的时候看的,借鉴其中的通信协议的设计思路,这里面的很多想法其实都是大同小异。

用 RDMA 有个比较严重的问题是:为了做到 kernel bypass,通信用到的内存都必须提前注册成 MR,这样 IB 卡就能直接读写内存而不用通过 CPU。现场注册内存是一件比较耗时的事情,如果处理不好会在这里浪费很多时间。

大致的想法很简单,这下面的几篇文章讲的也都差不多是类似的内容:内存管理/通信/计算 overlap。

主要是实现起来还是有点麻烦。

2001 - An introduction to the infiniband architecture

IB 架构的介绍,没怎么看,这条就纯用来引用。

2004 - Host-Assisted Zero-Copy Remote Memory Access Communication on InfiniBand

To be read.

2006 - RDMA Read Based Rendezvous Protocol for MPI over InfiniBand Design Alternatives and Benefits

在 MPI 库层面做的工作,改的是 MVAPICH,可能到今天已经整合进 MPI 的官方 RDMA 实现里面了吧。

主要内容是用 RDMA_READ 换掉原本 MPI 实现中的 RDMA_WRITE 协议,配合中断机制,达到计算和通信的最大程度 overlap。

To be read.

2007 - Memory Management Strategies for Data Serving with RDMA

To be read.

2008 - An efficient design for fast memory registration in RDMA

跟前面的 RDMA_READ 不同,这篇文章主要讲了一种 Conditional RDMA Write 的机制,目标也是在用 RDMA_WRITE 的时候 overlap 通信和计算。

关于 CRW 这种机制,RDMA 的官方文档里面我没找到,不知道这种方案是不是他们自己实现的。

To be read.

2009 - Minimizing the Hidden Cost of RDMA

主要还是针对 RDMA 通信过程中的内存管理进行优化,方案基本上还是那几个:

  1. 根据发送的数据大小决定是重用 buffer 还是创建一个新的。例如小数据直接 memcpy 到注册好的内存里,大数据创建新的 MR;
  2. 把通信和内存管理 overlap 开;
  3. 注册内存的时候考虑内存在物理上的分页;
  4. 并行注册 MR。

嗯,有一种道理我们都懂,关键看你怎么实现的感觉。

To be read.

2011 - Scalable Memory Registration for High Performance Networks Using Helper Threads

创建一个新线程来专门维护 RDMA 通信用到的内存,MR 的注册什么的都通过新线程来做。

其他的大同小异。

To be read.

2016 - Revisiting RDMA Buffer Registration in the Context of Lightweight Multi-kernels

To be read.


Deep Learning

2012 Alexnet - Imagenet classification with deep convolutional neural networks

大名鼎鼎的 Alexnet。

2014 - Adam: A Method for Stochastic Optimization

一种效果比梯度下降更好的优化修正方法。

To be read.

2014 Baidu - Deep Speech Scaling up end-to-end speech recognition

百度做的端到端语音识别框架。

Mozilla 用 TensorFlow 把他们的这个工作实现了一遍,在这里

To be read.

2017 HKBU - Benchmarking State-of-the-Art Deep Learning Software Tools

香港浸会大学对几个主流 DL 框架做的一些对比评测,实验室师兄据说看出问题来了。详细的还没仔细看。

也就是 DLBench 项目

To be read.

2017 Facebook - Accurate, Large Minibatch SGD Training ImageNet in 1 Hour

Facebook 做的大规模 GPU 集群训练,顺便推一波 Caffe2。

256 块 GPU,1 小时内跑完整个 ImageNet 的数据集训练,想想都可怕。

这个回头得作为重点好好看看。

To be read.


TensorFlow

花了比较多的时间在 TensorFlow 这个框架上,源码也折腾过很久,但是最后还是觉得这玩意改起来过于复杂。

首先是 TF 的 Google 4 部曲:

1 - TensorFlow A System for Large-Scale Machine Learning

TensorFlow 开山之作,TF 本体也是跟着一起发布,基本把整个框架的情况都讲了一遍。

2 - TensorFlow Large-Scale Machine Learning on Heterogeneous Distributed Systems

TensorFlow 分布式版的介绍,v0.8 版 TF。

话说其实在第一篇里面就已经介绍过分布式了,这篇是更详细地介绍其运行机制。

3 - Deep Learning with Dynamic Compution Graphs

TF 的动态图功能。

暂时还没研究过。

4 - In-Datacenter Performance Analysis of a Tensor Processing Unit

TPU 的介绍。

发布这篇文章的时候其实 TPU 在 Google 内部已经测试了快一年了,基本上可以说是跟 TF 同期开始做的东西。

可怕。

2016 - DeepSpark A Spark-Based Distributed Deep Learning Framework for Commodity Clusters

用 Spark 来做上层框架,底下跑单节点版的 TF 来完成多节点分布式。

2016 - Distributed TensorFlow with MPI

跟上面那篇 Spark 的类似,这是用 MPI 做上层框架(大概是 Python-MPI),底下跑单节点版的 TF 来完成多节点分布式。


Algorithm & Math

1991 - Wait-free parallel algorithms for the union-find problem

多线程下的并行并查集实现,说起来这个也是该花时间好好研究一下。

下面有个别人的实现 Lock-free parallel disjoint set data structure


Other

2014 - A practical guide to identifying members of the Bemisia tabaci species complex and other morphologically identical species

一篇有关一种白蚁物种分类的综述。

某个白蚁种群中有大约 34 种不同的种类,区分这些种类并且对一个未知个体来说,如果能快速识别出属于哪一个种类对于生物学研究来说至关重要。但从形态学和种系演变方面很难做到。

在已有一个成熟的线粒体 DNA 库的基础上,目前可行的方案是对个体进行 DNA 采样和 PCR 倍增,然后用 HPC 的技术来分析 DNA 的结构,找出进化树,最后判别属于哪个种群。


Mine

2017 - Improving the performance of distributed TensorFlow with RDMA

16 年参加 RDMA 竞赛的时候,赛题就是分布式版 TensorFlow 的 RDMA 实现。当时采用的方法是把 TF 中的通信模块 gRPC 改成 RDMA 的,这样 TF 本体就不用动了(事实上当时试过直接改 TF,但是不知道该从什么地方下手)。

当时比赛结束之后没有放弃这个题目,继续尝试从 TF 本体上下手,把整个 gRPC 给干掉。

最后终于成功做出来了,想想也是悲惨。。。如果重新经历一遍我不敢说能不能再做到了。

后来发现了 Yahoo 的 RDMA 版 TF 项目,跟我们做的工作基本上是一样的,心里一凉,不过东西都做了大半年了,想想还是硬着头皮把文章写完了。投文章的时候看着他们的项目从 pull request 开始,一点点被 TF 官方的 Repo 吸收,最后终于在 1.2.0-rc0 收录了。特别煎熬。

最后中了 NPC 有很大的运气成分吧。


To be continued.

0%