几个月前注意到Graphcore这个公司,是因为他们的IPU处理器:Intelligence Processing Unit。但除了看到他们一系列非常漂亮的DNN Graph(比如上面这个对于ResNet Conv1的可视化处理)之外,一直没有更详细的信息。在最近的RAAIS会议上,Graphcore的CTO,Simon Knowles做了一个介绍,让我们可以一窥IPU设计背后的一些思考。
“We’ve created a completely new processor that’s the first to be specifically designed for machine intelligence workloads – an Intelligence Processing Unit (IPU) that will set a new pace of innovaTIon. ” “The IPU has been opTImized to work efficiently on the extremely complex high-dimensional models needed for machine intelligence workloads. It emphasizes massively parallel, low-precision floaTIng-point compute and provides much higher compute density than other soluTIons.” - Graphcore
从目前看到的信息,可以看到Graphcore IPU的一些关键Feature:
1. 同时支持Training和Inference,对于这一点,Grophcore有自己的一些独特的看法。
2. 采用同构多核(many-core)架构,超过1000个独立的处理器。每个处理器核的处理能力和具体支持的 *** 作还不清楚。支持all-to-all的核间通信,采用Bulk Synchronous Parallel的同步计算模型(又是上个世纪80年代提出的)。
3. 采用大量片上memory,不直接连接DRAM。这可能是他们的架构中最激进的一个选择。
其它一些feature,比如
1. Training or Inference
Graphcore’s machine intelligence processors support both training and inference. If you’re thinking about it in terms of training and inference, though, you’re probably thinking about hardware for machine learning in the wrong way.
可以看出,当被问及他们的IPU是用于Training还是Inference的(这是对各种PU最常见的一个问题)时候,Graphcore试图从另一个角度去解答,即这种分类本身就是不对的(是目前某些厂商提出的不合适的说法)。总的来说,他们认为先做Training然后做Inference的机制,未来一定会被Learning取代。也就是未来理想的机器智能应该能够在部署之后还能保持持续的学习和进化。对于这个问题,Graphcore专门有一篇Blog做了说明,大家可以参考我在知乎上给出的翻译(https://zhuanlan.zhihu.com/p/28053630)。
另一方面,他们认为,从计算上来说,Inference和Training也有类似的特征。因此,他们的模型是下图这样,其中并没有Training的模块。
我的看法:
机器智能努力的方向之一就是Continuous Learning。如果在一个架构上能够同时很好的支持Training和Inference当然非常理想。不过从目前的实践来看,Deep Learning中的Training和Inference还是有较大的差异的,运算量的巨大差别,精度要求不同,算法差别,部署的Constraints等等。Graphcore最终推出的IPU能否很好的解决这些问题,还有待观察。
2. What Shall we bet is fundamental to MI workload
IPU的设计的基础是Graphcore对于机器智能的Workload的理解。“在所有形式的机器智能计算中,我们试图从数据中推断知识模型,然后使用这些学习的模型从其他数据推断出新的结果。所以在很大程度上,工作量是由知识模型的性质来定义的”。“知识模型和对它们执行推理所需的算法最自然地表示为图形(Graph)”。因此,他们用Graph来作为机器智能的基础表示方法。这种表示既适用于神经网络,也适用于贝叶斯网络和马尔科夫场,包括未来可能出现的新的模型和算法。
这些Graph的第一个特征,是它们规模很大,通常包括数千到数百万个顶点。这也意味着巨大的并行性。第二个特征是它们是稀疏的,大多数顶点只连接到其他一小部分顶点。因此,必须在架构上适应这种稀疏性,因为它对处理器之间的存储器访问模式和通信模式有重大影响。第三个基本特征是数据的统计近似值。从处理器设计的观点来看,这有利于低精度浮点运算。这可能是低精度数据的高性能计算的第一个主要应用,和传统的高性能计算(HPC)是非常不同的(或者说完全相反的?)。另一个特征是模型参数的重用性。简单来说,卷积是空间重用,而回归是时间重用。这种重用可以获取数据中的空间或时间不变性。同时,如果重用参数,则会将其作用于给更多的数据,从而更快地学习。最后一个基本特征是,图形结构可以被视为静态的 - 至少在很长一段时间内。这对于构建高效的并行计算至关重要,因为使得编译器可以在将程序映射到多核并行处理器时的三个NP hard任务有可能实现:1)平衡跨处理器核的计算任务;2)分区和分配内存;3)处理器之间的消息调度。
对于稀疏性,还可以更进一步的说明一下。当我们把图模型存储到物理可实现的存储器中的时候,存储器访问的有效稀疏度进一步增加了。例如,一个图中的顶点可能连接到同样接近的100个相邻顶点。但是,如果我将该顶点的状态存储在具有线性地址的存储器中,则它只能有两个直接邻居。在低维存储器中存储高维Graph的效果是使邻域分散在存储器中。这对于非常宽的向量机(如GPU)来说是一个潜在的问题。图处理有利于更细粒度的机器,从而有效地分散和收集(scatter and gather)数据。这就是为什么IPU拥有比GPU更多的处理器,每个处理器都设计用于处理较窄的向量。
基于上述对机器智能的Workload的理解,Graphcore提出了IPU的设计。
和CPU (scalar workload),GPU (low-dimensional workload)相比,IPU是为了high-dimensional graph workload而设计的。下面我们就看他们的一些比较有参考价值的设计上的考虑。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)