作为初学者,我尝试在我的表面上安装pymc3 pro 4 / win 10 64bit,在网上搜索了几个信息并且遇到了几个问题。现在我想分享我的经验并提出一些问题。
首先 ,我选择了带有python 3.5的winpython 3.5.2.3Qt5。但是当我运行pymc3开始示例线性回归模型enter link description here时,我遇到崩溃错误:有时是“内核死亡”,有时是“ImportError:DLL加载失败:初始化例程失败”。为了解决这个问题,我搜索了博客/文章,发现其他人推荐使用python 2.7 enter link description here的anaconda。还有人说theano 0.8.2只是支持python 3.4,而不是3.5。我想有一些兼容的问题会导致崩溃。 所以最后我用python 2.7安装了anaconda 4.2 64bit。
问题1 :由于来自anaconda 2.5 MKL是免费且自动安装的,我根据一些博客测试了numpy和MKL之间的链接。
1)
numpy.__config__.show()
lapack_opt_info:
libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
library_dirs = ['C:/Users/sejab/Anaconda2\\Library\\lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['C:/Users/sejab/Anaconda2\\Library\\include']
blas_opt_info:
libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
library_dirs = ['C:/Users/sejab/Anaconda2\\Library\\lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['C:/Users/sejab/Anaconda2\\Library\\include']
openblas_lapack_info:
NOT AVAILABLE
lapack_mkl_info:
libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
library_dirs = ['C:/Users/sejab/Anaconda2\\Library\\lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['C:/Users/sejab/Anaconda2\\Library\\include']
blas_mkl_info:
libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
library_dirs = ['C:/Users/sejab/Anaconda2\\Library\\lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['C:/Users/sejab/Anaconda2\\Library\\include']
但是anaconda文件夹中没有mkl_intel_lp64文件。 没关系吗?
2)id(numpy.dot) == id(numpy.core.multiarray.dot) >> True
有人说,如果他们被链接,numpy应该使用numpy.core._dotblas。 这是否意味着numpy dot在环境中也使用多阵列而不是MKL blas?
总之,是否会自动与anaconda中的MKL链接?
第二 ,Theano是一个特殊的包,因为它需要c / c ++和cuda编译配置。因为我的笔记本电脑没有Nvidia GPU,我只需要关注c / c ++编译环境。官方theano安装指南和许多文章/博客建议首先使用conda install mingw libpython
然后是git。但是,我发现conda install theano
已经包含了mingw64(可能是TDM-GCC 64?)组件和libpython。所以我只是运行命令来安装theano并认为它足够了。然后我把g ++的路径放到系统路径上
(在我的环境中,它是
“C:\ Users \ sejab \ Anaconda2 \ Library \ mingw-w64 \ bin”,“C:\ Users \ sejab \ Anaconda2 \ Library \ mingw-w64 \ x86_64-w64-mingw32 \ bin” 和相应的“包含”路径。
要验证安装,请使用测试程序
import numpy as np
import time
import theano
A = np.random.rand(1000,10000).astype(theano.config.floatX)
B = np.random.rand(10000,1000).astype(theano.config.floatX)
np_start = time.time()
AB = A.dot(B)
np_end = time.time()
X,Y = theano.tensor.matrices('XY')
mf = theano.function([X,Y],X.dot(Y))
t_start = time.time()
tAB = mf(A,B)
t_end = time.time()
print("NP time: %f[s], theano time: %f[s] (times should be close when run on CPU!)" %(np_end-np_start, t_end-t_start))
print("Result difference: %f" % (np.abs(AB-tAB).max(), ))
没关系。 Result difference: 0.000000
。
第三次 ,我按照官方手册安装指南和其他博客上的说明进行操作,
1)下载预编译的 OpenBLAS-v0.2.19-Win64-int32.zip 并解压缩到c:\,将其bin和include路径放入系统路径;
2)在根
中创建.theanorc.txtC:\用户\ sejab
并写入
[global]
device = cpu
floatX = float64
[blas]
ldflags = -LC:/OpenBLAS-v0.2.19-Win64-int32/bin -lopenblas
用theano配置oopenblas。再次运行上面的测试,
NP time: 0.431000[s], theano time: 0.307000[s] (times should be close when run on CPU!)
Result difference: 0.000000
。
如果floatX = float32
,则Result difference
不为0.
问题2 :有没有其他方法可以验证theano和openblas之间的链接?测试CPU时间改变甚至固定矩阵A,B的值。
问题3 :在测试中,theano会自动使用多核吗?如果没有,如何配置?
最后 ,我使用conda install -c conda-forge pymc3
安装pymc3。在pymc3官方教程中解决相同的线性回归模型没有问题。
这有点长,但我希望它可以帮助别人。