解讀8大場景下Kunpeng BoostKit 使能套件的最佳能力和實踐

at_1發表於2021-09-11

摘要:本次鯤鵬 BoostKit 訓練營為開發者介紹如何基於鯤鵬 BoostKit 使能套件實現應用效能的加速,並重點剖析效能最佳化技術和關鍵能力。

本文分享自華為雲社群《》,原文作者:白鹿第一帥 。

前言

在資料和經濟時代,業務和資料的多樣性需要新的計算架構,海量的資料增長也帶來了更高的計算需求。那麼在這個過程中,鯤鵬計算產業也正在成為更多計算場景的新一代 IP 基座。基於華為鯤鵬處理器構建的鯤鵬全棧 IT 技術實施設施行業應用以及服務,致力於為智慧世界持續提供我們的先進算力支援,使得各個行業可以實現數字化轉型。應用軟體的遷移與最佳化一直是鯤鵬軟體生態的難點和關鍵。本次鯤鵬 BoostKit 訓練營為開發者介紹如何基於鯤鵬 BoostKit 使能套件實現應用效能的加速,並重點剖析效能最佳化技術和關鍵能力。

20210603081756469.png

一、開源大資料與鯤鵬多核結構淵源

1.1、海量資料處理的難題

隨著科技的發展,越來越多的行業需要採集更多的資料,如何對海量資料進行分析並得出我們想要的結果就成為了我們所面臨的難題,而大資料技術的迅速發展使得這個問題迎刃而解。

1.2、大資料平行計算特點天然匹配鯤鵬多核架構

海量資料需要更高的併發度來加速資料處理,在資料集非常大的情況下,如果我們跑在單核(或者是順序化)的執行場景下,可能執行過程無法進行或者是效率極其低下,這是我們無法接受的,所以海量的資料需要更高的併發度來處理,那麼鯤鵬多核計算的特點就可以完美匹配這個需求,加速大資料的計算效能,提升大資料任務的併發度。

我們以 MapReduce 模型為例進行處理和計算,如下圖所示,我們所採集的源資料是一段英文,我們需要計算這段話中每一個單詞所出現的次數。

20210603094104769.png

執行過程:首先我們對源資料進行拆分,然後 Map 對映到每一個節點上進行運算,之後進行 Sort 排序,Merge 合併,最後進行結果彙總 Reduce 以形成最終的結果。

可以看到,我們將大量的計算分發到各個節點之上,這就是分散式計算,也是我們所謂的“併發度”的概念。如果我們的併發度提高了,理論上來講,我們整個模型的執行時間也會相應縮短。

二、開源大資料整體與元件介紹

上面我們介紹了開源大資料的概念以及相應的華為鯤鵬多核計算的特點,下面介紹我們在大資料開發中經常會使用到的一些元件。

2.1、大資料元件:Hadoop-HDFS 模組

HDFS 是 Hadoop 生態的三個核心模組組成之一,負責分散式儲存。具體結構如下圖所示:

20210603103453699.png

  • HDFS:是一種分散式儲存系統,採用 Master 和 Slave 的主從結構,主要由 NameNode 和 DataNode 組成。HDFS 會將檔案按固定大小切成若干塊,分散式儲存在所有 DataNode 中,每個檔案可以有多個副本,預設副本數為 3。
  • NameNode:Master 節點,負責源資料的管理,處理客戶端請求。
  • DataNode:Slave 節點,負責資料的儲存和讀寫操作。

使用流程:使用者如果想要讀取儲存在 HDFS 中的資料,需要先找到 NameNode,透過 NameNode 來得知我們的資料存放在哪個 DataNode 之上,當 NameNode 找到具體的資料之後,將資料返回給使用者。

2.2、大資料元件:Hadoop-Yarn 模組

Yarn 是 Hadoop 生態的三個核心模組組成之一,負責資源分配和管理。具體結構如下圖所示:

20210603231721323.png

  • Yarn:是一種分散式資源排程框架,採用 Master 和 Slave 的主從結構,主要由主節點 ResourceManager、ApplicationMaster 和從節點 NodeManager 組成,負責整個叢集的資源管理和排程。
  • ResourceManager:是一個全域性的資源管理器,負責整個叢集的資源管理和分配。
  • NodeManager:執行在 Slave 節點,負責該節點的資源管理和使用。
  • ApplicationMaster:當使用者提交應用程式時啟動,負責向 ResourceManager 申請資源和應用程式的管理,與 NodeManager 進行互動。使用者在使用的情況下可以透過 ApplicationMaster 得知當前任務的進度、已經執行到哪些 Job。
  • Container:Yarn 的資源抽象,是執行具體應用的基本單位,任何一個 Job 或應用程式必須執行在一個或多個 Container 中。

2.3、大資料元件:Hadoop-MapReduce 模組

MapReduce 是 Hadoop 生態的三個核心模組組成之一,負責分散式計算。具體結構如下圖所示:

20210603141429907.png

  • MapReduce:是一種分散式計算框架,主要由 Map 和 Reduce 兩個階段組成。支援將一個計算任務劃分為多個子任務,分散到各叢集節點平行計算。
  • Map 階段:將初始資料分成多份,由多個 Map 任務並行處理。
  • Reduce 階段:收集多個 Map 任務的輸出結果並進行合併,最終形成一個檔案作為 Reduce 階段的結果。

2.4、大資料元件:Spark 平臺

Apache Spark 是用於大規模資料處理的統一分析引擎,具有可伸縮性、基於記憶體計算等特點,已經成為輕量級大資料快速處理的統一平臺,各種不同的應用,如實時資訊流處理、機器學習、互動式查詢等,都可以透過 Spark 建立在不同的儲存和執行系統上。具體結構如下圖所示:

20210603142053894.png

  • Apache Spark 核心:Spark Core 是 Spark 平臺的基礎通用執行引擎,其所有其他功能都是基於該平臺執行的。它提供了記憶體計算和外部儲存系統中的參考資料集。
  • Spark SQL:Spark SQL 是 Spark Core 之上的一個元件,它引入了一種名為 SchemaRDD 的新資料抽象,他提供了對結構化和半結構化資料的支援。
  • Spark Streaming:Spark Streaming 利用 Spark Core 的快速排程功能來執行流式分析。它採用小批次採集資料,並對這些小批次資料執行 RDD(彈性分散式資料集)轉換。
  • MLlib:MLlib 是 Spark 上面的分散式機器學習框架,因為它是基於分散式記憶體的 Spark 體系結構。
  • Graphx:Graphx 是 Spark 頂部的分散式圖形處理框架。它提供了一個用於表達圖形計算的 API,可以使用 Pregel 抽象 API 對使用者定義的圖形進行建模。它還為此抽象提供了最佳化的執行時。

三、鯤鵬 BoostKit 使能套件介紹

3.1、鯤鵬 BoostKit 是什麼?

BoostKit 是一個應用使能套件,並不只是由一個軟體包構成,而是由很多軟體包組成的。

BoostKit 是部署在鯤鵬整機(伺服器)環境之上,往上搭建的一個全棧最佳化的使能套件。具體結構如下圖所示:

20210603154123220.png

鯤鵬應用使能套件 BoostKit,釋放倍級效能優勢,提供八大場景化應用使能套件:大資料、分散式儲存、資料庫、虛擬化、ARM 原生、Web/CDN、NFV 和 HPC。在接下來的過程中,我們將其分為三個部分依次介紹。

2021060714580750.png

3.2、開源使能:開源軟體可用、好用

在這裡插入圖片描述

  • 華為:貢獻開源、主導開源,使能主流開源軟體支援鯤鵬高效能。
  • 夥伴:從開源社群、鯤鵬社群獲取高效能開源元件,直接編譯/部署。

我們以 Hadoop 為例,首先需要讓 Hadoop 執行在鯤鵬伺服器上,然而這遠遠不夠,還需要根據需求開發相關特性,以促使 Hadoop 在鯤鵬之上可以執行得更加完美、便捷,同時我們將研發的產品新特性合入、貢獻到開源社群。

3.3、基礎加速:超越業界水平的應用效能

這一塊之所以被稱為基礎,是因為很多應用都會使用到該加速包,比如:NUMA 最佳化、KAE 加速庫、IO 智慧預取等。

在這裡插入圖片描述

  • 華為:提供基礎效能最佳化、基礎加速庫和加速演算法等基礎加速軟體包和文件,並對如何使用作出指導。
  • 夥伴:從鯤鵬社群獲取基礎加速軟體包,在鯤鵬創新中心指導下進行編譯、部署和效能最佳化。

我們以 KAE 加速庫為例,在使用過程中所使用到的如壓縮、加解密等相關功能,我們會加速這個功能,如果我們的上層應用有使用到壓縮、加解密等相關功能就都會有大幅的效能提升。

3.4、應用加速:極致事務倍級應用效能

在這裡插入圖片描述

  • 華為:提供應用創新加速元件、演算法創新元件等應用加速軟體包和文件。
  • 夥伴:夥伴與華為開展聯合方案設計、開發和商業實踐。合作方式的變化隨加速功能而變。

四、BoostKit 在開源使能上的結果

BoostKit 在開源社群中做了大量的投入,主要針對如下兩個方面,全面支援開源大資料元件,並實現了 ARM CI 在社群版本上的執行。

4.1、全面支援開源大資料

20210603232005288.png

  • 支援開源 Apache 大資料元件。
  • 支援開源 HDP 大資料元件及管理元件 Ambari。
  • 支援開源 CDH 大資料元件(注:CDH Manager 管理元件是閉源版本,當前不支援)。

4.2、開源社群接納 ARM 生態

20210603232728352.png

  • Hadoop、Hive、Hbase、Spark 和 Flink、ElasticSearch、Kudu 等核心元件的開源社群支援 ARM(注:Hadoop、ElasticSearch 開源社群已經提供官方版本的 ARM 軟體包)。推動了 ARM 開源軟體生態的發展。

五、鯤鵬 BoostKit 如何應對大資料關鍵挑戰?

聚焦大資料關鍵挑戰,對於存在的痛點給出解決方案,讓資料處理更快、更簡單。

20210604021045245.png

5.1、遇到的問題

  1. 多樣化查詢無法統一,效率低。Spark SQL、Hive 等查詢方式的不統一,導致查詢的效率降低。
  2. IO 密集型元件效能無法滿足要求。
  3. 磁碟 IO 存在瓶頸,HDFS 效能提升困難。
  4. 在資料採集過程中,由於資料是多種多樣的,多樣化資料格式,導致跨資料來源讀取資料難。
  5. 資料非共享,跨資料中心取數難。在資料讀取的過程中,資料多儲存在不同的資料中心,無法實現共享,跨資料中心讀取資料就是一個難題。

5.2、如何應對關鍵挑戰?

  • 針對問題 1、4、5。採用跨源跨域查詢加速。採用 openLooKeng 虛擬化引擎統一資料入口,支援跨源、跨域分析,查詢效能倍級提升。
  • 針對問題 2。採用 Spark 效能加速。原生機器學習/圖演算法深度最佳化,Spark 效能倍級提升。
  • 針對問題 3。採用 HDFS 效能加速。IO 智慧預取,高效取數,Spark/Hbase 效能提升 20%。

六、BoostKit 機器學習/圖演算法的深度最佳化

6.1、演算法深度最佳化例項

BoostKit 機器學習/圖演算法基於原生演算法深度最佳化,促使 Spark 效能得到倍級提升,現在已經被應用到華為的夥伴業務之中,如下圖所示的兩個實際場景,在海量的資料集中,分別使用機器學習和圖分析的演算法進行建模,我們可以看到模型訓練時長有大幅度的縮短,效能得到極大提升。

20210604022033197.png

BoostKit 機器學習/圖演算法的最佳化使得在實際應用場景中,計算效能平均提升 5 倍,而上層應用無需修改!

6.2、鯤鵬演算法庫

  • 包括上面所提到和使用的機器學習 GBDT 演算法、圖分析 PageRank 演算法在內,鯤鵬演算法庫已交付 20+ 演算法,涵蓋常用演算法型別。

20210604022956824.png

  • 保持與原生 Spark 演算法完全一致的類和介面定義,無需上層應用做任何修改,只需要在提交任務時加入演算法包即可。

採用網路公開的多維度多規模資料集演算法效能提升 50%~10 倍以上。

20210604023245974.png

七、BoostKit 做了哪些深度最佳化?

7.1、鯤鵬親和性最佳化效果

關鍵最佳化點:

  • Communication-avoid,減少了不必要節點之間的資料通訊。
  • 多核平行計算。利用鯤鵬自身優勢,提高了演算法多核並行度,提高資料並行度與模型並行度,降低了通訊 Shuffle 的瓶頸,以實現訓練速度的提升。

在這裡插入圖片描述
在同等計算精度,不同的資料集下,支撐機器學習演算法(Covariance、Pearson、Spearman),效能提升超過 50+%,如下圖所示:

20210604024031384.png

7.2、機器學習演算法最佳化方案:分散式 SVD 演算法

SVD 演算法即奇異值分解演算法,是線性代數中常用的的矩陣分解演算法。SVD 演算法不光可以用於降維演算法中的特徵分解,還可以用於推薦系統,以及自然語言處理等領域,是很多機器學習演算法的基石。

20210604025233884.png
20210604025507359.png

對於傳統的 SVD 演算法,我們也在之上進行了創新,如下圖所示:

2021060402562352.png

7.3、圖分析演算法最佳化方案:分散式 PageRank 演算法

PageRank 演算法,即網頁排名演算法,又稱網頁級別演算法、Google 左側排名演算法或佩奇排名演算法。該演算法是對搜尋引擎搜尋出來的結果、網頁進行排名的一種演算法,本質上是一種以網頁之間的超連結的個數和質量作為主要因素粗略地分析網頁重要性的演算法。即更重要的網頁會被更多其他的網頁所引用,根據引用的連結計算出每個網頁的 PR 值。網頁的PR值越高則說明該網頁越重要。PageRank 是 Google 用於用來標識網頁的等級/重要性的一種方法,是 Google 用來衡量一個網站的好壞的唯一標準。

20210604025906330.png

如上圖所示,我們將每一個網頁看做一個點,網頁與網頁之間的連線看成一條邊,如此,便構成了圖的資料結構。我們就將對這個圖的資料結構進行處理。那麼我們如何進行最佳化呢?

  • 記憶體佔用最佳化:基於稀疏壓縮的資料表示,使得演算法的記憶體佔用下降 30%,有效解決大資料規模下的記憶體瓶頸問題。
  • 收斂檢測最佳化:簡化收斂檢測過程,使整體任務量減少 5%~10%。
  • 全量迭代+殘差迭代組合最佳化:有效降低前期資料膨脹帶來的 shuffle 瓶頸,整體效能可提升 0.5X~2X。

20210604031907618.png 

如上圖所示,在最佳化之後,透過演算法計算模式的自適應切換,整體 shuffle 量減少 50%,效能較最佳化前平均提升 50%+。

八、鯤鵬 BoostKit 機器學習&圖演算法的 Spark 效能加速實踐

鯤鵬 BoostKit 機器學習&圖演算法的 Spark 效能加速實踐可以在華為雲平臺上的“沙箱實驗室”進行。

8.1、環境準備

在實驗進行之前,首先會預製環境,如下圖所示:

在這裡插入圖片描述

8.2、環境配置

由於我們的本演算法是執行在 4 節點的叢集上上,即執行在 4 臺 ECS上,所以預製環境的過程可能較長,需要在雲伺服器上完成某些元件的配置,時間大概為三分鐘左右。如下圖所示,我們可以看到一個主節點和三個從節點。

20210604032603794.png

8.3、部署 Hadoop、Spark 等元件

在預製環境的過程中,已經完成了部分 Zookeeper 的相關配置,我們只需要登陸每一個 agent 節點並進行少量的配置即可啟動 Zookeeper,具體流程如下圖所示:

20210604033351890.png

對於 Hadoop 同理,預製環境時,已經完成 Hadoop 的安裝與 Hadoop 在 server 節點的配置,對於 agent 節點,我們只需要在計算節點上少量配置,在 agent 端啟動 JournalNode,在 server 端啟動 Hadoop 其他元件即可,具體流程如下圖所示:

20210604033702716.png

對於 Spark,系統並沒有作相關的部署,僅僅是把 Spark 下載到了叢集上,之後需要我們新增 Spark 環境變數、修改 Spark 配置檔案,同步到其他節點並進行任務提交,具體流程如下圖所示:

20210604034206131.png

8.4、演算法庫最佳化效果執行實踐

8.4.1、執行 SVD 演算法

呼叫演算法庫,程式碼如下:

sh bin/ml/svd_run.sh D10M1k

不呼叫演算法庫,程式碼如下:

sh bin/ml/svd_run_raw.sh D10M1k

8.4.2、執行 PageRank 演算法

呼叫演算法庫,程式碼如下:

sh bin/graph/pr_run.sh cit_patents run

不呼叫演算法庫,程式碼如下:

sh bin/graph/pr_run_raw.sh cit_patents run

由於演算法當前的預設引數沒有完全利用 ECS 叢集的資源,所以需要對 Spark 層的引數進行調優。

解讀8大場景下Kunpeng BoostKit 使能套件的最佳能力和實踐

 

總結

面向多樣性計算時代,華為全面開放鯤鵬全棧能力,分享多樣性計算工具套件:鯤鵬應用使能套件 Kunpeng BoostKit 和鯤鵬開發套件 Kunpeng DevKit,加速產業創新,使能極簡開發,攜手夥伴一起構建鯤鵬計算產業生態。本系列課程主要針對鯤鵬開發者及 ISV 合作伙伴,幫助您快速瞭解 BoostKit 鯤鵬應用使能套件支援下的 8 大場景的最佳能力和實踐、鯤鵬全研發作業流程工具套件 Kunpeng DevKit 和鯤鵬基礎軟體開源等相關內容,與全球開發者一起共同點亮多樣性計算新時代。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1817/viewspace-2796020/,如需轉載,請註明出處,否則將追究法律責任。

相關文章