首页 > 解决方案 > Tensorflow 多 GPU 训练 (A100),不稳定的利用率。如何解决?

问题描述

目前,我正在使用具有镜像策略的 4xA100 显卡的 Nvidia DGX 工作站上为医疗应用训练 CNN。CPU 是 AMD EPYC 7742,工作站有 512 GB 的 RAM。

niftii 图像被切片,然后存储为TFRecords。有了这些,我将tf.data.datasetsnum_parallel_reads=tf.data.AUTOTUNE并行创建。到特征的映射与num_parallel_calls=tf.data.AUTOTUNE并行完成)。数据集被打乱、批处理和预取。(不知何故,缓存确实使训练减慢了 1.5-2 倍)

我现在用nividia-smi -l观察到的奇怪行为:

第一个输出类似于:

GPU1:0% 利用率
GPU2:100% 利用率
GPU3:100% 利用率
GPU4:100% 利用率

第二个输出是:

GPU1:100% 利用率
GPU2:0% 利用率
GPU3:0% 利用率
GPU4:0% 利用率

第三个输出类似于:

GPU1:40% 利用率
GPU2:94% 利用率
GPU3:78% 利用率
GPU4:100% 利用率

然后它以略有不同的数字重复。

有没有什么解决方案,我可以几乎一直 100% 使用我的显卡,并且不浪费一些计算资源?

批量大小已经尽可能高。

数据加载器基本上是:

   def get_dataset(filename):
      dataset = tf.data.TFRecordDataset(filename, num_parallel_reads=tf.data.AUTOTUNE)
      dataset = dataset.map(
                    parse_tfr_element, num_parallel_calls = tf.data.AUTOTUNE)
   return dataset

使用根据我的需要量身定制的 Tensorflow 参考中的 parse_tfr_element 函数。

dataset_train = get_TFRecord.get_dataset(train_file_list)
dataset_train = dataset_train.shuffle(buffer_size = steps_train)
dataset_train = dataset_train.batch(BATCH_SIZE)
dataset_train = dataset_train.repeat()
dataset_train = dataset_train.prefetch(tf.data.AUTOTUNE)

所以这是非常基础的。

标签: pythontensorflowdeep-learningneural-networkmulti-gpu

解决方案


推荐阅读