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 週五 夜