tensorflow - 是否可以使用 tensorflow 在不同机器上精确复制训练?
问题描述
我尝试了以下实验:
- 相同的操作系统
- 同一个gpu驱动
- 相同的 cuda 驱动程序
- 相同的 cudnn/cupti 驱动程序
- 相同的python版本
- 相同的依赖项(包括 tensorflow 版本)
- 不同的机器有不同的gpu
当然,我的脚本以以下代码段开头:
os.environ['TF_DETERMINISTIC_OPS'] = '1'
tf.random.set_seed(0)
random.seed(0)
np.random.seed(0)
当脚本被多次执行时,单台机器总是给出完全相同的结果,但是这个结果在不同的机器上会略有不同。
令人难以置信的是,我在训练之前手动检查了初始化权重和图像数据生成器输出,它们在不同机器上完全相同。它看起来不像是随机生成器问题。
有机会用不同的硬件复制训练结果吗?
谢谢
更新:也尝试过
os.environ['PYTHONHASHSEED'] = '0'
os.environ['TF_DETERMINISTIC_OPS'] = '1'
os.environ['TF_CUDNN_DETERMINISTIC'] = '1'
tf.random.set_seed(0)
random.seed(0)
np.random.seed(0)
tf.config.threading.set_inter_op_parallelism_threads(1)
tf.config.threading.set_intra_op_parallelism_threads(1)
相同的结果
解决方案
推荐阅读
- or-tools - 如何使用 or-tools 在 bool 数组中制作 K 个不同的元素?
- microservices - 微服务聚合器服务 BFF
- python - 使用索引号同时更改 pandas 数据框中的多个列名(不是所有列名)
- android - 使用 Mircosoft 图形 REST API 进行自动发现
- html - href vs 链接反应?JS 不是基于 HTML 标签加载的
- php - 从一个表中获取数组数据并插入到另一个表中
- python - 如何从嵌套元组列表中生成批量数据?
- javascript - Javascript用0替换最后一个数字而不是用指数符号表示数字
- sql - 基于某些内容的总和表
- java - 通过 jni 从 Java 调用时,C++ iostreams 不起作用