發表於2024-11-23
本書是一本構建大規模高效算法的綜閤性實用書籍,介紹各種並行技術,從R語言的並行版本lapply()的簡單應用到基於Hadoop和ApacheSpark框架的高級AWS雲。在本書的後,你將瞭解到影響並行效率的因素,包括:評估代碼性能和實現負載平衡;要避免的陷阱,包括死鎖和數值不穩定問題;對於你的項目,如何為適閤的並行類型構建代碼和數據;如何在各種計算機係統中運行R代碼獲取佳性能。本書針對那些想要單綫程和內存限製的R程序員,使其從中學習如何實現高效大規模算法,這是對大數據高性能處理的必要條件。
About the Authors 關於作者西濛R. 查普爾(Simon R. Chapple)是一位經驗豐富的解決方案架構師和首席軟件工程師,從事數據分析和醫療信息係統解決方案和應用的開發超過25年。他也是超級計算機HPC和大數據處理方麵的專傢。
Simon是Datalytics科技有限公司的首席技術官和管理閤夥人,帶領一個團隊建設下一代大規模數據分析平颱,該平颱建立在一組由高性能工具、框架和係統所構成的可定製的工具集閤基礎上,可以使從數據采集、分析到呈現的整個實時處理周期,輕鬆地部署到任何已有的IT操作環境中。
此前,他在Aridhia信息公司擔任産品創新總監,為蘇格蘭的醫療服務供應商建立瞭多個新係統,包括為蘇格蘭18周轉診治療和癌癥患者的管理而提供的一體化病人路徑跟蹤係統,該係統應用瞭10個單獨數據係統的集成(減少病人等待時間,從而提供好的服務)。他還利用公共雲托管監測係統,為實時化療患者建立瞭專門的移動係統,該係統在澳大利亞進行瞭臨床試驗,受到護士和病人的高度贊揚,“就像在你的起居室裏有一位護士……希望所有的化療病人每天都有天使般的安全舒適的護理環境。”
Simon也是ROpenCL開源軟件包的作者之一,該添加包使得用R編寫的統計程序可以應用圖形加速器芯片中的並行計算能力。
對於SPRINT這一章,我特彆要感謝愛丁堡並行計算中心的同事以及本書審閱者Willem Ligtenberg、Joe McKavanagh和Steven Sanderson,謝謝他們的積極反饋。我還要感謝Packt齣版社的編輯團隊為本書的終齣版付齣的辛勤勞動。感謝我的妻子和兒子的理解,他們給我珍貴的時間使我成為一名作者,謹以此書獻給我愛的Heather和Adam。
伊麗·特魯普(Eilidh Troup)是愛丁堡大學EPCC的應用顧問。她擁有Glasgow大學的遺傳學學位,現在專注於為廣大用戶尤其是生物學傢提供高性能計算。Eilidh緻力於各種軟件項目,包括為基於網絡的科學數據存儲庫提供簡單的並行R接口(SPRINT)和SEEK。
托斯頓·福斯特(Thorsten Forster)是愛丁堡大學的數據科學研究員。他具有統計學和計算機科學背景,並獲得瞭生物醫學科學博士學位,在這些交叉學科研究方麵擁有超過10年的經驗。
Thorsten利用統計學和機器學習(如微陣列和下一代測序)研究生物醫學的大數據分析方法,他曾經是SPRINT項目的項目經理,該項目的目標是允許潛在用戶使用R統計編程語言對大型生物數據集應用並行分析解決方案。他還是Fios Genomics公司的聯閤創始人,該公司是一傢大學孵化的提供生物醫學大數據研究的數據分析服務公司。
目前,Thorsten的工作是設計用於診斷新生兒細菌感染的基因轉移分類器、分析巨噬細胞乾擾素激活的轉移譜、調查膽固醇對感染免疫的作用,以及研究導緻兒童氣喘的基因因素。
Thorsten的完整資料可以在上獲得。
特倫斯·斯隆(Terence Sloan)是愛丁堡大學高性能計算中心EPCC的軟件開發小組經理。他在蘇格蘭中小企業、英國公司以及歐洲和全球閤作方麵擁有超過25年的管理和參與數據科學和高性能計算項目的經驗。
Terry獲得過Wellcome Trust(基金號086696/Z/08/Z)、BBSRC(基金號BB/J019283/1)研究基金,以及幫助開發R語言SPRINT添加包的3個EPSRC分布式計算科學基金。他在使用行為大數據進行客戶行為分析方麵獲得過ESRC奬(獲奬號RES-189-25-0066、RES-149-25-0005)。
Terry是愛丁堡大學HPC數據科學碩士項目的HPC數據分析、項目準備和論文課程的責任人。
我要感謝Alan Simpson博士,他是EPCC的技術總監、ARCHER超級計算機的計算科學和工程總監,感謝他支持SPRINT的開發及其在英國國傢超級計算機上的應用。
譯者序
前言
關於作者
第1章 簡單的R並行性1
1.1 亞裏士多德數謎2
1.1.1 求解程序的實現2
1.1.2 改進求解程序6
1.1.3 將問題分解為多個任務10
1.2 R的並行包14
1.2.1 使用mclapply()15
1.2.2 使用parLapply()19
1.2.3 並行負載均衡21
1.3 segue包23
1.3.1 安裝segue24
1.3.2 設置AWS賬戶25
1.3.3 運行segue27
1.3.4 求解亞裏士多德數謎32
1.4 總結34
第2章 消息傳遞入門36
2.1 為MPI設置係統環境36
2.1.1 為MPI選擇R包37
2.1.2 選擇MPI子係統37
2.1.3 安裝OpenMPI38
2.2 MPI標準39
2.2.1 MPI的世界39
2.2.2 安裝Rmpi40
2.2.3 安裝pbdMPI41
2.3 MPI API43
2.3.1 點對點阻塞通信44
2.3.2 點對點非阻塞通信56
2.3.3 集體通信60
2.4 總結65
第3章 高級消息傳遞66
3.1 網格並行性66
3.1.1 創建網格集群68
3.1.2 邊界數據交換70
3.1.3 中值濾波73
3.1.4 平鋪分配圖像74
3.1.5 中值濾波網格程序76
3.2 檢查和管理通信84
3.3 lapply()的函數變體87
3.4 總結89
第4章 開發SPRINT—超級計算機的基於MPI的R包90
4.1 關於ARCHER91
4.2 從R中調用MPI代碼92
4.2.1 MPI Hello World92
4.2.2 從R中調用C94
4.3 建立一個MPI R包—SPRINT97
4.3.1 簡單的並行R接口(SPRINT)包97
4.3.2 SPRINT包的體係結構99
4.4 將一個新函數添加到SPRINT包中100
4.4.1 下載SPRINT源代碼101
4.4.2 在R中創建一個存根—phello.R102
4.4.3 添加接口函數—phello.c103
4.4.4 添加實現函數—hello.c105
4.4.5 連接存根、接口和實現106
4.4.6 編譯並運行SPRINT代碼110
4.5 基因組學分析案例研究112
4.5.1 基因組學113
4.5.2 基因組數據115
4.6 基因組學與超級計算機116
4.6.1 目標116
4.6.2 ARCHER超級計算機116
4.6.3 隨機森林120
4.6.4 基因組分析案例研究的數據122
4.6.5 ARCHER中的隨機森林性能122
4.6.6 排名産品127
4.6.7 ARCHER中的排名産品性能128
4.6.8 結論131
4.7 總結132
第5章 筆記本中的超級計算機133
5.1 OpenCL133
5.2 ROpenCL包142
5.2.1 ROpenCL編程模型142
5.2.2 距離矩陣示例153
5.3 總結161
第6章 並行程序設計的藝術162
6.1 理解並行效率163
6.1.1 加速比163
6.1.2 阿姆達爾定律164
6.1.3 並行或者不並行165
6.2 數值逼近167
6.3 隨機數170
6.4 死鎖172
6.5 減少並行開銷175
6.6 自適應負載均衡178
6.6.1 任務場178
6.6.2 有效的網格處理179
6.6.3 成功並行化的3個步驟180
6.6.4 未來將會怎樣181
6.6.5 混閤並行性184
6.7 總結185
前 言 Preface
我們正處於信息爆炸時代。從個人到全世界,生活中的一切都變得越來越與物聯網實時關聯。據預測,到2020年,世界上的數據將超過現在的10倍,達到驚人的44澤字節(1澤字節相當於2500億張DVD)。為瞭解決大數據的規模和速度問題,我們需要巨大的計算、內存和磁盤資源,而為此就需要並行計算。
盡管使用的時間不長,但R作為一種開源統計編程語言,逐漸成為人們分析數據的關鍵基礎技術之一。我敢說R現在是“數據科學傢”的主流編程語言之一。
當然,數據科學傢可能會部署許多其他工具來處理大數據的一些睏難問題,如Python、SAS、SPSS或MATLAB。然而,自從1997年以來,隨著開源語言的深入發展,R語言非常流行,在20年中開發瞭許多存放於CRAN鏡像站點的R添加包,這些添加包適用於幾乎所有形式的數據分析,從小型數值矩陣到龐大的符號數據集,如生物分子DNA。事實上,我認為R語言正成為“事實上”的數據科學腳本語言,它可以融閤許多不同類型的高度復雜數據的分析方法。
R語言自身總是按照單綫程來實現的,而且其原有的程序設計並沒有應用並行機製。然而,為瞭達到某些功能的並行目的以及使用並行處理框架,R語言需要藉助於某些特彆開發的外部添加包。我們將重點關注一些目前技術範圍內可用的最好的並行算法。
在本書中,我們將介紹並行計算的各個方麵,從單程序多數據(SPMD)到單指令多數據(SIMD)嚮量處理,包括用R添加包parallel來利用R內置的多核功能、用消息傳遞接口(MPI)進行消息傳遞、用OpenCL處理通用GPU(GPGPU)的並行性。我們還將探討並行性的不同框架方法,從利用任務分配的負載均衡到網格空間處理。我們將通過Hadoop瞭解雲計算中更通用的批量數據處理,以及集群計算中的熱門新技術Apache Spark,它更適閤大規模的實時數據處理。
我們甚至會探索如何使用真正的數百萬英鎊的超級計算機。是的,我知道你可能沒有這樣的計算機,但是在本書中,我們會告訴你如何使用它,以及並行計算的效果。說不定,隨著知識的更新,你可以來到當地的超級計算機中心,並說服他們讓你進行一些大規模的並行計算!
本書中展示的所有編碼示例都具有原創性,選擇這些示例的原因是為瞭不復製其他書中可能遇到的例子。親愛的讀者,選擇這些代碼的原因是希望能讓你與普通讀者有一點不同。作為作者,我們非常希望你享受這個過程。
本書內容第1章快速地展示如何利用R的並行版本lapply()來開發筆記本電腦的多核處理功能。我們也通過亞馬遜網絡服務簡要介紹雲計算的巨大運行能力。
第2章涵蓋標準的消息傳遞接口(MPI),它是實現高級並行算法的關鍵技術。在本章中,你將學習如何使用兩個不同的R MPI添加包Rmpi和pbdMPI以及底層通信子係統的OpenMPI實現。
第3章通過開發一個詳細的Rmpi工作示例完成MPI過程,說明如何使用非阻塞通信和局部進程間消息交換模式,這是實現空間網格並行所必需的。
第4章介紹在真實的超級計算機上運行並行代碼的經驗。本章還詳細介紹開發SPRINT的過程,即一個用C語言編寫的可以在筆記本電腦以及超級計算機上運行的並行計算的R包。此外,還說明如何使用自己本地編碼的高性能並行算法擴展此添加包,並使其可訪問R。
第5章展示如何通過ROpenCL添加包直接應用筆記本電腦的圖形處理單元(GPU)的大規模並行和嚮量處理能力,該添加包是開放式計算語言OpenCL的一個R包裝。
第6章介紹並行編程及其性能的科學原理,通過強調想要避免的潛在陷阱來講述最好的實踐藝術,並初步展望瞭並行計算係統的未來。
在綫章節“Apache Spa-R-k”介紹瞭Apache Spark,現在它成為繼Hadoop之後最流行的分布式存儲大數據的並行計算環境。你將學習如何設置和安裝Spark集群,以及如何直接從R中利用Spark自己的數據框提取。
這一章可以在Packt齣版社的主頁上下載:。
不需要從頭到尾依次閱讀本書,大多數情況下,每一章節都是可以獨立閱讀的。
閱讀準備要運行本書中的代碼,你需要一個最新配置的多核筆記本電腦或颱式計算機。你還需要一個閤適帶寬的網絡連接,用於從CRAN(R包的主要在綫存儲庫)下載R和各種R代碼庫。
本書中的例子主要使用RStudio 0.98. 1062、64位R 3.1.0(CRAN發行版)開發,運行於2014年發行的Apple MacBook Pro OS X 10.9.4(具有2.6 GHz Intel Core i5處理器和16 GB內存)。當然,所有這些例子也應該適用最新版本的R。
本書中的一些示例將無法使用Microsoft Windows運行,但是它們應該可以在Linux的其他版本上運行。每章將詳細介紹所需的額外的外部庫或運行時的係統要求,並提供有關如何訪問和安裝它們的信息。
讀者人群本書適用於中高級R開發人員,使之掌握利用並行計算功能來執行長時間運行的計算,並分析大量數據。你需要具有一定的R編程知識,並且是一個能力強大的程序員,這樣你可以閱讀和理解低級語言(如C/C++),並熟悉代碼編譯過程。你可以認為自己是新型數據科學傢,即—個熟練的程序員和數學傢。
R並行編程實戰 下載 mobi pdf epub txt 電子書 格式 2024
R並行編程實戰 下載 mobi epub pdf 電子書評分
評分
評分
評分
評分
評分
評分
評分
R並行編程實戰 mobi epub pdf txt 電子書 格式下載 2024