Python Tensorflow-GPU专用与共享内存

Python Tensorflow-GPU专用与共享内存,python,memory,tensorflow,gpu,Python,Memory,Tensorflow,Gpu,Tensorflow是只使用专用GPU内存,还是也可以使用共享内存 我还运行了以下命令: 从tensorflow.python.client导入设备库 设备库列表本地设备 [名称:“/设备:CPU:0” 设备类型:“CPU” 内存限制:268435456 名称:“/设备:GPU:0” 设备类型:“GPU” 内存限制:112128819 这些“内存限制”是什么?268435456和112128819 这就是我要说的——当我在Win10上运行TF时,共享内存总是为零,但是如果我的批处理大小太大,我会

Tensorflow是只使用专用GPU内存,还是也可以使用共享内存

我还运行了以下命令:

从tensorflow.python.client导入设备库

设备库列表本地设备

[名称:“/设备:CPU:0” 设备类型:“CPU” 内存限制:268435456

名称:“/设备:GPU:0” 设备类型:“GPU” 内存限制:112128819

这些“内存限制”是什么?268435456和112128819

这就是我要说的——当我在Win10上运行TF时,共享内存总是为零,但是如果我的批处理大小太大,我会得到ResourceExpusterError。看起来共享内存从未被使用过


根据我的经验,Tensorflow仅使用专用GPU内存,如下所述。当时,memory_limit=最大专用内存-当前专用内存使用量(在Win10任务管理器中观察)

输出:

physical_device_desc: "device: XLA_CPU device"
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 2196032718
为了验证这一点,我尝试将其用于单个任务(Tensorflow 2 benchmark from),它在使用Tensorflow 2.3.0的GTX1060 3GB上给出了“资源耗尽”错误,如下所示

2021-01-20 01:50:53.738987: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1716] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce GTX 1060 3GB computeCapability: 6.1
coreClock: 1.7085GHz coreCount: 9 deviceMemorySize: 3.00GiB deviceMemoryBandwidth: 178.99GiB/s

Limit:                      2196032718
InUse:                      1997814016
MaxInUse:                   2155556352
NumAllocs:                        1943
MaxAllocSize:                551863552
Reserved:                            0
PeakReserved:                        0
LargestFreeBlock:                    0

2021-01-20 01:51:21.393175: W tensorflow/core/framework/op_kernel.cc:1767] OP_REQUIRES failed at conv_ops.cc:539 : Resource exhausted: OOM when allocating tensor with shape[64,256,56,56] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
Traceback (most recent call last):
我也尝试过在多个小任务中使用相同的方法。它尝试使用共享GPU内存来执行多个具有不同Juypter内核的任务,但新任务最终失败

对于具有两个类似异常模型的示例:

任务1:运行时没有错误

任务2:失败,出现以下错误

UnknownError:  Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[node xception/block1_conv1/Conv2D (defined at <ipython-input-25-0c5fe80db9f1>:3) ]] [Op:__inference_predict_function_5303]

Function call stack:
predict_function
Unknown错误:无法获取卷积算法。这可能是因为cuDNN未能初始化,因此请尝试查看上面是否打印了警告日志消息。
[[节点异常/block1_conv1/Conv2D(定义于:3)][Op:uu推理_预测_函数_5303]
函数调用堆栈:
预测函数
故障时的GPU内存使用情况(注意任务2开始时共享内存的使用情况)


If同时使用专用GPU内存和共享内存()。此处描述了这些值,我只能观察专用内存的使用情况(在nvidia smi和Windows任务管理器中)但我看不出它是否使用了共享。我如何确认?你是说这个吗?这个共享内存是由CUDA内核使用的,就像主机端的c malloc使用的内存一样。我不确定这是否是为了回答问题,无论如何,这个地方是为了回答问题,而不是评论或无关的讨论。
UnknownError:  Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[node xception/block1_conv1/Conv2D (defined at <ipython-input-25-0c5fe80db9f1>:3) ]] [Op:__inference_predict_function_5303]

Function call stack:
predict_function