異構內存及其在機器學習系統的應用與優化

第四範式深耕於人工智能領域,在人工智能相關算法、應用、系統和底層架構設計等有兼具廣度和深度的理解。html

隨着近幾年先進存儲技術的飛速發展,涌現出了具備顛覆性的存儲技術,好比非易失性存儲、SSD等。基於此類技術的異構內存架構,正在顛覆傳統應用程序的設計和優化模式。git

第四範式在異構內存架構上搶先佈局,進行了若干創新性探索研發和落地實踐,好比參數服務器[ 第四範式推出業界首個基於持久內存、支持毫秒級恢復的萬億維線上預估系統:www.163.com/tech/articl… ]、內存數據庫等[ 英特爾、第四範式聯合研究成果入選國際頂會 VLDB 傲騰™ 持久內存加持 優化萬億維特徵在線預估系統:newsroom.intel.cn/news-releas…]。github

此篇文章將介紹異構內存架構的技術背景,以及在自動機器學習系統上的技術實踐。算法

異構內存架構

傳統上,咱們所說的內存通常是指動態隨機存儲,即DRAM。此外,在CPU中還會存在小容量的快速存儲器件,咱們通常會稱他們爲CPU緩存(即L1/L2 cache)。具備持久性的慢速存儲器件則構成了外存,好比磁盤等。所以,外存、內存、和CPU緩存,構成了整個存儲架構金字塔。可是,隨着具備革命性意義的非易失性內存技術的商業化落地,使得這個金字塔中的內存再也不由DRAM單一組成,而是由DRAM和非易失性內存構成了異構內存架構。數據庫

此外,非易失性內存的出現也模糊了內存和外存之間的功能邊界,使得內存數據持久化成爲了可能。今天,非易失性內存技術已經徹底成熟,由英特爾於2019年發佈的英特爾® 傲騰™ 持久內存(簡稱持久內存或者PMem),便是此技術的表明性產品。
在這裏插入圖片描述緩存

圖 1. 基於異構內存的存儲架構金字塔性能優化

圖 1顯示了包含有異構內存的存儲架構金字塔。能夠看到,在本質上,持久內存處於金字塔中DRAM和外存之間,其在容量、性能、成本都是處於二者之間。甚至在功能上,它亦是一個DRAM和外存的混合體。它既能夠直接當作內存使用(內存模式),也能夠看成一個持久化設備使用(App Direct 模式,簡稱AD模式)。服務器

在內存模式中,持久內存對操做系統透明,其容量直接反應爲總體的可用內存容量;AD模式則將存儲層級暴露,由開發者徹底掌控。所以,因爲持久內存的特殊存在,現代內存架構不只僅是在層級上變得更爲複雜,在功能上也出現了革命性的變化,對於如何利用好異構內存架構,開發人員須要思考更多的問題,好比:markdown

  • 多級存儲的優化。持久內存提供了一個性能接近於DRAM,可是成本更低的內存方案,很是有利於對於內存消耗巨大的應用。可是,多級存儲架構的引入也爲性能優化帶來了更高的挑戰。咱們知道,高性能緩存在性能調優中有重大意義。一方面現實數據中每每存在熱點,緩存能夠有效提高熱點數據的訪問性能;另外一方面,緩存敏感數據結構(cache
    conscious)爲了壓榨硬件性能,經常有精巧的設計。那麼,持久內存的出現使得這個存儲層級更爲複雜,對多級緩存機制、數據結構和算法的設計都提出了更高的要求。
  • 持久化機制的利用。持久內存使得外存再也不是存儲數據的惟一選擇。持久內存提供了遠比傳統外存器件更高的持久化性能,可是其容量相對較小。在某些場景中如何有效的發揮高性能持久化的特色,成爲了應用落地須要思考的新問題。好比,對於須要全天候保證服務質量的在線服務應用,內存數據持久化即能提供離線之後的快速恢復能力;另外,本來磁盤IO爲性能瓶頸的場景,也能夠利用持久內存來做爲存儲介質,來提高總體系統性能。

爲了讓你們進一步瞭解異構內存架構如何在實際場景中發揮價值,咱們將拋磚引玉,分享第四範式在異構內存架構上的實踐經驗。數據結構

自動機器學習系統在異構內存上的優化

在這裏插入圖片描述
圖 2顯示了一個第四範式產品中一個典型的自動機器學習(AutoML)全流程。其主體上包含了離線探索以及線上推理部分。離線探索經過自動特徵工程和模型訓練,產出能夠上線的特徵工程腳本以及模型。線上推理服務在接受到用戶請求之後,通過實時特徵抽取和模型推理,拿到預測結果。同時消息隊列在整個系統中起到了數據蒐集和分發的關鍵做用。

從表格 1能夠看到,在異構內存架構下,持久內存在不一樣組件中有不一樣的使用方法,從而達到不一樣的優化目的。整體來講,內存模式能夠用來實現快速的低成本內存容量擴展,AD模式則帶來了更多的益處,包括快速恢復能力、提高數據存儲性能等。
在這裏插入圖片描述

第四範式已經將基於異構內存優化的關鍵技術組建進行了解耦,而且貢獻到了開源社區,目前主要包含兩個項目:高性能消息隊列系統Pafka(github.com/4paradigm/p… PmemStore(github.com/4paradigm/p… 。如下主要展開介紹Pafka。

Pafka:基於異構內存優化的高性能消息隊列系統

Kafka是一個開源的分佈式事件流/消息隊列系統,用於高效,可靠地處理實時數據流,在工業界中有很是普遍的落地應用場景。 可是,因爲其持久化邏輯的存在,其性能(吞吐和延遲)經常受到外存設備(HDD/SSD)的制約。在實際使用場景中,爲了增長 Kafka 集羣的整體吞吐量,企業不得不擴大集羣規模,增長了企業的總成本。

持久內存具備高速持久化的特性,能達到幾倍甚至幾十倍於傳統硬盤和SSD的持久化性能。所以,基於異構內存架構的 Kafka 的優化版本 — Pafka,正是利用了高速持久化的特性,大幅提高單節點吞吐,從而優化在集羣上的總投入成本。整體來講,相比較於傳統的Kafka解決方案,Pafka帶來了以下優點:

  • 比較於目前數據中心常見的 SATA SSD 的配置,基於異構內存的Pafka改進節點吞吐和延遲均達20倍。
  • 因爲大幅提高了節點吞吐,所以在集羣規模總投資上,相比較於 Kafka,Pafka能夠減小硬件投入成本 10 倍以上。
  • Pafka直接基於Kafka優化,用戶原有的基於 Kafka 的業務代碼無需修改,能夠零代碼改形成本遷移到Pafka系統。

咱們對於 Kafka 的優化集中於形成性能瓶頸的數據落盤部分。原Kafka原有的架構中,數據持久化只發生在外存(磁盤/SSD)這一層級;通過優化之後的Pafka版本,基於異構內存架構,同時把持久內存和外存用來作數據持久化。

具有高性能持久化能力的持久內存做爲持久化層級的第一級,而容量更大但性能較差的外存則做爲第二級持久化介質,二者經過必定的緩存機制進行管理。

因爲消息隊列的生產者/消費者的使用模式,大部分場景下數據的存取都會發生在高性能的持久內存中。

在這裏插入圖片描述
圖 3. Pafka集羣架構
如圖 3所示,一個 Kafka 服務器集羣由幾個至上百上千個的 brokers組成。Brokers 內部劃分爲了避免同的 partitions,進一步劃分爲 segments,來進行消息存儲。咱們對於 Kafka 的改造主要集中在 segment 的存儲數據結構上的改造。原來的 segment 只能存儲在 HDD/SSD 等外存設備上,咱們使用 PMDK 來進行基於異構內存的持久化操做,引入 MixChannel 的概念,來實現 segment 既能存儲在 HDD/SSD 的外存設備,也能在持久內存上。

具體來講,MixChannel將普通的文件接口和持久內存的接口統一管理,其底層存儲介質對於上層組件是透明的。爲了支持基於持久內存的存儲,咱們爲MixChannel引入了數據結構PMemChannel,其主要功能是把持久內存的MemoryBlock對象封裝成知足FileChannel API的接口,從而可讓MixChannel方便的選擇基於傳統文件的FileChannel接口,仍是基於持久內存的PMemChannel。這裏咱們使用了pmdk llpl的PersistentMemoryBlock,會自動爲每次寫入的數據進行持久化。同時,爲了支持zero-copy,咱們還爲llpl的MemoryBlock,經過直接映射持久內存的地址到ByteBuffer,實現了zero-copy的ByteBuffer接口,從而避免了內存的屢次拷貝,提高性能。

爲了維護segment和持久內存上數據的對應關係,咱們爲每一個segment分配一個持久內存的MemoryBlock,映射關係經過pmdk pcj的ObjectDirectory來維護。

此外,爲了不MemoryBlock在Pafka正常運行時動態分配的開銷,咱們會在初始化的時候預先分配固定必定比例的內存池空間,用於寫數據的時候MemoryBlock的快速分配。

性能比較
在這裏插入圖片描述

圖 4顯示,相比較於數據中心中經常使用的基於SATA SSD進行持久化的Kafka,基於異構內存優化的Pafka在吞吐和延遲的性能表現上都可以達到20倍的改進。

成本比較

假設咱們的目標是提供20 GB /秒的總體吞吐率,咱們將異構持久內存的 Pafka 與基於 SATA SSD 的Kafka 進行了比較。圖 5顯示,爲了實現20 GB /秒的總吞吐率,基於 SATA SSD 的服務器和基於異構內存的服務器的數量分別爲 45 和 3。 此外,就硬件成本而言,傳統的Kafka(SATA SSD)須要花費爲 45 萬美圓,而咱們的Pafka解決方案僅需花費 4.05 萬美圓。Pafka解決方案將硬件成本大大下降到傳統Kafka解決方案的9%。
在這裏插入圖片描述

圖 5. 20 GB/sec 吞吐的性能下,Pafka和Kafka方案的成本比較

更多信息

Pafka爲第四範式的開源項目,具體使用方式、技術支持、以及完整性能報告能夠經過如下渠道瞭解更多:
-代碼Github repo:github.com/4paradigm/p…
-Slack channel:join.slack.com/t/memarkwor…
-MemArk 異構存儲技術論壇:discuss.memark.io/

相關文章
相關標籤/搜索