所以我在一台带有GeForce GTX 980
显卡的Windows 10机器上安装了TensorFlow的GPU版本.
不可否认,我对显卡知之甚少,但据dxdiag说它确实有:
4060MB
专用存储器(VRAM)和;
8163MB
共享内存
总计约12224MB
.
然而,我注意到,这种"共享"记忆似乎毫无用处.当我开始训练模型时,VRAM将填满,如果内存需求超过这些4GB
,TensorFlow将因"资源耗尽"错误消息而崩溃.
当然,我可以通过选择适当低的批量大小来防止达到这一点,但我想知道是否有办法利用这些"额外" 8GB
的RAM,或者如果是这样,TensorFlow需要内存专用.
TensorFlow总是(预)在我的显卡上分配所有空闲内存(VRAM),这是好的,因为我希望我的模拟在我的工作站上尽可能快地运行.
但是,我想记录TensorFlow真正使用的内存(总之).另外,如果我还可以记录单个张量器使用的内存量,那将是非常好的.
此信息对于衡量和比较不同ML/AI架构所需的内存大小非常重要.
有小费吗?
我正在使用Tensorflow中的LSTM-RNN训练一些音乐数据,并遇到了一些我不理解的GPU内存分配问题:我遇到一个OOM,而实际上似乎还有足够的VRAM可用.一些背景:我正在研究Ubuntu Gnome 16.04,使用的是GTX1060 6GB,Intel Xeon E3-1231V3和8GB RAM.所以现在首先是我能理解的错误消息的一部分,并且我将在最后为可能要求它提供帮助的任何人添加整个错误消息:
I tensorflow/core/common_runtime/bfc_allocator.cc:696] 8 Chunks of size 256 totalling 2.0KiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 1 Chunks of size 1280 totalling 1.2KiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 5 Chunks of size 44288 totalling 216.2KiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 5 Chunks of size 56064 totalling 273.8KiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 4 Chunks of size 154350080 totalling 588.80MiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 3 Chunks of size 813400064 totalling 2.27GiB I tensorflow/core/common_runtime/bfc_allocator.cc:696] 1 Chunks of size 1612612352 totalling 1.50GiB I tensorflow/core/common_runtime/bfc_allocator.cc:700] Sum Total of in-use chunks: 4.35GiB I tensorflow/core/common_runtime/bfc_allocator.cc:702] …
我正在尝试估计完全连接的模型所需的 VRAM,而无需在 pytorch 中构建/训练模型。
我非常接近这个公式:
# params = number of parameters
# 1 MiB = 1048576 bytes
estimate = params * 24 / 1048576
Run Code Online (Sandbox Code Playgroud)
这个示例模型有 384048000 个参数,但我已经在具有不同参数大小的不同模型上进行了测试。
结果非常准确。但是,该估计仅考虑 pytorch 会话 VRAM,而不考虑驱动程序/cuda 缓冲区 VRAM 量。以下是估计值(使用公式)与经验结果(在构建/训练模型后使用 nvidia-smi)
ESTIMATE BEFORE EMPIRICAL TEST:
VRAM estimate = 8790.1611328125MiB
EMPIRICAL RESULT AFTER BUILDING MODEL:
GPU RAM for pytorch session only (cutorch.max_memory_reserved(0)/1048576): 8466.0MiB
GPU RAM including extra driver buffer from nvidia-smi: 9719MiB
Run Code Online (Sandbox Code Playgroud)
关于如何估计 nvidia-smi 输出中显示的额外 VRAM 有什么想法吗?
我想知道当前处理VRAM资源分配的nvidia / AMD实现。
我们已经知道,当系统RAM已满时,操作系统会使用交换/虚拟内存,那么当涉及VRAM时,交换相当于什么?它们会退回到系统RAM或硬盘上吗?
我认为回退到系统RAM是合理的,但是从我的经验来看,视频游戏在视频存储空间不足时会严重落后(典型FPS的1/20),这使我怀疑它们正在使用系统RAM,因为我认为RAM不会使游戏滞后这么慢。
简而言之,我想知道当前的实现是什么以及导致游戏在内存不足的情况下滞后的最大瓶颈是什么。
我正在尝试使用 aitextgen 在数据集上微调 774M gpt 2。不幸的是,无论我做什么,训练都会失败,因为只有 80 MB 的 vram 可用。如何在不重新启动运行时的情况下清除 vram,并可能防止 vram 已满?
vram ×6
tensorflow ×3
memory ×2
cudnn ×1
fine-tuning ×1
gpt-2 ×1
gpu ×1
graphics ×1
nvidia-smi ×1
python ×1
pytorch ×1