我正在尝试安装 scikit-learn,以便它无法访问 ATLAS(其他 BLAS 和 LAPACK 库也可以)。有没有办法设置安装以便不使用 ATLAS?很抱歉提出基本问题,但我看不到一个好的方法。
我想这样做的原因:我正在开发一个无法构建 atlas 的集群,但它的预装版本已损坏(在 16 个内核上编译,节点上只有 8 个内核,pthread 问题),所以当我安装 scikit-learn 时,我的 scikit-learn 尝试启动这些库,我得到错误。
谢谢
编辑:似乎我有一些错误,实际上在我针对openblas编译它后,scipy仍然被破坏了。在我得到的一个单元测试中:
断言!pthread_create(&thr->thrH, &attr, rout, arg) failed,文件/var/tmp/portage/sci-libs/atlas-3.10.1-r2/work/ATLAS//src/threads/ATL_thread_start.c 的第 111 行
现在有点远景了,但知道为什么我的 scipy 构建甚至会看 ATLAS 吗?
Numpy、scipy 和 scikit-learn 如果找到 ATLAS,都会尝试链接到它。虽然scikit-learn可以针对自己的嵌入式BLAS子集进行构建,如果系统上没有找到ATLAS或其他BLAS/LAPACK,但scipy无论如何都需要BLAS/LAPACK实现。
你可以做的是构建你自己的numpy,scipy和scikit-learn版本,反对本地构建的ATLAS或OpenBLAS版本(后者采用github上的主分支)。
为此,您需要在构建之前自定义 numpy 和 scipy 源文件夹中的 site.cfg 文件。
此外,您还应该使用以下内容构建OpenBLAS:
make TARGET=NEHALEM NO_AFFINITY=1 NUM_THREADS=8 USE_OPENMP=0