Tensorflow GPU 错误:Dst 张量未初始化

问题描述 投票:0回答:1

这是我第一次在 GPU 上训练模型。我正在使用张量流。我收到错误:InternalError:无法将输入张量从 /job:localhost/replica:0/task:0/device:CPU:0 复制到 /job:localhost/replica:0/task:0/device:GPU:0为了运行AssignVariableOp:Dst 张量未初始化。 [操作:分配变量操作]

我尝试过减少批量大小、使用 tf-nightly 等解决方案,但没有成功。我使用的是 Nvidia GeForce GTX 1080 8 Gb。我正在尝试使用 Keras 应用程序(Xception)训练图像分类模型。

tensorflow gpu
1个回答
0
投票

注意:您可以在官方指南中获取有关每项建议的更多信息 - https://www.tensorflow.org/guide。我总是觉得这真的很有帮助

处理内存问题确实具有挑战性,您可以尝试建议的方法之一来识别和解决问题。

尝试进一步减小批处理大小但我发现,由于您已经在尝试将批处理大小设置为 1,因此请确保代码的其他部分没有增加批处理大小或增加内存负载。

使用混合精度训练您已经使用混合精度与mixed_ precision.set_global_policy('mixed_float16')。确保您的模型和优化器与混合精度兼容。如果遇到问题,请考虑暂时禁用混合精度,看看它是否会影响内存使用。

训练前清除 GPU 内存您已经在使用 tf.keras.backend.clear_session() 来清除会话。您可以在训练代码开始时调用此函数,以在加载模型之前释放内存。

限制 GPU 内存增长您已经通过以下方式设置内存增长:

tf.config.experimental.set_memory_growth(gpu, True) 另一个好的方法是确保这是在任何模型处理之前执行的代码。

检查内存泄漏确保您的数据集没有将所有图像加载到内存中。检查 return_dataset_image_embedding 函数以确保它只处理一批图像。

调整您当前使用的预取或缓冲区大小:

patch_dataset = patch_dataset.prefetch(buffer_size=prefetch_buffer_size) 考虑将 prefetch_buffer_size 增加到更大的数字,以实现更好的数据管道性能。

分析内存使用情况使用 TensorFlow 分析工具来监控内存使用情况。您可以使用 TensorBoard 启用分析。

正确使用 tf.data 一个示例 - 如果您的数据集适合内存,则在 .shuffle() 之后使用 .cache(),这可能会提高性能。

一些流行的提示:

使用 nvidia-smi 监控训练时的 GPU 内存使用情况。 尝试合并较小的输入图像 VGG16 需要 224x224 输入,您仍然可以尝试较小的尺寸。 如果这有帮助,请告诉我,否则我可以帮助您修复代码。

© www.soinside.com 2019 - 2024. All rights reserved.