實驗室GPU管理神器Determined

2021-12-27 機器學習算法與自然語言處理


MLNLP(機器學習算法與自然語言處理)是國內外最大的自然語言處理社區之一,匯聚超過50w訂閱者,受眾覆蓋國內外NLP碩博生、高校老師以及企業研究人員。
社區的願景是促進國內外自然語言處理,機器學習學術界、產業界和廣大愛好者之間的交流和進步

作者|呂昱峰

來源 | 知乎

地址 | https://zhuanlan.zhihu.com/p/422462131

本文僅作學術分享,若侵權請聯繫後臺刪文處理

所謂工欲善其事,必先利其器。做深度學習相關的任務,GPU不可或缺,但是等到買了一堆卡,配置好了裸機之後,問題也就接踵而來了。由於是經驗總結,也不避諱什麼,相信下面的情況各個組裡的同學都有遇到過:

實驗室多人混用一個物理機,來個小白裝庫分分鐘給你把環境乃至系統搞崩了;

沒有清晰的存儲區域劃分,/root或者/home/user_name 代碼數據亂放,隨時滿;

多人使用一臺物理機需要搶佔;

實驗室新人不敢讓他碰環境,老人又不想當運維;

有的人愛在終端起任務,有的人愛開notebook寫;

。。。。

環境穩定!環境穩定!環境穩定!重要的事情說三遍!沒有人希望公用的環境時不時的崩了,而且高校基本上不存在運維的人(名義上招進來實際在幹啥相信同學們也知道)。

兼容性好,即可以滿足各種版本的Nvidia-driver+CUDA+框架的組合。為什麼?因為你要復現別人的代碼啊,起碼要跑一下吧,作者能給開源就不錯了,不會給你持續更新,你只能裝人家readme要求的版本。這時候物理機裝著一大堆的環境,不斷升級降級,換誰不崩潰。

升級+維護簡單。理由也很簡單,因為沒有運維。

屏蔽物理機權限(開docker鏡像),誰剛來都可能是小白,但誰也都不希望小白給自己瞎整,甚至給小白擦屁股。

任務式管理。如果遇上需要搶佔顯卡的情況,能夠排隊。相信一起共用物理機的同學都體會過kill和被kill進程的「快感」。

Determined是一家國外創業公司做的集群管理+可視化作業+模型調優一體的解決方案,當然這裡我選擇它的原因主要還是集群管理。從2019年開始我就在各處找合適的方案,期間也用過微軟的OpenPAI,基本能夠滿足上述的1,2,4,5。但是難受就難受在環境依賴一大堆,科學上網只要不穩,升個級要費上好幾天。手動改了一些shell腳本替換成國內源,但是更新了幾個大版本要跟著改,實驗室就我一個人會升級,就很難頂。

下面再說說為什麼Determined是完美解決方案:

安裝只需要一個Python包,pip install一下就OK了。包括升級也是一行搞定,省事。

作業系統隨便apt update/upgrade,  nvidia-driver隨便升級最新版,不影響使用。

只有docker本身pull鏡像依賴科學上網。

前面提到的所有GPU管理的需求都能滿足。

說白了,安裝簡單,升級沒限制,用起來舒適。

Determined安裝

這裡就事無巨細的把所有的安裝步驟都寫一下,當然官網文檔其實寫的已經很清楚了,先放個連結:

https://docs.determined.ai/latest/sysadmin-deploy-on-prem/index.html

下面開始進行安裝步驟說明:

1. 安裝全新的Ubuntu系統,建議選擇18.04或20.04的長期維護版。

為什麼選擇Ubuntu?CentOS官方已經放棄了,另外apt直裝nvidia-driver非常友好,非要用run包的請繞道。

2. 安裝Docker

這裡給出兩個安裝方式,首先是determined官方給的方式(注意此方式需要科學上網):

sudo apt-get update && sudo apt-get install -y software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update && sudo apt-get install -y --no-install-recommends docker-cesudo systemctl reload dockersudo usermod -aG docker $USER

或者:

sudo apt install docker.io

3. 安裝nvidia-container-toolkit

用於Docker容器內調用GPU(注意需要科學上網)

curl -fsSL https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.listsudo apt-get update
sudo apt-get install -y --no-install-recommends nvidia-container-toolkitsudo systemctl restart docker

4. 配置docker代理,方便後續pull鏡像能夠順利

創建配置文件目錄和配置文件

sudo mkdir -p /etc/systemd/system/docker.service.dsudo touch /etc/systemd/system/docker.service.d/http-proxy.conf

添加HTTP_PROXY環境變量。其中[proxy-addr]和[proxy-port]分別改成實際情況的代理地址和埠:

[Service]Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/"Environment="HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"

更新配置並重啟Docker

systemctl daemon-reloadsystemctl restart docker


最後查看一下是否生效

輸出中包含如圖的HTTP PROXY和HTTPS PROXY即可。

4. 安裝Determined

至此安裝準備工作完成,下面進行集群配置。

先放一個Determined的AWS部署圖,本地部署結構也是類似的:

可以看到Determined集群節點由一個Master和無數個Agent構成,其中Master作為Client訪問入口,即通過網頁、CLI等方式發起請求,通過Master發送到agents進行調度。此外還需要有獨立的存儲位置。

這裡給出一套簡單的集群配置:

Master節點1個,簡單的server,不需要GPU

存儲節點1個,具體空間自定,建議不小於4T(可與Master為同一節點)

Agent節點若干,GPU伺服器,建議將同型號卡分組

萬兆交換機連接,保證網絡存儲速度。

首先將所有節點連接到同一區域網,並按照上面的安裝教程安裝給所有機器安裝依賴環境(Master和存儲節點不需要安裝nvidia相關的內容)

然後啟動Master節點:

det deploy local master-up

一般直接啟動即可,web訪問埠為8080,有具體配置需求可以參考詳細配置文檔。

然後配置GPU節點,這裡需要將不同型號的卡進行分組,需要配置yaml文件:

## The hostname or IP address of the Determined master.master_host: ip_of_your_master_node## The port of the Determined master.master_port: 8080
## The ID of this agent; defaults to the hostname of the current machine. Agent IDs must be unique## within a cluster.agent_id: rtx3090_0## The label of this agent. Agents with labels may only run workloads with the## corresponding label.label: rtx3090
## The GPUs that should be exposed as slots by the agent. A comma-separated list of GPUs,## each specified by a 0-based index, UUID, PCI bus ID, or board serial number.http_proxy: ip_of_proxyhttps_proxy: ip_of_proxy

這裡主要配置3個內容:

完成後,所有agent節點使用如下命令啟動:

docker run --gpus all -v /var/run/docker.sock:/var/run/docker.sock -v "$PWD"/agent-config.yaml:/etc/determined/agent.yaml determinedai/determined-agent:0.15.6

注意最後的版本號要和安裝的determined版本號對應,一般為最新。

除此之外,還需要講存儲節點進行分布式存儲的配置,一般可以採用NFS或者Ceph,這裡給出NFS的配置教程和Ceph官方文檔,可參考配置,具體步驟不再贅述:

https://docs.ceph.com/en/pacific/

https://ubuntu.com/server/docs/service-nfs

注意:所有Agent掛載存儲到同一位置,如/mnt/data,才能保證任意任務都可以使用同一配置啟動。

Determined主要有兩種使用方式,Web和CLI。其中web可以直接通過Master節點IP:8080進行訪問,具體界面如下:

可以直接通過網頁端創建任務(不推薦)。

這裡詳細介紹CLI的用法,因為網頁端創建任務無法自定義存儲路徑和加載的Docker鏡像,靈活度十分受限。

1. 在終端機安裝determined,pip install determined即可

2. 在環境變量配置MASTER節點IP

nano ~/.bashrc# 添加如下內容:# export DET_MASTER=ip_of_your_master_nodesource ~/.bashrc


3. 使用determined cli創建任務

首先需要登錄:


admin用戶可以管理用戶添加刪除,具體參考用戶管理文檔。

然後寫一個開啟任務的yaml配置文件,這裡給出一個參考:

description: your_task_nameresources:  agent_label: rtx3090  slots: 1bind_mounts:  - host_path: /mnt/dl/lvyufeng/    container_path: /run/determined/workdir/lv/environment:  image: determinedai/environments:cuda-11.1-pytorch-1.9-lightning-1.3-tf-2.4-gpu-0.16.3  environment_variables:  - http_proxy=your_proxy  - https_proxy=your_proxy


以上涵蓋了開啟任務所需的基本設置,包括:

description: 任務名

resources: 要開啟任務的GPU類型(對應label)和數量(對應slots)

bind_mounts: 掛載分布式存儲到docker容器內,host_path為物理機路徑(這是為什麼我上面讓所有agent設置同一個路徑的原因),container_path為容器內路徑,建議使用/run/determined/workdir/xxx, 因為notebook默認路徑為/run/determined/workdir/這樣進入即可使用。

environment: docker容器的環境配置,包括使用的鏡像和環境變量。

完成後,可以選擇開啟notebook或者cmd終端,這取決於使用者的習慣。

# notebookdet notebook start --config-file config.yaml# shelldet shell start --config-file config.yaml


這裡還有一個比較實用的用法,VSCode配合Shell進行遠程調試,可以參考官網文檔使用:

https://docs.determined.ai/latest/features/commands-and-shells.html#visual-studio-code

安裝和使用都OK之後,部分同學會有自定義Docker鏡像的需求,即修改:

environment:  image: determinedai/environments:cuda-11.1-pytorch-1.9-lightning-1.3-tf-2.4-gpu-0.16.3


自定義Docker鏡像可以把自己需要的環境打包,如我個人需要的ROUGE包或者MindSpore環境,均可以通過自定義鏡像完成,後續直接pull自己的鏡像即可。

由於Determined官方其實給出了很多個版本的cuda和框架的組合,這裡先給出連結供大家直接使用:

https://hub.docker.com/r/determinedai/environments/tags

大多數常用的環境都已經打包好,這裡就不多說了。下面說一下自定義鏡像的方法:

1. 克隆官方environments倉庫

git clone https://github.com/determined-ai/environments

2. 添加想要安裝的環境相關命令

cd det_dockerfile_scriptstouch your_script.sh# add install instructions to your_script.sh


3. 修改Dockerfile

nano Dockerfile-base-gpu# add `RUN /tmp/det_dockerfile_scripts/your_script.sh`


4. 參考Makefile裡的命令打包Docker鏡像,然後上傳到dockerhub

這裡不給出Docker鏡像打包的教程,如有需求可以自行搜索,determined官方已經給出了非常完整的打包腳本,根據readme修改和運行即可。

實驗室用個GPU不容易,這篇文章不面向新來的小白,主要給老師和管伺服器的師兄師姐們看看。總之用Determined屬於一勞永逸,後續再來新人隨便在Docker容器裡造,也沒多大關係,如果你們還在苦哈哈的一起用同一臺物理機,時不時因為環境崩潰導致人也崩潰了,可以參考一下這篇文章。另外,環境搞不好從來不是research做不下去的理由,現在的調參俠們可能真的連裝環境這種基礎技能都沒有,也能吃大組紅利刷頂會,何其哀哉!大概就這樣吧。

關於我們MLNLP(機器學習算法與自然語言處理) 是由國內外自然語言處理學者聯合構建的民間學術社區,目前已經發展為國內外最大的自然語言處理社區之一,匯聚超過50w訂閱者,旗下包括萬人頂會交流群、AI臻選匯、AI英才匯以及AI學術匯等知名品牌,旨在促進機器學習,自然語言處理學術界、產業界和廣大愛好者之間的進步。社區可以為相關從業者的深造、就業及研究等方面提供開放交流平臺。歡迎大家關注和加入我們。

相關焦點

  • 巧用 Docker Compose 管理 GPU 資源
    "]          driver: gpuvendor          options:            virtualization: false咳咳咳,看也看了,說也說了,那我們就簡單的編寫一個示例文件,讓啟動的 cuda 容器服務來使用一個 GPU 設備資源,並運行得到如下輸出。
  • 美國QMAXIS金相耗材——實驗室續命神器推薦!
    今天把這些能在實驗室裡點亮心情的美國QMAXIS金相耗材分享給你們,就當作新的一年剛剛開始吧。日光溫暖,就覺得一切都充滿希望。美國QMAXIS砂輪切割片:金相砂輪切割機專用的切割片。適用於各種鋼、高溫合金、黑色金屬和有色金屬等大多數材料的金相切割。砂輪金相切割片屬於磨耗型切割片,有環保型樹脂粘結的,也有經濟型橡膠粘結的,還有可實現幹切的玻璃纖維增強型切割片。
  • 實驗室管理
    儀器設備的管理儀器設備是實驗室重要組成部分。隨著科學技術發展,自動化、智能化、高速化是檢驗技術發展的必然趨勢。近年來,檢驗工作對儀器設備的依賴越來越大。儀器設備的管理是實驗室質量管理的重要內容,主要包括以下內容:1. 根據工作需求正確的配備儀器衛生部發布了「各級疾病預防控制機構裝備標準」是各級疾病預防控制機構儀器配備的主要依據。
  • 實驗室管理人員必須知道的實驗室安全管理十條
    實驗室管理說容易也容易,說難也很難。因為它不僅牽涉到對儀器設備的管理,還牽涉到了對人的管理,想管好實驗室真心不是件容易的事。下面給大家簡單說下實驗室管理要注意哪些方面,希望能給實驗室管理人員尤其是新人提供一些參與和建議。
  • 使用GPU.js改善JavaScript性能
    gpu.createKernel 方法創建了一個從JavaScript函數移植過來的GPU加速內核。與GPU並行運行內核函數會導致更快的計算速度——快1-15倍,這取決於你的硬體。GPU.js入門為了展示如何使用GPU.js更快地計算複雜的計算,讓我們快速啟動一個實際的演示。
  • 未來實驗室管理趨勢——實驗室自動化與信息化
    為滿足實驗室自動化不斷發展的需求,實驗室信息化管理平臺為實驗室用戶提供實驗室創新應用產品及全自動化解決方案,推動未來實驗室的智能化發展。實驗室自動化與信息化包含實驗室設備物聯管控、實驗室自動化工作流、實驗室自動化檢測分析、實驗室數據管理、實驗室報告處理自動化等相關技術和產品,助推未來實驗室智能化發展,提升實驗室技術與研發創新。實驗室智能化管理系統如何實現?
  • 高校實驗室管理系統-智能化管理
    如有侵權,請在後臺留言聯繫我們進行刪除,謝謝隨高校實驗需求的增多和多樣化,實驗室人工管理方式和預約方式越來越不能滿足現在的需求。而更加簡便、清晰、規範的高校實驗室管理系統也應運而生。實驗室管理系統是為實驗室的管理提供快捷方便的服務,及數據查詢、統計為一體。建立一套實驗室管理系統可以方便的實現高校開放式實驗管理。
  • 盤點來自工業界的GPU共享方案
    vCUDA通過劫持CUDA的顯存申請和釋放請求,為每個容器管理它的顯存使用量,進而實現了顯存隔離。唯一需要注意的是申請context並不通過malloc函數,因此無法知道進程在context使用了多少顯存。因此vcuda每次都去向GPU查詢當前的顯存使用量。在算力隔離方面,使用者可以指定容器的GPU利用率。vCUDA將會監控利用率,並在超出限制利用率時做一些處理。此處可以支持硬隔離和軟隔離。
  • 乾貨 | 實驗室管理總則
    課程真正幫助一線實驗人員提升安全意識、知識、應急技能,科學有效地開展各項實驗室安全管理工作。實驗室管理是所有實驗人員共同的責任,每一位實驗人員都應對實驗室的正常、高效運轉儘自己的義務和責任,自覺遵守實驗室的規章制度和管理辦法。
  • 超算安裝GPU-based軟體 (以pytorch為例)
    一般的超算的拓撲結構是若干個登陸節點+若干個交換機+大量計算CPU節點+大量GPU計算節點+一個(或若干個)存儲節點+管理節點。其中存儲節點的共享存儲可以被所有節點訪問。一般運作方式是,如果我的計算依賴非常共性的軟體,我可以找超算管理員安裝,使用的時候可以通過module load來初始化自己所需軟體。
  • 2020年深度學習如何挑選 GPU?這篇 GPU 最全攻略請查收
    4 性能評測1)來自Tim Dettmers的成本效益評測[1]https://timdettmers.com/2019/04/03/which-gpu-for-deep-learning/卷積網絡(CNN),遞歸網絡(RNN)和transformer的歸一化性能/成本數(越高越好)。
  • 實驗室管理制度大全
    新的一年馬上要來了,很多實驗室根據新一年的管理計劃要求,實驗室也要進一步完善管理制度,這篇文章羅列了26項實驗室常用管理制度,分享給實驗室經理們參考。實驗室環境衛生制度標養室管理制度實驗室廉政建設制度一、貫徹實施國家關於試驗檢測、計量、環保和職業健康方面的法律、法規,執行有關試驗檢測的技術標準、規範、規程,認真執行上級和授權母體實驗室的規章制度,負責實驗室內部管理體系有效運行。
  • 實驗室管理制度大全!
    導讀:很多實驗室根據新一年的管理計劃要求,實驗室也要進一步完善管理制度,這篇文章羅列了26項實驗室常用管理制度,分享給實驗室經理們參考
  • [程序編譯] 30min搞定GPU版VASP 5.4.4編譯
    經過測試發現三年前買的一臺遊戲本(GTX1050)能趕上實驗室CPU伺服器的速度(15-20線程)。事實證明用GPU加速的普通個人電腦計算速度甚至可能超過部分超算伺服器。圖1.作者的工作環境233。; \cp src/makefile src/.objects makefile.include build/gpu ; \make -C build/gpu VERSION=gpu allmake[1]: Entering directory '/opt/vasp.5.4.4/build/gpu'rsync -ru ../..
  • 實驗室耗材的正確管理
    實驗室大學問,小小的耗材同樣也有很多講究。實驗室耗材管理需要注意哪些?你知道?如果還不是很清楚快來看看吧!
  • 2020 年深度學習如何挑選 GPU?這篇 GPU 最全攻略請查收
    4 性能評測1)來自Tim Dettmers的成本效益評測[1]https://timdettmers.com/2019/04/03/which-gpu-for-deep-learning/卷積網絡(CNN),遞歸網絡(RNN)和transformer的歸一化性能/成本數(越高越好)。
  • 初中物理實驗室的建設與管理
    作為實驗教學的主要場所,實驗室發揮著至關重要的作用,為了保證教師在物理實驗教學中環境的安全性,亟需加強中學物理實驗室的管理與建設工作,從而使學生掌握更多的知識應用能力,讓其深入了解物理這門課程。基於此,本文將針對中學物理實驗室的建設與管理予以更進一步的分析與探討,僅供業界人士參考。
  • 【經驗】深度學習如何挑選GPU?
    4 性能評測1)來自Tim Dettmers的成本效益評測[1]https://timdettmers.com/2019/04/03/which-gpu-for-deep-learning/卷積網絡(CNN),遞歸網絡(RNN)和transformer的歸一化性能/成本數(越高越好)。
  • 2020年深度學習如何挑選GPU?這篇 GPU 最全攻略請查收
    4 性能評測1)來自Tim Dettmers的成本效益評測[1]https://timdettmers.com/2019/04/03/which-gpu-for-deep-learning/卷積網絡(CNN),遞歸網絡(RNN)和transformer的歸一化性能/成本數(越高越好)。
  • Nature reserve determined for major riverheads ecology
    Nature reserve determined