首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pytorch dataloader,线程太多,cpu内存分配太多

Pytorch dataloader,线程太多,cpu内存分配太多
EN

Stack Overflow用户
提问于 2019-07-29 16:53:28
回答 1查看 2.5K关注 0票数 0

我正在使用PyTorch训练一个模型。为了加载数据,我使用了torch.utils.data.DataLoader。数据加载器使用的是我实现的自定义数据库。出现了一个奇怪的问题,每次执行以下代码中的第二个for时,线程/进程的数量都会增加,并且会分配大量内存

代码语言:javascript
复制
    for epoch in range(start_epoch, opt.niter + opt.niter_decay + 1):
        epoch_start_time = time.time()
        if epoch != start_epoch:
            epoch_iter = epoch_iter % dataset_size
        for i, item in tqdm(enumerate(dataset, start=epoch_iter)):

我怀疑之前迭代器的线程和内存并没有在每次调用数据加载器的__iter__()之后被释放。分配的内存接近创建线程时由主线程/进程分配的内存量。也就是说,在初始时期,主线程使用2 2GB的内存,因此创建了两个大小为2 2GB的线程。在下一个时期,主线程将分配5 5GB的内存,并构造两个5 5GB的线程(num_workers为2)。我怀疑fork()函数会将大部分上下文复制到新线程中。

下面的活动监视器显示了python创建的进程,ZMQbg/1是与python相关的进程。

数据加载器使用的数据集有100个子数据集,__getitem__调用随机选择一个(忽略index)。(子数据集是来自pix2pixHD GitHub存储库的AlignedDataset ):

EN

回答 1

Stack Overflow用户

发布于 2019-07-30 06:49:14

torch.utils.data.DataLoader预取2*num_workers,这样您就可以随时将数据发送到GPU/CPU,这可能是您看到内存增加的原因。

https://pytorch.org/docs/stable/_modules/torch/utils/data/dataloader.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57250275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档