黃曼綺
基于容器技術的機器學習計算平臺設計與實現
黃曼綺
(電子科技大學成都學院 云計算科學與技術系,四川 成都 611731)
針對機器學習實驗對環境的高要求,設計實現了適用于普通高校的公用計算平臺架構。該平臺通過LXC容器技術配置,既能實現硬件資源的共享,也能實現實驗環境的隔離,并按需提供計算資源,確定平臺實現的具體方法和維護管理流程。該平臺具有易于管理,資源利用率高,界面直觀,開放性較好等特點。通過對該平臺進行測試,驗證了其良好的管理效率,為后續該平臺的進一步優化奠定了良好的基礎。
機器學習;公用計算平臺;Linux容器;運行時透傳
隨著機器學習算法的逐步成熟和人工智能相關的應用的加速部署落地,人工智能進入了全新的階段。中國人工智能市場高于全球增速,據BBC預測全球人工智能總體市場規模2020年將達到1190億元,復合增長率約為19.7%;國內人工智能市場規模2020年將達到91億元,年復合增長率約50%[1]。
中國也將人工智能發展提升到國家戰略,明確了階段性發展目標。2018年4月,教育部在研究制定《高等學校引領人工智能創新行動計劃》的同時,研究設立人工智能專業,進一步完善我國高校人工智能學科體系。雖然一些中國高校開設了相關課程,但總體上缺乏人工智能的基礎教學能力,高校在培養具有動手能力的應用型人才上有所欠缺[2-3]。
總的來說,人工智能產業的高速發展正在推動高校大力布局人工智能學科建設[4]。因此,本文的目的是使用容器技術中的LXC和LXD以及資源分配的解決方案來設計一個公用計算平臺,解決高校公共實驗平臺GPU資源共享的問題,為實驗參與者提供一個穩定高效的機器學習實驗環境;同時,實驗室管理者也可以輕松擴展和部署實驗環境資源。
本公用計算平臺完全使用開源軟件,獨立選取設計組件,獨立搭建、運行和維護。涉及的開源軟件代碼公開并且由開源社區維護,非常適合高校這種研發經費相對較少但是資源需求較多的環境。
分析普通高校現有的機器學習實驗運作方式,大多分為2類;
(1)單機方式,即給每位學生或實驗團隊提供一臺獨立的計算機;雖然實驗者不會相互干擾,但機器學習實驗的特點是通過構建隱層的機器學習模型和海量的數據來訓練機器,驅動機器去自主學習并發掘特征,從而最終提升分類和推理的準確性[5]。因此,機器學習需要大量的并行計算,而傳統的CPU通常需要數百甚至成千上萬條指令才能完成神經單元的處理,不能支撐深度學習大規模數據并行計算,因此主流硬件框架大都基于CPU+GPU搭配;其主要特點是高功耗、高計算能力以及通用性。但是由于GPU價格高昂,加之高校資源有限,很難保證每臺單機都能提供足夠的硬件支持。
(2)公用服務器方式,即提供一組高性能的公用服務器硬件資源,由所有參與者共享使用;但環境共享帶來隔離性的問題,大家都在公用機器運行訓練和驗算,而各自所需要的運行環境版本(如Cuda、TensorFlow等)卻可能不一樣,這樣很容易因為版本問題而導致程序無法運行,而且如何合理分配硬件資源也是實驗管理員無法回避的難題。
綜上所述,本文提出作為一個應用于高校機器學習實驗課程的公用計算平臺應該具備以下基本功能:
(1)用戶之間不會相互影響;
(2)用戶可以安裝、訪問自己的應用;
(3)用戶能夠使用GPU;
(4)用戶不被允許直接操作宿主機;
(5)管理員能輕松地管理用戶。
從需求出發,首先解決的問題是實現用戶的隔離。目前機器學習用戶隔離使用的是支持PCI Pass- through的虛擬技術,帶來的問題是GPU使用過程中只能被一臺虛擬機獨占,其他虛擬機就無法使用該顯卡。在實際的實驗案例中,一般的執行案例是無法長時間占滿GPU,GPU利用率只會達到10%~30%左右[6]。在多用戶的高校實驗環境中,共享同一個GPU是合理的,也能提高硬件資源的利用率。另外CPU/IO等硬件的虛擬化的額外開銷較大,所以考慮到性能問題,本文的設計方案不選用虛擬化技術。
由于實驗室公用主機一般安裝防火墻和還原保護等措施,是一個相對安全和可控的環境,并且現在主流的深度學習平臺都是在Linux上,因此可以直接利用Linux內核提供的隔離機制來解決安全問題。Linux的隔離機制帶來的額外開銷微乎其微,加上共享硬件資源,能最大化地利用硬件資源。
目前比較成熟的隔離的有KVM和LXC。KVM的虛擬化方案提供了完整的物理隔離功能;LXC的隔離方案則是資源隔離(namespace)能提高資源利用率。結合表1的基礎架構實現方案的比較,本文選擇LXC。

表1 基礎架構實現方案比較
為了保證公用GPU在LXC中正常使用,采用了目前常用的解決方法:在 LXC 容器中使用GPU時把宿主機中顯卡設備文件掛載到LXC容器中。而對于在容器內使用NVIDIA GPU的場景,則可以通過nvidia. runtime配置,結合nvidia-container-cli和liblxc實現自動檢測主機系統上的所有正確位,并在引導時將它們傳遞到容器中,以保持用戶空間庫與內核驅動程序同步。這樣可以節省大量的空間,簡化了維護。為了限制終端用戶直接操作宿主機,容器可以提供SSH服務,既提供遠程控制服務,也可以實現傳輸文件等基本操作。
因此選擇LXC搭建公共計算平臺基礎框架,如圖1所示。

圖1 公用計算平臺架構及組件
LXC是一個Linux容器工具,提供輕量級的虛擬化的隔離進程和資源。LXC在資源管理方面依賴Linux內核的Cgroups系統[7]。Cgroups系統是Linux內核提供的一個基于進程組的資源管理框架,用于限定特定進程組可用資源。它最初由Google的工程師提出,之后又集成到Linux內核。Cgroups也是LXC用于實施虛擬化的資源管理手段。LXC現已加入Linux內核,這意味著LXC技術將是目前最有競爭力的輕量級虛擬容器技術[8],具體隔離機制如圖2所示。

圖2 LXC容器隔離實現機制
在實驗室平臺中操作LXC指令相對比較難用,為了給用戶提供更好的容器管理平臺體驗,在本文中引入了LXD。LXD是一個提供REST API的LXC容器管理器,在LXD操作時,事先將boot.autostart設置為true,則在Linux啟動時會自動啟動LXD容器。LXD還支持與OpenStack的集成,并提供Restful API的支持,所以使用者可以定制web頁面的直觀的管理容器[9]。
容器本身是通過物理機內核調度的一組權限受限的進程,物理機的內核和驅動擁有對GPU 100%的訪問。本平臺利用物理機的內核執行訪問GPU的系統調用達到GPU Passthrough實現。
LXD本身提供了詳盡的GPU Passthrough支持,本平臺在添加GPU設備之后,容器里可以看到對應的GPU。本平臺在執行過程中需要安裝必要的庫或工具。特別注意因為容器container里裝的庫是在與物理機的內核配合工作,所安裝的庫必須與物理機內核里的GPU driver版本對應。
下面介紹如何搭建生產環境,并進行基本的評估。
結合目前高校實驗室的現狀,在控制預算的前提下,本文用于驗證的硬件配置如表2所示。

表2 計算平臺硬件配置
在人工智能領域,通過開源的方式推動產業的快速向前發展,已經成為面向未來的一種趨勢[10]。因此,本文設計的公用計算平臺也是基于目前主流的開源軟件,主要軟件配置如表3所示。

表3 計算平臺軟件配置
4.3.1 創建容器
使用LXC作為隔離機制,給每個用戶分配一個LXC容器,具體分為以下幾個步驟:
(1)更新并安裝LXC;
(2)共享內核安裝,宿主機和容器內的顯卡驅動要求完全一致,且共享內核,需要在宿主機上安裝NVIDIA顯卡驅動,并把顯卡設備文件掛載到 LXC 容器中。通過實驗發現在安裝NVIDIA顯卡驅動時,需要事先禁用nouveau模塊待安裝好后再啟用;
(3)創建容器,并將NVIDIA設備添加到容器中,并修改配置文件;
(4)設置容器以通過Shell進行訪問,運行lxc-attach后,所在的控制臺是容器中的根提示符。可以使用容器內的NVIDIA的run安裝CUDA SDK,或者將CUDA二進制文件復制到容器中。
4.3.2 實現多用戶共用平臺,制作LXC鏡像模板
因為是多用戶公用計算平臺,需要保證每個用戶對GPU的并行使用。而測試用的開源機器學習框架TensorFlow默認搶占服務器所有GPU顯存,所以需要限定每個用戶的GPU占用率。為了限定GPU占用率,在此步驟中制定GPU使用策略[11]。
(1)在TensorFlow中設置參數,啟用最少的GPU運行程序。
(2)在TensorFlow中設置參數,強制程序只占用指定比例的GPU。
config = tf.ConfigProto()
# 占用GPU40%的顯存
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config)
為了方便后續添加用戶,先制作一個LXC 容器模板,這樣之后每次新建容器的時候就從這個模板克隆一份。
配置好模板容器之后,復制到 /root/lxc-public- images/template。本平臺提供將容器或容器快照發布為鏡像選項。關閉容器,并把它復制到/root/lxc-public- images/template。將容器或容器快照發布為鏡像,只需要在模板容器上完成操作即可。
4.3.3 使用鏡像創建新容器
在本公用平臺中,LXD守護程序可充當鏡像服務器。在默認情況下加載到鏡像存儲中的所有鏡像都會被標記為私有,只有受信任的客戶端可以檢索這些鏡像。如果要創建公共鏡像服務器,需要做的是將一些鏡像標記為公開,并確保LXD守護進程監聽網絡[12]。通過這一方式可使用鏡像創建新容器。
4.3.4 容器的管理
可通過terminal管理容器,也可以通過Restful API配置WEB管理系統實現容器的管理。
4.3.5 結果展示
我院云計算科學與技術系在本科階段開設了“基于Python的人工智能”課程,本課程取得了四川省首批普通高校應用型本科示范課程建設項目資助。其中實驗部分就使用本公用計算平臺進行機器學習實驗。
在使用該平臺之前,全班30名學生使用分配虛擬機的CPU進行訓練,占有率高、訓練速度慢。通過公用計算平臺,多人可以共享共用,表4為改進后訓練一個TensorFlow測試樣本平臺使用情況和時間對比。實驗證明,在對同一個測試樣本進行測試時,公用計算平臺的環境下,人均節約40%~60%的時間(見表4)。

表4 實驗平臺使用時間對比
本文嘗試使用容器技術中的LXC和LXD技術設計并配置了一個公用計算平臺,解決了高校實驗平臺GPU資源共享的技術難題。實驗參與者在使用計算平臺進行機器學習的實驗時不僅可以共享數據和計算能力,也可以通過容器實現資源的隔離,同時能夠充分利用有限資源完成實驗任務。借助LXD的可視化平臺,管理者也可以方便地新建及管理實驗環境;由于物理服務器采用容器集群模式,平臺可以支持快速的橫向擴展,能為使用者節省一半以上的時間,將來會考慮對平臺進行深度優化。
[1] 中國產業信息. 2018年中國人工智能行業發展現狀及發展前景分析[EB/OL]. (2018-03-15). http://www.chyxx.com/industry/ 201803/619321.html.
[2] 國務院. 關于印發新一代人工智能發展規劃的通知[EB/OL]. (2017-07-08). http://www.xinhuanet.com//tech/2017-07/21/c_ 1121355212.htm.
[3] 奎曉燕,劉衛國,郭克華,等. 構建智能型虛擬實驗平臺,推進現代教育技術改革[J]. 計算機工程與科學,2018, 40(增刊1): 12–15.
[4] 中國大數據產業觀察. 國內高校人工智能教育現狀[EB/OL]. (2018-04-22). https://www.sohu.com/a/2290865 85_353595.
[5] 人工智能. 人工智能市場巨大AI芯片有望成為下一個爆發點 [EB/OL]. (2018-05-05). http://www.elecfans.
[6] 陳樂群. 為實驗室建立公用GPU服務器[EB/OL]. (2017-11- 03). https://zhuanlan.zhihu.com/p/25710517.
[7] 汪愷,張功萱,周秀敏. 基于容器虛擬化技術研究[J]. 計算機技術與發展,2015, 25(8): 138–141.
[8] 高巖,林軍,云龍,等. 云計算主機內核虛擬化技術框架及其性能分析[J]. 計算機系統應用,2017, 26(8): 278–283.
[9] wangke0809. 搭建多人共用的GPU服務器[EB/OL]. (2018- 04-22). https://blog.csdn.net/wangke0809/article/details/80235989.
[10] 趙智興,段鑫星. 人工智能時代高等教育人才培養模式的變革:依據、困境與路徑[J]. 西南民族大學學報(人文社科版),2019(2): 213–219.
[11] Mr Caleb. tensorflow gpu使用說明[EB/OL]. (2016-10-22). https://blog.csdn.net/qq_30159351/article/ details/52892577.
[12] LXD 2.0. Introduction to LXD [EB/OL]. (2016-03-11) https:// stgraber.org/2016/03/11/lxd-2-0-introduction-to-lxd-112/.
Design and realization of machine learning computing platform based on container technology
HUANG Manqi
(Department of Cloud Computing Science and Technology, Chengdu College of University of Electronic Science and Technology of China, Chengdu 611731, China)
In view of the high requirement of machine learning experiment for environment, a common computing platform architecture suitable for colleges and universities is designed and realized. Through the configuration of LXC container technology, this platform can not only share hardware resources, but also realize the isolation of the experimental environment and provide computing resources on demand. The specific method of platform realization and maintenance management process are determined. This platform has the characteristics of easy management, high resource utilization, intuitive interface and good openness. The platform is tested to verify its good management efficiency, which lays a good foundation for further optimization of the platform.
machine learning; common computing platform; LXC container; runtime passthrough
G642.0
B
1002-4956(2019)09-0028-04
2019-02-14
教育部2018年第一批產學合作協同育人項目(教高司函[2018]47號,編號201801014012);四川省教育廳自然科學一般項目(18ZB0256);四川省地方普通本科高校應用型示范課程支持項目(川教函[2018]527號(255-256);電子科技大學成都學院教改重點項目(JG201808)
黃曼綺(1981—),女,四川內江,碩士,講師,云計算教研室主任,研究方向為云計算架構、機器學習。
E-mail: qiluoli@126.com
10.16791/j.cnki.sjg.2019.09.008