【问题标题】:Tensorflow not found on pip install inside Docker Container using Mac M1使用 Mac M1 在 Docker 容器内的 pip 安装上找不到 Tensorflow
【发布时间】:2022-01-09 07:59:00
【问题描述】:

我正在尝试使用新的 Mac M1 运行一些项目。这些项目已经在英特尔处理器上运行,并被使用英特尔的其他开发人员使用。

我无法构建这个简单的 Dockerfile:

FROM python:3.9

RUN python -m pip install --upgrade pip

RUN pip install tensorflow==2.6.2

我收到这条消息:

 > [3/3] RUN pip install tensorflow==2.6.2:                                                                                                            
#6 0.583 ERROR: Could not find a version that satisfies the requirement tensorflow==2.6.2 (from versions: none)                                        
#6 0.583 ERROR: No matching distribution found for tensorflow==2.6.2  

我可以在 Dockerfile 之外的本地安装 tensorflow。此外,朋友们还可以从他们的英特尔 Mac 构建此映像。

我什至尝试运行 docker build com 不同的控制台架构:i386 和 arm64,但都没有工作。

有什么建议吗?

【问题讨论】:

    标签: python docker tensorflow apple-m1


    【解决方案1】:

    tensorflow 包不适用于 armv8。

    我猜你的本地 python 正在使用 rosetta2 (intel x86_64) 运行。 您可以使用以下方法进行检查:

    python3 -c "import platform; print(platform.machine())"
    x86_64
    

    解决方案是强制 Docker 也为 x86_64 构建该映像。 这很容易。只需将您的 Dockerfile 更改为:

    FROM --platform=linux/x86_64 python:3.9
    
    RUN python -m pip install --upgrade pip
    
    RUN pip install tensorflow==2.6.2
    

    或者,如果您不想更改 Dockerfile,您可以使用以下命令构建该映像:

    docker build --platform linux/x86_64 -t myimage .
    

    后记:

    正如 [tyrex] 在评论中所说,虽然 tensorflow 已安装在 armv8 上,但由于仿真中的一些错误(例如 qemu: uncaught target signal 6 (Aborted) - core dumped),它可能会失败。

    他改用 PyTorch 解决了他的要求。

    【讨论】:

    • 我尝试了您的解决方案,它可以安装 tensorflow,但是在 import tensorflow 之后出现错误 qemu: uncaught target signal 6 (Aborted) - core dumped 。如果你能分享一下你是如何工作的,那就太好了?
    • 嗨@tyrex。我只测试了构建。但是从你的错误来看,qemu 似乎很难在不同的芯片上运行。我在不同的软件上看到过这种行为,但没有成功解决它?如果你设法解决它,请告诉我
    • 嘿@Tiago:嗯,我的解决方案是用PyTorch 替换tensorflow :) 我能够从PyTorch 获得合适的模型,现在一切都很好。
    • 嗨@tyrex,感谢您告诉我们您的解决方案。我将在我的答案上添加注释。 :)
    最近更新 更多