使用CuArrays在Julia中限制GPU内存

时间:2019-07-16 23:01:05

标签: julia julia-gpu

我对julia还是很陌生,我目前正在尝试一些具有递归结构的深度卷积网络。我正在使用GPU训练网络 CuArrays(CUDA版本9.0)。

我有两个独立的GPU,我用不同的数据集启动了两个实例。 经过一些培训后不久,两个julia实例都分配了所有可用的内存(2 x 11GB),我什至无法使用CuArrays独自启动另一个实例(内存分配错误)。由于这是在许多人共享的服务器上运行的,因此这成为一个很大的问题。

我假设使用所有可用内存来尽可能快地进行训练是正常的行为。但是,在这种情况下,我想限制可以分配给同时运行两个实例的内存,并且不要阻止我或其他人使用GPU。 令我惊讶的是,我发现的信息很少。

我知道CUDA_VISIBLE_DEVICES选项,但这无济于事,因为我想同时在两个设备上进行训练。 另一个建议调用GC.gc()和CuArrays.clearpool() 第二次调用引发未知函数错误,并且似乎不在CuArray软件包内。我正在测试的第一个,但不是我真正需要的。是否有可能使用CuArrays和Julia来限制GPU上的RAM分配? 提前致谢 我的Batchsize是100,而一个批次应小于1MB ...

1 个答案:

答案 0 :(得分:0)

当前没有此类功能。我迅速整理了一下内容,请参阅https://github.com/JuliaGPU/CuArrays.jl/pull/379,您可以使用它来定义CUARRAYS_MEMORY_LIMIT并将其设置为分配器不会超出的字节数。请注意,这可能会显着增加内存压力,而当前尚未优化CuArrays.jl内存分配器的情况(尽管这是我使用Julia GPU基础架构的首要任务之一)。