1. 程式人生 > >docker實踐錄2:使用dockerhub中轉站下載cuda安裝包

docker實踐錄2:使用dockerhub中轉站下載cuda安裝包

最近,演算法小組使用最新版本的tensorflow,需要用到cuda9,去年安裝的是cuda8,已經不合適了,於是要在伺服器上升級。由於是伺服器,我不敢讓其它人做,我就自己來升級。去年因為有同事安裝cuda把python搞壞,我修復半天不行,ubunut一層一層的依賴關係太繞了,最後重新安裝系統。

問題

原理

原理見上一文章,此處不再贅述。

實現

首先,編寫Dockerfile,內容如下:

FROM ubuntu:16.04

LABEL maintainer Late Lee([email protected])

RUN apt-get update || true && \
apt-get install -y \ wget && \ rm -rf /var/lib/dpkg/info/* /var/lib/apt/lists/* RUN wget -c https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run -O cuda_9.0.176_384.81_linux.run && \ echo "7a00187b2ce5c5e350e68882f42dd507 cuda_9.0.176_384.81_linux.run"
| md5sum -c - # patch 1 RUN wget -c https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/1/cuda_9.0.176.1_linux-run -O cuda_9.0.176.1_linux.run && \ echo "8477e5733c8250dd3e110ee127002b9c cuda_9.0.176.1_linux.run" | md5sum -c - # patch 2 RUN wget -c https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/2/cuda_9.0.176.2_linux-run -O cuda_9.0.176.2_linux.run && \
echo "4d3113ffd68a4c67511ca66e497badba cuda_9.0.176.2_linux.run" | md5sum -c - RUN wget -c https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/3/cuda_9.0.176.3_linux-run -O cuda_9.0.176.3_linux.run && \ echo "0d7d07dc3084e0f0ce7d861b5a642f19 cuda_9.0.176.3_linux.run" | md5sum -c - RUN wget -c https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/4/cuda_9.0.176.4_linux-run -O cuda_9.0.176.4_linux.run && \ echo "a8dbbbde6e9d130e8deb7094795478b1 cuda_9.0.176.4_linux.run" | md5sum -c - CMD ["/bin/bash"]

內容十分簡單,安裝wget,然後用wget下載,預設情況下,檔案下載到根目錄,即“/”目錄。 將Dockerfile提交到github上,然後在hub.docker建立自動構建專案,關聯Dockerfile後,手動構建,再次提交Dockefile進行自動構建,等待其完成。由於是免費使用,需要排隊,構建時間無法確定,以筆者經驗,晚上提交,第二天一般能構建完成(當然,可能成功,也可能失敗)。

Dockerfile學習要點

上面的Dockerfile提到的命令,有2點值得記住的。 1、下載大的檔案建議用wget命令,如果下載地址沒有帶正常的檔名,則可以使用-O(大寫的字母O,不是數字0)來指定檔名,如果在放到目錄,那麼該目錄必須存在。 2、校驗md5可以使用如下命令:

$ echo "7a00187b2ce5c5e350e68882f42dd507 cuda_9.0.176_384.81_linux.run" | md5sum -c -
cuda_9.0.176_384.81_linux.run: OK

如果md5值不正確,會有錯誤提示:

$ echo "7a00187b2ce5c5e350e68882f42dd50 cuda_9.0.176_384.81_linux.run" | md5sum -c -
md5sum: 'standard input': no properly formatted MD5 checksum lines found

有興趣可以用echo $?檢視2種場景的返回值。這裡就不展開了。

驗證

$ docker pull latelee/cuda:tar-9.0

再執行這個映象:

root@98dfc8d4f016:/# ls
bin                       cuda_9.0.176.2_linux.run  cuda_9.0.176_384.81_linux.run  home   media  proc  sbin  tmp
boot                      cuda_9.0.176.3_linux.run  dev                            lib    mnt    root  srv   usr
cuda_9.0.176.1_linux.run  cuda_9.0.176.4_linux.run  etc                            lib64  opt    run   sys   var

以.run結尾的,即是下載好的cuda檔案。拷貝這些映象到宿主機目錄,然後退出。

root@98dfc8d4f016:/# cp *.run /home/latelee/tools/cuda          
root@98dfc8d4f016:/# exit
exit

之後,就可以在ubuntu上安裝使用了,筆者的習慣是,在個人HOME目錄建立tools目錄,所有開源專案、工具、命令,都放在這裡。 下面驗證md5值,命令如下:

$ md5sum cuda_9.0.176_384.81_linux.run
7a00187b2ce5c5e350e68882f42dd507  cuda_9.0.176_384.81_linux.run
7a00187b2ce5c5e350e68882f42dd507 cuda_9.0.176_384.81_linux.run

兩者一致,說明下載成功。

小結

本文提出的方法,適用於無法下載cuda,或下載的cuda檔案壓縮包md5校驗出錯的情形。有一定實踐指導意義。

李遲 2018.9.14 週五 夜