2

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

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

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

我知道 CUDA_VISIBLE_DEVICES 选项,但这无济于事,因为我想在两个设备上同时训练。另一个建议调用 GC.gc() 和 CuArrays.clearpool() 第二个调用会引发未知函数错误,并且似乎不再包含在 CuArray 包中。我目前正在测试的第一个,但不完全是我需要的。是否有可能使用 CuArrays 和 Julia 限制 GPU 上的 RAM 分配?在此先感谢我的 Batchsize 是 100,一批应该少于 1MB...

4

1 回答 1

2

目前没有这样的功能。我很快搞定了一些东西,请参阅https://github.com/JuliaGPU/CuArrays.jl/pull/379,您可以使用它来定义CUARRAYS_MEMORY_LIMIT并将其设置为分配器不会超过的字节数。请注意,这可能会显着增加内存压力,CuArrays.jl 内存分配器目前尚未针对这种情况进行优化(尽管它是我对 Julia GPU 基础架构的首要任务之一)。

于 2019-07-21T22:29:28.497 回答