我对 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...