zoukankan      html  css  js  c++  java
  • CS224d lecture 15札记

    欢迎转载,转载注明出处:

    http://www.cnblogs.com/NeighborhoodGuo/p/4725192.html

    这一讲还是嘉宾的讲课,讲得是关于parallel计算方面的。俗话说的好:“三个臭皮匠,顶个诸葛亮嘛”。哈哈

    因为一台计算机,或者一个处理器的处理能力是有限的,进行并行计算能够大大提高运算速度,节省调试的时间。而我们的NN是如此的复杂,有时候规模也特别大,所以使用并行计算是很有必要的。

    这一讲呢,主要分为五个部分:1.Efficient formulations  2.CPUs and GPUs  3.Parallelism  4.Asynchronous SGD  5.Easy implementations and Current research

    Efficient formulations

    Structured VS unstructured computation

    structured graph就是指各个units之间的连接都很规矩比如说CNN

    这种规矩的表示方法的好处是:cache的使用都是连续的,很容易load,对内存的使用也很少。缺点就是灵活性不好

    还有一种就是unstructured graph

    好处是表达能力更强,但是cache的使用不连续,不容易load,对内存使用偏高(和之前的对立)

    我们的目标就是在不影响性能的前提下,使表达更加structured

    Block operations and BLAS

    Block operations一个最简单的例子就是矩阵乘法和加法,也就类似把相似的运算打包成一整块,然后输入进去批量计算。

    BLAS: Basic Linear Algebra Subroutines是一款很先进的并行计算工具,课上还推荐了其他很棒的并行计算工具。

    Batching

    就是之前说的Batching gradient descent就不赘述了。

    CPUs and GPUs

    课上讲师说CPU和GPU已经达到了peak performance。

    内存的大小很受限,CPU和GPU的通讯很慢是一个瓶颈。

    CPU更少的cores            每个core运算速度更快

    GPU更多的cores            每个core运算速度慢

    但是GPU有数量优势,整体来说GPU运算速度比CPU快

    乍一看貌似完全使用GPU更好,其实不然。

    由于有通讯瓶颈,在计算量较小的时候使用CPU其实更有计算优势,在计算数量较多的时候使用GPU才有明显的优势。

    Data parallelism

    这个就是用来优化之前的Batching gradient descent

    1.先指定一个master core然后多个worker core,首先master给每个worker分配计算的任务

    2.然后每个worker core各自分别计算

    3.计算完成后汇总到master那里,由master汇总计算出最终结果

    这里的parallelism是同步的。

    Model parallelism

    这个就是把model进行分块然后各个模块分别分配给各个core计算然后汇总结果。

    一台计算机的计算能力怎么说都是有限的,能不能使用多台计算机同时帮助计算呢?

    但是计算机之间的以太网通信速度太慢了,开发更快速的计算机间通信才行。

    Asynchronous SGD

    前面说得同步的计算方法需要等待每个work core都计算完成才能汇总计算出结果,这样就会使一部分时间消耗在等待上面。

    鉴于此就提出了异步的SGD

    分配任务还是照常分配,但是谁计算完成谁就上传计算结果给master,然后master汇总完成之后立即给每个work core更新数据

    Research directions

    有三个可以改进的地方:

    1.修改model尽量减少unstructured的部分,增加structured的部分;尽量增加model的宽度,降低深度

    2.尽量使得Neural不饱和,使数据尽可能的在线性区。

    3.找到更好的优化方法。

    几个开源的Parallelism Packages

    1.BLAS

    2.CPUs: Intel MKL, Atlas, GOTO

     GPUs: Cuda, OpenAcc, clBLAS

    3.Theano, Torch

  • 相关阅读:
    预备作业03
    预备作业02
    寒假作业01
    1179 最大的最大公约数(水题)
    HttpWebRequest
    python模拟银行家算法
    Lock锁与Condition监视器(生产者与消费者)。
    synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)
    详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数
    语义web基础知识学习
  • 原文地址:https://www.cnblogs.com/NeighborhoodGuo/p/4725192.html
Copyright © 2011-2022 走看看