某些库(如BLAS / LAPACK或某些优化库)在编译时针对本地计算机体系结构进行了优化。让我们以OpenBlas为例。有两种方法可以使用OpenBlas创建Docker容器:
使用Dockerfile,在其中指定OpenBlas库的git clone以及所有必需的编译标志和构建命令。
从Docker Hub中拉出并运行其他人的Ubuntu + OpenBlas图像。
选项(1)保证为您的机器构建和优化OpenBlas。选项(2)怎么样?作为一个Docker新手,我认为图像是固定的和静态的,所以运行这个图像不会优化到我的机器(可能是基于AMD而不是维护者的英特尔CPU)。令我感到困惑的是,图像ipython/scipyserver确实在构建期间从Github克隆了最新的OpenBlas master。
我似乎误解了Docker镜像和/或自动构建的概念,我非常感谢澄清。
答案 0 :(得分:2)
不,我认为你非常正确。
您链接的图像是自动构建,因此OpenBlas将使用Docker构建服务器的内核和体系结构进行编译。我确实注意到build script在构建OpenBlas时设置了以下标志:
DYNAMIC_ARCH=1 NO_AFFINITY=1 NUM_THREADS=32
这可能会使安装便携性能成本降低。另一种方法是为各种构建配置提供单独的图像。