參考鏈接:http://www.voidcn.com/article/p-fsdktdik-bry.html
該pin_memory參數與鎖頁內存、不鎖頁內存以及虛擬內存三個概念有關;
鎖頁內存理解(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。
(實操時,貌似如果內存交換過多時,置pin_memory = True會卡住,可以將其設為False,對應的num_workers = 0)