关于cuda的一些东西
cuda 是NVIDIA开发的一个基于并行计算的工具台
CUDNN是NVIDIA开发的一个基于工作台的更高级的操作工具
关于 torch.backends.cudnn.deterministic 和 torch.backends.cudnn.benchmark
在这篇知乎文章有提及, 我在此补充一些他没说清楚的地方。
deterministic | benchmark | 卷积算法选择 |
True | False | 返回一个默认的算法。deterministic 表示是否返回固定的算法。 |
False | False | 返回默认的卷积算法。(这个算法是一个Get...函数,有一些启发性信息)。但是可能有一定随机性,因为deterministic = False, 所以每次返回的结果可能不固定 |
- | True | Find...算法,穷举所有可能算法。实际过程是把所有的算法都试一遍,然后找到最快的那个。所以在程序运行的开始时刻显存会飙升,后来才会稳定下来。 |
表格可能不太明确,再说一下benchmark和deterministic的区别
首先注意有一个概念,就是对于一个算法来说,他本身是可能有不确定性的。
也就是算法既可能是确定性的,也有可能是具有随机性的,不同的算法是不同的。
如果benchmark=True,那么每次都会根据参数以及一些硬件特征选择一个新的算法,这样如果你resume一个算法,那么可能就会发生一些奇怪的事情,因为这时候你开始的参数不同了,硬件环境也不同了。
在benchmark = False 的情况下,这时候每次都会返回一个固定的卷积算法,但是这个算法本身是可能有随机性的(比如说里面会用到一些随机数),(也就是确定的算法可能具有不确定性),这时候我们就需要用deterministic 来决定采用的这个固定的算法是否要有随机性。
deterministic=True,那么就会返回一个具有确定性的算法。
NCCL
NVIDIA Collective Communication Library
多GPU多node通信
关于pytorch并行计算的细节和操作原理这位博主说的特别好