我以前有 Ubuntu 12.04,最近全新安装了 Ubuntu 14.04。我正在研究的内容涉及大矩阵(~2000 X 2000)的乘法,为此我使用了 numpy。我遇到的问题是现在计算的时间延长了 10-15 倍。
从 Ubuntu 12.04 到 14.04 意味着从 Python 2.7.3 到 2.7.6 以及从 numpy 1.6.1 到 1.8.1。但是,我认为这个问题可能与 numpy 链接到的线性代数库有关。而不是 libblas.so.3gf 和 liblapack.so.3gf,我只能找到 libblas.so.3 和 liblapack。所以.3。
我还安装了 libopenblas 和 libatlas:
$ sudo apt-get install libopenblas-base libatlas3-base
并尝试了它们,但减速并没有改变。所以,我的问题是:
- 有和没有“gf”的包裹有什么区别?
- 这是否可能导致矩阵乘法变慢?
- 如果是这样,我如何返回到 libblas.so.3gf 和 liblapack.so.3gf?它们似乎在 Ubuntu 14.04 中停产了。
非常感谢!
最佳答案
wim 是正确的,因为问题可能是由 numpy 链接到较慢的 BLAS 库(例如引用 CBLAS 库而不是 ATLAS)引起的。
您可以通过在 numpy 的已编译共享库之一上调用 ldd
实用程序来检查正在链接哪个 BLAS 库。
例如,如果您使用 apt-get
在标准位置安装了 numpy:
~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so
...
libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f01f0188000)
...
此输出告诉我 numpy 链接到 /usr/lib/libblas.so.3
。这通常是引用 CBLAS 库的符号链接(symbolic link),速度非常慢。
您可以按照 wim 的建议,删除通过 apt-get
安装的 numpy 版本,然后使用 pip
或直接下载源代码自行构建。但是,我强烈不鼓励您使用 sudo pip install ...
在系统范围内安装 Python 模块。这是一个不好养成的习惯,因为您冒着破坏系统范围 Python 环境中的依赖关系的风险。
使用 pip install --user ...
安装到您的 ~/.local/
目录中或者更好的是,安装到一个完全独立 virtualenv
.
另一种选择是使用 update-alternatives
强制您的系统范围内的 numpy 链接到不同的 BLAS 库。我写了一个 previous answer here显示了如何执行此操作。
关于python - 为什么在将ubuntu从12.04升级到14.04后使用python的numpy进行矩阵乘法变得如此缓慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320684/