【pytorch】torch.utils.data.DataLoader中的pin_memory屬性

原文:https://blog.csdn.net/tsq292978891/article/details/80454568 
原文:https://blog.csdn.net/tfcy694/article/details/83270701  

doc解釋:

    https://pytorch.org/docs/stable/_modules/torch/utils/data/dataloader.html#DataLoader
    pin_memory (bool, optional): If True, the data loader will copy tensors into CUDA pinned memory before returning them.
 

通常情況下,由於虛擬內存技術的存在,數據要麼在內存中以鎖頁(“pinned”)的方式存在,要麼保存在虛擬內存(磁盤)中。而cuda只接受鎖頁內存傳入,所以在聲明新的dataloader對象時,直接令其保存在鎖頁內存中,後續即可快速傳入cuda。否則,數據需要從虛擬內存中先傳入鎖頁內存,再傳入cuda,速度將大大增加。其缺點是對於內存的大小要求較高。

鎖頁內存理解(pinned memory or page locked memory):https://blog.csdn.net/dgh_dean/article/details/53130871
What is the disadvantage of using pin_memory: https://discuss.pytorch.org/t/what-is-the-disadvantage-of-using-pin-memory/1702

pin_memory就是鎖頁內存,創建DataLoader時,設置pin_memory=True,則意味着生成的Tensor數據最開始是屬於內存中的鎖頁內存,這樣將內存的Tensor轉義到GPU的顯存就會更快一些。

主機中的內存,有兩種存在方式,一是鎖頁,二是不鎖頁,鎖頁內存存放的內容在任何情況下都不會與主機的虛擬內存進行交換(注:虛擬內存就是硬盤),而不鎖頁內存在主機內存不足時,數據會存放在虛擬內存中。

而顯卡中的顯存全部是鎖頁內存!

當計算機的內存充足的時候,可以設置pin_memory=True。當系統卡住,或者交換內存使用過多的時候,設置pin_memory=False。因爲pin_memory與電腦硬件性能有關,pytorch開發者不能確保每一個煉丹玩家都有高端設備,因此pin_memory默認爲False。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章