原標題:【Nature文章摘錄】NumPy: 從單機到分布式并行計算
點擊上圖,查看詳情
本公眾號的推送以互聯網大數據技術為主,是《互聯網大數據處理技術與應用》《Python爬蟲大數據采集與挖掘》等課程的配套號。內容涉及 大數據采集、存儲、分析挖掘的模型算法、隱私等技術問題,其特色為原創性、技術性。
NumPy開發團隊在 Nature 上發表了 Review文章(Array programming with NumPy, 2020.9.16),詳細介紹了使用 NumPy 的數組編程。本文對其中主要內容進行了摘錄和翻譯,主要包括Numpy的基本計算原理和NumPy對分布式并行計算的支持。
1、Numpy的基本計算原理
數組編程(array programming)為以向量、矩陣和高維數組的方式訪問、操作和操作數據提供強大的語法。NumPy是Python語言的主要數組編程庫,在物理、化學、天文學、心理學、工程、金融和經濟等領域的研究分析中發揮著重要作用。本文回顧了一些基本的數組概念,以及如何形成一個簡單而強大的編程范式來組織、探索和分析科學數據。
Numpy的生態
NumPy數組是一種能夠高效存儲和訪問多維數組(也稱為張量)的數據結構,并支持各種科學計算。它能夠運行在從嵌入式設備到超級計算機各種設備上,性能接近編譯語言。基本的概念包括 數據結構、索引(切片)、向量化、廣播和規約。
2、NumPy對分布式并行計算的支持
現在各種大數據集規模都很大,超過一臺機器的存儲容量,需要存儲在多臺機器上或云中。同時由于需要加速深度學習和人工智能應用,出現了各種專門的加速器硬件,如圖形處理單元(GPU)、張量處理單元(TPU)和現場可編程門陣列(FPGA)。由于其內存數據模型,NumPy目前無法直接利用此類專用硬件。然而,無論是分布式數據還是GPU、TPU、FPGA的并行執行方式都很符合數組編程范式。不管怎樣,現代硬件體系結構與利用其計算能力所需的工具之間存在差距。
目前,在縮短這一差距方面所做的努力有,包括 GPU數組、稀疏數組和分布式數組。每個深度學習框架創建了它們自己的數組:PyTorch38、Tensorflow39、Apache MXNet40和JAX數組都能夠以分布式方式在CPU和GPU上運行,使用延遲求值來允許額外的性能優化。SciPy和PyData/Sparse都提供稀疏數組,這些數組通常包含很少的非零值,為了提高效率,它們只存儲在內存中。此外,還有一些項目如Dask實現了分布式數組。但不管是哪種方式,他們通常會為開發人員提供類似于Numpy的數組表示、操作和API,以便開發人員能更快地適應。
為此,為了支持這些外部數組對象之間的數組操作,NumPy添加了中央協調機制及其API的功能,使得 NumPy數組、GPU數組、分布式數組等之間可以進行切換。這樣用戶就只需要編寫一次代碼。為了實現這種互操作性,NumPy提供了一種“協議”,允許將專門的數組傳遞給NumPy函數(圖)。反過來,NumPy根據需要將操作分派到原始庫。包括Dask、CuPy、xarray和PyData/Sparse在內的流行庫都實現了這些協議。因此,用戶現在可以使用Dask將他們的計算從單機擴展到分布式系統。通過這些協議,也 允許用戶在分布式、多GPU系統上大規模地重新部署NumPy代碼。使用NumPy的高層API,用戶可以在具有數百萬核的多個系統上利用高度并行的代碼執行,所有這些操作都只需進行最小的代碼更改。
【1】《Python爬蟲大數據采集與挖掘》(清華大學出版社,2020)一書,配備教學PPT、案例和代碼、講解視頻,實踐性強,是學生非常喜歡的課程,是大數據教學和研究必不可少的第一個環節。歡迎選做大數據相關專業的教材。()
【2】《互聯網大數據處理技術與應用》(清華大學出版社,2017),互聯網大數據的開放性更好、具備大數據的各種典型特征,是學習大數據技術最好的切入點。本書包含了互聯網大數據采集、信息提取技術、非結構數據的結構化、大數據語義技術、分析模型算法、大數據隱私保護等。()
提供300分鐘視頻講解,教學大綱、課件、教案、習題答案、程序源碼等配套資源。
掃碼,優惠購書
凡是在京東購書的用戶,可以將訂單信息和評價發到itbook8@163.com,將會獲取超值大禮包(包括案例源碼,超多的視頻教程,數據集等資源)返回搜狐,查看更多
責任編輯: