• 沒有找到結果。

金融大數據與深度學習平台之設計與實作 - 政大學術集成

N/A
N/A
Protected

Academic year: 2021

Share "金融大數據與深度學習平台之設計與實作 - 政大學術集成"

Copied!
70
0
0

加載中.... (立即查看全文)

全文

(1)國立政治大學資訊管理學系. 碩士學位論文 指導教授:劉文卿 博士. 立. 政 治 大. ‧ 國. 學. 金融大數據與深度學習平台之設計與實作. ‧. io. n. al. sit. Deep Learning Platform. er. Nat. y. Design and Implementation of the Big Data in Finance and. Ch. engchi. i n U. v. 研究生:陳昱銘 撰 中華民國一〇六年七月.

(2) 摘要 本研究主旨是希望提供一個智能金融演算法交易平台,以 Django CMS 作為 網頁框架,區分成研發環境與交易環境,完整的功能包含用戶研發、用戶測試 以及使用演算法服務。用戶研發與測試上採用 IPython 的互動式開發介面,利用 JupyterHub 進行管理與配置,能夠同時提供多個用戶存取平台,使得平台足以 負載大規模用戶的使用;而演算法服務經由 Celery 包裝成任務,以利交付給後 台進行分散式運算。搭上近年來深度學習的熱潮,平台額外擴充 Tensorflow 套. 政 治 大. 件與 GPU 建置,支援多核及高速演算法運算。. 立. 面對存取大量、複雜且結構化的金融資料,本研究的資料庫採用 HAWQ 做. ‧ 國. 學. 為解決方案,利用其極大量平行化的架構,改善過往存取大數據所造成的系統 複雜性與效能瓶頸,並搭配 Ambari 達到創建、監視及管理 Hadoop 分散式集群. ‧. 的功用,讓開發者在部署與維運上都將事半功倍。. sit. y. Nat. io. er. 由於採用新的資料庫 HAWQ,傳統的資料表設計將不利反傷,因此本研究 會針對程式端存取資料庫裡的金融資料,量身打造適合的資料表設計,並對其. al. n. v i n Ch 做效能評測,以確保資料能有效且迅速地被程式所取用。 engchi U. 關鍵字:金融大數據、深度學習、極大量平行運算、FinTech、IPython、. JupyterHub、GPU、Tensorflow、HAWQ、Hadoop、Celery. I.

(3) ABSTRACT The purpose of this research is to provide a smartly algorithmic trading platform with financial data. I use Django CMS as a web framework and consisting of Develop environment and Trade environment. The entire functions of the platform include “User Research and Development”,” User Testing” and “Algorithmic Services”. “User Research and Development” and “User Testing” using IPython interactive development interface, with JupyterHub management and configuration, can simultaneously provide multiple user accessing and make the platform enough to. 政 治 大 algorithms into tasks can facilitate the delivery to the Server for distributed computing. 立 By means of the growth of Deep Learning in recent years, the platform adds extra support more and more users; “Algorithmic Services” using Celery to package. ‧ 國. 學. Tensorflow and GPU deployment to support multi-core and high-speed algorithm computing.. ‧. y. Nat. In face of accessing large number of complex and structured financial data, I. sit. choose HAWQ as the database in this research. Its extremely massively parallel. er. io. processing can alleviate the complexity of system and the bottlenecks of efficiency. al. v i n Cmonitoring achieve the functions of creation, management of Hadoop distributed U h e n g and i h c n. caused by accessing massive number of data. Combing HAWQ with Ambari can. cluster. The developers will do much more easily in deployment and maintenance.. The traditional table design may not fit in with the new database HAWQ, so this research will design appropriate table, and evaluate its performance to ensure that data can be accessed effectively and quickly from programs.. Keyword:FinTech、Deep Learning、Massively Parallel Processing、Django、 IPython、JupyterHub、Celery、GPU、Tensorflow、HAWQ、Hadoop. II.

(4) 目次 摘要. ....................................................................................................................... I. ABSTRACT ..................................................................................................................... II 目次. ..................................................................................................................... III. 表次. ...................................................................................................................... V. 圖次. ..................................................................................................................... VI. 第一章 緒論 .............................................................................................................. 1 第一節 研究背景與動機 ................................................................................................. 1 第二節 研究目的 ............................................................................................................. 2 第三節 研究流程 ............................................................................................................. 3. 立. 政 治 大. ‧. ‧ 國. 學. 第二章 文獻探討 ...................................................................................................... 5 第一節 演算法交易 ......................................................................................................... 5 一、 起源與發展 ......................................................................................................... 5 二、 定義 ..................................................................................................................... 6 三、 交易策略 ............................................................................................................. 6 第二節 HAWQ ................................................................................................................. 8 一、 Massively Parallel Processing ............................................................................. 8. sit. y. Nat. 三、. HAWQ 架構與組成元件 .................................................................................. 11. 第三節. HADOOP ............................................................................................................. 14. er. HAWQ 起源與介紹 .......................................................................................... 10. io. 二、. al. 三、. Ambari ............................................................................................................... 17. 第四節. JUPYTERHUB ..................................................................................................... 18. 第五節. 深度學習 ........................................................................................................... 20. 一、. n. 二、. v i n C hSystem (HDFS) .......................................................... Hadoop Distributed File 14 engchi U YARN ................................................................................................................ 15. Tensorflow ...................................................................................................................... 21 第六節. DJANGO CMS .................................................................................................... 23. Mezzanine ...................................................................................................................... 23 第七節. CELERY .............................................................................................................. 24. RabbitMQ ....................................................................................................................... 24 Celery 運作流程 ............................................................................................................ 25 Celery 特性 .................................................................................................................... 26. 第三章 系統架構與功能 ........................................................................................ 27. III.

(5) 第一節. 架構說明 ........................................................................................................... 27. 三層式架構( 3-Layer Architecture) ............................................................................... 27 一、. 使用者介面層(Presentation Layer) ................................................................... 29. 二、. 商業邏輯層(Business Logic Layer) .................................................................. 30. 三、. 資料存取層(Data Access Layer) ....................................................................... 31. 第二節. 資料表設計 ....................................................................................................... 33. 一、. 金融資料來源 ................................................................................................... 33. 二、. 資料表基礎概念設計 ....................................................................................... 34. 三、. 單一數值型資料表 ........................................................................................... 36. 四、. 陣列型資料表 ................................................................................................... 38. 第四章 系統實作 .................................................................................................... 39 第一節 開發設計 JUPYTERHUB ........................................................................................ 39 第二節 應用服務 CELERY ............................................................................................... 47 第三節 資料庫 HAWQ .................................................................................................. 50. 立. 政 治 大. ‧ 國. 學. 第五章 系統測試 .................................................................................................... 53 第一節 平台負載能力 ................................................................................................... 53 第二節 資料庫效能 ....................................................................................................... 55. ‧. 第六章 結論與未來展望 ........................................................................................ 59 第一節 結論 ................................................................................................................... 59 第二節 未來展望 ........................................................................................................... 60. y. Nat. n. al. er. io. sit. 參考文獻 .................................................................................................................... 61. Ch. engchi. IV. i n U. v.

(6) 表次 基金名稱資料表 ........................................................................................ 34 ETF 名稱資料表 ........................................................................................ 34 基金歷史淨值資料表 ................................................................................ 36 ETF 數值資料表 ........................................................................................ 36 陣列型資料表 ............................................................................................ 38 複雜度較低的測試數據表 ........................................................................ 57 複雜度低的測試數據表 ............................................................................ 57. 立. 政 治 大. 學 ‧. io. sit. y. Nat. n. al. er. 三-1 三-2 三-3 三-4 三-5 五-1 五-2. ‧ 國. 表 表 表 表 表 表 表. Ch. engchi. V. i n U. v.

(7) 圖次 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 一-1 研究流程 ...................................................................................................... 4 二-1 演算法交易之交易量發展趨勢 .................................................................. 6 二-2 MPP 落後者現象 ......................................................................................... 9 二-3 MPP 與 Hadoop 比較 ................................................................................ 10 二-4 HAWQ 架構圖 ........................................................................................... 11 二-5 HAWQ 內部架構圖 ................................................................................... 13 二-6 HDFS 架構圖 ............................................................................................. 15 二-7 YARN 架構圖 ............................................................................................ 16 二-8 Ambari 圖形化介面 ................................................................................... 17 二-9 JupyterHub 架構......................................................................................... 19 二-10 Computational Graph ............................................................................... 22. 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 二-11 詳解 Computational Graph ...................................................................... 22 二-12 AMQP 訊息傳遞流程.............................................................................. 24 二-13 Celery 運作流程....................................................................................... 26 三-1 三層式架構 ................................................................................................ 27 三-2 智能金融演算法雲端平台架構總圖 ........................................................ 28 三-3 Presentation Layer ...................................................................................... 29 三-4 Business Logic Layer ................................................................................. 31 三-5 Data Access Layer ...................................................................................... 32 三-6 Data Mapping ............................................................................................. 37 四-1 DockerSpawner Single-user Dockerfile ..................................................... 40. 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖 圖. 四-4 Docker Swarm 結構圖 ............................................................................... 44 四-5 Swarm 集群的節點資訊 ............................................................................ 45 四-6 Swarm Container 的運行狀態 ................................................................... 45 四-7 所有 Container 的運行狀態....................................................................... 46 四-8 創建使用者的 Shell Script ........................................................................ 47 四-9 Celery 組態配置 ......................................................................................... 49 四-10 Docker HAWQ 各容器狀態 .................................................................... 50 四-11 Resource Queue 配置 ............................................................................... 51 四-12 Capacity Schedule 配置 ........................................................................... 52 五-1 50 名使用者測試時間統計 ....................................................................... 54 五-2 容器執行測試程式狀態 ............................................................................ 54 五-3 資料庫效能測試程式 ................................................................................ 56. 立. 政 治 大. ‧. ‧ 國. 學. er. io. sit. y. Nat. al. n. v i n C h ....................................................................... 圖 四-2 Nvidia Docker Architecture 42 engchi U 圖 四-3 Single-user with GPU Dockerfile ............................................................... 43. VI.

(8) 第一章. 第一節. 緒論. 研究背景與動機. 近年來,金融科技 (Financial Technology)日益發達,隨處即可在企業中見到 它的影子,KPMG[1]統計,金融科技的交易額在 2015 年達到歷史新高,而創投 公司也較去年成長了百分之一百零六,也難怪摩根大通的執行長 Jamie Dimon. 政 治 大 爾街的午餐。然而過去台灣法規較嚴謹、金融環境開發不足,因此起步較其他先 立. 於 2015 年 4 月曾說:「Silicon Valley is coming.」,意味著未來矽谷將會吃掉華. 進國家來得晚,《金融科技發展策略白皮書》[2]一書提到,金管會將於 2014 年. ‧ 國. 學. 後積極打造數位化金融環境,並加速科技金融人才培訓與產業的後續規劃,若是. ‧. 能在此時抓緊先機,為台灣的金融科技紮根,必然會向前邁進一大步。. sit. y. Nat. io. er. 金融科技的發展,促成金融產業轉型,傳統的人工判斷被電腦科技所取代, 透過其處理資訊的速度與客觀的判斷,直接對市場訊息做出決策並自動執行交. al. n. v i n Ch 易,不只提升以往判斷的精準度,優化的演算法模型更能為組織帶來極佳收益, engchi U 因此本研究將針對演算法交易的方向做進一步探討。. 要如何擴大演算法交易的研究團隊、提升演算法開發的速度,並縮短與金融 科技先進國家的差距呢?本研究參考美國的 Quantopian、 QuantConnect 和英國 的 Cloud9trader,決定建置演算法交易雲端平台,讓交易者搖身一變,成為開發 者,透過瀏覽器即可撰寫程式、執行交易測試,實現過往只有大型機構底下內部 人員才能進行的開發工作。此外,平台也追加社群功能,讓開發者可以在上面共 同研究與討論,有效提升整體研發效率,最終希望此平台能匯集眾人的智慧,藉 此形成集體力量,幫助台灣的投資者投資全球。 1.

(9) 不過單純提供一個開發平台是不足以吸引大量的投資者與開發者,因此為了 要回饋在平台上開發演算法的使用者,平台將會把使用者的演算法包裝成一個獨 立服務,並上架開放給有興趣的投資者下單購買,除了保障開發者的智慧財產權 外,也讓投資者有機會賺取該演算法帶來的市場利潤。. 除了金融科技日益茁壯,深度學習( Deep Learning)也不遑多讓,還記得 Google AlphaGo 在 2016 年 3 月,以四勝一敗的佳績勝過世界第一的南韓圍棋棋 士[3],讓深度學習這個名詞紅遍大街小巷。在應用面上,深度學習發展地十分. 政 治 大 以引入深度學習的概念,並應用在金融科技上,相信兩者結合後必定會迸出美麗 立 全面,像是臉部偵測[4]、聲音辨識[5]等,因此本研究希望讓此平台的開發者可. 的火花,讓金融產業的投資曲線趨向零風險。. ‧. ‧ 國. 學 研究目的. n. er. io. al. sit. y. Nat. 第二節. i n U. v. 在過去要做到演算法交易的條件十分困難,除了程式的環境建置之外,用來. Ch. engchi. 儲存巨量金融資料的資料庫也非常重要,而複雜又精密的演算法運算,所耗的計 算資源更是不在話下,所以對於一名投資開發者來說,這門檻的確很高。因此本 研究將程式開發前的環境及資料庫都建置完成,並藉由網站提供使用者的開發介 面,希望讓開發者不需顧慮到硬體設備及系統維運問題,更專注於演算法的撰寫。. 此雲端演算法交易平台有以下幾個特點: 1. 資料庫儲存近十年來每日、每時的基金與 ETF 的資料,並透過排程每天 自動更新。. 2.

(10) 2. 平台建置在雲端上,讓使用者透過瀏覽器直接存取使用,此外平台也提 供社群功能,讓開發者可以在上面盡情學習、討論。 3. 引入深度學習套件,提升演算法交易的準確度,並搭配 GPU 的使用, 加速演算法運算的速度。 4. 下單交易採用區塊鏈,透過分散式帳本的技術,讓每筆交易都安全、透 明且低成本地被記錄下來. 政 治 大. 立第三節. 研究流程. ‧ 國. 學. 本研究的流程圖如下,分為六個階段,分別是定義問題、文獻探討、系統架. ‧. 構設計、系統實作、系統測試、結論及未來展望。. sit. y. Nat. al. er. io. 首先從既有的研究背景下定義問題,再針對相關領域的文獻進行深入探討,. v. n. 將以上之基礎,設計出本研究的系統架構,並實作完整的系統,而後再進行一連. Ch. engchi. i n U. 串的系統測試來證明系統可用性。最後將總結本研究的成果、貢獻,並探討其未 來的改善空間。. 3.

(11) 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. C圖h 一-1 研究流程 U n i engchi. v. (資料來源:本研究繪製). 4.

(12) 一、. 第二章. 文獻探討. 第一節. 演算法交易. 起源與發展. 最早始於 70 年代早期,其指標是紐約証卷交易所( New York Stock Exchange, NYSE)引入訂單傳送及成交回報系統( Designated Order Turnaround, DOT)與開盤. 政 治 大 後期,美國證卷市場已全面發展電子化交易,並廣泛地應用在股票與期貨的跨市 立 自動報告服務系統( Opening Automated Reporting System, OARS)。進入 80 年代. 場指數套利交易中。隨著電信網路的發展, NYSE 在 1997 年推動將分數制報價. ‧ 國. 學. 改為十進位小數制報價[6],此舉改變了金融市場的微觀結構,使得買賣價差可. ‧. 以變得更小,改變造市者的優勢,也降低了市場流動性,促成日後演算法交易的. sit. y. Nat. 發展。市場流動性的降低,趨使機構投資者使用計算機分割交易指令,從而使下. io. er. 單指令能在在更優渥的價格上成交,此即為最初的演算法交易策略。分別為時間 算術平均價( Time Weighted Average Price, TWAP)、成交量加權平均價( Volume. n. al. Ch. Weighted Average Price, VWAP)[7]。. engchi. i n U. v. 隨著電子市場日益成長,各式各樣的演算法策略也如雨後春筍般出現,這些 策略包含統計套利、期限套利、均值回歸及趨勢追隨等。根據 2003~2012 共十年 的統計資料顯示[8],在 2007 年演算法交易的交易量成長為去年的一半,而在 2009 年後,發展漸趨穩定,確保演算法交易的地位,並促使未來更多樣化的演算法被 開發出來。. 5.

(13) 政 治 大. 圖 二-1 演算法交易之交易量發展趨勢. 立. ‧. ‧ 國. 學. 二、. (資料來源:[8]). 定義. y. Nat. er. io. sit. 演算法交易( Algorithmic Trading)又稱為自動交易( Automated Trading),是指 先擬定好交易策略,將其編譯成電腦程式,利用電腦程式的演算法來決定交易下. al. n. v i n Ch 單的價格、時機和數量等。演算法交易的目的即是優化交易的進行,間接地管理 engchi U 交易成本和風險,從中獲取利潤。. 三、. 交易策略. 演算法交易的目標在於降低交易成本及風險, Merton[9]指出,證卷創新的 關鍵之一即是降低交易成本,而 Domowitz 等[10]在他的研究發現,未採用演算 法交易的成本遠超過有採用,此外, Barclay 等[11]的研究顯示演算法交易的可. 6.

(14) 流動性,有效避免市場衝擊,降低交易風險。因此,大部分的交易策略將圍繞在 降低交易成本及降低交易風險兩大目標,以下為常用交易策略類型[12]: 1. 委託執行演算法:將大單指令拆分成多個小單指令,避免大單指令對市 場價格的衝擊,從而降低交易風險以尋求更好的下單價格。 2. 套利策略:典型的套利通常包含三個以上的證卷,選擇彼此之間市場價 格差異大且相關性低,以確保這幾筆交易無風險利潤。 3. 統計演算法:透過數量預測模型在市場尋求投資機會。. 政 治 大 因為背後的獲利潛能,而被視為商業機密,無法搬上檯面,徒具策略名稱而已。 立 除了上述三種交易策略外,實際被應用在市場的交易策略不勝枚舉,但往往. 這也是本研究希望能藉由此平台,讓投資開發者在上面腦力激盪,以追求更優化. ‧ 國. ‧. io. sit. y. Nat. n. al. er. 學. 的交易策略。. Ch. engchi. 7. i n U. v.

(15) HAWQ. 第二節. 一、. Massively Parallel Processing. 在介紹 HAWQ 之前,要先了解極大量平行化運算( Massively Parallel Processing, MPP)的架構, MPP 是透過大量的節點進行平行運算處理工作,將一 個工作切成許多步驟( Step),並由每個節點產生的執行器( Executor)來執行,而 其中每一個節點的作業系統與記憶體都是彼此分開。. 政 治 大 再來分析 MPP 架構的優缺點, 立. 優點:. ‧ 國. 學. 1. 資源隔離( Shared Nothing):一個執行器在執行步驟時,基本上不能訪問. ‧. 其他節點的資源,省去數據傳輸的時間。. y. Nat. 2. 平行處理( Parallelism):每個執行器會在各自的節點上同時執行相同步. er. al. v i n Ch 落後者現象( Stragglers):如果某個節點的執行器出了問題,其他節點就 engchi U n. 1.. io. 缺點:. sit. 驟,以加速程序工作的進行。. 要一起等到他執行完才能進行下個步驟,將會影響整體執行速度,如圖 2-2。 2. 低並行性( Low Concurrency):由於 MPP 是完全對稱,而且執行速度相 同,所以當節點增加時,各個節點執行器的吞吐量就會相對減少。. 8.

(16) 立. 政 治 大. ‧ 國. MPP 落後者現象. 學. 圖 二-2. (資料來源:[13]). ‧ y. Nat. sit. 同樣能處理大數據存儲的不只有 MPP, Hadoop 的 Hive[14],Hbase[15]也. n. al. er. io. 是個例子,而不同於 MPP 的是,Hadoop 主要重擴展性,可以接受更巨量的資. i n U. v. 料,也能組成一個數千節點的集群,但查詢速度則相對比 MPP 慢得許多。根據. Ch. engchi. Lei Chang 等[16] 的研究顯示,HAWQ 的執行速率為 Hive 的幾十倍,是因為 MPP 本身支援原生 SQL,因此在速率上才有明顯的差距。底下是根據 Alexey Grishchenko[17]的文章所繪製出的表格:. 9.

(17) 圖 二-3. MPP 與治 Hadoop 比較 政 大. 立(資料來源:本研究繪製). ‧. ‧ 國. 學. HAWQ 起源與介紹. sit. y. Nat. 二、. n. al. er. io. HAWQ 如何產生?它就是前一小節提到的 MPP 與 Hadoop 兩大架構,為了. i n U. v. 改善彼此原先架構的缺點而結合產生,透過 Hadoop MapReduce 的概念,讓集群. Ch. engchi. 的並行率提升許多,此外,以 Hadoop HDFS 為基底,支援遠程數據傳輸,借助 最小的網路節點來獲取數據,提高原先管線(pipeline)速度,而同一個節點也 可產生多個執行器,避免過往落後者的現象。. HAdoop With Query 是 HAWQ 字面上的定義,它的核心概念即為一個架設 在 HDFS 的 MPP 資料庫。HAWQ 資料庫的集群底下是由一個個 PostgreSQL 實 例所組合,形成一個大型資料庫管理系統(Database Mangement System, DBMS), 所有並行的 PostgreSQL 實例,其運行的查詢、優化器、查詢執行器等,都將經 過修改而優化。 HAWQ 本身也保有 MPP 的優點,完全支援原生 SQL 指令,另 10.

(18) 外由於 HDFS 存儲資料是 Append-only,因此 HAWQ 資料庫也為 Append-only 形 式。. 三、. HAWQ 架構與組成元件. 在 HAWQ 架構裡,每個 slave 節點都有一個實體 HAWQ Segment、HDFS DataNode,如果另外安裝 YARN 還會有 Node Manager,而這些服務都各自有一. 政 治 大 Manager。HAWQ Segment 在執行查詢時會生成多個查詢執行器( Query Executor, 立 個 Master 來控管,分別為 HAWQ Master、HDFS NameNode 和 YARN Resource. QE),來加快資料處理速度。下圖為 HAWQ 系統架構:. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. 圖 二-4 HAWQ 架構圖 (資料來源:[18]). 下面介紹 HAWQ 裡面的重要組件[19],如圖 2-4:. 11. v.

(19) 1. HAWQ Master:為整個系統架構的接口,所有客戶端下的指令都要經過 Master 後,再去溝通底下的 Segment,取得數據。Master 底下有幾個元 件:查詢解析器(Parser)、優化器(Optimizer)和查詢派遣器(Dispatcher)等。 2. HAWQ Segment:為系統平行處理資料的單位。當一個查詢從 Master 下 達後,執行引擎會啟動多個虛擬 Segment 同時執行查詢,每一個虛擬 Segment 會分配一個 QE 來進行,最後將結果並行處理完傳回 Master。 3. HAWQ Interconnect:透過 UDP 來完成節點間的數據傳輸,實現高速網 路服務。. 政 治 大 源,並有兩種模式 YARN、StandAlone 可以選擇。 立. 4. HAWQ Resource Manager:Master 要透過 Resource Manager 動態申請資. 些部分,用來存放資料在 HDFS 的位置訊息。. 學. ‧ 國. 5. HAWQ Catalog Service:Master 讀取後用來確定 Segment 要掃描表的哪. ‧. 6. HAWQ Fault Tolerance Service:負責檢測哪些節點失效,並排除之。. y. sit. io. n. al. er. 個過程。. Nat. 7. HAWQ Dispatcher:用以派遣計畫到節點上執行,並協調查詢執行的整. Ch. engchi. 12. i n U. v.

(20) 立. 政 治 大. ‧ 國. 學. 圖 二-5 HAWQ 內部架構圖 (資料來源:[18]). ‧ sit. y. Nat. HAWQ 是一個 Hadoop 原生的 MPP 資料庫分析引擎,功能類似傳統的關聯. al. n. 具有的特性,如下:. er. io. 式資料庫(Relational Database),但由於它架構特殊,所以有著大部分資料庫都不. Ch. engchi. i n U. v. l. MPP 架構,比起其他 Hadoop 的 SQL 引擎快上數倍。. l. 彈性的執行引擎,可以依據查詢指令的大小來決定使用節點個數及 QE 生成數目。. l. 高可擴展性,如同其他 Hadoop 開源軟體,可隨時增加節點數目。. l. Hadoop 原生的管理,可以透過 Hadoop Ambari 快速安裝部署,資源也 可以透過 YARN 來分配。. l. 支援高速網際網路,基於 UDP 達到數據快速傳輸。. l. 成熟的並行優化器,針對複雜的查詢,找出優化的查詢計畫。. 13.

(21) Hadoop. 第三節. Hadoop 最初由 Dong Cutting 等[20]開發,是一個能提供儲存並管理巨量數據 的雲端平台,由於它是 Apache 軟體基金會底下的開源軟體框架,在免費及龐大 的社群基礎上,因應設計許多與 Hadoop 配套支援的應用程式。此節主要針對 HAWQ 安裝部署時,會使用到 Hadoop 的應用程式,像是可以進行快速安裝部署 的 Ambari,或是幫助系統做資源分配的 YARN,亦或是作為系統底層下的分散 式檔案系統 HDFS 等,都將在本節提及。. 立. Hadoop Distributed File System (HDFS). 學. ‧ 國. 一、. 政 治 大. HDFS[21]為一個分散式檔案系統,當叢集底下有數以千計的機器,即可視. ‧. 作一台超級電腦,儲存 TB(Tera Bytes)或是 PB(Peta Bytes)以上的資料都不成問. sit er. io. Name Node. y. Nat. 題。而 HDFS 架構裡有幾個重要的構成元件,介紹如下[22]:. al. n. v i n Ch Name Node 為 HDFS 的核心元件,負責管理整個集群,每個集群裡就只有 engchi U. 一個 Name Node。此外,Name Node 裡面包含 Metadata,負責記錄所有檔案系統 的資料,像是權限、檔案 Block 位置等。 Data Node Data Node 為資料儲存的節點,儲存方式以 Block 作為單位,Block 大小預設 為 64MB,大量分散於各個 Data Node 底下,交由 Data Node 管理。每個 Name Node 都會定期與 Data Node 溝通,以確保它運行順利。 Secondary Node Secondary Node 主要是把 Name Node 每個階段的狀態紀錄成 log 檔,為 Name Node 建立系統還原點。 14.

(22) Backup Name Node Backup Name Node 即是 Name Node 的備援角色,當 Name Node 失效後,可 以馬上接替位置成為 Name Node。. 立. 政 治 大. ‧. ‧ 國. 學 (資料來源:[21]). n. 二、. Ch. engchi. y. sit. io. al. HDFS 架構圖. er. Nat. 圖 二-6. i n U. v. YARN. YARN 為 Hadoop 集群中的資源管理核心,舉例來說,當用戶向 YARN 提交 應用程式,便產生啟動 Application Master 的命令,並經由中央 Resource Manager 教派任務給底下節點上的 Node Manager,提供其 Container 資源讓 Application Master 得以啟動運行。同樣的,YARN 底下也由不少重要元件所組成,介紹如 下:. 15.

(23) Resource Manager Resource Manager 為 YARN 的核心元件,負責整個系統的管理與分配,為一 個全局資源管理器,整個集群裡只會有一個 Resource Manager。主要由 Resource Scheduler、Application Manager 所組成,Resource Scheduler 負責資源調度,將應 用程式放入隊列做排程管理;Application Master 則是負責應用程式的提交、啟 動、資源協商等程式管理。 Application Master 每一個應用程式會包裝成 Application Master,透過 Application Master 與. 政 治 大 在 Container 上運行該應用程式。 立. Resource Manager 協商資源,再與 Node Manager 溝通以獲取 Container 資源,並. Node Manager. ‧ 國. 學. Node Manager 分佈在各個節點,負責管理節點上的任務及資源。Resource. ‧. Manager 會定期與 Node Manager 溝通,以確保其運行順利。. n. er. io. sit. y. Nat. al. Ch. engchi. 圖 二-7. i n U. YARN 架構圖. (資料來源:[23]). 16. v.

(24) 三、. Ambari. 大數據的盛行,促使 Hadoop 發展迅速,底下開源軟體的成長速度更不在話 下,但管理眾多軟體及彼此版本相容性的問題,每每造成開發者在部署上的困 難,因此,Ambari 就誕生了,它將 Hadoop 上大部分的軟體整合起來,讓開發者 只需安裝 Ambari,剩下版本相容性等問題都將由 Ambari 一手包辦。. Ambari 為 Hadoop 平台上的搭建利器,主要負責創建、管理及監控 Hadoop. 政 治 大 的開源軟體,如 HDFS、YARN、Spark、Zookeeper、Hive 及 Kafka 等知名軟體。 立 集群,管理監控介面如圖 2-7。發展至今,Ambari 已經可以支援大量 Hadoop 上. Ambari 本身也是分散式架構的軟體,由 Ambari Server 及 Ambari Agent 所組成,. ‧ 國. 學. 使用者透過 Ambari Server 通知 Ambari Agent 上對應到的軟體,而 Ambari Agent. ‧. 會定期與 Ambari Server 回報自身節點的狀態,並將結果呈現在 Ambari 的圖形化. n. al. er. io. sit. y. Nat. 介面(GUI),以利開發者監控及管理。. Ch. 圖 二-8. engchi. i n U. Ambari 圖形化介面. (資料來源:本研究整理) 17. v.

(25) 第四節. JupyterHub. 在介紹此節之前,要先提到 IPython,IPython(Interactive Python)為一互動式 的 Python 解譯器,Fernando[24]研究表示 IPython 提供比原生 Python Shell 更強大 的編輯功能與互動性。而 IPython Notebook 則是建立在 IPython 上的 Web App, 透過 IPython 原有的互動功能,讓計算結果及資料都能即時呈現於瀏覽器上。 Jupyter[25]即是由 IPython Notebook 的構想而形成的,但它有更大的遠景,希望 Notebook 平台上面不單單只提供 Python,而是支援所有語言,像是 Ruby、PHP、. 政 治 大 發人數,再加上是免費開源軟體,所以本研究決定使用 Jupyter 作為我們演算法 立. Scala、R 等語言。現在 Jupyter 已經累積為數不小的社群,因為它的前瞻性、開. 交易的開發平台. ‧ 國. 學 ‧. 不過 Jupyter Notebook 原則上只能提供給單一使用者,如果要讓多人使用,. y. Nat. 就要選擇 JupyterHub。 JupyterHub[26]主要由 Hub、Configurable HTTP Proxy 及. er. io. sit. 大量 single-user Jupyter Notebook 所組成。當使用者透過瀏覽器使用 Jupyter Notebook 時,會先透過 Configurable HTTP Proxy 代理到 Hub 上,Hub 底下有. al. n. v i n Ch Authenticator 驗證使用者身份,一旦驗證成功後,會在 Hub 底下生成一個 engchi U. Spawner,而 Spawner 會啟動該使用者的 Notebook server,以提供給使用者存取。. 另外 Spawner 也會定期向 Notebook server 做輪詢,已確認上面的程序是否有在 運行。架構圖如下:. 18.

(26) 立. 政 治 大 JupyterHub 架構. ‧. ‧ 國. 學. 圖 二-9. (資料來源:[26]). n. er. io. sit. y. Nat. al. Ch. engchi. 19. i n U. v.

(27) 第五節. 深度學習. 人工智慧、機器學習與深度學習這幾個名詞是時下最熱門的關鍵字,要如何 區分這些名詞呢?人工智慧是最大的範疇,底下包含機器學習,而深度學習包含 在機器學習中,換句話說,機器學習是實現人工智慧的一種技術;深度學習則是 實現機器學習的一種方法。機器學習(Machine Leraning)透過演算法,訓練歷史資 料,建立模型,當新資料匯入時,可以使用模型找出答案。機器學習的總類分為 三種:監督式學習(Supervised Learning)、非監督式學習(Unsupervised Learning)、. 政 治 大. 增強式學習(Reinforcement Learning),深度學習即是綜合上列三種方法,仿人類 大腦的人工神經網絡。. 立. ‧ 國. 學. 發展深度學習(Deep Learning)的靈感來自人類對大腦的理解,在大腦裡每個. ‧. 神經元都跟彼此緊密聯接並支持連接到外部神經元,形成複雜的神經網路。深度. y. Nat. 學習即是透過演算法來實現上述的神經網路,給予每個神經元節點適當權重,讓. er. io. sit. 輸入端經過加權運算後,導入正確輸出端。其實深度學習這個名詞早在 1982 年 就被 K. Fukushima 等[27]提出,並在 1989 年由 Y. LeCun[28]將反向傳播(Back. al. n. v i n Ch Propagation)的概念導入深度學習,並應用在手寫郵政編碼識別,不過由於龐大 engchi U 的計算量,且當時硬體設備能力不足,再加上 1991、2001 兩年 Sepp. Hochreiter[29][30]分別提出梯度消失(Gradient Vanishing)問題,重創深度學習, 因此發展漸趨式微。. 近年來,硬體設備效能大大提升、GPU 運算等發展,讓深度學習不再受限 於演算速度過慢的問題,而且透過神經網路多層堆疊改善原先錯誤率過高。基本 上,神經網絡堆疊越深越多層,得到答案的錯誤率將會越來越低,但也得注意過 多層數會帶來梯度消失的問題,所以要如何取決層數的多寡,便要看深度學習的 研究人員設計。 20.

(28) 從上述看下來,深度學習的門檻似乎很高,但不用擔心,目前網路上已擁有 大量機器學習的資源,許多配套的套件如 scikit-learn 等,都讓我們透過呼叫 API 直接使用,不過這些套件雖然容易上手但缺點就是彈性較低,因此,本研究在此 要介紹新的套件 Tensorflow,它保有一定彈性又不難上手,為新世代應用深度學 習的好工具。. Tensorflow. 政 治 大 Google 關鍵字、Google 地圖、廣告推薦、Youtube 搜尋引擎等,為新一代開源機 立 Tensorflow[31]是免費的開源軟體,由 Google Brain 團隊所開發,應用於. 器學習的工具。Tensorflow 的運算機制即透過 Computational Graph 進行數值運. ‧ 國. 學. 算,如下圖 2-9,在 Graph 上的節點( node)用來表示常數或是數學函式,而上面. ‧. 的邊( edge)則是表示節點之間的多維陣列(Tensor),這也是命名為 Tensorflow 的. y. Nat. 主因。此外, Tensorflow 彈性的架構讓開發者可部署一個或多個 GPU 在個人電. er. io. sit. 腦、伺服器上進行數值運算,開發者甚至可以透過 Tensorflow 開放的 API 運行 在行動裝置上。目前提供的 API 主要是 Python,另外也有較少部分的 API 包括. n. al. C++、JAVA 跟 GO。. Ch. engchi. 21. i n U. v.

(29) 圖 二-10 Computational Graph (資料來源:[31]). 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 二-11 詳解 Computational Graph (資料來源:本研究繪製). 22.

(30) 第六節. Django CMS. Django[32]是由 Python 所寫,為一個免費開源原始碼的網站應用框架,採用 MVC 軟體設計形式,目的即希望能幫助使用者輕鬆又迅速地開發網站。而 Django CMS[33]則是基於 Django 的內容管理系統(Content Management System, CMS), 同樣也是希望讓使用者快速開發網站,不過更著重在內容更新上的開發,如部落 格。. Mezzanine. 立. 政 治 大. Mezzanine[34]為開源的內容管理平台,建立在 Django 框架上,提供簡單且. ‧ 國. 學. 高擴展的架構,對開發者來說,網站架設的方式非常直觀。Mezzanine 不像其它. ‧. 網頁 CMS,Mezzanine 在默認情況下,使模版可重複使用的應用程式能廣泛地被. y. Nat. 使用,此方法既彈性且有效率。作為 CMS,Mezzanine 提供大量有用的功能,涵. er. io. sit. 蓋整個網站開發人員常見的應用程式需求。Mezzanine 即是 Django 的延伸,而本 身還有許多與第三方套件的連結,幫助網頁開發人員塑造網站的利器。. n. al. Ch. engchi. 23. i n U. v.

(31) Celery. 第七節. Celery 是以 Python 為基礎,所做出分散式任務佇列(Distributed Task Queue)。 Celery 主要的工作是管理、分配任務( tasks)到不同服務器,並取得結果。但 Celery 無法單獨處理伺服器間通訊,因為本身不具消息服務,所以需要中介傳輸者處理 伺服器間的通信任務,而最多人使用且目前最穩定的中介者(Broker)是 RabbitMQ。. RabbitMQ. 立. 政 治 大. RabbitMQ 由 Erlang 開發,遵循 AMQP 的 Message Broker,因為易於使用且. ‧ 國. 學. 功能多樣,是目前主流 broker 之一。 AMQP 全名 Advanced Message Queuing. ‧. Protocol 是訊息傳遞時應遵循的一種標準,其目的是為了解決不同平台交換訊息. n. al. er. io. sit. y. Nat. 時所面臨的問題。根據其規範,訊息傳遞時的流程大致如下圖所示:. Ch. engchi. i n U. v. 圖 二-12 AMQP 訊息傳遞流程 (資料來源:[35]) 24.

(32) Celery 用途是擔任訊息傳遞中的 Producer 及 Consumer,Producer 將訊息導 入 Broker,Cousumer 負責接收經過處理後的訊息再加以執行。Celery 用 task 通 信,通常藉由 Broker 作媒介在 Client 和 Worker 間斡旋,系統可包含多個 Worker 與 Broker,以此獲得高可用性和橫向擴展能力。Celery 架構分為三個部分: Broker、Worker、Task result store。. Broker:因 Celery 本身不具備 broker 的功能,需要使用第三方提供的 broker,. 政 治 大 Worker:Celery 內建功能之一,用來執行接收到的任務,且持續監視隊列 立. 如 RabbitMQ、redis。. (Task Queue)中是否有需要處理的新任務。. ‧ 國. 學. Task result store:Celery 可用多種方式儲存任務結果,包括 AMQP、redis、. ‧. Django 等. n. al. er. io. sit. y. Nat. Celery 運作流程. Ch. 1. 建立檔案作為執行的任務或傳遞的訊息. engchi. i n U. v. 2. 將檔案設立成一個 Celery instance(在 celery 中簡稱 app) 3. 客戶端使用時,把 app 排入 broker 中 4. 透過 Celery worker 執行 broker 中的任務 5. 將任務執行結果儲存. 運作流程示意圖,如下圖 2-12:. 25.

(33) 政 治 大. l. ‧. l. y. sit er. 簡單: Celery 易於使用和維護,不需要配置文件. al. v i n Ch 方便:支援多種 Broker,使用不同 broker 時僅需修改設定檔。 engchi U n. l. io. l. (資料來源:[36]). Nat. Celery 特性. Celery 運作流程. 學. ‧ 國. 立圖 二-13. 高可用性:倘若連接失敗或丟失封包,workers 和客戶端會自動重試 快速:單個 Celery 運行每分鐘可處理數以百萬計的任務,並保持往返 延遲在亞毫秒級. 26.

(34) 第三章. 系統架構與功能. 第一節. 架構說明. 三層式架構( 3-Layer Architecture) 本研究採三層式架構實作雲端演算法平台,三層式架構分別為使用者介面層 (Presentation Layer)、商業邏輯層(Business Logic Layer)、資料存取層(Data Access. 政 治 大. Layer),由於平台可能同時會跑上百種演算法,為了要降低單一伺服器負擔,三. 立. 層式支援的分布式計算環境,將複雜龐大的計算量分散在多台機器上運行,舒緩. ‧ 國. 學. 伺服器的負擔且讓平台更具擴展性,此外,分開運算邏輯層與資料存取層的好 處,使得客戶端無法直接存取資料庫,也為整體系統的安全性提升不少。三層式. ‧. 架構的簡易示意圖如下:. n. er. io. sit. y. Nat. al. Ch. engchi. 圖 三-1. i n U. 三層式架構. (資料來源:本研究繪製). 27. v.

(35) 本研究針對平台使用者的應用服務面與設計開發面,以及平台上會使用到的 工具,整合成一個三層式的詳細組成結構圖,如下圖:. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. 圖 三-2. Ch. engchi. i n U. v. 智能金融演算法雲端平台架構總圖 (資料來源:本研究繪製). 以下針對各層做進一步說明,先從使用者介面層逐一往下介紹。. 28.

(36) 一、. 使用者介面層(Presentation Layer). 此層透過 Mezzanine 網頁框架勾勒出網站畫面,並提供平台使用者三大功 能,分別是演算法市集(Algorithm Market)、社群(Community)、Python 演算法開 發平台(Jupyter)。介紹如下:. 演算法市集. 在市集裡,有各式各樣的演算法,有興趣的投資者都可以訂閱演算法服務,. 政 治 大 使用者即可透過 Celery client 立 直接使用演算法服務。. 而每樣演算法都已經過平台包裝,成為 Celery 的任務( task),所以只要有訂閱的. ‧ 國. 學. 社群. 利用 Mezzanine 快速建立好部落格、討論區等社群功能,提供空間給使用. Nat. y. ‧. 者,讓他們可以在上面學習、討論與研究。. er. io. sit. Python 演算法開發平台. 開發介面為 Jupyter Notebook,透過 Jupyter 的互動功能,讓計算結果及資料. al. n. v i n Ch 能即時呈現在瀏覽器上,而對本來就有使用 Jupyter Notebook 的開發者也不會陌 engchi U 生。. 圖 三-3 Presentation Layer (資料來源:本研究繪製) 29.

(37) 商業邏輯層(Business Logic Layer). 二、. 此層主要運作於分散式節點或雲端資料中心,負責處理系統中極大部分運 算,並分為應用服務(Services)與開發設計(Develop)兩大環境,根據上層傳下來的 指令,決定運行在哪個環境上,如下圖 3-4,應用服務(左)、開發設計(右)。. 應用服務. 應用服務採用 Celery 任務調度模組,接受自演算法市集下達的請求(Celery. 政 治 大 RabbitMQ Broker 則是負責接收這些訊息,形成一條由 Celery tasks 所組成的佇 立 client),交付給底下 Celey Workers 運行,再將結果儲存以等待 client 使用。. ‧ 國. 學. 列。而此層分散式的架構讓我們可以在多台機器上運行多個 workers,解決之後 過多 task 的狀況。. ‧. 開發設計. y. Nat. sit. 當平台開發者建立帳號後,將經由 HTTP proxy 驗證身份,產生 Spawner,. n. al. er. io. 並啟動一個 notebook server 供平台開發者使用,不過上述的方法若是應用在單一. i n U. v. 伺服器上,一旦使用者太多,系統垮台的機率就會上升,因此,本研究將使用. Ch. engchi. JupyterHub 的另外一項技術 Docker Spawner。. Docker Spawner 是將原先的 Spawner 在單一伺服器上啟動 notebook server 的 動作,改成在 Docker 的 cotainer 上啟動,好處是可以做到系統隔離,notebooks 之間不會影響彼此環境,也能針對 container 進行特殊配置,讓單一 notebook 有 更多變化,另外,Docker Spawner 也可以在遠端機器上生成 container,落實該層 的分散式架構,降低單一伺服器的負擔。 在 Python 運行環境的函式庫,除了裝好一般常用的套件(如 Numpy、Pandas、 MatPlotLib 等)外,另外加裝 Tensorflow,希望將深度學習的概念運用在演算法. 30.

(38) 交易上,加上 Tensorflow 完整的 API,讓平台上的使用者們都可以快速上手。另 外此環境也提供 GPU,旨在提升深度學習運算速度。. 圖 三-4 Business Logic Layer. ‧. (資料來源:本研究繪製). er. io. sit. y. Nat. al. n. 三、. 學. ‧ 國. 立. 政 治 大. 資料存取層(Data C Access h e Layer) i. ngch. i n U. v. 此層主要負責資料的儲存及使用,包含資料庫(HAWQ)以及連接資料庫的接 口(DAO)。HAWQ 作為整個架構的資料庫,有別於傳統 Hadoop 上的 Hive 或 Hbase,又或是熱門常用的 MySQL、MongoDB 等,平行化結構為它帶來更快的 計算速度,即便在金融大數據面前,速度上也毫不遜色,使得其他資料庫只能望 其項背。而建立 HAWQ 資料庫的推手則是 Ambari,Ambari 易佈署且簡便管理 的特性,讓 HAWQ 不論是要搭配 YARN 做資源分配或是在自訂參數設定上都十 分方便,此外,Ambari 的圖形化管理介面,也讓我們隨時監控資料庫平台的狀 態,做即時的配置處理。 31.

(39) Data Access Object 則是使用 Python 編寫,將存取資料庫的功能寫成 module,讓平台開發者直接取用,HAWQ 存取 Python 的函式庫是使用 psycopg2,用 TCP/IP 的方式進行資料傳輸。. 政 治 大 Data Access Layer. 學. ‧ 國. 立圖 三-5. (資料來源:本研究繪製). ‧. n. er. io. sit. y. Nat. al. Ch. engchi. 32. i n U. v.

(40) 第二節. 資料表設計. 綜合上一節使用到的技術,可以得知 HAWQ 極大量平行運算的迅速以及 Celery 在短時間能處理大量併發工作等高效能表現,但光是工具有利是並不足 夠,若是資料表沒有設計好,大量的 IO 延遲可能會導致整體效能低弱,嚴重的 話甚至系統會直接垮掉,因此,好的資料表設計非常重要,若是設計得當又符合 程式邏輯,效能必定會大大提升。舉例來說,此平台上開發語言是 Python,而 Python 擁有極佳的矩陣運算效能,如果能設計讓資料庫的資料在讀取後,能快速. 政 治 大. 轉換儲存為矩陣供程式端使用,對平台開發者來說將會事半功倍。. 立. 在第二章文獻探討 HAWQ 中提到,HAWQ 資料庫是 Append-only,也就是. ‧ 國. 學. 說,HAWQ 所有的 SQL 指令,都不支援更新(Update)及刪除(Delete),所以這也. ‧. 會是設計資料表時該注意的問題,像是如何對已新增的資料進行修改或是刪除。. y. Nat. 本研究設計出兩種資料表設計,分別根據不同狀況時下達的查詢指令,直接選擇. n. er. io. al. 一、. sit. 出對應的資料表及資料,而能有不錯的效能展現。. Ch. engchi. i n U. v. 金融資料來源. 從 Yahoo 奇摩理財[37]挑選基金(境外基金)與 ETF(指數股票型基金),篩選 日期最早追朔到 2000 年一直到現在。基金抓取的資料有:基金名稱、日期、每 日淨利;ETF 抓取的資料有:ETF 名稱、日期、開盤價、收盤價、每日最高價、 每日最低價、交易量、調整後的收盤價。最後透過爬蟲抓到的基金一共 3651 支, 而 ETF 則是有 846 支。. 33.

(41) 二、. 資料表基礎概念設計. 基金與 ETF 記錄下來的資料大部分都是由數值(Float)表示,但名稱跟日期則 是由字串(String)表示,當查詢條件跟名稱有關或者是以名稱做排序等指令,都 會相對慢於同樣篩選條件但選擇的欄位是以數值表示,因此,本研究將名稱轉換 為數值表示,同時額外建立基金與 ETF 的名稱對應表,達到數值與名稱轉換的 目的。基金與 ETF 的名稱資料表分別如下:. 立. 政 治 大 基金名稱資料表. ‧. ‧ 國. 學. 表 三-1. y. sit. io. n. al. er. Nat. (資料來源:本研究繪製). Ch. engchi. 表 三-2. i n U. v. ETF 名稱資料表. (資料來源:本研究繪製). 至於日期的部分,一樣也需轉換成數值表示,但轉換前要先說明本研究日期 的設計。此節一開始有提到,資料表存為矩陣的形式最為合適,但若每天都需重 新運算矩陣的話,矩陣的大小會因天數之差而不統一,這樣對開發者應用來說十 34.

(42) 分困擾,於是本研究把資料表的日期定在一個固定範圍內,將每 20 年存成一個 資料表,而對未來的淨利或收盤價等數值則先補 0 代替,只要陣列維持固定,後 續一切都好辦。. 基金與 ETF 抓取到的有效日期都是工作天,即為一個禮拜中的星期一到星 期五,所以每年大概有 261 天工作天。因此,如果資料表一次要紀錄 20 年的話, 換算下來 2000 年~2020 年共有 5479 天,於是我們就在資料表上以 0~5478 表示, 假如要改為實際日期的話,只要經由程式碼即可快速轉換。. 政 治 大 事先填入未來的資料,會遇到什麼問題呢?還記得 HAWQ 上不能執行 立. Update、Delete 的指令嗎?本研究擬出解決辦法,即是在每筆資料裡新增一個欄. ‧ 國. 學. 位做為索引( index),如果要更新資料的話即直接新增一筆資料,因為新資料的. ‧. 索引值必定大於舊資料的索引值,於是在篩選的時候只要選擇索引值較大的那. er. io. sit. y. Nat. 筆,即可達到更新資料的效果。. 稍微總結上述幾點,創建出的資料表有索引(達到更新資料的目的)、名稱(用. al. n. v i n Ch 數值表示,可由名稱資料表查詢對應名稱)、日期(0~5478,共 5479 天)、價格(基 engchi U. 金:淨值,ETF:開盤、收盤…等)。. 35.

(43) 單一數值型資料表. 三、. 單一數值型資料表視為整個資料庫裡最主要且基礎的資料表,大多的資料存 取均會使用此資料表,而不同於前面提到的資料表基礎概念設計,這邊新增新的 欄位 Check,Check 為布林值,當該天的資料遺漏,將用前一天的資料作為遞補, 用意是如果未來預測的工具在做時間序列(Time Series)時能接受空值的話,保有 此欄位將賦予資料表更大的彈性。下表分別為基金歷史淨值資料表與 ETF 數值 資料表:. 立. 政 治 大. io. er. 基金歷史淨值資料表. sit. y. ‧. ‧ 國. 學. Nat. 表 三-3. n. a(資料來源:本研究繪製) iv l C n hengchi U. 表 三-4. ETF 數值資料表. (資料來源:本研究繪製). 36.

(44) 資料映射 Data Mapping. 資料表轉矩陣,將使用到資料映射(Data Mapping)的概念,當資料表被 SQL 指令 Select 選取出一維資料,可透過 Reshape 函式重新轉置為二維資料。橫軸即 為天數,縱軸則為基金數或 ETF 數,示意圖如下:. 立. 政 治 大. ‧. ‧ 國. 學 Data Mapping. io. sit. (資料來源:本研究繪製). n. al. er. Nat. y. 圖 三-6. Ch. engchi. 37. i n U. v.

(45) 四、. 陣列型資料表. 單一數值型資料表透過映射從一維矩陣轉為二維矩陣,若資料表裡所存的資 料一開始即是一維矩陣,那透過 API 取後的資料便是二維矩陣,不需再經過程 式轉換成二維矩陣,因此,整體效能將會再做提升。此資料表即為陣列型資料表, 如下表所示:. 表 三-5. 學. 陣列型資料表. ‧. ‧ 國. 立. 政 治 大. (資料來源:本研究繪製). sit. y. Nat. n. al. er. io. 陣列型資料表的設計有好有壞,從優點看起,由於原先日期的部分轉為陣. i n U. v. 列,存在於新欄位中,所以資料表總筆數減少,將會降低系統 I/O 次數,增快系. Ch. engchi. 統速度。而缺點則是 HAWQ 不能更新資料,如果用先前增加索引方式來新增資 料,由於每筆所佔的空間都不小,在每日覆寫下,整個資料表將會佔據很大的空 間,而大半的資料還都已是過時的資料。 因此,本研究將陣列型資料表定位在當單一數據型資料表已紀錄完所有涵蓋 範圍內的天數後,才會另外生成一個陣列型資料表提供給使用者存取。. 38.

(46) 第四章. 系統實作. 本章節將根據第三章所提出之系統平台架構進行實作,包含開發設計 (JupyterHub)、應用服務(Celery)兩大環境的開發以及資料庫(HAWQ)的部署,將 使用到第二章提及的技術,得以證明此架構的可行性。. 第一節. 開發設計 JupyterHub. 政 治 大. JupyterHub 是由 Python 撰寫而成的 module,其安裝方法即參照官網上的教. 立. 學,分為 Python 原生 pip 以及 Anaconda 環境下的 conda 指令兩種下載形式,雖. ‧ 國. 學. 然 conda 下載較為便利迅速,但當 JupyterHub 要提供多人存取的功能,必須在 root 權限下執行,而 Anaconda 本身並無設置在 root 環境變數底下,因此在執行. ‧. 多人存取時,環境配置會比較繁瑣,所以本研究選擇使用 pip 的下載方式。. sit. y. Nat. al. er. io. JupyterHub 採用輸入帳號密碼的登入形式,基於登入安全性,JupyterHub 在. v. n. 0.7 版後就限制用戶建立平台時,必須透過 SSL 憑證機制,來確保使用者帳密不. Ch. engchi. i n U. 會洩漏的風險。 本研究使用 Let’s Encrypt 網站來申請 SSL 憑證,不過 Let’s Encrypt 本身有時效,需要定期上去更新已申請的憑證序號。. 使用者登入後,JupyterHub 會透過 Spawner 產生 Notebook Server 供使用者 使用,以伺服器角度來看,即為一個運行在伺服器上的程序(Proccess),因此, 每個 Notebook Server 的環境全都指向同一台伺服器,一旦有使用者不小心更改 到環境或是有惡意使用者想破壞環境,都會連坐影響到其他使用者,將會讓平台 的安全及穩定性大大降低。因此,透過 Docker Cotainer 來包裝每個 Notebook Server,資源彼此隔離的概念則因應而生。. 39.

(47) Docker Spawner DockerSpawner [38]是讓原本生成於伺服器端的 Spawner,虛擬化後運行在 container 上,好處是除了能做到資源隔離外,還可以建立與伺服器截然不同的環 境,要如何辦到呢?即是 Docker 映像檔的撰寫,而 Jupyter 已開發各式不同取向 的映像檔對應到 notebook,像是適合開發科學計算的 Scipy notebook、開發神經 網絡的 Tensorflow notebook、做統計分析的 R notebook 等。. 以下為本研究改寫 DockerSpawner Singleuser Dockefile 內容,透過以下內容. 政 治 大. 將 notebook server 製成 image,形成平台使用者所需的環境,並透過 JupyterHub. 立. 進行分散式部署。. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. 圖 四-1. Ch. engchi. i n U. v. DockerSpawner Single-user Dockerfile (資料來源:本研究繪製). 40.

(48) 注意到上面有一行註解為「Disable Terminal」,由於 Jupyter Notebook 功能 十分強大,除了提供 IPython 互動式介面外,也提供終端機服務,讓 Jupyter 平 台使用者可以逕行下載 Python 的所有套件,或是更改系統的環境配置,基於安 全性因素,本研究決定將此功能關閉。. Nvidia-Docker GPU 配置是影響深度學習發展的重要一環,不過由於平台使用 Docker. 政 治 大 要讓每個 Container 都能安裝驅動程式並偵測出 GPU。以往要做到這點,中間過 立 Spawner 技術,讓 GPU 的安裝配置不單只是下載驅動程式在伺服器端上,而是. ‧ 國. 學. 程十分不方便,因為 Docker 過去本身不支援 GPU,如果要在 Docker 上安裝 GPU,就需要在 Container 裡安裝 GPU 的驅動程式,最後再將主機上的 GPU 設. ‧. 備映射至 Container 上。由此可知,GPU 在 Container 上不具移植性,當要大量. al. er. io. sit. y. Nat. 產生含有 GPU 的 Container,只能手動一個個安裝。. v. n. Nvidia Docker [39]則是上述問題的最佳解,直接去編寫 Docker Engine,讓. Ch. engchi. i n U. Docker 能支援 GPU 的 CUDA 驅動程式,就像是把 GPU 容器化一樣。透過 Nvidia Docker 讓開發者不需任何硬體上的修改即可輕易將應用程式包裝在能用 GPU 加 速的容器中,唯一只需確保此 Docker 部署在有啟用 GPU 的伺服器上。下圖四-2 即顯示 Nvidia Docker 的基礎架構。. 41.

(49) 政 治 大. 圖 四-2 Nvidia Docker Architecture. 立. (資料來源:[39]). ‧ 國. 學 ‧. 此外,在 Dockerhub 上可以找到已裝好 CUDA 與 Cudnn 的映像檔,提供的. y. Nat. 作業系統有 Ubuntu、CentOS,而 CUDA 與 Cudnn 驅動程式的版本也是一應俱全,. 能生成具有 GPU 環境的 Jupyter Notebook。. n. al. Ch. engchi. er. io. sit. 因此,只要套用此映像檔再改寫先前 DockerSpawner Singleuser 的 Dockerfile,即. i n U. v. 以下為本研究二次改寫 DockerSpawner Singleuser Dockefile 內容(僅節錄部 分內容),透過以下內容將 notebook server 製成映像檔,形成具有 GPU 運行環 境的容器,並透過 JupyterHub 進行分散式部署。. 42.

(50) 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 四-3 Single-user with GPU Dockerfile (資料來源:[39]). 43.

(51) Docker Swarm JupyterHub 提供多個使用者存取,不過一旦使用者數目太高,伺服器的負載 能力就相對重要許多,若是 Spawner 能遠端在其他伺服器端生成 Container,平 台本身的負擔將會大大降低,且增加其擴展性,使之成為足以負載數以萬計名使 用者的分散式架構平台。. Docker Swarm 是官方推出的容器集群平台,目的即是提高 Docker 的可擴展 性,技術架構採 master-slave 形式,透過主節點的 Swarm Manager 去向子節點的. 政 治 大 通橋樑的後端服務有 Consul、Zookeeper、etcd 等,甚至也能直接使用 DockerHub 立. Swarm Node 溝通協商,並做到資源生成及調度等工作,而 Swarm 中建立彼此溝. ‧. ‧ 國. 學. 作為後端服務。下圖為 Docker Swarm 的結構圖:. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 四-4 Docker Swarm 結構圖 (資料來源:[40]). 44.

(52) 本研究使用 Consul 作為後端服務,啟動 Consul 服務容器後,將之映射到主 機的 8500 埠口上,再來分別啟動主節點的 Swarm Manger 及子節點的 Swarm Node,確保它們都有聆聽 8500 埠口,並讓 Manger 開啟主機的 4000 埠口,只要 訪問 4000 埠口,即可得知 Swarm 所有節點的資訊及容器狀態。下圖分別表示集 群節點的資訊、Swarm 容器以及正在運行中的容器狀態。. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. i n U. v. 圖 四-5 Swarm 集群的節點資訊. Ch. engchi. (資料來源:本研究繪製). 圖 四-6 Swarm Container 的運行狀態 (資料來源:本研究繪製). 45.

(53) 圖 四-7 所有 Container 的運行狀態 (資料來源:本研究繪製). 立. 政 治 大. ‧ 國. 學. Shell Script 批次匯入. ‧. JupyterHub 使用者創建的方式分為兩種,一種是直接使用本機建立的使用者. y. Nat. 做登入,另一種則是與 Github 帳號互通並透過第三方認證做登入,基於管理上. er. io. sit. 的便利,本研究採第一種方式。當要建立多名使用者時,可以將 Linux 指令寫成 Shell Script,如此一來就能輕鬆達到大量建立使用者的目的。. al. n. v i n Ch 此外,為了避免使用者容器被破壞,導致 notebook 裡的資料遺失,平台將每名 engchi U. 使用者容器均掛載到伺服器端的硬碟內,以保護使用者的檔案,而此動作也會一 併寫入 Shell Script 中。. 建立完的使用者要如何匯入 JupyterHub 呢?Jupyterhub 裡有一個 whitelist 名 單,只要將使用者的帳號存進名單內,即可匯入至資料庫而被平台的 Authenticator 認證。因此,在 Shell Script 內,本研究會將建立好的使用者寫入至 userlist 檔案,再讓 Jupyterhub 定期輪詢 userlist,隨時更新已寫入使用者到平台 上。下圖為本研究為大量匯入使用者所撰寫的 Shell Script。. 46.

(54) 圖 四-8 創建使用者的 Shell Script. 政 治 大. (資料來源:本研究繪製). 學. 第二節. 應用服務 Celery. Nat. y. ‧. ‧ 國. 立. er. io. sit. 應用服務環境主要負責將開發設計環境裡的程式,用 Celery 包裝成任務, 指派給伺服器上的各個 Celery workers,當平台用戶透過網頁想要使用平台上的. al. n. v i n 應用服務,就會將請求傳送至CRabbitMQ 的訊息佇列,再由 Celery workers 來執 hengchi U 行,並將結果傳回訊息佇列,最後再讓結果呈現在網頁端。. ipynb 轉 py Celery 執行的語言是 Python,雖然 JupyterHub 撰寫的語言同樣也是 Python, 但儲存的檔案格式為 ipynb 筆記本格式,因此需要先將 ipynb 檔轉成 py 檔,才能 提供給 Celery 使用。轉檔的方法有兩種,第一種直接使用 Jupyter Notebook 網頁 的 GUI 來操作,將 ipynb 轉為 py,另一種則是透過 Linux 指令使用 Jupyter 提供 nbconvert 函式做檔案轉換。. 47.

(55) Celery 組態配置 Celery 作為一個分散式的任務佇列,包含許多實用的功能,像是 Queue、 Worker、Thread 等。Queue 即為 MQTT 的 Topic 概念,它可以讓 Celery workers 訂閱各自的 Queue,對於平台上的服務就將它們的名稱作為 Queue,一旦服務啟 動後,就能交由相對應訂閱本服務的 Celery workers 來執行。單一主機的 Celery worker 數目不限,可以創建很多 workers 進行分散式運算,另外每個 worker 也 能設置各自 thread 的數目,以利其能不同步地執行程式,而這些配置均可編輯在 /etc/default/celeryd 上,透過執行 /etc/init.d/celeryd start 指令即可上線。下圖為本 研究 Celery 的組態配置:. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. 48. i n U. v.

(56) 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 四-9 Celery 組態配置 (資料來源:本研究繪製). 至於要使用的 Broker、Backend 以及 Queue 的詳細資訊,直接編輯於組態配 置上標記的 celeryconfig 檔即可。. 49.

(57) 第三節. 資料庫 HAWQ. HAWQ 為 MPP 架構的資料庫,由於架構較新且正值發展期,因此推出對應 的作業系統選擇不多,提供的作業系統:CentOS/ RedHat 6.X、CentOS/ RedHat 7.X,這麼做的好處是以上兩種版本的作業系統非常穩定,不易有 Bug 產生,但 壞處則是此二作業系統的內部編譯器或套件,版本都較為舊,若是要安裝近幾年 推出的套件會遇到版本不相容的問題。. 立. HAWQ 容器化. 政 治 大. ‧ 國. 學. 為了解決上述問題,本研究決定將 HAWQ 用 Docker 虛擬化成 Container, 並運行在 Ubuntu 上,這樣既不會有版本不相容問題也能保有 HAWQ 資料庫。. ‧. 在 Apache 開發的專案 incubator-hawq [41]裡,就提供讓 HAWQ 運行在 docker 上. sit. y. Nat. 的版本,開發者可透過修改 Makefile 選擇映像檔的作業系統以及生成的節點數。. al. er. io. 在擴增節點的同時,需要注意彼此節點內核的最大共享內存段(SHMMAX)配. v. n. 置,若是節點數過多,可能要適時地調高 SHHMAX 值,或是降低緩存. Ch. engchi. i n U. shared_buffers 值。下圖為 HAWQ 包裝成 Docker 的容器狀態圖:. 圖 四-10 Docker HAWQ 各容器狀態 (資料來源:本研究繪製) 50.

(58) HAWQ 三種儲存資料指令 HAWQ 平行化的架構,使得它比起一般的資料庫在判斷 SQL 上,能更迅速 地解析指令,讓取資料不會因複雜指令而影響效能,而 HAWQ 也針對儲存資料 提供三種不同指令。第一種即是 SQL 中最常見的 INSERT 指令,將資料一筆筆 輸入進資料庫內,但因本研究處理的資料較為巨量,在 INSERT 多筆的情況下會 有 Statement Memory 不夠的問題,導致速度變慢,因此本研究較推薦剩下兩種 指令。第二種則是 COPY 指令,將要匯入資料庫的資料存進 txt 檔,並透過 COPY_FROM 把 txt 檔的資料全數匯進資料庫,速度足足快上第一種指令幾十. 政 治 大 案轉為 External Table 的形式,使資料得以透過平行化的方式匯入資料庫,為以 立 倍。最後一種是 gpfdist 指令,資料儲存同樣以 txt 格式,但 gpfdist 會讓資料檔. ‧. ‧ 國. 學. 上三種指令唯一能平行運算匯入資料庫的指令,速度也較第二種快上幾倍。. Nat. sit. y. HAWQ Resource Queue. n. al. er. io. 平台會根據使用者的不同,將依其權限配置相對應的資源,HAWQ 的. i n U. v. Resource Queue 即可做到這點,像是更改配置的記憶體大小、Statement 數目、內. Ch. engchi. 核資源的比例等,讓資料庫上的資源分配更具彈性。下圖為本研究配置的 Resource Queue:. 圖 四-11. Resource Queue 配置. (資料來源:本研究繪製) 51.

(59) YARN Capacity Scheduler 透過 Ambari 搭建出 Hadoop 架構,其中必定包含許多好用的開源軟體,像 是 Spark、Storm 等,但若這些軟體同時被執行時,服務彼此將會佔據伺服器的 資源,讓少數服務分配不到資源而無法提供服務,因此,YARN 的資源分配就顯 得十分重要,YARN 即是透過 Capacity Schedule 來標示每個服務最低及最高限度 能分配到的資源,以確保平台上的服務都能正常地被執行。下圖為本研究的 Capacity Schedule 配置:. 政 治 大. 立. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. 圖 四-12. engchi. i n U. v. Capacity Schedule 配置. (資料來源:本研究繪製). 52.

(60) 第五章. 系統測試. 此章將針對整體架構進行壓力測試及效能評測,並對系統做最後驗證與調 整,測試將分為兩階段,第一階段為平台的負載能力,確保平台可提供大量使用 者使用。第二階段為測試資料庫的效能,比較單一伺服器與分散式架構的效能差 異。. 測試環境 l. CPU:Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz. l. 記憶體:128GB. l. 作業系統:Ubuntu 14.04.5 LTS trusty. l. GPU:Grid K520. 立. 政 治 大. sit. y. 平台負載能力. ‧. ‧ 國. 學. Nat. 第一節. n. al. er. io. 為了要做到平台負載能力測試,使用第四章提到能在 JupyterHub 上創建大. i n U. v. 量使用者的 Shell Script,建立 50 名使用者,分別為 jhuser01~jhuser50,並撰寫. Ch. engchi. 測試程式,程式中包含 Python BuiltIn Function、File IO&EE、Numpy 陣列運算、 Pandas 表格輸出與 MatPlotLib 做圖等範例。. 執行幾次測試程式後,單一容器執行時間大致落在 22-24 秒,在確定基礎執行時 間後,將讓 50 名使用者同時執行程式,並觀察各個容器所執行的時間,得出的 結果如下圖:. 53.

(61) 治 政 圖 五-1 50 名使用者測試時間統計 大 立 ‧ 國. 學. (資料來源:本研究繪製). ‧. 可以從上圖看出,執行時間大致落在 23-26 秒區間內,比單一容器執行的時. y. Nat. n. al. er. io. 時的狀態:. sit. 間大概多 2 秒左右,不難看出平台的負載能力。而下圖為部分容器執行測試程式. Ch. engchi. i n U. v. 圖 五-2 容器執行測試程式狀態 (資料來源:本研究繪製). 54.

(62) 第二節. 資料庫效能. 在第二章提到 HAWQ 是一個極大量平行運算的資料庫,所以 HAWQ 應該 在遇到多人存取時,能維持其效能,並透過平行運算來降低複雜 SQL 指令帶給 伺服器的負擔,以維持其速度,因此,本研究針對 HAWQ 面對多人存取及複雜 SQL 指令兩項,設計測試的內容。. 測試資料使用第三章提到的 ETF 資料表,經由 Yahoo 奇摩理財的 API 爬取,. 政 治 大 收盤價、當日最高價、當日最低價以及調整後收盤價。 立. 資料大小約為 1GB 左右,資料表欄位有索引、ETF_ID、轉換後日期、開盤價、. ‧ 國. 學. 針對 SQL 指令的複雜程度,本研究設計兩種 SQL 指令,第一種是 SELECT. ‧. ALL,將資料表所有的資料抓取下來,是為複雜度低的指令。另一種是 SELECT. y. Nat. CONDITION,對資料表的資料做限制,像是限制存取日期的範圍、選擇特定的. er. io. sit. ETF,是為複雜度較高的指令。下圖為本研究設計進行測試的 SQL 指令, get_all_etf_ndarr()為第一種指令,get_etf_ndarr 為第二種指令:. n. al. Ch. engchi. 55. i n U. v.

(63) 立. 政 治 大. ‧. ‧ 國. 學. io. sit. (資料來源:本研究繪製). n. al. er. Nat. y. 圖 五-3 資料庫效能測試程式. Ch. engchi. i n U. v. 本研究準備三個不同的環境進行測試,分別是安裝於單一伺服器的 Postgres 資料庫、3 個節點數的 HAWQ 資料庫及 5 個節點數的 HAWQ 資料庫,下表即為 測試結果,根據指令複雜度的高低分為二表:. SQL 指令複雜度低(get_all_etf_ndarr). 單一 Postgres. HAWQ ( 3 nodes ). HAWQ ( 5 nodes ). 1 名. 26.4 s. 17.5 s. 33.7 s. 2 名. 30.8 s. 18.3 s. 36.8 s. 測試環境 使用者存取數. 56.

(64) 5 名. 39 s. 21.8 s. 38.6 s. 10 名. 56 s. 32.2 s. 42.6 s. 表 五-1. 複雜度較低的測試數據表. (資料來源:本研究繪製). SQL 指令複雜度高(get_etf_ndarr). 單一 Postgres. 測試環境 . HAWQ ( 3 nodes ). 使用者存取數. 政 治3.89 s 大 3.91 s 立30.2 s 21.3 s. 4.24 s. 84 s. 9.11 s. io. sit. (資料來源:本研究繪製). 11.24 s. y. 複雜度低的測試數據表. 8.92 s. ‧. 表 五-2. Nat. al. v i n C h Postgres 當遇到多人存取時,效能會降低 綜合上述二表可看出,單一伺服器 engchi U n. 52 s. 7.96 s. 學. 10 名. ‧ 國. 2 名. 7.76 s. er. 1 名. 5 名. HAWQ ( 5 nodes ). 許多,而 HAWQ 分散式的架構使其被多人存取時,依然可維持不錯的效能。再 來比較 Postgres 與 HAWQ 對於 SQL 指令複雜度的影響,表上清楚地顯示 HAWQ SQL 查詢速度遠高於 Postgres,足以見識到 HAWQ 平行運算的能力。最後可以 從表上發現,HAWQ 的節點數增加反而使速度變慢,這是因為增加節點會讓儲 存的資料更分散於各節點,因此 HAWQ Master 要向底下的 Slave 訪問的次數也 將提升,最後直接反映在效能上。不過,當使用者數目再繼續增加的話,能發現 節點數較高的 HAWQ 速率慢慢追上節點數較低的速率,可以推測出使用者數目 達到一定量後,節點數較高的 HAWQ 效能會高於節點數低的 HAWQ。. 57.

(65) . 透過上述分析,了解在多人存取的狀況下,HAWQ 的表現優於單一伺服器. Postgres,而增加 HAWQ 節點數目讓平台能應付更多使用者同時存取,最後本研 究得出三個結論: l. HAWQ 分散式架構適合使用於多人存取的環境. l. HAWQ 能平行運算處理複雜度較高的 SQL 指令. l. 設置 HAWQ 節點的數量將取決於平台使用者的數目. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. 58. i n U. v.

參考文獻

相關文件

二、本校於報名表中對於學生資料之蒐集,係為學生成績計算、資料整理及報 到作業等招生作業之必要程序,並作為後續資料統計及學生報到註冊作業

二、本校於報名表中對於學生資料之蒐集,係為學生成績計算、資料整理及報 到作業等招生作業之必要程序,並作為後續資料統計及學生報到註冊作業

國立政治大學應用數學系 林景隆 教授 國立成功大學數學系 許元春召集人.

並以中科園區核准進駐事業單位中已建廠完成且投入實際生產的廠 商作為資料蒐集的基礎。 「行政院國家科學委員會」科學園區協調小組 公布資料指出,統計至 96 年 6

課程利用雲端學習平台 OpenEdu 從最基礎開始說明 Python 的語 法與應用,配合 Quiz in Video

普通話科由 1998 年開始,成為香港中、小學核心課程之一。學

▸ 學校在收集學生的個人資料前,必須徵得學生的同意,並向所

大學教育資助委員會資助大學及絕大部分專上院 校接納應用學習中文(非華語學生適用)的「達 標」