gpt4 book ai didi

python - 如何预测 np.linalg.inv 的内存需求?

转载 作者:行者123 更新时间:2023-12-05 05:48:51 25 4
gpt4 key购买 nike

我正在 HPC 上反转非常大的矩阵。显然,这对 RAM 有很高的要求。为了避免内存不足错误,作为临时解决方案,我一直在请求大量内存 (TB)。我如何使用 numpy.linalg.inv 根据输入矩阵大小预测矩阵求逆所需的内存,以更高效地运行 HPC 作业?

最佳答案

TL;DR:(n,n) 类型的输入矩阵最多 O(32 n²) 字节float64.

numpy.linalg.inv调用 _umath_linalg.inv internally无需执行任何复制或创建任何额外的大临时数组。此内部函数本身调用 LAPACK 函数 internally .据我了解,Numpy 的包装层负责分配输出 Numpy 矩阵。 C 代码本身分配一个临时数组(参见:here)。 Numpy 似乎没有为此操作执行其他数组分配。有几个 Lapack 实现,因此通常无法知道 Lapack 调用请求了多少内存。但是,据我所知,几乎所有 Lapack 实现都不会在您的后台分配数据:调用者必须这样做(尤其是对于此处使用的 sgesv/dgesv)。假设 (n, n) 输入矩阵是 float64 类型并且 FORTRAN 整数是 4 字节的(在大多数平台上应该是这种情况,尤其是在 Windows 上),那么实际所需的内存(由输入矩阵、输出矩阵和临时矩阵占用)是 8 n² + 8 n² + (8 n² + 8 n² + 4 n) 字节,等于(32 n + 4) n 或简单的 O(32 n²) 字节。请注意,临时缓冲区是最大大小,可能无法完全写入,这意味着操作系统只能物理映射(即保留在物理 RAM 中)分配空间的一小部分。这就是我的(Linux)机器上使用 OpenBLAS 时发生的情况:只有 24 n² 字节似乎是实际映射的。对于 float32 矩阵,它是空间的一半。

关于python - 如何预测 np.linalg.inv 的内存需求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70746660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com