保存的多GPU训练模型加载到单GPU;结果不一致

时间:2018-03-18 18:57:05

标签: python-3.x tensorflow keras multi-gpu

当将在多个GPU上训练的已保存模型加载到单个GPU模型中时,我看到了奇怪的结果。我在共享环境中运行,所以我正在接受4 GPU的培训,但是使用单个GPU运行测试。

我所看到的是,在(i)单个GPU和(ii)4个GPU上运行时,测试将返回实质上不同的结果。例如,以下是最终选择的模型的验证步骤的输出(我使用的是早期停止的多GPU模型检查点):

Epoch 9:: Sensitivity: 0.8317 - Specificity: 0.9478 - Avg. Sn/Sp
0.8897 - Acc: 0.9289 - PPV: 0.7555 - NPV: 0.9667 - F1: 0.7918 - ROC AUC: 0.8897 - Matrix: [1016   56   35  173]

以下是使用4个GPU对验证数据进行模型测试时的结果(使用tf.device在CPU上加载模型并调用multi_gpu_model):

   Metric      _base
------------- -------
     acc       0.93  
     auc       0.881
     f1        0.804
     ppv       0.804
     npv       0.958
 sensitivity   0.804
 specificity   0.958

Confusion matrices [tn, fp, fn, tp]
-----------------------------------
_base : [1017   45   45  185]

以下是仅使用1个GPU对相同数据运行相同测试时的结果(只需使用load_model加载模型);这一直在产生更好的分类器:

       Metric      _base
    ------------- -------
         acc       0.974
         auc       0.946
         f1        0.92
         ppv       0.936
         npv       0.982
     sensitivity   0.905
     specificity   0.988
Confusion matrices [tn, fp, fn, tp]
-----------------------------------
_base : [1069   13   20  190]

软件版本:python 3.5.2,keras 2.1.3,tensorflow 1.5.0(我在打开问题之前构建当前版本环境)

硬件:4 x Tesla P100,CUDA 9.0.176,CudNN 7

有没有人知道发生了什么,更重要的是,我如何重现效果?

2 个答案:

答案 0 :(得分:0)

在使用最新的软件版本重建我的virtualenv之后,我再也无法复制这个了。我与其中一位技术支持人员进行了交谈,他们对于张量流升级和专用构建进行了嘟a。我把它归结为小鬼。

答案 1 :(得分:0)

在加载模型之前编写代码os.environ["CUDA_VISIBLE_DEVICES"] = '0',这样它将不会使用多个GPU