999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向深度學習的分布式任務執行系統①

2021-08-02 11:08:28高國樑陳雷放劉一鳴
計算機系統應用 2021年7期
關鍵詞:深度系統

高國樑,陳雷放,劉一鳴

1(中國石油大學(華東) 計算機科學與技術學院,青島 266580)

2(青島農業大學 理學與信息科學學院,青島 266109)

3(華北電力大學(保定) 電氣與電子工程學院,保定 071003)

近年來,深度學習技術廣泛應用在圖像處理、語音識別等領域,極大地促進了人工智能的進步,對人類生活的改善有著重要意義.然而,深度學習實踐并非一件易事,往往需要花費大量的時間和精力,因此,使深度學習變得盡可能“簡單”顯得尤為重要.深度學習托管平臺可為深度學習實驗任務提供全流程的管理服務,給深度學習實踐帶來了積極影響.結合深度學習平臺項目的實際需求,本文設計和實現了分布式任務執行系統DTES (Distributed Task Execution System).DTES參照任務執行集群的實時監控數據選出當前壓力最小的節點并向其發送執行請求,節點根據請求信息去獲取任務所需數據,隨后創建Docker 容器來執行該任務,同時回收任務執行期間的日志信息.此外,DTES 基于Spring Boot 框架實現,具有良好的穩定性和可擴展性.

1 研究背景

深度學習全流程托管平臺是一個管理深度學習實驗任務的網頁應用系統.該平臺提供了數據集管理、數據集標注、模型訓練以及模型部署等服務,它將深度學習實驗的所有流程全部集中到網頁端進行,有效提升了研究效率.研究者首先將數據集上傳到平臺,接著對數據集進行標注,之后在平臺中編寫程序訓練模型,最后將符合要求的模型導出部署.

本文結合深度學習平臺的具體需要和深度學習實驗的特性[1–3],提出了一種面向深度學習模型訓練的分布式任務執行系統.

2 需求分析

需求分析是系統開發的基礎,關系到開發工程的成敗和軟件產品的質量.本文提出的分布式任務執行系統主要應用于網頁端深度學習模型訓練,系統的主要功能有監控、任務調度、任務執行、日志管理等,具體如下.

(1)監控:包括對執行器節點的監控以及對任務的監控,其中節點監控主要是監控各個節點執行器的CPU、GPU、內存、磁盤、網絡等情況,任務監控主要是監控任務的當前狀態;

(2)任務調度:調度器首先獲取各個節點執行器的內存、CPU 等資源的占用情況,以確定可以繼續執行任務的執行器,然后向執行器發送任務執行請求;

(3)任務執行:調度器發出的執行請求進入執行器的任務隊列,執行器按照優先級順序執行任務,并返回執行結果;

(4)日志管理:記錄系統在任務執行過程中產生的日志.

DTES 作為一個完善的系統,除了滿足上述功能性需求外,還應該滿足一定的非功能性需求[4],如安全性、兼容性、健壯性、可擴展性等.

系統流程圖如圖1所示.

圖1 DTES 流程圖

3 系統設計與實現

3.1 總體設計

3.1.1 系統架構設計

深度學習全流程托管平臺采用微服務架構 [5,6] 實現,分布式任務執行系統DTES 最終會作為一個微服務集成到平臺中.DTES 選用Spring Boot 作為框架,通過Spring Cloud 提供的注冊中心組件Eureka 將DTES作為一個微服務注冊到深度學習平臺的Eureka 服務端,實現分布式任務執行系統和其他微服務之間的相互訪問,通過Ribbon 組件實現HTTP 負載均衡,通過Hystrix 實現容錯處理.

DTES 采用模塊化設計,根據系統的需求分析,將系統劃分為監控、任務調度、任務執行、日志管理4 大功能模塊,其中每個模塊又包含相應的子模塊.系統的功能模塊分解圖如圖2所示.

圖2 DTES 功能模塊圖

DTES 采用分層模式,系統整體分為數據層、業務層和接口層3個層級.層級之間相互配合,共同實現任務執行功能.系統架構圖如圖3所示.

圖3 DTES 架構圖

(1)數據層:數據層包括MySQL 數據庫、Redis 數據庫和RabbitMQ 消息中間件.其中MySQL 主要用于存儲任務的基本信息,如任務的狀態、工作目錄、環境變量等;Redis 用于全局的數據緩存;RabbitMQ 用于消息同步和存放任務執行結果,供深度學習平臺的其他微服務進行消費.

(2)業務層:業務層包括系統的業務邏輯實現.其中監控模塊負責監控執行器節點的資源使用情況和任務的運行狀態;任務調度模塊接收提交的任務并添加到任務資源庫,根據系統中的調度策略從資源庫中讀取任務的基本信息并依此確定執行器節點,最后將任務發送給執行器;任務執行模塊接收執行請求并執行具體的任務,將執行結果返回給任務調度模塊;日志管理模塊則主要負責收集任務執行過程中產生的日志信息,以便于后續對任務進行分析.

(3)接口層:系統使用REST (REpresentational State Transfer,表述性狀態轉移)協議對外提供接口服務,使用JSON 進行數據交互.系統對外開放的接口主要有任務提交接口和日志查詢接口.

3.1.2 數據庫設計

數據庫設計是設計階段的重要一環,分布式任務執行系統選用MySQL 數據庫實現數據的持久化.根據系統的業務功能設計,系統共涉及任務、日志、執行器節點等多個實體,現將系統中重要的數據表描述如表1和表2所示.

表1 任務數據表

表2 日志數據表

3.2 詳細設計

3.2.1 任務調度模塊設計與實現

任務調度是DTES的重要功能之一,整個系統的有序穩定運行得益于系統合理有效的調度策略[7–11].除了常見的任務隊列和隨機分配方法,系統還實現了依據執行器資源利用率進行調度的策略.DTES為監控模塊[12–14]的核心類GlobalHardwareMonitor的update 方法添加Spring的心跳機制@Scheduled (fixedDelay=5000)實現對各個節點執行器信息的實時更新.@Scheduled的參數定義了update 方法執行的時間規則,如fixedDelay=5000 表示該方法從上一次執行完開始計時,經過固定的延遲時間5000 ms 后執行下一次.在update 方法中訂閱執行器資源利用信息,并依據利用率進行任務調度.

任務調度模塊的核心類圖如圖4所示.在Schedule-ThreadSupport 類中調用TaskManager 接口的schedule方法進行任務調度,schedule 方法通過上行鏈路服務UpstreamService 發送HTTP GET 請求至下行鏈路控制器ClientController 加載任務信息.此外,UpstreamService中注入了硬件監控服務GlobalHardwareMonitor,依據任務信息和硬件資源利用率確定執行節點,并將結果返回給TaskManager.

圖4 DTES 任務調度核心類圖

3.2.2 任務執行模塊設計與實現

顧名思義,任務執行模塊[15–17]負責任務的具體執行.考慮到深度學習平臺的實際需求以及深度學習實驗的特性,DTES 現階段的任務執行主要基于Docker容器[18]的方式.用戶根據具體的任務自定義Docker 鏡像并將鏡像上傳至深度學習平臺,深度學習平臺的其他微服務可以接收鏡像并保存,由于不是本文的重點,具體過程不再詳細陳述.

任務執行模塊的核心類圖如圖5所示.接口Task-Manager中聲明了任務執行的必需方法,它有兩個實現類,分別是ThreadPoolTaskManager和AbstractDocker-TaskManager,后者是對Docker 容器任務管理器的抽象,它提供了用于獲取任務鏡像的方法pullImage.若后續需要支持其他類型的任務,只要實現該接口進行擴展即可.DefaultTaskManagerImpl是容器任務管理的具體實現類,UpstreamService 使用Spring的@Autowired注入進來,實現了啟動方法start和終止方法kill 等任務處理方法.

圖5 任務執行核心類圖

任務執行的具體流程如下:

(1)TaskManager 調用UpstreamService的loadTask方法加載任務,loadTask 使用Spring的RestTemplate方式發送HTTP GET 請求至下行鏈路控制器Client-Controller,ClientController 調用TaskService 查詢數據庫將結果返回;

(2)TaskManager 調用UpstreamService的prepare方法更新任務的當前狀態,prepare 使用Spring的RestTemplate 方式發送HTTP POST 請求至任務控制器TaskController,TaskController 將任務的狀態由ACCEPTED(被執行器接受)改為PREPARING(任務數據準備中);

(3)檢查任務所需鏡像是否存在,若不存在則進行拉取;

(4)設置數據卷等信息;

(5)創建Docker 容器;

(6)開啟日志收集;

(7)啟動Docker 容器,執行任務.

3.2.3 日志管理模塊設計與實現

作為系統的支撐模塊,日志管理模塊在分布式任務執行系統中也起著重要的作用[19–21].日志管理模塊收集了任務執行期間產生的日志信息,給用戶對任務結果的分析總結帶來極大的便利.

日志管理模塊的核心類圖如圖6所示.TaskLog-Receiver 類用于收集任務日志,當有當異步事件結果產生時就會調用該類的onNext 方法,onNext 方法通過Builder 模式實例化一個LogRecord 對象,記錄下日志產生的時間、日志級別、日志具體內容等信息.DTES的日志級別分為3 種,分別是標準輸出STDOUT、標準錯誤STDERR和純日志輸出RAW.實例化的LogRecord對象通過日志服務LogService 傳到上行鏈路服務UpstreamService,之后用RestTemplate 方式通過HTTP POST 請求轉發給LogController,LogController 調用日志存儲服務LogStorageService 將任務日志保存到MySQL 數據庫中.LogController 對外開放了日志查詢API,深度學習全流程托管平臺的其他相關微服務可以調用該API 將日志信息展示給用戶.

圖6 DTES 日志管理核心類圖

代碼1.任務執行核心代碼public void start(DockerTask task){DockerTask task=upstreamService.loadTask();upstreamService.prepare(task.getTaskId());TaskContext.Builder contextBuilder=TaskContext.Builder.aTaskContext();contextBuilder.withDockerTask(task);prepareImage(task.getImage());ListvolumeBinds=new LinkedList<>();ListtemporaryVolumes=new LinkedList<>();prepareVolume(volumeBinds,temporaryVolumes);contextBuilder.withTemporaryVolumes(temporaryVolumes);Maplabels=new Hashtable<>();labels.put(TAG_TYPE,VAL_TASK_CONTAINER);labels.put(TAG_TASK_ID,task.getTaskId().toString());CreateContainerResponse containerResponse=dockerClient.createContainerCmd(task.getImage()).withWorkingDir(task.getDirectory()).withCmd(task.getCommand()).withEnv(task.getEnvironment()).withAttachStdout(true).withAttachStderr(true).withLabels(labels).withHostConfig(HostConfig.newHostConfig().withBinds(volumeBinds).withAutoRemove(true)).exec();

contextBuilder.withContainerId(containerResponse.getId());TaskLogReceiver logReceiver=applicationContext.getBean(TaskLogReceiver.class,task.getTaskId());dockerClient.attachContainerCmd(containerResponse.getId()).withStdOut(true).withStdErr(true).withFollowStream(true).exec(logReceiver);contextBuilder.withLogAdapter(logReceiver);this.taskContextHolder.put(task.getTaskId(),contextBuilder.build());dockerClient.startContainerCmd(containerResponse.getId()).exec();}

4 系統測試

4.1 接口測試

接口測試用來測試系統與外界之間以及系統內部各個模塊之間的交互,主要測試系統的依賴關系以及數據傳遞等.使用Postman 對DTES 任務提交接口的測試如圖7所示.

圖7 接口測試

4.2 功能測試

DTES 作為子系統測試通過后,集成到整個深度學習平臺中.深度學習平臺部署在由3 臺物理機構成的集群中,每臺機器的硬件配置為CPU Intel Core i7@2.40 GHz,內存8 GB,硬盤100 GB,操作系統Ubuntu 16.04 LTS.本節以深度學習模型訓練任務為例,對DTES的功能進行測試.

如圖8所示,用戶進入工作臺頁面,在左側的目錄樹中將任務需要使用的圖片數據和標簽數據掛載進來,接著創建程序文件并在右側區域進行代碼編碼.編碼完成后,鼠標右鍵點擊左側項目的根目錄選擇“創建訓練任務”,創建成功后,DTES 在后臺進行調度執行.切換到任務詳情頁面,可以看到任務的實時日志信息,如圖9所示.

圖8 創建任務

圖9 日志查詢

4.3 性能測試

為測試DTES的性能,本節使用TensorFlow 框架在已集成DTES的深度學習平臺與未集成DTES的第一代平臺中多次訓練手寫數字MNIST 數據集,并對完成同一訓練任務的平均用時進行比較.實驗數據如表3所示.

表3 不同平臺完成同一訓練任務的平均耗時(單位:s)

通過對比可以看出,對于同樣的深度學習訓練任務,DTES 可以節約大約23.8%的時間,具有較高的應用價值.

5 總結與展望

使用深度學習平臺在網頁端進行深度學習模型訓練可以給實驗研究人員帶來極大的便利,本文結合平臺的實際需要設計并實現了分布式任務執行系統DTES.DTES 基于Spring Boot 框架實現任務調度、任務執行、日志管理等功能,可以作為一個微服務快速集成到深度學習平臺中.DTES 將接收的任務按照既定的調度策略進行調度并創建Docker 容器進行執行,同時將任務執行期間產生的日志信息反饋給實驗研究人員.經過系統測試,DTES 已經達到預期目標,但仍然存在待完善之處,接下來要繼續對該系統進行擴展,使其可以支持更多類型的任務.

猜你喜歡
深度系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
深度理解一元一次方程
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
深度觀察
深度觀察
深度觀察
深度觀察
主站蜘蛛池模板: 一级一级一片免费| 欧洲极品无码一区二区三区| 一级一级一片免费| 欧美日韩在线国产| 精品丝袜美腿国产一区| 国产99视频精品免费观看9e| 99性视频| 蜜桃臀无码内射一区二区三区| 国产亚洲美日韩AV中文字幕无码成人| 亚洲综合色吧| 久久综合亚洲色一区二区三区 | 日韩高清一区 | 亚洲日韩久久综合中文字幕| 国产福利大秀91| 欧美日韩北条麻妃一区二区| 亚洲欧美日韩另类在线一| 99精品在线视频观看| 精品国产一区二区三区在线观看 | 久久久久国色AV免费观看性色| jizz国产在线| 久久综合色天堂av| 亚洲黄色片免费看| 国产欧美在线视频免费| 综合社区亚洲熟妇p| 中文字幕在线观| 国产亚洲视频免费播放| 亚洲无码四虎黄色网站| 精品国产免费第一区二区三区日韩| 欧美国产在线看| 免费观看精品视频999| 亚洲无码视频喷水| 大陆国产精品视频| 国内精品视频| jijzzizz老师出水喷水喷出| 日韩一区精品视频一区二区| 欧美曰批视频免费播放免费| 亚洲视频三级| 国产在线自在拍91精品黑人| 色AV色 综合网站| 亚洲欧美自拍中文| 免费日韩在线视频| 一级毛片基地| 久草视频中文| 波多野结衣在线一区二区| 精品福利网| 国产经典在线观看一区| 91亚洲视频下载| 亚洲国产精品一区二区第一页免| 亚洲精品第1页| 成人国内精品久久久久影院| 小蝌蚪亚洲精品国产| 国产精品三级av及在线观看| 91香蕉视频下载网站| 69视频国产| 国产精品久久久久无码网站| 欧美亚洲香蕉| 久久综合亚洲色一区二区三区| 国产区91| 亚洲视频黄| 成年人福利视频| 婷婷亚洲天堂| 69免费在线视频| 波多野结衣第一页| 91视频青青草| 亚洲第一福利视频导航| 色亚洲激情综合精品无码视频| 国产99欧美精品久久精品久久| 国产成人啪视频一区二区三区| 毛片视频网| 一区二区三区国产精品视频| 色窝窝免费一区二区三区| 国产99精品久久| 久久精品无码专区免费| 亚洲天堂网2014| 多人乱p欧美在线观看| 亚洲天堂网2014| 超碰aⅴ人人做人人爽欧美 | 亚洲午夜国产精品无卡| 亚洲人成网站在线观看播放不卡| 国产日本一区二区三区| 国产极品嫩模在线观看91| 久久久久青草大香线综合精品 |