在CentOS7下配置docker深度學(xué)習(xí)環(huán)境
寫(xiě)在開(kāi)始
由于實(shí)驗(yàn)室配了一臺(tái)有7塊V100的GPU服務(wù)器,然后需要整個(gè)開(kāi)放給整個(gè)實(shí)驗(yàn)室使用。因此不能直接把系統(tǒng)環(huán)境拿出來(lái)用(誰(shuí)知道有沒(méi)有小白亂搞系統(tǒng)環(huán)境呢?)。然后調(diào)研了兩種技術(shù)方案:1)LXC系統(tǒng)容器;2)docker應(yīng)用容器。 好了,坑來(lái)了。使用方案一有性能損耗,原因大家自己想吧,反正使用方案一,V100的表現(xiàn)有時(shí)候還不如GTX1060。因此轉(zhuǎn)而使用方案(2).這里記錄一下具體搭建過(guò)程。
開(kāi)始教程
- 首先安裝docker,這里需要安裝
>=19.03的版本,因?yàn)樵谶@個(gè)版本后,docker直接就支持訪問(wèn)宿主機(jī)的GPU設(shè)備了。(如果你裝了其他的版本,我建議你升級(jí)到19.03極其更新的版本)
# 安裝docker>=19.03的版本
## 查看docker-ce 版本
>>> yum list docker-ce --showduplicates | sort -r
## 安裝docker-ce19.03
>>> yum install docker-ce-19.03
## 允許docker開(kāi)機(jī)自啟以及現(xiàn)在運(yùn)行docker
>>> systemctl enable docker.service
>>> systemctl start docker
## 檢測(cè)docker是否安裝成功,如果正常顯示版本就算是正常了
>>> docker --version
- 配置docker鏡像加速,您可以通過(guò)修改daemon配置文件
/etc/docker/daemon.json來(lái)使用加速器,這里去注冊(cè)獲取加速鏈接
>>> sudo mkdir -p /etc/docker
>>> sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["your aliyun docker accleration url"]
}
EOF
>>> sudo systemctl daemon-reload
>>> sudo systemctl restart docker
- 安裝GPU驅(qū)動(dòng),配置cuda. (吐槽一下,別去看csdn上的教程,坑多的很,直接看NVIDIA官方安裝教程)
# 首先去NVIDIA官網(wǎng)下載cuda10.0以及配套的cudnn7
# 然后安裝cuda10.0,默認(rèn)安裝目錄在/usr/local/cuda
>>> sh cuda10.0.run
# 配置cudnn
## 需要先把下載cudnn文件后綴名改為.tgz,然后解壓
>>> tar -zxvf cudnn10.tgz
## 把動(dòng)態(tài)庫(kù)拷貝到/usr/local/cuda 對(duì)應(yīng)的文件夾中
>>> cp cuda/include/* /usr/local/cuda/include/
>>> cp cuda/lib64/* /usr/local/cuda/lib64/
## 然和給執(zhí)行權(quán)限
>>> chmod u+x /usr/local/cuda/include/cudnn*
>>> chmod u+x /usr/local/cuda/lib64/libcudnn*
## 檢測(cè)環(huán)境是否安裝成功,如果輸出相關(guān)信息則表明成功.
>>> nvidia-smi
- 安裝nvidia-docker,官方教程傳送門(mén)
>>> distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
>>> curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
>>> sudo yum install -y nvidia-container-toolkit
>>> sudo systemctl restart docker
## 測(cè)試nvidia-smi是否可用了,如果有輸出顯卡相關(guān)信息,那就是成功了
>>> docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
- 然后去拉一個(gè)自己想要的深度學(xué)習(xí)環(huán)境,可以去nvidia的倉(cāng)庫(kù)拉一個(gè)對(duì)應(yīng)的
cuda10.0+cudnn7的鏡像,然后自己在里面裝conda等,這里不詳細(xì)展開(kāi),大概講一下去拉一個(gè)tensorflow-gpu2.0+py3的鏡像。
# 首先打開(kāi)網(wǎng)站 https://hub.docker.com/ 然后搜索tensorflow,然后找到自己喜歡的鏡像拉下來(lái)就好了,我這里拉了一個(gè) tensorflow-gpu2.0+py3
>>> docker pull tensorflow/tensorflow:2.0.0-gpu-py3
- 然后啟動(dòng)一個(gè)容器,并為該容器分配顯卡
# 這里device=0表示分配第一張顯卡給這個(gè)容器,并掛載了我的工作目錄到容器的home目錄下
>>> docker run -itd --gpus '"device=0"' -v /home/lch/for_test:/home container_id bash
# 如果你想指定多個(gè)顯卡到一個(gè)容器里面,你可以通過(guò)device指定多個(gè)設(shè)備號(hào)來(lái)實(shí)現(xiàn)
>>> docker run -itd --gpus '"device=0,1,2"' -v /home/lch/for_test:/home container_id bash
# 如果你想掛幾個(gè)顯卡到一個(gè)容器里面,這里是系統(tǒng)自動(dòng)指定兩張卡到該容器
>>> docker run -itd --gpus 2 -v /home/lch/for_test:/home container_id bash
# 如果你想把全部顯卡都掛到一個(gè)容器里面,你可以通過(guò)device指定多個(gè)設(shè)備號(hào)來(lái)實(shí)現(xiàn)
>>> docker run -itd --gpus all -v /home/lch/for_test:/home container_id bash
- 最后進(jìn)入容器,測(cè)試深度學(xué)習(xí)環(huán)境是否可用
# 進(jìn)入容器
>>> docker exec -it container_id bash
# 啟動(dòng)python,運(yùn)行tensorflow
>>> python
$$ import tensorflow as tf
$$ tf.test.tf.test.is_gpu_available()
$$ gpus=tf.config.experimental.list_physical_devices(device_type='GPU')
$$ for gpu in gpus:
$$ print(gpu)
如果輸出結(jié)果為true,并且還輸出了設(shè)備列表,那就是成功了。如果沒(méi)有,再找找其他教程看看咯~