julia - 使用 CuArrays 限制 Julia 中的 GPU 内存

标签 julia julia-gpu cuda-arrays

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

最佳答案

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

关于julia - 使用 CuArrays 限制 Julia 中的 GPU 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066480/

相关文章:

shell - Julia 中的多行命令

julia - 在 Julia 中加速 `using Distributions`

printing - 在 Julia 上同时写入多个文件

asynchronous - Julia:在多个 GPU 上进行并行 CUSPARSE 计算

gpu - Julia 中的 "finalize"意味着什么?

cuda - 如何在 CUDA 中创建和使用一维分层纹理

cuda - 使用 Vulkan VkImage 作为 CUDA cuArray

optimization - 提高以下计算 softmax 导数的代码性能的技巧