Tensorflow Metal 插件已注册错误

Tar*_*maz 3 python macos metal tensorflow

pip我已经在 Mac Mini 2020 M1 上安装了 Tensorflow 和 Metal 插件,

\n
$ pip3 install tensorflow-macos tensorflow-metal\n$\xc2\xa0pip3 uninstall numpy #\xc2\xa0related to https://stackoverflow.com/q/66060487/2395656 \n$ pip3 install numpy==1.20.3\n
Run Code Online (Sandbox Code Playgroud)\n

然后我尝试列出设备以查看 Mac GPU,

\n
import tensorflow\n\nd = tensorflow.config.list_physical_devices()\n\nprint(d)\n
Run Code Online (Sandbox Code Playgroud)\n

它产生错误,

\n
Init Plugin\nInit Graph Optimizer\nInit Kernel\nInit Plugin\n2021-06-10 02:20:21.128021: F tensorflow/c/experimental/stream_executor/stream_executor.cc:823] Non-OK-status: stream_executor::MultiPlatformManager::RegisterPlatform( std::move(cplatform)) status: Internal: platform is already registered with name: "METAL"\n
Run Code Online (Sandbox Code Playgroud)\n

我认为 Metal 插件正在尝试多次注册自身。

\n

请帮忙,谢谢!

\n

小智 22

在我的 MacBook Air M1 上,Monterey 12.3 下,brew 安装的 pythons python@3.8 和 python@3.9 位于 /opt/homebrew 的标准位置,以及 Xcode 13.3 位于其标准位置,经过几个小时的寻找,终于注意到以下内容有这个理论:

首先,我不喜欢使用 conda 或 miniconda 等(我似乎唯一缺少的非 python 依赖项是 hdf5)。另外,我确认通过张量流支持创建上面提到的 venv 效果很好。但如果我只想在系统位置中 pip install tensorflow-macos 和 tensorflow-metal 来酿造 python:

brew install hdf5
HDF5_DIR=/opt/homeware python3 -m pip install tensorflow-macos
Run Code Online (Sandbox Code Playgroud)

如果在最后阶段安装了tensorflow-metal插件:

python3 -m pip install tensorflow-metal 
Run Code Online (Sandbox Code Playgroud)

在brew系统默认目录中使用/opt/homebrew/bin/python3中的brew-ed python@3.9时:/opt/homebrew/lib/python3.9/site-packages/tensorflow-plugins

然后我收到有关 METAL 插件已注册的错误。

但是,如果我通过 ~/Library/Python/3.9/lib/python/site-packages 安装在我的用户目录库中

python3 -m pip install --user tensorflow-metal 
Run Code Online (Sandbox Code Playgroud)

然后一切正常。请注意,这仅涉及插件,即tensorflow-macos 包仍然可以位于brew 系统位置。

我注意到这一切,因为从过去的 Xcode Python (3.8) 使用情况来看,我在 ~/Library/Python/3.8/lib/Python/site-packages 中有一个用户包目录(Python 库)(只有在使用时可以添加包的地方)系统Python),并且自从它存在以来,酿造的python@3.8安装了那里的所有东西,而无需我向pip提供--user。

所以我用头撞墙,想知道为什么 brewed python@3.8 有效而 python@3.9 无效。我通过 pip uninstall 清除了 python@3.9 系统目录中的所有软件包,甚至清除了整个系统 site-packages 目录,并且仍然使用两个简单的 pip 步骤进行了干净的设置,但它一直失败。这是因为 3.9 没有用户包目录,所有内容都会返回到 brew 系统目录。

我非常确信这不是各种 python 之间的某些配置或包混合冲突的情况,因为我在重现之前非常小心地清理了所有内容。此外,将 python@3.8 下的tensorflow-metal安装从我的用户包目录移动到brew系统目录会重现之前在python@3.8下工作的错误。

长话短说:tensorflow插件初始化存在一个错误,当tensorflow-metal插件安装在/opt/homebrew下时,该错误会以某种方式触发,导致其注册被调用两次。当安装在本地 --user 目录中时可以避免这种情况。

我已经浪费了足够的时间来完成这项工作,目前我对我的理论很满意,因此将进一步研究它。我只是想我可以为其他人提供一些线索,以防他们遇到这种情况。

  • 我很高兴我尝试了这个。类似的场景(没有 conda 等)和相同的问题通过简单的“pip3 uninstall tensorflow-metal”和“pip3 install --user tensorflow-metal”解决。谢谢 (10认同)