在M1 Mac上安装Tensorflow,无法使其工作

pbgvytdp  于 2023-01-05  发布在  Mac
关注(0)|答案(1)|浏览(235)

我尝试在我的MacBook Pro上使用Tensorflow和M1 Pro芯片。我读了很多文章,看了很多视频,但我无法让它工作。我最近的尝试是使用下面的conda env,代码只是在python文件中导入Tensorflow并运行它。
这是错误消息:

2022-12-28 19:14:01.671088: F tensorflow/c/experimental/stream_executor/stream_executor.cc:808] Non-OK-status: stream_executor::MultiPlatformManager::RegisterPlatform( std::move(cplatform)) status: INTERNAL: platform is already registered with name: "METAL"
[1]    1296 abort      /opt/homebrew/bin/python

这是我用来创建env的文件:

name: tf-metal
channels:
  - apple
  - conda-forge
dependencies:
  - python=3.10 
  - pip
  - jupyter
  - tensorflow-deps
  - pandas
  - pandas-datareader
  - scikit-learn
  - scipy
  - ipykernel

  ## PyPI packages
  - pip:
    - tensorflow-macos
    - tensorflow-metal

我也试过用jupyter notebook运行它,但是我的内核一直崩溃。
我的感觉是有些人可以让它在m1上工作,而有些人不能......就像我一样:(

yyyllmsg

yyyllmsg1#

我有一个类似的问题很长一段时间了,也有很多问题得到教程中提出的解决方案等为我工作。我认为是什么问题(虽然我不能完全肯定这一点)是一些必需的包的现有版本或缓存版本,即使在我尝试重新安装正确的包后,这些包仍然存在。我不能使用M1芯片使用的arm64架构,它是特定于应用程序的,所以你的麻木安装会很好,但是它会导致tensorflow的问题(还有一些其他的gpu应用程序,我见过其他人在努力)
我可以通过使用conda channels来强制它在搜索依赖项时只在特定的通道中查找(因此只在我们漂亮的新arm64架构兼容包中查找),而不是查找现有安装和旧安装来解决这个问题。
我没有从文件创建环境,而是使用以下命令

conda config --env --set channel_priority strict

如果有一种方法可以直接在环境文件中实现这一点,我对此并不熟悉,但是有一些非常简单的变通方法可以达到同样的效果。在我看来,最简单的方法是为所有相关的包指定通道,如下所示

name: tf-metal
channels:
  - apple

dependencies:
  - python=3.10 
  - pip
  - jupyter
  - apple::tensorflow-deps
  - conda-forge::pandas
  - conda-forge::pandas-datareader
  - conda-forge::scikit-learn
  - conda-forge::scipy
  - conda-forge::ipykernel

  ## PyPI packages
  - pip:
    - tensorflow-macos
    - tensorflow-metal

我做了一些测试,这也使我能够成功地安装它,虽然它花了大约一分半钟来运行。下面是我使用的测试文件:

# This function is written to help users ensure that their tensorflow installations are correct
print("Testing Tensorflow Validity", flush = True)
import tensorflow as tf

print("[TensorFlow] version:", tf.__version__)
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
print(tf.config.list_physical_devices('GPU'))

希望这有帮助:)

相关问题