Qiu*_*ang 69 python conda tensorflow apple-m1
当我尝试在 Apple M1 上安装 TensorFlow 时,遇到 4 个问题:
Conda 自 2022 年 5 月 6 日起就支持 M1,但我在 google 上搜索的大多数文章都讨论了使用 Miniforge,例如,所以我觉得它们都有点过时了。
我使用最新的 conda 4.13 成功设置了我的 python 环境(3.8、3.9 和 3.10),但是当我尝试安装 tensorflow 时,出现错误“找不到tensorflow 的匹配发行版”(全部失败)。
ERROR: Could not find a version that satisfies the requirement tensorflow (from versions: none)
ERROR: No matching distribution found for tensorflow
Run Code Online (Sandbox Code Playgroud)
无法找到满足张量流要求的版本中的答案没有帮助。我在https://www.tensorflow.org/上也找不到有用的信息,实际上https://www.tensorflow.org/install刚刚说了pip install tensorflow
。
我试着跑pip install tensorflow-macos
,结果成功了。我从上面的“也适用于 M1”文章中读到“ Apple 的 TensorFlow 分支称为“tensorflow-macos ””,尽管我找不到太多相关信息。例如,https://www.tensorflow.org/没有提及这一点。我还从https://developer.apple.com/forums/thread/686926发现有人点击了“错误:找不到tensorflow-macos 的匹配发行版”(但我没有)。
我谷歌搜索的所有文章,包括上面4篇文章和macOS Apple M1上的这个Tensorflow,都说我还需要运行以下2个命令
conda install -c apple tensorflow-deps
pip install tensorflow-metal
但我真的需要这样做吗?我无法从https://www.tensorflow.org/找到此信息。这两个包是tensorflow-deps
什么tensorflow-metal
?
mer*_*erv 34
根据Apple 的官方指示(截至 2022 年 7 月 13 日),人们将使用以下 YAML 创建一个环境:
tf-metal-arm64.yaml
name: tf-metal
channels:
- apple
- conda-forge
dependencies:
- python=3.9 ## specify desired version
- pip
- tensorflow-deps
## uncomment for use with Jupyter
## - ipykernel
## PyPI packages
- pip:
- tensorflow-macos
- tensorflow-metal ## optional, but recommended
Run Code Online (Sandbox Code Playgroud)
编辑以包含其他包。
在创建环境之前,我们需要知道基础架构是什么。用 来检查这一点conda config --show subdir
。
如果您已经安装了本机osx-arm64 Miniforge 变体(我推荐Mambaforge),那么您可以使用以下命令创建:
mamba env create -n my_tf_env -f tf-metal-arm64.yaml
Run Code Online (Sandbox Code Playgroud)
注意:如果您没有 Mamba,则替换conda
为mamba
; 或者安装它以更快地解决问题:conda install -n base mamba
.
如果您没有本机base,那么您将需要覆盖该subdir
设置:
## create env
CONDA_SUBDIR=osx-arm64 mamba env create -n my_tf_env -f tf-metal-arm64.yaml
## activate
mamba activate my_tf_env
## permanently set the subdir
conda config --env --set subdir osx-arm64
Run Code Online (Sandbox Code Playgroud)
请务必在安装或更新软件包之前激活环境。
Mat*_*hew 28
我为此奋斗了几个小时。https://developer.apple.com/metal/tensorflow-plugin/上的当前说明指定使用 Miniconda,可概括为:
conda create -y --name cv python
conda activate cv
conda install -y -c apple tensorflow-deps
python -m pip install tensorflow-macos tensorflow-metal
Run Code Online (Sandbox Code Playgroud)
截至 2023 年 1 月,这些说明充满了问题:
conda install -c apple tensorflow-deps
期望获得当前版本 (2.10.0) ,但conda list tensorflow-deps
显示tensorflow-deps 2.9.0
原因:Apple的tensorflow-deps包v2.10.0依赖于numpy >=1.23.2,<1.23.3。Anaconda 中没有这样的 numpy 版本(只有 conda-forge)。Anaconda 的依赖解析默默地回退到旧版本的tensorflow-deps。当您继续按照说明操作时,这将导致更多问题。
conda install -c apple tensorflow-deps==2.10.0
并得到了UnsatisfiableError: The 以下规范被发现彼此不兼容原因:同上,但至少Anaconda已经告诉你了。它没有提到不兼容是什么,因为这会有所帮助。
原因:如果您安装了tensorflow-deps 2.9.0(或者由于上述原因Anaconda为您安装了它),您将获得numpy 1.22.3。当您 时pip install tensorflow-macos tensorflow-metal
,您将获得tensorflow-macos 2.11.0 和tensorflow-metal 0.7.0,其中一个或两个与numpy 1.22.3 二进制不兼容。
问题:TensorFlow 2.11 引入了优化器和可插拔架构之间的不兼容性。您可以使用 TF 2.11,但您需要使用旧版优化器。
我找到了使用 Anaconda 在 Apple Silicon 上安装 GPU 加速 TF 的 3 个选项。
它将帮助您的调试获得一个最小的测试脚本,例如 https://developer.apple.com/metal/tensorflow-plugin/中的测试脚本,即:
import tensorflow as tf
cifar = tf.keras.datasets.cifar100
(x_train, y_train), (x_test, y_test) = cifar.load_data()
model = tf.keras.applications.ResNet50(
include_top=True,
weights=None,
input_shape=(32, 32, 3),
classes=100,)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
model.fit(x_train, y_train, epochs=5, batch_size=64)
Run Code Online (Sandbox Code Playgroud)
这样您就可以通过运行TF_MLC_LOGGING=1 python tf_arch_test.py
和观察 Activity Monitor 来检查 GPU 使用情况。虽然感觉笔记本电脑的哪一侧正在燃烧你的腿可以作为 GPU 使用情况的有用指标,但它并不总是可靠的。
conda config --add channels conda-forge
conda config --set channel_priority strict
conda create -y --name cv
conda activate cv
conda install -y -c apple tensorflow-deps
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal
python --version
conda list|grep -E '(tensorflow|numpy)'
TF_MLC_LOGGING=1 python tf_arch_test.py
Run Code Online (Sandbox Code Playgroud)
你会得到:
Python 3.10.8
numpy 1.23.2 py310h127c7cf_0 conda-forge
tensorflow-deps 2.10.0 0 apple
tensorflow-estimator 2.11.0 pypi_0 pypi
tensorflow-macos 2.11.0 pypi_0 pypi
tensorflow-metal 0.7.0 pypi_0 pypi
Run Code Online (Sandbox Code Playgroud)
您将需要修改代码才能使用旧优化器之一。例如:
Python 3.10.8
numpy 1.23.2 py310h127c7cf_0 conda-forge
tensorflow-deps 2.10.0 0 apple
tensorflow-estimator 2.11.0 pypi_0 pypi
tensorflow-macos 2.11.0 pypi_0 pypi
tensorflow-metal 0.7.0 pypi_0 pypi
Run Code Online (Sandbox Code Playgroud)
conda config --add channels conda-forge
conda config --set channel_priority strict
conda create -y --name cv
conda activate cv
conda install -y -c apple tensorflow-deps==2.10.0
python -m pip install tensorflow-macos==2.10.0
python -m pip install tensorflow-metal==0.6.0
python --version
conda list|grep -E '(tensorflow|numpy)'
Run Code Online (Sandbox Code Playgroud)
你会得到:
Python 3.10.8
numpy 1.23.2 py310h127c7cf_0 conda-forge
tensorflow-deps 2.10.0 0 apple
tensorflow-estimator 2.10.0 pypi_0 pypi
tensorflow-macos 2.10.0 pypi_0 pypi
tensorflow-metal 0.6.0 pypi_0 pypi
Run Code Online (Sandbox Code Playgroud)
model.compile(
optimizer=tf.keras.optimizers.legacy.Adam(learning_rate=1e-3),
loss=loss_fn,
metrics=["accuracy"],
)
Run Code Online (Sandbox Code Playgroud)
你会得到:
Python 3.10.9
numpy 1.22.3 py310hdb36b11_0
numpy-base 1.22.3 py310h5e3e9f0_0
tensorflow-deps 2.9.0 0 apple
tensorflow-estimator 2.9.0 pypi_0 pypi
tensorflow-macos 2.9.2 pypi_0 pypi
tensorflow-metal 0.5.1 pypi_0 pypi
Run Code Online (Sandbox Code Playgroud)
首先,TensorFlow并不正式支持Mac M1。他们不分发为 Mac M1(及其特定的 arm64 架构)预编译的软件包,因此该tensorflow-macos
软件包由 Apple 维护。据我所知,TensorFlow 只发布了适用于 x86(Linux、Windows、Mac)和 Raspberry PI(arm64)的官方轮子。
苹果正在使用 Tensorflow 中的特定插件来使该框架与 MacOS 的图形堆栈 Metal 兼容。换句话说,他们正在利用Tensorflow 的 PluggableDevice API编写代码,将 TensorFlow 操作转换为 M1 的 GPU 可以理解的代码。
这两个包分别包含:
tensorflow-deps
在arm64上运行Tensorflow的依赖项,即python
、和。我相信这更像是一个便利包。numpy
grpcio
h5py
tensorflow-metal
:一个使 TensorFlow 能够在metal
MacOS 的着色器 API 上运行的插件(相当于其他平台上的 Vulkan 或 DirectX12 的低级 API)。如果您习惯在 Nvidia GPU 上运行 TensorFlow,您可以将其视为 CUDA 的替代品。如果没有该tensorflow-metal
软件包,TensorFlow 将无法利用 M1 的 GPU,但仍然能够在 CPU 上运行代码。
https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
\nchmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh\nsh ~/Downloads/Miniforge3-MacOSX-arm64.sh\nsource ~/miniforge3/bin/activate\n
Run Code Online (Sandbox Code Playgroud)\n安装 TensorFlow 依赖项:
\nconda install -c 苹果tensorflow-deps
\n安装基础 TensorFlow:
\npython -m pip install tensorflow-macos\n
Run Code Online (Sandbox Code Playgroud)\n安装基础 TensorFlow-metal:
\npython -m pip 安装tensorflow-metal
\n创建Conda环境:
\nconda create -n tensorflow-env tensorflow\n
Run Code Online (Sandbox Code Playgroud)\n 归档时间: |
|
查看次数: |
72479 次 |
最近记录: |