You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何获取系统总固定内存?PyTorch pin_memory异常排查

问题解答

1. 如何获取系统总固定内存大小?

Linux系统中,被固定(页锁定,无法交换到磁盘)的总内存可通过查看/proc/meminfo文件的Locked字段直接获取:

cat /proc/meminfo | grep Locked

输出示例:Locked: 81920 kB,其中的数值就是当前系统所有被锁定的内存总量。

另外,free命令也能展示该数据,加上-h参数可输出人类可读的格式:

free -h

在输出的Mem行里,locked列对应的就是总固定内存大小。

2. 为什么用torch.tensor(xxx, pin_memory=True)分配固定内存后,进程的VmPin和VmLck仍为0?

这是因为PyTorch的pin_memory=True是通过CUDA的cudaHostAlloc系列API分配页锁定内存的,而Linux进程/proc/<PID>/status里的VmPin和VmLck仅统计通过mlock()/mlockall()系统调用直接锁定的用户态内存,CUDA分配的页锁定内存属于内核层面管理的资源,不会被计入进程的这两个字段。

如果要验证PyTorch是否成功分配了页锁定内存,可以通过以下方式:

  • 使用PyTorch内置统计函数:比如torch.cuda.memory_stats(),其中reserved_bytes.all.host字段包含页锁定内存的占用量;或者调用torch.cuda.memory_reserved(device='cpu')(此处指定CPU是因为pin_memory分配的是主机内存)。
  • 查看nvidia-smi输出,找到对应进程的Memory-Usage区域,Reserved列的数值包含了CUDA分配的页锁定内存。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:55:00