gpt4 book ai didi

python - Numpy SVD 似乎在 Mac OSX 上并行化,但在我的 Ubuntu 虚拟机上却没有

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:49 25 4
gpt4 key购买 nike

我想运行以下脚本:

#python imports
import time

#3rd party imports
import numpy as np
import pandas as pd

def pd_svd(pd_dataframe):
np_dataframe = pd_dataframe.values
return np.linalg.svd(pd_dataframe)

if __name__ == '__main__':
li_times = []
for i in range(1, 3):
start = time.time()
pd_dataframe = pd.DataFrame(np.random.random((3000, 252 * i)))
pd_svd(pd_dataframe)
li_times.append(str(time.time() - start))
print li_times

我在装有 OSX 10.9.4 的 Macbook Air 2011 和运行 Ubuntu 12.0.4 的 16 核云虚拟机上进行了尝试。出于某种原因,这在我的 Macbook Air 上大约需要 4 秒,在我的 VM 上大约需要 15 秒。我使用 top 检查了进程,发现在我的 Ubuntu VM 上,它似乎没有使用并行性,而在我的 Macbook Air 上,它是。

以下是我的 MBA 成绩:

enter image description here

在我的 ubuntu VM 上:

enter image description here

知道为什么我的 Macbook Air 对于 SVD 如此快吗?特别是,在进行 numpy 比较时,云 VM 的速度要快得多,而且似乎在使用并行性(没有执行 top,但速度快了几倍)。

编辑:

这是云 VM 上 np.show_config() 的输出:

blas_info:
libraries = ['blas']
library_dirs = ['/usr/lib']
language = f77
lapack_info:
libraries = ['lapack']
library_dirs = ['/usr/lib']
language = f77
atlas_threads_info:
NOT AVAILABLE
blas_opt_info:
libraries = ['blas']
library_dirs = ['/usr/lib']
language = f77
define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
NOT AVAILABLE
lapack_opt_info:
libraries = ['lapack', 'blas']
library_dirs = ['/usr/lib']
language = f77
define_macros = [('NO_ATLAS_INFO', 1)]
atlas_info:
NOT AVAILABLE
lapack_mkl_info:
NOT AVAILABLE
blas_mkl_info:
NOT AVAILABLE
atlas_blas_info:
NOT AVAILABLE
mkl_info:
NOT AVAILABLE

最佳答案

我怀疑您的云 VM 上的 numpy 版本仅链接到引用 CBLAS 库 (*/usr/lib/libblas/libblas.so.3.0)。这是单线程的,并且比其他优化的 BLAS 实现(例如 OpenBLAS 和 ATLAS)慢得多。

您可以通过使用 ldd 检查哪些库在运行时由 numpy 动态链接来确认这一点:

~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so

你可能会看到这样一行:

...
libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f98445e3000)
...

/usr/lib/libblas.so.3 是符号链接(symbolic link)。如果您使用 readlink 跟踪链接链,您可能会看到如下内容:

~$ readlink -f /usr/lib/libblas.so.3
/usr/lib/libblas/libblas.so.3.0

这是一个缓慢的单线程 CBLAS 库。假设您有 root 访问权限,最简单的解决方案可能是通过 apt-get 安装 OpenBLAS:

~$ sudo apt-get install libopenblas-base libopenblas-dev

当我在我的服务器上安装这个包时,它更新了位于 /usr/lib/libblas.so.3 的符号链接(symbolic link)以指向 OpenBLAS 库而不是 CBLAS:

~$ readlink -f /usr/lib/libblas.so.3
/usr/lib/openblas-base/libblas.so.3

希望这足以让您使用更快的 BLAS 库。

如果出于某种原因,您无法使用 apt-get 解决此问题,我之前已经编写了一些从源代码构建 numpy 和 OpenBLAS 的说明 which you can find here .我还写了一些说明 here使用 update-alternatives 手动符号链接(symbolic link)到不同的 BLAS 库。


*我在回答中提到的路径是运行 Ubuntu 14.10 的服务器的默认路径,我在其中使用 apt-get 安装了 numpy。它们可能会有所不同,具体取决于您的 Ubuntu 版本和您安装 numpy 的方式。

关于python - Numpy SVD 似乎在 Mac OSX 上并行化,但在我的 Ubuntu 虚拟机上却没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com