Tensorflow、Theano和Pytorch中使用的是GEMM还是BLAS?

8
我知道Caffe使用基本线性代数子程序(BLAS)库中的通用矩阵乘法(GEMM)来执行卷积操作,其中将卷积转换为矩阵乘法操作。我参考了下面的文章:https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/ 我想了解其他深度学习框架(如Theano、Tensorflow、Pytorch)如何执行卷积操作。它们是否在后端使用类似的库?可能有一些相关文章可以帮助回答这个问题。如果有人能指向这些文章或者给出答案的解释就非常好了。
PS:我在datascience.stackexchange.com上发布了同样的问题。由于那里没有得到答复,我也在这里发布了这个问题。如果有更好的论坛可以发布此问题,请告诉我。
1个回答

8

Tensorflow有多个可选的操作方式。

对于GPU,使用cuda支持。大部分操作均采用cuDNN实现,部分使用cuBLAS,其他使用cuda。

您也可以使用openCL代替cuda,但需要自己编译tensorflow。

对于CPU,使用intel mkl作为blas库。

我不熟悉pytorch和theano,但下面列出一些常用的blas库:

  • cuDNN、cuBLAS和cuda:nvidia GPU支持,最流行的库
  • openCL:通用GPU支持,我完全不了解。
  • MKL:由英特尔提供的CPU blas库
  • openBLAS:CPU库

2
添加到PyTorch中:文档提到了一些特定的BLAS/LAPACK操作,例如addbmm,此外,值得一提的是,有些操作会回退到NumPy,它可以具有可配置的BLAS后端(例如,与Anaconda Python一起提供的版本已启用本地Intel MKL)。 - dennlinger
我对PyTorch不是很熟悉,你能否添加一个新的答案来解释一下?@dennlinger - Kaihong Zhang
1
我正在阅读这篇关于使用cuDNN实现卷积的博客(http://www.goldsborough.me/cuda/ml/cudnn/c++/2017/10/01/14-37-23-convolutions_with_cudnn/)。似乎所有高级深度学习库都使用cuDNN卷积函数,该函数有三种实现卷积的方式:CUDNN_CONVOLUTION_FWD_ALGO_GEMM(将卷积模型化为显式矩阵乘法)、CUDNN_CONVOLUTION_FWD_ALGO_FFT(使用快速傅里叶变换进行卷积)和CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD(采用Winograd算法执行卷积)。 - Gaurav Srivastava
cuDNN不是开源的,NVIDIA从来没有告诉我们它是什么样子的。 - Kaihong Zhang
2
https://dev59.com/VVgR5IYBdhLWcg3wRLmD 上说,TensorFlow使用“Eigen”而不是BLAS。(BLAS可以通过CUBLAS进行加速。一些框架可以使用CUDNN,这是一种使用CUDA的更高级别的加速) - Chan Kim
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接