教材:10710周志遠教授平行程式 https://www.youtube.com/playlist?list=PLS0SUwlYe8cxqw70UHOE5n4Lm-mXFXbZT 20250914 筆記 內容可能有錯僅供參考 在這個章節開始投影片和10710周志遠教授平行程式有差異,接下來以 NTHU-PP-2021 (Chinese) 為主 [NTHU-PP-Chap10-Big Data-Part1](https://www.youtube.com/watch?v=lag1UD8NDCw&list=PLQTDfc8kgjhMKtgumyK0gmEelnTtqJGsp&index=22) 21C~21D Parallel Reduction / Distributed Computing Framework 今日大綱 1. 分散式運算與平行運算的區別 2. 巨量資料 (Big Data) 的崛起與重要應用 3. 巨量資料的定義與 5V 特性 #### 1. 分散式運算 (Distributed Computing) 與平行運算 (Parallel Computing) 的區別 * 本課程將從平行運算轉向**分散式運算**。 * **平行運算**和**分散式運算**在本質上非常不同,因為它們解決的問題、注重的點以及應用場景都不同。 * **平行運算**: * 通常與**高效能計算 (High-Performance Computing, HPC)**相關,注重**效能**。 * 更偏向**演算法**層面,專注於拆解單一演算法的計算方法。 * 常運行於超級電腦 (supercomputer) 或單一叢集 (single cluster)。 * **分散式運算**: * 更多是為了解決**應用**層面的問題,需要**可擴展性 (scalability)**來處理**大型問題**。 * 有時**效能不是最重要**的考量。 * 常運行於資料中心甚至網際網路上,考量點與平行運算完全不同。 * 更偏向**系統**層面,因此常被稱為**分散式系統 (distributed system)**。分散式系統是為了實現分散式運算而建構的系統。 * 對一般人而言,接觸**分散式運算**或**分散式系統**的機會可能更大。 #### 2. 巨量資料 (Big Data) 的崛起與重要應用 * 本課程將介紹兩個非常重要的應用領域:**巨量資料 (Big Data)**和**人工智慧 (AI)**,尤其是深度學習 (Deep Learning)。 * 在 AI 興起之前,**巨量資料**曾是熱門話題並持續了一段時間。 * 當前的熱門計算問題(如巨量資料和深度學習)都涉及**大量計算與資料處理**,因此都需**依賴分散式計算**。 * 在分散式計算中,較低階或效能關鍵的部分仍會利用 **GPU (圖形處理單元)**和**平行計算技巧**來提升計算效能。 * 巨量資料解決方案是一個問題類型,包含各式各樣的解決方案。 * **Hadoop** 和 **MapReduce** 是開啟巨量資料時代最主要的推手或發明。它們不僅是程式模型,更是實際的**系統**。 * **系統計算**非常重要,如同 AI 和深度學習的例子:理論存在數十年,但直到 **GPU 應用**提升了計算效能,才使其變得可行並展現出其優勢。 * **MapReduce** 是 Google 的解決方案,但**未開源**。 * **Hadoop** 是開源的解決方案。本課程會介紹 Hadoop 的程式設計 ,並會安排實驗學習程式碼和使用方法。 * 巨量資料的核心問題是**資料量大到難以處理**。 * 資料的產生量和成長速度都非常驚人,例如十年內資料量增加了 50 倍。 * **COVID-19 疫情**加速了線上化和資訊化,導致資料量進一步激增。 #### 3. 巨量資料量暴增的原因 * **資料來源變多**:各種感測器、設備 及資訊應用的出現,每個應用都產生資料。例如,**元宇宙 (Metaverse)、AR、VR**等技術帶來高解析度圖形等驚人資料量. * **資料保存觀念改變**: * 以前的商業應用常在資料使用後即丟棄,因為儲存成本高且未意識到其價值。 * 巨量資料時代意識到**所有資料都可能很有價值**,因此傾向於**先收集再說**,導致資料快速累積而非丟棄。 * **歷史背景**:巨量資料問題並非全新。最早的超級電腦就是為了解決科學計算問題,例如天文觀測中的正地雷達陣列,其一天產生的資料量在多年前就非常驚人,甚至連資料傳輸都是大問題。 #### 4. DIKW 金字塔 (Data-Information-Knowledge-Wisdom Pyramid) * 這個理論闡述了資料的**價值遞進**過程。 * **Data (資料)**:原始、未經處理的數據,可以是任何產生的東西,甚至二進位訊號 (binary signal)。 * **Information (資訊)**:經過處理、分析或前處理後的資料,具有**意義**。不必要的資料會被丟棄,有用的資料經過彙整後成為資訊。 * **Knowledge (知識)**:能夠理解資訊的**含義**、解釋「為什麼」(why) 或「怎麼做」(how)。例如,理解圖畫的含義、課堂上傳授的定義和方法。 * **Wisdom (智慧)**:最高層次,指**學以致用**,能夠解決問題、做出決策、產生價值 (value) 或達到目標,例如安全駕駛或下棋獲勝。 #### 5. 巨量資料與人工智慧的關係 * **巨量資料**主要處理從**資料 (Data) 到資訊 (Information)**,甚至輕微觸及知識 (Knowledge) 的階段,它從最底層開始往上。 * **AI (人工智慧)**,特別是深度學習,則旨在實現**智慧 (Wisdom)**,讓系統具備判斷和創造價值的「智能」。 * 兩者**相互關聯,無法獨立發展**。要發展 AI,必須有堅實的巨量資料基礎建設,否則沒有資料和資訊,AI 難以成功。 * 巨量資料時代來臨不久後,AI 時代也隨之來臨,印證了兩者的緊密聯繫。 #### 6. 巨量資料的實踐過程 * 巨量資料的實現目標過程主要包括: 1. **收集資料 (Data Collection)**:從多樣化的資料來源 (diverse dataset) 獲取資料,例如感測器、機台、手機。 2. **資料分析 (Data Analysis)**:巨量資料的分析通常較為簡單,偏向統計分析,而非傳統資料處理注重複雜演算法的分析。 3. **產生價值 (Deliver Value)**:最終目標是產生任何形式的**商業決策 (business decision)**或**智慧 (intelligence)**。 * 在產生價值方面,巨量資料透過簡單統計分析,可能無法做到非常「智能」的決策。 * **AI 彌補了這一塊**,使得資料更容易轉化為價值,因為 AI 的核心是學習 (learn)。 * **價值 (Value) 是最重要**的,缺乏應用和產品化的技術難以持續。 * **跨領域人才**極為重要,能將技術與使用者端結合,將技術轉化為實際應用和價值。 #### 7. 巨量資料的經典案例:尿布與啤酒 * 這個案例發生在像沃爾瑪 (Walmart) 或全聯 (PX Mart) 這樣的大賣場。 * 賣場商品擺放的學問:好的擺放能增加顧客注意力,提升購買慾望和營業額。 * 賣場透過**巨量資料分析**,發現**啤酒和尿布**的關聯性非常高。 * 方法:透過**統計客戶發票**上商品同時出現的機率。 * 結果:將啤酒和尿布擺放在一起,成功**增加了營業額**。 * 這個案例的特點是:即使**不知道背後的原因**(例如新生兒家庭的慶祝或先生的苦悶),僅憑**數據統計結果**就能做出正確的商業決策並取得效果。這顯示了巨量資料的特性:**知道結果,即使不知道原因也能行動**。 * 前提是**資料量必須夠大**,才能確保統計結果的**可信度 (credibility)**。 #### 8. 深度學習 (Deep Learning) 的特性 * 深度學習目前非常熱門,其強大之處在於: * **通用近似函數 (Universal Approximation Function)**:理論證明神經網路 (neural network) 可以近似任何映射問題,解決複雜問題。 * **結構化與彈性**:類似積木堆疊,可用模組化方式堆疊不同層 (layer) 和網路 (network) 來呈現概念,實現不同想法。 * **學習能力**:資料量越多,學習結果越好。反之,如果資料不足,深度學習的效果會大打折扣 (**Garbage In, Garbage Out**)。 * 因此,**巨量資料是深度學習非常重要的前置條件**。 #### 9. 資料與 AI 相關職位 * 資料處理流程從資料到智慧的轉變,對應到業界的不同職位。 * **Data Engineer (資料工程師)**: * 更偏向**計算**和**系統**層面,負責處理資料的工具、基礎設施 (infrastructure)、系統建制和資料管理。 * 需熟悉 Hadoop 等工具、資料架構 (data architecture) 和資料管理。 * **Data Scientist (資料科學家)**: * 在資料工程師提供的基礎設施之上,利用機器學習 (machine learning) 和統計 (statistics) 等**演算法和分析**方法,從資料中提取含義,達到知識 (Knowledge) 層次。 * 通常專注於資料本身的含義,是**資料驅動 (data driven)**,而非應用驅動 (application driven)。 * **AI Scientist (人工智慧科學家)** / **AI Engineer (人工智慧工程師)**: * 將資料科學家的分析成果轉化為**產品 (product)**或**應用 (application)**,例如自動駕駛車或人臉辨識 App。 * 更強調**應用驅動 (application driven)**,需要深度學習和其他技術,並需要跨領域的合作。 * **ML System (機器學習系統)**:AI 工程師會負責為 ML 和 AI 構建和管理所需的系統和流程基礎設施。 * AI 科學家可能更多地專注於學習和設計模型本身。 #### 10. 巨量資料的定義與 5V 特性 * **巨量資料的定義是與時俱進的**。 * 1956 年,5MB 的資料量就需要動用大型機器甚至飛機來運輸,當時就是一個巨量資料問題。 * 2016年 100 PB 的資料量仍需要卡車運輸硬碟來解決資料傳輸問題,如同 AWS 等雲服務提供商的搬遷服務。 * 因此,巨量資料的定義是:**過去或現有方法無法解決的資料處理問題**,就可稱之為巨量資料。資料量即使很小,在特定情境下也可能構成巨量資料問題。 * 巨量資料通常用五個 V (5V)來描述其挑戰和特性: 1. **Volume (資料量)**:最直接的挑戰,資料量龐大到記憶體、硬碟無法容納,甚至傳輸和處理都困難。 * 大量的資料中,非結構化資料 (unstructured data)佔比較高。 * 這與資料來源的多樣化有關。 2. **Variety (多樣性)**:指資料來源、格式和類型非常多元,特別是**非結構化資料**問題。 * 傳統的關聯式資料庫 (relational database) 或 SQL 資料庫 (SQL database) 主要處理結構化資料,無法有效處理非結構化資料。 * 需要能夠處理各種資料類型的系統或工具。 * **MapReduce** 被認為是解決資料量和多樣性問題的良好方案。 3. **Velocity (即時性)**:指資料處理的**速度要求**。資料需要**快速**處理,常與串流資料 (streaming data)處理相關。 * 這是巨量資料時代越來越重要的問題,因IoT (物聯網)和社群網路 (social network)等應用產生大量即時、高速率且需要短回應時間的串流資料。 * 這些資料通常無法長期保留,或累積速度太快。 * 解決即時性問題的方案(如串流處理工具)通常**依賴分散式計算和平行計算**。 4. **Veracity (真實性/準確性)**:指資料的**可疑性**和**準確度**問題。 * 傳統資料處理要求資料在分析前必須是正確的,但這會導致丟棄大量(例如來自感測器噪聲、封包遺失等)不準確的資料。 * Veracity 的重點是即使在資料不完全可靠的情況下,也能從中**發現有用的結果**。 * 它專注於從那些傳統會被丟棄的「**暗資料 (dark data)**」中找到價值。 * 這部分問題與分散式計算的關係較小,工具更偏向演算法。 5. **Value (價值)**:最重要的 V。所有技術和挑戰的克服最終都必須**產生價值**。 * 雖然前四個 V 是技術挑戰,但**落地 (implementation)**和**產生價值**才是最難成功的部分。 * 這往往需要跨領域的專業知識,而不僅僅是資料或科學工具所能單純解決的。 #### 11. 資料分析的挑戰與工具的重要性 * 資料分析是一個困難的問題,如同廣告商不確定哪一半廣告有效一樣。 * 解決巨量資料問題的關鍵方式之一是擁有正確的工具和方法。 * 工具的出現可以徹底改變問題的解決方式和效率,例如機械化收割取代人工。 * **Hadoop** 和 **MapReduce** 正是這樣的工具,它們的出現開啟了巨量資料時代。 * 透過學習這些工具的 API 和程式設計模型,就能具備處理巨量資料問題的能力。 --- 其他課程連結 [平行程式1C~2B Introduction parallel programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/Syxh3H7Kxe) [平行程式3A~3D The Latest Developments and Applications Using Parallel Programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJh7QFVKle) [平行程式4A~4B IO Parallel IO and Program Analysis](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJLMsuHFgg) [平行程式5A~5B The Latest Developments and Applications Using Parallel Programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/SJh57hIFle) [平行程式6A~6B Communication Routines and Parallel Function Code](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/r1X9kX_Fle) [平行程式 6C~6D Communication Routines and Parallel Function Code](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/S1DPjoYFlx) [平行程式 7A~8A Pthread:Synchronization Problem & Tools](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJu-_0tKge) [平行程式 8B~8D Synchronization Tools & Open Multi-Processing(OpenMP)](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1ki4E2Fee) [平行程式 9A~9B Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJTYMrpKlx) [平行程式 10A~10B Synchronization Tools & Open Multi-Processing Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/B1cY6M1qee) [平行程式 10C~10D Synchronization Tools & Open Multi-Processing Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BkgFaNg5gg) [平行程式 11A~11B Parallel Work Pool and Termination / Parallel Sorting](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1hfOw-5xl) [平行程式 12A~12B Parallel Sorting and Pipelined Computations](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/Symo-zQ9eg) [平行程式 12C~12D Parallel Sorting and Pipelined Computations](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJYNKDVceg) [平行程式 13A-13B Sychronous Parallelism](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJ2UJ2Bqex) [平行程式 14A~14B Heterogeneous Computing](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BksS4yP5eg) [平行程式 14C~14D Heterogeneous Computing](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJrfTUd9xx) [平行程式 15A~15B Parallel Programming Model on GPU](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/ByWnl-t5gg) [平行程式 16A~16B What is Compute Unified Device Architecture(CUDA)?](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HyYpsjcqgl) [平行程式 17A~18A 平行運算的CUDA](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1dUeBT5lg) [平行程式 18B~19A 記憶體層級 / CUDA的優化](https://hackmd.io/@JuitingChen/HyF44e1jge) [平行程式 19B~19D 記憶體層級 / CUDA的優化 ](https://hackmd.io/@JuitingChen/ryPEu4lieg) [平行程式 20A~20B CUDA優化全域和區域記憶體/共享記憶體](https://hackmd.io/@JuitingChen/r1X659Zoxl) [平行程式 21A~21B Parallel Reduction / Distributed Computing Framework](https://hackmd.io/@JuitingChen/HyiOpozjxl) [平行程式 NTHU-PP-Chap10-Big Data-Part1 ](https://hackmd.io/@JuitingChen/Hyc-e3Golx) [平行程式 NTHU-PP-Chap10-Big Data-Part2 ](https://hackmd.io/@JuitingChen/ryC_QTXoxl) [平行程式 NTHU-PP-Chap11-MapReduce](https://hackmd.io/@JuitingChen/HJgBXJOsge) [平行程式 NTHU-PP-Chap12-Distributed Training-Part1](https://hackmd.io/@JuitingChen/ryh5hBtsge) [平行程式 NTHU-PP-Chap12-Distributed Training-Part2](https://hackmd.io/@JuitingChen/rJ2G7kdjxg) [平行程式 NTHU-PP-Chap12-Distributed Training-Part3](https://hackmd.io/@JuitingChen/HkA471dilx) [平行程式 NTHU-PP-Chap13-UCX-Part1](https://hackmd.io/@JuitingChen/rJbq103ieg) [平行程式 NTHU-PP-Chap13-UCX-Part2](https://hackmd.io/@JuitingChen/SJpNmk_ixl) [平行程式 NTHU-PP-Chap13-UCX-Part3](https://hackmd.io/@JuitingChen/HkIUYa13xe)