MultiGPU在内存分配方面如何扩展?

2024-04-28 21:54:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一台规格如下的电脑:

  • 处理器:AMD Ryzen Threadripper 2990wx(32核)
  • 内存:32GB
  • 图形卡:(GPU:1)GTX1080TI(11GB),(GPU:0)GTX1070(8GB)
  • SSD:2TB三星Evo 890

我的问题是,当我在大约60k图像(GPU:1)上使用Keras运行我的训练程序时,程序加载图像,数据矩阵为12922.20MB

screenshot of program

在此之后,程序一分钟内什么也不做,会自动终止。同样的代码似乎在GPU:1上进行训练,并且可以很好地处理10k图像

  1. 这可能是因为我的GPU:1只能存储11GB的数据,而数据大小约为12GB
  2. 并行GPU:1和GPU:0能解决我的问题吗?如果是,它是16GB的VRAM(8+8)还是19GB(11+8)
  3. 我做错什么了吗?我所指的职位是:https://www.pyimagesearch.com/2018/09/10/keras-tutorial-how-to-get-started-with-keras-deep-learning-and-python,稍作修改

我确实尝试过在线搜索等等,但是我找不到/不理解关于在使用多GPU和Keras时如何分配/扩展GPU内存的很多信息

任何帮助都将不胜感激


Tags: 数据内存图像程序gpu处理器keras电脑
1条回答
网友
1楼 · 发布于 2024-04-28 21:54:20

我首先建议您在单个GPU上进行训练时检查内存使用情况;我怀疑您的数据集没有加载到GPU内存中,而是加载到RAM中

您可以尝试设置:

一,

  import os
  #Enable system to see only one of the video cards
  os.environ["CUDA_VISIBLE_DEVICES"] = "0"/"1" 

检查以查看确切的映射(tensorflow可以看到您的GPU):

tf.config.list_physical_devices('GPU') 
  1. 现在验证在这种情况下使用了多少VRAM:

然后,在终端中,您可以使用nvidia-smi检查分配了多少GPU内存;同时,使用watch -n K nvidia-smi

  1. 使用多GPU时,请确保使用tf.distribute.MirroredStrategy()并声明模型创建+拟合逻辑,如下所示:

     strategy = tf.distribute.MirroredStrategy()
     print('Number of devices: {}'.format(strategy.num_replicas_in_sync))
    
     # Open a strategy scope.
     with strategy.scope():
       # Everything that creates variables should be under the strategy scope.
       # In general this is only model construction & `compile()`.
       model = Model(...)
       model.compile(...)
    

超出战略范围

model.fit(train_dataset, validation_data=val_dataset, ...)

model.evaluate(test_dataset)

相关问题 更多 >