TensorFlow 在训练期间没有使用我的 M1 MacBook GPU
TensorFlow is not using my M1 MacBook GPU during training
我已经安装了 tensorflow-macos 并且在训练时这是我的 CPU 用法
和 GPU 使用率 .
我可以在 GPU 上制作 Tensorflow 运行 吗?
可以,但现在看来有点痛苦。一种解决方案是使用 mini-forge。如果你使用 conda,你需要先卸载它。
- 安装 Xcode 和命令行工具包。
- 安装 Miniforge 获取 conda。
- 在 conda 环境和其他所需的软件包中从 conda-forge 安装 Apple 的 TensorFlow 分支。
我的回答基于这个有用的指南:
https://medium.com/gft-engineering/macbook-m1-tensorflow-on-jupyter-notebooks-6171e1f48060
Apple GitHub 上的这个问题有更多讨论:
https://github.com/apple/tensorflow_macos/issues/153
我现在也面临同样的问题。我确实尝试遵循此 youtube link。仍然按照这些步骤,我的编译器在 make -j8 中一直失败,这也非常令人沮丧。希望也有解决办法。
21 年 6 月 16 日更新
能够使用 opencv2 和 tensorflow2.4 建立我的测试环境。
按照 Prabhat on medium.
的步骤操作
注意:小心弄乱 conda 和 pip 环境,并更改您拥有 added/downloaded opncv 和 tensorflow 虚拟环境的默认路径。
希望这对安装有所帮助。
对于测试运行,我还使用了 github tf test-code
您可以尝试运行下面的示例代码,打开activity监视器检查gpu是否正常,Tensorflow是否安装完美
#import os
#os.environ["TF_DISABLE_MLC"] = "1"
#os.environ["TF_MLC_LOGGING"] = "1"
import tensorflow as tf
from tensorflow.python.compiler.mlcompute import mlcompute
tf.compat.v1.disable_eager_execution()
mlcompute.set_mlc_device(device_name='gpu')
print("is_apple_mlc_enabled %s" % mlcompute.is_apple_mlc_enabled())
print("is_tf_compiled_with_apple_mlc %s" % mlcompute.is_tf_compiled_with_apple_mlc())
print(f"eagerly? {tf.executing_eagerly()}")
print(tf.config.list_logical_devices())
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images, test_images = train_images / 255.0, test_images / 255.0
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
'dog', 'frog', 'horse', 'ship', 'truck']
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history = model.fit(train_images, train_labels, epochs=10,
validation_data=(test_images, test_labels))
我今天一直在设置我的新 M1 机器,并正在寻找一个测试,例如 already here. It successfully runs on the GPU after following the standard instructions provided in #153 提供的测试,使用使用 Homebrew 安装的 miniforge 包管理器和从 YAML 文件克隆的环境第153章攻略
我还 运行 更小的更简单的片段如下,它只在 CPU 上运行,'% GPU' == 0%:
import numpy as np
import tensorflow as tf
### Aman's code to enable the GPU
#from tensorflow.python.compiler.mlcompute import mlcompute
#tf.compat.v1.disable_eager_execution()
#mlcompute.set_mlc_device(device_name='gpu')
#print("is_apple_mlc_enabled %s" % mlcompute.is_apple_mlc_enabled())
#print("is_tf_compiled_with_apple_mlc %s" % #mlcompute.is_tf_compiled_with_apple_mlc())
#print(f"eagerly? {tf.executing_eagerly()}")
#print(tf.config.list_logical_devices())
x = np.random.random((10000, 5))
y = np.random.random((10000, 2))
x2 = np.random.random((2000, 5))
y2 = np.random.random((2000, 2))
inp = tf.keras.layers.Input(shape = (5,))
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(inp)
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1)
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1)
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1)
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1)
o = tf.keras.layers.Dense(2, activation = 'sigmoid')(l1)
model = tf.keras.models.Model(inputs = [inp], outputs = [o])
model.compile(optimizer = "Adam", loss = "mse")
model.fit(x, y, validation_data = (x2, y2), batch_size = 500, epochs = 500)
取消注释从 Aman 的代码添加的行并重新运行使 GPU 再次工作:
如果这些脚本仍未根据 activity 监视器使用 GPU(在 view/update_frequency 中将更新速率设置为 1s),请返回#153 页面重新开始重新开始并仔细按照说明进行操作,并确保忽略针对 Intel/X86.
的说明
我的步骤:
- 安装xcode(来自应用商店)
- install Homebrew(不要忘记在安装完成后按照建议设置 PATH,然后终端需要重新启动或重新加载 shell 配置文件)
- 安装 miniforge(“brew 安装 miniforge”)
- 使用 #153 中给出的命令复制 environment.yaml 文件并克隆为新的 conda 环境。
- 利润。
更新 2022-01-26:
在过去的 6 个月里,在 apple silicon 上安装 tensorflow 的工作流程变得更加容易,它仍然依赖于 miniforge,但包是通过标准 conda 环境中的 conda 和 pip 分发的,而不必从yaml 文件。 These instructions are very easy to follow and should have you going in under 2 minutes. The only exception being that I had to run one additional command to install openblas 然后通过 conda 使其工作。
我上面的测试在 tensorflow 2.7 中中断,因为它们改变了一些与 mlcompute location for m1 有关的东西,但继续说 mlcompute 不再需要指示使用 Metal 插件和测试的 GPU通过简单地删除第 5-10 行中对 mlcompute 的引用再次工作,并在 GPU 上运行,如 activity monitor.
中所示
随着 TensorFlow-macos 2.5 的发布,这个问题已经得到解决。在 Mac M1 上为 Tensorflow 使用 GPU 的最简单方法是创建一个新的 conda miniforge3 ARM64 环境和 运行 以下 3 个命令来安装 TensorFlow 及其依赖项:
conda install -c apple tensorflow-deps
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal
此页面上有更多说明:https://developer.apple.com/metal/tensorflow-plugin/
"Accelerate training of machine learning models with TensorFlow right
on your Mac. Install TensorFlow v2.5 and the tensorflow-metal
PluggableDevice to accelerate training with Metal on Mac GPUs."
您可以通过
检查可用的 GPU 设备
import tensorflow as tf
tf.config.list_physical_devices()
然后运行你的模型
with tf.device('/device:GPU:0'):
model.fit(x_train, y_train)
我已经安装了 tensorflow-macos 并且在训练时这是我的 CPU 用法
我可以在 GPU 上制作 Tensorflow 运行 吗?
可以,但现在看来有点痛苦。一种解决方案是使用 mini-forge。如果你使用 conda,你需要先卸载它。
- 安装 Xcode 和命令行工具包。
- 安装 Miniforge 获取 conda。
- 在 conda 环境和其他所需的软件包中从 conda-forge 安装 Apple 的 TensorFlow 分支。
我的回答基于这个有用的指南: https://medium.com/gft-engineering/macbook-m1-tensorflow-on-jupyter-notebooks-6171e1f48060
Apple GitHub 上的这个问题有更多讨论: https://github.com/apple/tensorflow_macos/issues/153
我现在也面临同样的问题。我确实尝试遵循此 youtube link。仍然按照这些步骤,我的编译器在 make -j8 中一直失败,这也非常令人沮丧。希望也有解决办法。
21 年 6 月 16 日更新
能够使用 opencv2 和 tensorflow2.4 建立我的测试环境。 按照 Prabhat on medium.
的步骤操作注意:小心弄乱 conda 和 pip 环境,并更改您拥有 added/downloaded opncv 和 tensorflow 虚拟环境的默认路径。
希望这对安装有所帮助。
对于测试运行,我还使用了 github tf test-code
您可以尝试运行下面的示例代码,打开activity监视器检查gpu是否正常,Tensorflow是否安装完美
#import os
#os.environ["TF_DISABLE_MLC"] = "1"
#os.environ["TF_MLC_LOGGING"] = "1"
import tensorflow as tf
from tensorflow.python.compiler.mlcompute import mlcompute
tf.compat.v1.disable_eager_execution()
mlcompute.set_mlc_device(device_name='gpu')
print("is_apple_mlc_enabled %s" % mlcompute.is_apple_mlc_enabled())
print("is_tf_compiled_with_apple_mlc %s" % mlcompute.is_tf_compiled_with_apple_mlc())
print(f"eagerly? {tf.executing_eagerly()}")
print(tf.config.list_logical_devices())
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images, test_images = train_images / 255.0, test_images / 255.0
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
'dog', 'frog', 'horse', 'ship', 'truck']
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history = model.fit(train_images, train_labels, epochs=10,
validation_data=(test_images, test_labels))
我今天一直在设置我的新 M1 机器,并正在寻找一个测试,例如
我还 运行 更小的更简单的片段如下,它只在 CPU 上运行,'% GPU' == 0%:
import numpy as np
import tensorflow as tf
### Aman's code to enable the GPU
#from tensorflow.python.compiler.mlcompute import mlcompute
#tf.compat.v1.disable_eager_execution()
#mlcompute.set_mlc_device(device_name='gpu')
#print("is_apple_mlc_enabled %s" % mlcompute.is_apple_mlc_enabled())
#print("is_tf_compiled_with_apple_mlc %s" % #mlcompute.is_tf_compiled_with_apple_mlc())
#print(f"eagerly? {tf.executing_eagerly()}")
#print(tf.config.list_logical_devices())
x = np.random.random((10000, 5))
y = np.random.random((10000, 2))
x2 = np.random.random((2000, 5))
y2 = np.random.random((2000, 2))
inp = tf.keras.layers.Input(shape = (5,))
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(inp)
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1)
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1)
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1)
l1 = tf.keras.layers.Dense(256, activation = 'sigmoid')(l1)
o = tf.keras.layers.Dense(2, activation = 'sigmoid')(l1)
model = tf.keras.models.Model(inputs = [inp], outputs = [o])
model.compile(optimizer = "Adam", loss = "mse")
model.fit(x, y, validation_data = (x2, y2), batch_size = 500, epochs = 500)
取消注释从 Aman 的代码添加的行并重新运行使 GPU 再次工作:
如果这些脚本仍未根据 activity 监视器使用 GPU(在 view/update_frequency 中将更新速率设置为 1s),请返回#153 页面重新开始重新开始并仔细按照说明进行操作,并确保忽略针对 Intel/X86.
的说明我的步骤:
- 安装xcode(来自应用商店)
- install Homebrew(不要忘记在安装完成后按照建议设置 PATH,然后终端需要重新启动或重新加载 shell 配置文件)
- 安装 miniforge(“brew 安装 miniforge”)
- 使用 #153 中给出的命令复制 environment.yaml 文件并克隆为新的 conda 环境。
- 利润。
更新 2022-01-26:
在过去的 6 个月里,在 apple silicon 上安装 tensorflow 的工作流程变得更加容易,它仍然依赖于 miniforge,但包是通过标准 conda 环境中的 conda 和 pip 分发的,而不必从yaml 文件。 These instructions are very easy to follow and should have you going in under 2 minutes. The only exception being that I had to run one additional command to install openblas 然后通过 conda 使其工作。
我上面的测试在 tensorflow 2.7 中中断,因为它们改变了一些与 mlcompute location for m1 有关的东西,但继续说 mlcompute 不再需要指示使用 Metal 插件和测试的 GPU通过简单地删除第 5-10 行中对 mlcompute 的引用再次工作,并在 GPU 上运行,如 activity monitor.
中所示随着 TensorFlow-macos 2.5 的发布,这个问题已经得到解决。在 Mac M1 上为 Tensorflow 使用 GPU 的最简单方法是创建一个新的 conda miniforge3 ARM64 环境和 运行 以下 3 个命令来安装 TensorFlow 及其依赖项:
conda install -c apple tensorflow-deps
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal
此页面上有更多说明:https://developer.apple.com/metal/tensorflow-plugin/
"Accelerate training of machine learning models with TensorFlow right on your Mac. Install TensorFlow v2.5 and the tensorflow-metal PluggableDevice to accelerate training with Metal on Mac GPUs."
您可以通过
检查可用的 GPU 设备import tensorflow as tf
tf.config.list_physical_devices()
然后运行你的模型
with tf.device('/device:GPU:0'):
model.fit(x_train, y_train)