python - Tensorflow 多 GPU 训练 (A100),不稳定的利用率。如何解决?
问题描述
目前,我正在使用具有镜像策略的 4xA100 显卡的 Nvidia DGX 工作站上为医疗应用训练 CNN。CPU 是 AMD EPYC 7742,工作站有 512 GB 的 RAM。
niftii 图像被切片,然后存储为TFRecords。有了这些,我将tf.data.datasets与num_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)
所以这是非常基础的。
解决方案
推荐阅读
- java - 没有互联网连接时显示刷新页面按钮
- python - 项目之前出现在列表中的次数
- windows - 显示(Surface Pro 4)在使用 Eclipse 之后/期间闪烁
- c++ - 如何优化代码以返回最接近给定整数的数字,而不存在于给定列表中?
- tensorflow - 在分类 AI 问题中训练非活动类
- r - 分组时保留列
- php - 我通过这里 api 请求两个 lat long 的路线时收到了一些杂乱无章的文本
- python - 从服务器(FLASK、HTML、JQUERY)更新值时重新加载变量值
- elasticsearch - Elasticsearch 中命中的条件排序
- c# - 将地址映射到 Windows 时区