【问题标题】:Docker images with architecture optimisation?具有架构优化的 Docker 映像?
【发布时间】:2015-01-13 10:24:24
【问题描述】:

某些库(例如 BLAS/LAPACK)或某些优化库会在编译时针对本地机器架构进行优化。让我们以 OpenBlas 为例。有两种方法可以使用 OpenBlas 创建 Docker 容器:

  1. 使用 Dockerfile,您可以在其中指定 OpenBlas 库的 git 克隆以及所有必要的编译标志和构建命令。

  2. 从 Docker Hub 拉取并运行其他人的 Ubuntu + OpenBlas 映像。

选项 (1) 保证 OpenBlas 是为您的机器构建和优化的。选项(2)呢?作为一个 Docker 新手,我认为图像是固定的和静态的,所以运行这个图像不会针对我的机器进行优化(它可能是基于 AMD 的,而不是维护者的 Intel CPU)。让我感到困惑的是,图像 ipython/scipyserver 确实在构建期间从 Github 克隆了最新的 OpenBlas 主控器。

我似乎误解了 Docker 映像和/或自动构建的概念,非常感谢您的澄清。

【问题讨论】:

    标签: optimization docker lapack blas


    【解决方案1】:

    不,我认为你说得很对。

    您链接到的映像是自动构建的,因此 OpenBlas 将使用 Docker 构建服务器的内核和架构进行编译。我确实注意到build script 在构建 OpenBlas 时设置了以下标志:

    DYNAMIC_ARCH=1 NO_AFFINITY=1 NUM_THREADS=32
    

    这可能会以性能为代价使安装变得可移植。另一种方法是为各种构建配置提供单独的图像。

    【讨论】:

    • 谢谢阿德里安!你是对的 - 通过添加 DYNAMIC_ARCH=1 编译所有 CPU 内核(从而增加编译时间),然后根据调用 OpenBlas 的 CPU 架构来提取这些内核。整洁!
    • 好吧,这很有趣!
    • 更新:Docker 不再只是 Linux 64 位,还有适用于 Windows 10 PRO 和 Windows server 2016 的 Windows 64 位容器原生。以及 Docker Linux 32 位的努力github.com/docker-32bit
    • @Walid True。我已经删除了那句话。
    • @AdrianMouat 我喜欢你的书和你的写作方式。感谢您的社区精神。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多