tensorflow - Colab TPU 错误 InvalidArgumentError:无法分配设备进行操作
问题描述
在 google colab 中使用 TPU 时,出现以下错误
InvalidArgumentError:无法为操作 Adam/iterations/IsInitialized/VarIsInitializedOp 分配设备:{{node Adam/iterations/IsInitialized/VarIsInitializedOp}} 已明确分配给 /job:worker/replica:0/task:0/device:TPU:0但可用的设备是 [ /job:localhost/replica:0/task:0/device:CPU:0, /job:localhost/replica:0/task:0/device:XLA_CPU:0 ]。确保设备规范引用了有效的设备。[[亚当/迭代/IsInitialized/VarIsInitializedOp]]
TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']
resolver = tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)
tf.contrib.distribute.initialize_tpu_system(resolver)
strategy = tf.contrib.distribute.TPUStrategy(resolver)
with strategy.scope():
# Setup the model inputs / outputs
model = Model(inputs=[inputs_img, inputs_mask], outputs=outputs)
# Compile the model
model.compile(
optimizer = Adam(lr=lr),
loss=self.loss_total(inputs_mask)
)
解决方案
来回移动keras.models
并keras.layers
为我解决了这个问题tf.keras.models
。tf.keras.layers
还要确保您没有使用本地存储。请改用 GCS 存储桶。
推荐阅读
- javascript - Vue, fetch 返回空数组
- haskell - 使用只有两个参数的 foldr
- php - 如何将特定查询转换为 Laravel 查询语法
- java - java-如何在使用链表实现的堆栈中实现弹出操作?
- java - 如何为具有多个存储库的 IntelliJ 项目编写 Dockerfile?
- flutter - Flutter 和 java sdk
- java - Java中基于等式生成Hash码
- node.js - 在中间件中使用 multer 并将文件对象传递给下一个
- reference - 循环变量之前的`&`的目的是什么?
- ruby-on-rails - Trix - 未定义的方法“to_key”