在tf.estimator中配置MirroredStrategy多GPU训练时出现错误求助
嘿,我来帮你搞定TensorFlow 1.7多GPU训练的这个问题!结合你给出的环境信息,咱们从几个常见的坑和解决办法入手:
可能的问题点与解决方案
1. 确认MirroredStrategy的正确初始化方式
TF1.7里的tf.contrib.distribute.MirroredStrategy还处于早期的contrib试验阶段,直接默认初始化可能会出现设备检测异常。建议你显式指定要使用的GPU设备,避免自动检测出错:
# 比如你有2块GPU,就明确指定设备路径 strategy = tf.contrib.distribute.MirroredStrategy(devices=["/gpu:0", "/gpu:1"])
2. 检查RunConfig与Strategy的结合是否正确
在TF1.7中,要把分布式策略传入RunConfig,需要使用distribute参数(TF1.10之后才改名为train_distribute),确保你的代码是这样写的:
run_config = tf.estimator.RunConfig( distribute=strategy, model_dir="./your_model_save_path", save_checkpoints_steps=1000 ) # 然后把config传入Estimator estimator = tf.estimator.Estimator( model_fn=your_custom_model_fn, config=run_config, params=your_training_params )
3. 模型函数要适配分布式环境
你的自定义模型函数不能手动指定设备,也不要做本地变量的强制初始化,要让MirroredStrategy自动处理变量的镜像复制和设备分配。比如不要在模型函数里写with tf.device("/gpu:0"):这类代码,交给策略来调度即可。
4. 验证源码编译的TensorFlow是否正确支持GPU
因为你是源码编译的TF1.7,要确认编译时开启了CUDA支持:
- 执行
tf.test.is_gpu_available(),返回True才说明GPU支持正常 - 检查CUDA和cuDNN版本是否适配TF1.7:TF1.7要求CUDA9.0 + cuDNN7.0,版本不匹配会导致各种设备相关的报错
5. 输入数据批次要适配GPU数量
训练的批次大小最好设置为GPU数量的整数倍,这样每个GPU能分到等量的样本,避免负载不均衡。比如2块GPU的话,批次大小设为64、128这类偶数。
如果以上方法还没解决问题,建议你把完整的错误栈信息贴出来(你现在的错误栈截断了),比如具体的异常类型和报错信息,这样能更精准地定位问题~
内容的提问来源于stack exchange,提问作者user4491955
相关产品推荐
相关产品推荐

