Когда pytorch создает data.DataLoader, понимание параметра pin_memory

PyTorch
Когда pytorch создает data.DataLoader, понимание параметра pin_memory

Понимание блокировки памяти страниц (закрепленная память или память с блокировкой страниц):

На стороне хоста есть виртуальная память. Если памяти хоста недостаточно, данные памяти будут заменены на виртуальную память. Виртуальная память — это дисковое пространство на хосте. Когда страница понадобится, она будет перезагружена из диск. Это может использовать больше памяти, чем фактическая память.

Память с блокировкой страниц позволяет контроллеру MDA на графическом процессоре использовать память хоста без участия ЦП. Видеопамять графического процессора заблокирована по страницам, поскольку память графического процессора не поддерживает обмен на диск.Блокировка памяти страницы — блокировка страницы при выделении памяти хоста, чтобы она не менялась местами с диском..

Использование памяти с блокировкой страницы в CUDA может быть выполнено с помощью cuMemAllocHost() API-интерфейса драйвера CUDA или с помощью cudaMallocHost() в API среды выполнения CUDA (API среды выполнения). Кроме того, вы можете напрямую использовать пространство, выделенное Malloc() на хосте, а затем зарегистрировать его как память с блокировкой страницы (используйте функцию cudaHostRegister() для завершения регистрации).

Преимущества использования памяти с блокировкой страниц заключаются в следующем:

  • Передача данных между памятью устройства и памятью с блокировкой страниц может выполняться параллельно с выполнением ядра.
  • Память с блокировкой страниц может быть сопоставлена ​​с памятью устройства, что сокращает передачу данных между устройством и хостом.
  • Обмен данными между памятью хост-системы со страничной блокировкой и памятью устройства на передней шине будет быстрее, и это может быть запись-объединение, при этом пропускная способность будет больше.

pin_memory锁页内存, при создании DataLoader установите pin_memory=True, что означает, что сгенерированные тензорные данные изначально относятся к заблокированной страничной памяти в памяти, поэтому быстрее будет экранировать тензор памяти в видеопамять GPU.

Память в хосте имеет два способа существования, один из них锁页, два不锁页,Содержимое, хранящееся в памяти с блокировкой страницы, не будет обмениваться с виртуальной памятью хоста ни при каких обстоятельствах (Примечание: виртуальная память — это жесткий диск), и данные будут храниться в виртуальной памяти, когда память страницы -свободной памяти недостаточно, когда памяти хоста недостаточно..

Вся видеопамять графической карты является памятью с блокировкой страниц!

Когда памяти компьютера достаточно, вы можете установить pin_memory=True. Установите pin_memory=False, если система зависла или память подкачки используется слишком много. Поскольку pin_memory связан с производительностью аппаратного обеспечения компьютера, разработчики pytorch не могут гарантировать, что у каждого игрока в алхимии есть высококачественное оборудование, поэтому по умолчанию для pin_memory установлено значение False..