最近有消息說 谷歌提出了一個建議 通過 Linux 內核開發人員的郵件列表, 用於設備之間的網絡數據傳輸。
該提案本身是 上 該機制的實施 設備內存 TCP (devmem TCP),它允許數據直接通過網絡從某些設備的內存傳輸到其他設備的內存,而無需在位於主機系統內存的緩衝區中中間複製該數據。
關於谷歌的提議,提到 設備 TCP 內存有望顯著提高效率 使用額外的加速器板在集群和分佈式機器學習系統中進行交互。
此外,還提到了 機器學習加速器的使用導致傳輸的信息量顯著增加 在訓練模型從存儲到GPU/TPU內存的過程中。 在某些情況下、訓練機器學習模型 只能消耗 50% 的可用 TPU 計算資源, 消除停機並更充分利用 GPU/TPU 資源的一種方法是提高性能和數據傳輸效率。
目前,數據傳輸 不同主機上的設備之間 僅限於復制數據 設備內存 承載內存, 調動 信息 通過網絡到另一台主機並從主機的內存中復制 目標到另一個設備的內存。 這樣的方案並不是最優的 而且,通過傳輸大量信息,它會給內存帶寬和 PCIe 總線帶來額外的負載。
如今,網絡上大多數設備到設備的數據傳輸都是通過 通過以下低級操作實現:從設備複製到主機, 主機到主機的網絡傳輸和主機到設備的複制。
該實現不是最理想的,特別是對於批量數據傳輸,並且可能 對系統資源(例如主機內存帶寬)造成巨大壓力,PCIe帶寬等造成現狀的一個重要原因是 缺乏用於表達設備到網絡傳輸的內核語義。
設備內存 TCP 機制允許您將主機內存排除在該鏈之外,並立即通過網絡從設備內存傳輸數據,並將接收到的數據以網絡數據包的形式放入設備內存中。
為了使設備內存 TCP 工作,需要一塊可以單獨處理的網卡 數據包標頭和數據包封裝的數據(有效負載)位於不同的緩衝區中。 使用 dmabuf 機制將數據從設備內存加載到 NIC 負載緩衝區,標頭從主內存傳遞並由系統 TCP/IP 堆棧填充。 為了提高效率,可以額外使用網卡的功能 用於單獨處理不同接收隊列中的流。
考慮到使用分佈式系統進行機器學習(其中加速器位於不同的主機上)以及從外部 SSD 傳輸模型訓練的數據,設備之間對高性能數據交換機制的需求不斷增加。 性能測試 採用 4 個 GPU 和 4 個網卡的配置 表明使用 Device Memory TCP 可以使其達到 96,6% 的速度水平 直接在設備內存之間傳輸數據時可用線。
最後值得一提的是 實現仍處於RFC階段, 也就是說,它供社區討論和審查,但尚未正式提交給 Linux 內核的主要分支。