針對深度學習模型配置環境不方便的問題,通常會在K8s集群上采用docker方式運行深度學習相關的服務,由于GPU型號的換代以及nvidia驅動、cuda版本的升級,快速構建一個能夠讓自己深度學習模型或服務跑起來的docker鏡像,能夠提升生產效率,文中附有nvidia驅動、cuda、cudnn的版本依賴檔案,便于查看資料,
本文介紹比較簡單無腦的方式,利于新手上路,同時幫助在校學生能夠快速構建鏡像,利用學校的K8s集群開始自己的深度學習之旅,
1、前置準備
(1)需要安裝好docker和nvidia-docker(如果需要使用GPU設備的話)
(2)熟悉一下dockerhub的網站和資源,注冊一個賬號
(3)需要了解一下深度學習環境配置的一些依賴關系,最重要的:
1)linux版本與nvidia驅動的版本依賴
2)nvidia驅動 與 cuda版本之間的依賴,cuda版本與cudnn版本之間的依賴
cuda官方檔案中的依賴說明,可見鏈接: Release Notes :: CUDA Toolkit Documentation

在不同版本的cuda檔案中,可以查看linux內核版本和一些系統組件版本的對應關系,可選擇相應cuda版本檔案,鏈接和圖以cuda11.5為例:Installation Guide Linux :: CUDA Toolkit Documentation

3)深度學習框架(如tensorflow、pytorch、paddle)版本 與 cuda、cudnn版本之間的依賴
pytorch安裝環境依賴: https://pytorch.org/get-started/previous-versions/
tensorflow安裝環境依賴: 從源代碼構建 | TensorFlow
paddle安裝環境依賴: 開始使用_飛槳-源于產業實踐的開源深度學習平臺
若以上鏈接失效,可在評論區留言,有時間的話會更新,
如果自己從頭安裝,安裝順序:nvidia驅動-cuda&cudnn-深度學習框架,cuda和cudnn可以裝宿主機也可以裝conda的虛擬環境中,
然而,實際學習和作業的程序中,希望復現人家開源的代碼或者使用開源提供的模型,就需要考慮3)里面的內容了,一般來說如果采用docker,平臺的宿主機內核與驅動能夠支持想用cuda版本,
2、簡易制作鏡像的思路
采用dockerhub中已經裝好nvidia驅動、cuda、cudnn、conda(minconda)的鏡像源為基礎鏡像,然后通過conda構建虛擬環境可以創建虛擬環境,構建其他cuda、cudnn版本,以適應不同的深度學習框架版本的依賴,
注意:這樣做能夠快速上手構建鏡像,但是如果你覺得用別人的base鏡像不保險的話,可自行構建一個nvidia驅動、cuda、cudnn、conda(minconda)的鏡像
3、采用dockerhub中較好的base鏡像
文本在這里推薦dockerhub上面 gpuci/miniconda-cuda 的鏡像作為base鏡像,這里有各種版本的linux系統版本和cuda版本構建的基礎鏡像,并且已經安裝好miniconda工具,
docker pull 鏡像地址
4、拉取base鏡像構建自己的環境
(1)通過docker pull 獲取和自己作業系統和基礎cuda版本相適應的鏡像
(2)docker images 查詢鏡像ID
(3)通過鏡像構建容器:
1)nvidia-docker run -it 鏡像ID
2)或者nvidia-docker run -it -v 宿主機檔案夾:容器中的檔案夾 鏡像ID
1 顯示鏡像串列
docker images
2 通過鏡像生成容器
docker run -it image_id
nvidia-docker run -it image_id
3 通過鏡像生成容器,并將宿主機目錄掛載到容器目錄中
docker run -it -v 宿主機檔案夾:容器中的檔案夾 image_id
nvidia-docker run -it image_id
(4)在容器中創建新的conda環境,并在環境中構建自己想要的深度學習框架版本和相應的cuda、cudnn版本,可以通過conda search cuda、 conda search cudnn查詢conda源目前支持的版本,
conda search cuda
conda search cudnn
5、容器生成鏡像
可以通過docker ps -a 查詢在運行的容器ID,
通過docker commit 容器ID tag(你想給新的鏡像取的名字)
可以通過 docker tag 鏡像ID tag 給鏡像打上自己想取得名字
通過docker push可以上傳到自己的dockerhub上面
1 顯示docker容器狀態
docker ps -a
2 容器生成新的鏡像,container_id是容器ID tag是自己修改的鏡像名字
docker commit container_id tag
3 修改鏡像名字 tagname是修改后的名字
docker tag container_id tag tagname
4 將做好的鏡像上傳自己的dockerhub
docker push dockerhub中的鏡像名
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389333.html
標籤:AI
上一篇:室友打了一盤王者,我搞懂了三子棋
