在 Ubuntu 上,**PyTorch 的“共享内存”**通常有两种常见含义,我分别说明,并给出用法和注意事项。
PyTorch 在 Linux/Ubuntu 上,利用 /dev/shm(tmpfs) 实现进程间张量共享。
from torch.utils.data import DataLoader
loader = DataLoader(
dataset,
batch_size=32,
num_workers=4, # 多进程
pin_memory=False
)
num_workers > 0 时,数据通过 共享内存 在 worker 和主进程间传递import torch
import torch.multiprocessing as mp
def worker(tensor):
tensor.add_(1)
if __name__ == "__main__":
tensor = torch.zeros(5)
tensor.share_memory_() # 关键
p = mp.Process(target=worker, args=(tensor,))
p.start()
p.join()
print(tensor)
✅ share_memory_():
Ubuntu 默认 /dev/shm 可能太小(如 Docker 中):
df -h /dev/shm
sudo mount -o remount,size=4G /dev/shm
Docker:
docker run --shm-size=4g ...
tensor = torch.zeros(3, device="cuda")
⚠️ 注意:
DistributedDataParalleltorchrun --nproc_per_node=2 train.py
from multiprocessing import shared_memory
但 ❌ 不推荐用于 Tensor(序列化成本高)
| 问题 | 原因 |
|---|---|
| DataLoader 卡住 | /dev/shm 太小 |
| 共享失败 | 用了 GPU Tensor |
| Windows 不支持 | 共享内存仅 Linux/macOS |
| 修改不生效 | 忘了 share_memory_() |
你是:
我可以给你具体代码模板。