Компания Google представила в списке разработчиков ядра Linux реализацию механизма Device memory TCP (devmem TCP), позволяющего напрямую по сети передавать данные из памяти одних устройств в память других устройств, без промежуточного копирования этих данных в буферы, размещённые в системной памяти хоста. Реализация пока находится на стадии RFC, т.е. выставлена для обсуждения и рецензирования сообществом, но не оформлена для передачи в основной состав ядра Linux.
Ожидается, что Device memory TCP позволит существенно поднять эффективность взаимодействия в кластерах и распределённых системах машинного обучения, использующих дополнительные платы-ускорители. Применение ускорителей машинного обучения приводит к существенному увеличению объёма информации, передаваемой в процессе обучения моделей из хранилища в память GPU/TPU. В некоторых случаях тренировка моделей машинного обучения может расходовать лишь 50% доступных вычислительных ресурсов TPU, и одним из способов исключения простоев и более полного использования ресурсов GPU/TPU является повышение пропускной способности и эффективности передачи данных.
В настоящее время передача данных между устройствами на разных хостах сводится к
копированию данных из памяти устройства в память хоста, передаче информации на другой хост по сети и копированию из памяти целевого хоста в память другого устройства. Подобная схема не является оптимальной и при передаче больших объёмов информации создаёт дополнительную нагрузку на пропускную способность памяти и шины PCIe.
Механизм Device memory TCP позволяет исключить память хостов из этой цепочки и сразу передавать данные по сети из памяти устройств и помещать данные, поступившие в сетевых пакетах, в память устройств. Для работы Device Memory TCP требуется сетевая карта, способная раздельно обрабатывать в разных буферах заголовки пакетов и инкапсулированные в пакеты данные (payload). Данные загружаются из памяти устройства в payload-буфер сетевой карты при помощи механизма dmabuf, а заголовки переносятся из основной памяти и заполняются системным TCP/IP-стеком. Для повышения эффективности дополнительно могут использоваться возможности сетевых карт по отдельной обработке потоков в разных rx-очередях.
Потребность в высокопроизводительном механизме обмена данными между устройствами возрастает с учётом применения для машинного обучения распределённых систем, на которых ускорители находятся на разных хостах, а также когда данные для обучения моделей передаются с внешних SSD-накопителей. Тестирование производительности, проведённое в конфигурации с 4 GPU и 4 сетевыми карами, показало, что применение Device Memory TCP позволяет достигнуть уровня 96.6% от доступной линейной скорости при передаче данных напрямую между памятью устройств.