使用 rapids.ai 时如何确定内存统计信息?
How do you determine memory stats while using rapids.ai?
我正在使用 rapids.ai 的 python 库,我开始怀疑的关键问题之一是:如何以编程方式检查内存分配?我知道我可以使用 nvidia-smi
查看一些总体高级统计数据,但我特别想知道:
1) 有没有一种简单的方法可以找到 cudf 数据框(和其他 rapids 对象)的内存占用?
2) 有没有办法确定可用的设备内存?
我确信 C++ 程序员有很多方法可以获得这些细节,但我希望找到一个答案让我留在 Python。
1) 用法
所有 cudf
对象都应具有 .memory_usage()
方法:
import cudf
x = cudf.DataFrame({'x': [1, 2, 3]})
x_usage = x.memory_usage(deep=True)
print(x_usage)
输出:
x 24
Index 0
dtype: int64
这些值反映了使用的 GPU 内存。
2) 剩余
您可以使用 pynvml
:
读取剩余的可用 GPU 显存
import pynvml
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0) # Need to specify GPU
mem = pynvml.nvmlDeviceGetMemoryInfo(handle)
mem.free, mem.used, mem.total
(33500299264, 557973504, 34058272768)
大多数 GPU 操作需要 O(N) 的暂存缓冲区,因此如果您以 DataFrame
s 或 Series
大于您剩余的可用内存。
我正在使用 rapids.ai 的 python 库,我开始怀疑的关键问题之一是:如何以编程方式检查内存分配?我知道我可以使用 nvidia-smi
查看一些总体高级统计数据,但我特别想知道:
1) 有没有一种简单的方法可以找到 cudf 数据框(和其他 rapids 对象)的内存占用?
2) 有没有办法确定可用的设备内存?
我确信 C++ 程序员有很多方法可以获得这些细节,但我希望找到一个答案让我留在 Python。
1) 用法
所有 cudf
对象都应具有 .memory_usage()
方法:
import cudf
x = cudf.DataFrame({'x': [1, 2, 3]})
x_usage = x.memory_usage(deep=True)
print(x_usage)
输出:
x 24
Index 0
dtype: int64
这些值反映了使用的 GPU 内存。
2) 剩余
您可以使用 pynvml
:
import pynvml
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0) # Need to specify GPU
mem = pynvml.nvmlDeviceGetMemoryInfo(handle)
mem.free, mem.used, mem.total
(33500299264, 557973504, 34058272768)
大多数 GPU 操作需要 O(N) 的暂存缓冲区,因此如果您以 DataFrame
s 或 Series
大于您剩余的可用内存。