这一讲节介绍了GPU的一些特性以及tensorflow, pytorch等一些其他深度学习框架,框架基本使用部分不会在这篇笔记中,主要是为了记录深度学习一些重要而基础的概念。
CPU vs GPU
CPU上有更少的核,但每个核更加强大,比较适合顺序处理,时钟频率更快
GPU的核数多得多,但单一核能力不如CPU,适合并行处理,如在矩阵计算中(拆成每个行列相乘)
建议:在比较CPU与GPU性能或者Deep Learning的性能时,需要尽量做到公平,比如,优化到最佳的CPU与GPU进行比较
显存
GPU有自己的显存,尽量使用其显存。训练过程中如果一直在调用硬盘上的训练数据,会拖慢计算速度,这也是设计算法时需要考虑的。
一些策略:数据全部读入内存(RAM),或者多线程提前提取数据给训练
Programming GPU
- CUDA
类似C的程序,可以直接在GPU运行
Optimized APIs: cuBLAS, cuFFT, cuDNN, etc
- OpenCL
不限于NVIDIA显卡,在NVIDIA硬件上会更慢
为什么使用深度学习框架
- 更快的开发与测试新的想法
- 可以自动计算梯度而不用自己写代码
- 可以高效的在GPU上运行
TensorFlow (static graph)
- define computational graph
- run the graph many times
PyTorch (dynamic graph)
- Tensor
- Autograd
- Module
Static vs Dynamic Graphs
静态图(TensorFlow):
- 建图一次,可以跑多次
- 框架可以优化计算图
- 建图后,可以被序列化,不再需要建图的代码就能运行,可以部署在别的地方
- 需要学习自己的控制流,一些函数式编程思想
- TF 1.7加入了eager execution用于动态图
动态图(PyTorch):
- 可以像numpy操作一样设计控制流
- 更容易实现想法