孔令波
(北京交通大學 軟件學院,北京 100044)
在新工科[1]建設的推動下,以學科交叉和貼近實際工業技術為特點的課程建設,日益得到教育從業者的認可,而隨著大數據分析日益受到IT企業界關注,相關概念和技術的課程也就逐步納入大專院校的必備課程[2-9]。北京交通大學軟件學院順應此趨勢,更新了研究生的課程,分布式計算課程便是其一。
分布式計算的很多內容與冠之以科學計算的專題有很緊密的聯系:它們實際的計算都依賴類似的高性能計算資源。因此,使用高性能計算來串接相關的概念和技術也更為貼切,這對于“學科交叉和貼近實際工業技術”是有益的。
在綜合考量高性能計算和分布式計算相關技術的演變以及當下的典型應用案例后,可以選取“科學計算+大型商務計算架構”為線索來串接相關的專題。
自從1929 年《紐約世界報》首次使用了“超級計算(Supercomputing)”這一名詞,高性能計算一直到現在仍然是一個國家綜合國力的體現之一。按照Top 500 的統計,進入21 世紀以來,主流的(超級)高性能計算機的架構集中在兩類——MPP (Massively Parallel Processing,大規模并行處理)和集群(Clustering system),而且后者的數目比前者越來越多。
基于這類高性能計算資源的應用,到如今不僅涵蓋更多的科學計算問題(如天氣預報、生物信息學、藥品研發、石油存儲的推演等),而且也體現在大型商務計算中(以亞馬遜、阿里巴巴、12306 為代表的公司也需要更為強大的計算能力)。為此,高性能計算的內容也應體現這些特征,以這兩個應用作為線索串接相關的專題是順理成章的方案。
本課程所設專題的架構如圖1 所示。頂層展示了兩個不同領域的應用——科學計算和大型商務計算,雖然它們各自的計算有很大的不同(圖 1 中間部分),不過,發展到現在,它們所依賴的計算資源和技術支撐都有很大的交叉,即圖 1 的底部兩層所揭示的:二者的計算都可以使用如MPI、CUDA 甚或Map/Reduce 的框架;二者所依賴的計算資源可以是MPP 也可以是集群甚或是現在數據中心(Data Center)、云計算(Clouding)等。這些也是課程專題設計的基礎。

圖1 課程專題結構示意圖
這種交叉對于軟件學院的學生是非常有益的,這是因為時代發展到現在,計算機編程已經成為許多專業學生都要掌握的技巧,甚至其他專業的學生使用計算機解決問題的能力比囿于軟件和計算機專業的學生更為有競爭力:受專業所限,軟件學院的學生想要了解其他專業的編程門檻很高——那些應用背景的數學理論和專業理論就很難;而相對而言,其他專業的學生學習計算機和軟件的門檻較低。為軟件專業的學生介紹科學計算的內容,幫助他們擴展視野是非常有價值的。
要貫徹前面所述的思路,就需要覆蓋所涉及相關概念和技術的重要專題(詳見2.1 的內容),這對于授課老師自然是很大的挑戰,不僅要自己深入學習和理解那些技術,而且還需要慎重地篩選和編纂適當的材料以便能夠向學生深入淺出地展示。
在實踐的基礎上,提出“貫通與綜合”的建設思路,即凡是有益于學生理解和掌握高性能計算的專題,都應該簡明扼要地串接起來。
(1)貫通的思路主要體現在兩個方面;一是如前所述,相關專題使用科學計算和大型商務計算來串接;二是課程實施時要理論也要落地,即要幫助學生了解和掌握相關技術的理論和歷史演變,也要求學生動手實踐。
(2)綜合的思路也主要有兩個方面;一是在專題和項目的設計中不僅要兼顧理論也要兼顧實際編程和框架的使用;二是作為面向研究生的課程,項目設計還要體現研究的要求。
為貫徹前面提出的貫通與綜合的課程思路,在教學方式上實行了教師和學生各負其責、相互學習的形式,即教師負責串講與理論和技術歷史演變的部分;而學生在接到課程項目的要求后,自由組團(每組上限5 人),自主學習和了解實現的技術,并在課上作報告。
學生上講臺向其他同學作報告展示其所完成的項目,不僅有助于學生自學能力的鍛煉,而且有助于提升組織內容和報告的能力。此外,同學間的交流有時候比教師更能抓住學生的理解盲點:學生彼此之間的知識水平相近,某同學不明白的,極有可能也是其他同學所不了解的。
實踐表明,這樣的安排既因為有所分工而可以覆蓋更多的內容,又能實際鍛煉學生的學習、實踐和組織報告的能力。在第一年教師負責的串講專題包括了MPI、CUDA 和Map/Reduce 等編程技術,而在第二年中就只是提供了那些技術的幻燈片,然后布置項目讓學生自己去學習和實現,學生也很好地完成了。
在確定了課程的指導思路后,接下來首先需要確定將哪些專題納入本課程。本課程的專題是按照科學計算和大型商務計算兩個抓手來貫穿的,也是教師主要負責的部分。
(1)課程概述。介紹本課程的建設采取科學計算和大型商務計算來串接的設計思路,以及課程考核的方式。
(2)開發技術簡介。介紹完成本課程項目可使用的開發技術。有鑒于Python 在數據分析領域被廣泛使用,所以,選取其作為本課程默認的開發語言,展示了如何基于Python 實現MPI、CUDA 和Map/Reduce 的編程流程。不過,也建議學生選取其他語言如Java 來實現相關的項目。
(3)科學計算導引。以最早的科學計算問題“天氣預報”為例,介紹PDE 建模的方法,以及數值計算方式求解的高計算量,使學生對高性能科學計算有直觀的認識。
(4)并發編程的范式。在提供PDE 方程數值計算的串行代碼后,介紹并行程序設計的范式(如BSP 模型:Bulk Synchronous Parallel,整體同步并行計算模型),引導學生思考如何將串行代碼轉換為MPI、CUDA 和Map/Reduce 程序[10-12]——這也是要求學生實現的3 個課程項目。
(5)高性能計算機歷史。
扼要闡述高性能計算機的歷史,并結合Top 500 網站的信息,揭示當前高性能計算機的主流架構是MPP 和Cluster,并點明基于所謂云計算平臺上的編程方式與基于集群的編程方式是相通的。
(6)運行平臺的設計與實現。類比于剖析經典軟件(操作系統、編譯器和數據庫管理系統)的設計與實現在傳統計算機專業中的地位,了解支撐高性能計算程序運行的平臺的設計與實現,同樣有著重要的價值。本節梳理了這方面的內容,借鑒操作系統的內容設計,按照資源管理和作業調度兩個線索,以“以點蓋面”的方式介紹了所涉及的概念和算法。
(7)大數據概覽。
雖然軟件學院的研究生多少接觸過大數據的技術,不過,本節的側重點在于從歷史的、宏觀的角度介紹大數據的軟件生態和典型應用,如示意Flume、Kafka、Zookeeper 和Spark 等軟件搭建實時日志分析的案例,以幫助學生有較為完整的了解。
(8)大型商務計算的架構演變。以典型電子商務系統為例(如亞馬遜、京東和阿里巴巴的淘寶等),從架構的角度展示這類大型商務計算如何應對高并發的問題,涉及CDN (Content Delivery Network,內容分發網絡)、反向代理、負載均衡服務和微服務等技術,以及部分算法的并發編程實現。
本課程所涉專題以及各專題覆蓋的主要內容見表1。雖然內容很多,但是,有些是深入講解,而有些是簡介,讓學生有了解即可,以便于后續他們需要的時候知道有哪些技術。
為有效提升學生的動手能力、自主學習能力以及研究素養,本課程設計了有針對性的5 個項目。
其中的3 個編程項目是要求學生在提供的熱傳導數值求解的串行程序代碼基礎上,嘗試轉換為MPI、CUDA 和Map/Reduce 實現。
剩下的兩個項目分別是技術報告和論文研讀報告項目,前者建議學生選取有代表性的軟件深入調研它們的原理、設計與實現;后者則要求學生選取有關的研究性論文進行研讀,并復現論文的算法。

表1 課程建設所設專題及覆蓋內容
所有這些項目都要求學生提交文檔和代碼,并做課上報告和代碼展示。
兩輪課程實踐下來,對于編程項目,最為復雜的是MPI,CUDA 最為簡單。但是,處理大規模數據還是得 Map/Reduce 架構,但是性能堪憂:要重啟作業。技術報告覆蓋了Zookeeper、PIG、Kafka 等軟件,雖然剖析并不很深入,不過也鍛煉了學生學習、提煉和梳理的能力。論文研讀包括CNN(Convolutional Neural Network,卷積神經網絡)在CUDA的實現,PAXOS和Peacock[13]論文等。
考核是學生所關注的。每個項目都設定基本的功能,如果能夠達成,則占70%(在報告過程中會詳加檢驗),浮動部分占比可達20%,具體取決于學生是否在實踐中有亮點。最后,提交支撐材料(代碼、幻燈片和文檔)部分占比10%。
在本課程建設中,采取了課堂報告的形式,報告過程中鼓勵學生相互提問,并在完善后需要再次報告,取其最高水準作為報告的分數(其他還要看提交的資料的完善程度)。這既體現了相互學習、教學相長,也能夠督促學生積極深入調研。所以,總體而言課堂報告是既輕松也緊張的,不過,總體是比較熱烈的。
在高性能計算課程建設過程中,通過縱覽相關技術的演變,以及不同技術的使用程度[10,12,14]提煉出以“科學計算+大型商務計算架構”為線索串接高性能計算的概念和技術。受課時所限(北京交通大學軟件學院對研究生課程限定是32 學時),在課程實踐教學中貫徹“教師串講+學生互助學習”的方式,即教師負責對提綱挈領的知識做專題講授,在闡述項目設置后,放手讓學生去自主學習,最后通過學生課堂報告的方式加以現場檢驗。
到如今,本課程已經完成了按照本文思路進行的兩輪授課實踐。學生的反饋還是令人欣慰的:不僅表現為學生對所講授的知識點能夠有所領悟,而且,他們也很有興趣親手調試和完成相關的項目,普遍反映有了將以前所學知識融匯貫通并大大擴展眼界的感覺。
不過,對于建設好一門課程而言,這僅僅是開始,還需要更為深入的探討和實踐:①因為課時的限制(只有32 學時),后續準備嘗試翻轉課堂的教學方式;②實驗環境的建設;③教師應就學生選取的專題作深入的提煉;④期待能體現“學科交叉和貼近實際工業技術”的書籍。