简单的 tensorflow LSTM 网络卡在苹果硅上
Simple tensorflow LSTM network get stucks on apple silicon
我正在使用 Tensorflow 中的 imdb 数据集构建一个非常简单的 LSTM 网络,特别是在 Apple Silicon 芯片(最大 M1)上 运行。
我的代码如下:
import tensorflow as tf
def get_and_pad_imdb_dataset(num_words=10000, maxlen=None, index_from=2):
from tensorflow.keras.datasets import imdb
# Load the reviews
(x_train, y_train), (x_test, y_test) = imdb.load_data(path='imdb.npz',
num_words=num_words,
skip_top=0,
maxlen=maxlen,
start_char=1,
oov_char=2,
index_from=index_from)
x_train = tf.keras.preprocessing.sequence.pad_sequences(x_train,
maxlen=None,
padding='pre',
truncating='pre',
value=0)
x_test = tf.keras.preprocessing.sequence.pad_sequences(x_test,
maxlen=None,
padding='pre',
truncating='pre',
value=0)
return (x_train, y_train), (x_test, y_test)
def get_imdb_word_index(num_words=10000, index_from=2):
imdb_word_index = tf.keras.datasets.imdb.get_word_index(
path='imdb_word_index.json')
imdb_word_index = {key: value + index_from for
key, value in imdb_word_index.items() if value <= num_words-index_from}
return imdb_word_index
(x_train, y_train), (x_test, y_test) = get_and_pad_imdb_dataset(maxlen=25)
imdb_word_index = get_imdb_word_index()
max_index_value = max(imdb_word_index.values())
embedding_dim = 16
model = tf.keras.Sequential([
tf.keras.layers.Embedding(input_dim = max_index_value+1, output_dim = embedding_dim, mask_zero = True),
tf.keras.layers.LSTM(units = 16),
tf.keras.layers.Dense(units = 1, activation = 'sigmoid')
])
model.compile(loss = 'binary_crossentropy', metrics = ['accuracy'], optimizer = 'adam')
history = model.fit(x_train, y_train, epochs=3, batch_size = 32)
该代码在 Google Colab 上运行得非常好,我很确定它是正确的。然而,在我的 Apple Silicon 芯片上,它卡在了第一个 epoch 上,似乎根本没有进步。
这是我从日志中得到的全部信息:
Epoch 1/3
2022-02-15 22:10:34.093907: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:112] Plugin optimizer for device_type GPU is enabled.
我已经将我的 Apple Silicon 芯片与其他 tensorflow 模型一起使用,没有任何问题。
有没有办法 debug/see 在 fit 调用期间我的 apple silicon 上的 tensorflow 发生了什么?有谁知道这可能是问题所在?如果可能,有人可以在另一台 M1 机器上测试这段代码吗?
TensorFlow is not supported by M1 silicon.
安装它时可以使用某些功能,但任何在后台使用任何 C 的东西都无法使用。有一些解决方法,例如 installing with MiniForge,但您总会遇到一些问题。
将 tensorflow-macos
更新为 2.8 并将 tensorflow-metal
更新为 0.4 解决了问题。
这似乎是一个影响以前 tensorflow 版本的常见错误,尤其是在处理与文本相关的 layers/model 时。例如,在我的例子中,问题是 Embedding
层。
已打开类似问题 here,已通过更新 tensorflow 修复。
我正在使用 Tensorflow 中的 imdb 数据集构建一个非常简单的 LSTM 网络,特别是在 Apple Silicon 芯片(最大 M1)上 运行。
我的代码如下:
import tensorflow as tf
def get_and_pad_imdb_dataset(num_words=10000, maxlen=None, index_from=2):
from tensorflow.keras.datasets import imdb
# Load the reviews
(x_train, y_train), (x_test, y_test) = imdb.load_data(path='imdb.npz',
num_words=num_words,
skip_top=0,
maxlen=maxlen,
start_char=1,
oov_char=2,
index_from=index_from)
x_train = tf.keras.preprocessing.sequence.pad_sequences(x_train,
maxlen=None,
padding='pre',
truncating='pre',
value=0)
x_test = tf.keras.preprocessing.sequence.pad_sequences(x_test,
maxlen=None,
padding='pre',
truncating='pre',
value=0)
return (x_train, y_train), (x_test, y_test)
def get_imdb_word_index(num_words=10000, index_from=2):
imdb_word_index = tf.keras.datasets.imdb.get_word_index(
path='imdb_word_index.json')
imdb_word_index = {key: value + index_from for
key, value in imdb_word_index.items() if value <= num_words-index_from}
return imdb_word_index
(x_train, y_train), (x_test, y_test) = get_and_pad_imdb_dataset(maxlen=25)
imdb_word_index = get_imdb_word_index()
max_index_value = max(imdb_word_index.values())
embedding_dim = 16
model = tf.keras.Sequential([
tf.keras.layers.Embedding(input_dim = max_index_value+1, output_dim = embedding_dim, mask_zero = True),
tf.keras.layers.LSTM(units = 16),
tf.keras.layers.Dense(units = 1, activation = 'sigmoid')
])
model.compile(loss = 'binary_crossentropy', metrics = ['accuracy'], optimizer = 'adam')
history = model.fit(x_train, y_train, epochs=3, batch_size = 32)
该代码在 Google Colab 上运行得非常好,我很确定它是正确的。然而,在我的 Apple Silicon 芯片上,它卡在了第一个 epoch 上,似乎根本没有进步。
这是我从日志中得到的全部信息:
Epoch 1/3
2022-02-15 22:10:34.093907: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:112] Plugin optimizer for device_type GPU is enabled.
我已经将我的 Apple Silicon 芯片与其他 tensorflow 模型一起使用,没有任何问题。
有没有办法 debug/see 在 fit 调用期间我的 apple silicon 上的 tensorflow 发生了什么?有谁知道这可能是问题所在?如果可能,有人可以在另一台 M1 机器上测试这段代码吗?
TensorFlow is not supported by M1 silicon.
安装它时可以使用某些功能,但任何在后台使用任何 C 的东西都无法使用。有一些解决方法,例如 installing with MiniForge,但您总会遇到一些问题。
将 tensorflow-macos
更新为 2.8 并将 tensorflow-metal
更新为 0.4 解决了问题。
这似乎是一个影响以前 tensorflow 版本的常见错误,尤其是在处理与文本相关的 layers/model 时。例如,在我的例子中,问题是 Embedding
层。
已打开类似问题 here,已通过更新 tensorflow 修复。