1. 程式人生 > >caffe-0.16 nvidia docker編譯

caffe-0.16 nvidia docker編譯

最近測試NVDIA Tesla Votal100 GPU在深度學習框架下的效能表現,由於測試頻繁,考慮做個docker映象,這樣可以減少很多搭建環境的工作。記錄下方法,以備查詢分享。

步驟

  1. 物理機安裝V100驅動程式及nvidia-docker
    在物理機安裝V100驅動主要是為了通過使用nvidia-docker將GPU資源透傳給容器使用
  2. 開始製作
[root@bogon ~]# docker search centos
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                             The official build of
CentOS. 3636 [OK] ansible/centos7-ansible Ansible on Centos7 101 [OK] jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8... 83 [OK] tutum/centos Simple CentOS docker image with
SSH access 33 imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 30 [OK] gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glu... 20 [OK] kinogmt/centos-ssh CentOS with SSH 17
[OK] ...... [root@bogon ~]# docker pull centos
centos映象已經儲存到本地,下面編譯centos映象以便支援nvidia-docker,這樣生成新的映象就可以通過nvidia-docker將GPU資源帶到容器中。
  1. 編譯映象
    參考其他網上資源
# 建立資料夾
$ mkdir dockerBuild
$ cd dockerBuild/
# 新建Dockerfile檔案
$ vim Dockerfile

# 輸入以下內容

# FROM 原DOCKER_IMAGE
FROM {SOURCE_DOCKER_IMAGE_NAME}
# MAINTAINER 作者
MAINTAINER {your name}
# needed cuda
LABEL com.nvidia.volumes.needed="nvidia_driver"
# cuda version
LABEL com.nvidia.cuda.version="8.0"

# docker build 注意最後有個點 指的是使用當前目錄下的Dockerfile進行build
$ docker build -t DOCKER_IMAGE_NAME .
# 執行結果 我使用的bamos/openface來編譯的
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM {DOCKER_IMAGE_NAME}
 ---> 62d1673065e8
Step 2 : MAINTAINER {your name}
 ---> Running in b4dc9a88db63
 ---> 7a77f65d0908
Removing intermediate container b4dc9a88db63
Step 3 : LABEL com.nvidia.volumes.needed "nvidia_driver"
 ---> Running in 126095cdc342
 ---> c9035ebe54f8
Removing intermediate container 126095cdc342
Step 4 : LABEL com.nvidia.cuda.version "8.0"
 ---> Running in 12a0e5298d1e
 ---> 682db15bd6ca
Removing intermediate container 12a0e5298d1e
Successfully built 682db15bd6ca

# 檢視Label是否成功新增
$ docker inspect DOCKER_IMAGE_NAME 
......
"Labels": {
    "com.nvidia.cuda.version": "8.0",
    "com.nvidia.volumes.needed": "nvidia_driver",
}
......

# 使用nvidia-docker run 來執行編譯好的image
$ nvidia-docker run -it -d DOCKER_IMAGE_NAME /bin/bash
至此,基礎環境已經完成,通過lsmod可以發現nvidia的驅動模組已經透傳到容器中,但是現在缺少驅動程式、cuda、nccl,所以還不能呼叫顯示卡資源。
下面的步驟就是一次安裝這些程式。本次測試使用的是
nvidia-diag-driver-local-repo-rhel7-384.66-1.0-1.x86_64.rpm
nccl_2.0.5-2-cuda9.0_amd64.txz
cuda-repo-rhel7-9-0-local-rc-9.0.103-1.x86_64.rpm
依次安裝之後,就可以使用GPU了

編譯caffe-0.16

[root@bogon log]# docker commit container_id caffe_cuda9_nccl2.0.5
[root@bogon log]# docker save  caffe_cuda9_nccl2.0.5 > /data/caffe_cuda9_nccl2.0.5.tar