docker实践录2:使用dockerhub中转站下载cuda安装包

版权声明:本文为迟思堂主人李迟原创文章,版权所有。可随便任意使用(包括学习研究商用),但由此带来的成果或后果,概与作者无关。胡乱修改的,不注明出处的,概不负责。 https://blog.csdn.net/subfate/article/details/82697848

最近,算法小组使用最新版本的tensorflow,需要用到cuda9,去年安装的是cuda8,已经不合适了,于是要在服务器上升级。由于是服务器,我不敢让其它人做,我就自己来升级。去年因为有同事安装cuda把python搞坏,我修复半天不行,ubunut一层一层的依赖关系太绕了,最后重新安装系统。

问题

cuda最新版本是9.1,但我们匹配的是9.0,9.0下载页面为:
https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=runfilelocal
然而,无论用下载工具,还是浏览器自带的,还是在linux物理机/虚拟机用wget、curl下载,得到的文件的md5值都不对。说明下载出错了——即使文件体积完全一样。
去年安装cuda,搞了一周多,一来是没接触过,二来经常有这或那的问题,最后发现这个问题的根本原因是下载的文件是错误的。也正因为这样,我在很多时候跟大家强调下载文件时确认md5很重要。

原理

原理见上一文章,此处不再赘述。

实现

首先,编写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种场景的返回值。这里就不展开了。

验证

本文构建成功的镜像地址为https://hub.docker.com/r/latelee/cuda/。目前已经构建成功,拉取镜像命令如下:

$ 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文件。拷贝这些镜像到宿主机目录,然后退出。

扫描二维码关注公众号,回复: 4844852 查看本文章
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

nvidia官方的9.0版本校验地址为:https://developer.download.nvidia.com/compute/cuda/9.0/Prod/docs/sidebar/md5sum-4.txt。第一行如下:

7a00187b2ce5c5e350e68882f42dd507 cuda_9.0.176_384.81_linux.run

两者一致,说明下载成功。

小结

本文提出的方法,适用于无法下载cuda,或下载的cuda文件压缩包md5校验出错的情形。有一定实践指导意义。

李迟 2018.9.14 周五 夜

猜你喜欢

转载自blog.csdn.net/subfate/article/details/82697848