由于預設安裝的docker都是基于cpu版本的,如果想要配合GPU進行一些簡單的部署的話,則需要安裝nvidia-docker來結合使用。想要安裝nvidia-docker版本,前提需要你的硬體支援gpu加速(nvidia系列),同時先安裝好了nvidia驅動和cuda以及cudnn和docker基礎版,接下來需要做的如下(以下是基于ubuntu18.04進行安裝的docker-ce基礎上進行安裝,如果是centos請參考https://blog.csdn.net/u014069688/article/details/100532774):
(1)配置
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - ##擷取gpg密鑰并添加密鑰
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu18.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list ##擷取ubuntu18.04版本的nvidia-docker清單,結果傳回給标準輸出
sudo apt-get update
(2)安裝
$sudo apt-get install nvidia-docker2 ###ubuntu安裝,centos則換成yum search --showduplicates nvidia-docker,yum install nvidia-docker:xxx
$sudo pkill -SIGHUP dockerd ###重新加載docker守護程序配置
$docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi ###測試
如果測試出現了error,極有可能是新的cuda與系統核心版本不比對了,可以嘗試指定cuda版本資訊即可。
$sudo nvidia-docker run --rm nvidia/cuda:10.0-devel nvidia-smi
(3)使用
可以單獨安裝指定版本的tf-gpu包資訊
docker run --runtime=nvidia -it --rm tensorflow/tensorflow:1.14.0-gpu-py3 ###安裝tf-gpu:1.14
也可以先配置好cuda等,然後再依次配置好各種需要的庫,最後再commit成最終的項目鏡像。以配置tf-gpu:1.14版為例,
sudo nvidia-docker run -it nvidia/cuda:10.0-base ###如果沒有安裝cuda10.0會先自動下載下傳,然後再進入
apt install cuda-toolkit-10-0 ###官方拉取的鏡像不完整,需要進行這一步
###進入/usr/local/cuda-10-0下檢視檔案是否齊全,有沒有bin檔案,然後再将cuda添加到環境變量中,同時需要安裝配置cudnn,完成整體環境配置
####由于配置的cuda環境很簡陋,需要自己配置python和pip
apt-get install python3-pip
###然後利用pip3進行包的安裝
pip3 install tensorflow-gpu==1.14 -i https://pypi.douban.com/simple
###将安裝好的打包成新的鏡像
nvidia-docker ps -a
nvidia-docker commit 容器id 新的鏡像
後來在網上又找到一種新的方法,直接配置一個帶有cuda和cudnn的Linux環境,然後再依次添加需要的庫
docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
需要着重說明的一點就是啟動帶gpu的鏡像需要用下面的方式
sudo nvidia-docker run -it xxx_id ###而不是sudo docker run -it xxx_id !!!!
參考連結:
1、Ubuntu18.04安裝nvidia-docker(親測有效,步驟詳盡)
2、Ubuntu18.04安裝docker-ce、顯示卡驅動、以及nvidia-docker
3、安裝NVIDIA-DOCKER
4、nvidia官網:https://github.com/NVIDIA/nvidia-docker
5、Cuda in docker: nvcc command not found解決方法
6、顯示卡,顯示卡驅動,nvcc, cuda driver,cudatoolkit,cudnn到底是什麼
7、【Docker】如何修改Docker的預設鏡像存儲位置(二)