基于NVidia开源的nvidia/cuda image,构建适用于DeepLearning的基础image。

思路就是先把常用的东西都塞进去,再装某个框架就省事儿了。

为了体验重装系统的乐趣,所以采用慢慢来比较快的步骤,而不是通过Dockerfile来build。

环境信息

已经安装了Docker CEnvidia-docker2

Host OS: Ubuntu 18.04 64 bit

CUDA: 10.0

cuDNN: 7.4

Docker CE: 18.09.1

nvidia-docker2: 2.0.3

镜像信息

拉取镜像nvidia/cuda

$ sudo docker pull nvidia/cuda

目前拉取到的镜像nvidia/cuda信息如下:

OS: Ubuntu 18.04.1 LTS

CUDA: 10.0

Size: 2.24GB

启动镜像

创建目录base,方便数据导入导出,映射为容器内的/host目录,然后在这个目录下运行命令创建容器dl-base

$ sudo nvidia-docker run -it --name dl-base -v `pwd`:/host nvidia/cuda

一切顺利的话,出现类似下面的命令行:

root@a336efb2d5b0:/host#

可以运行nvidia-smi验证容器内的CUDA环境正常。

替换阿里源

大陆的网络环境下,阿里源速度还不错。

将下面的内容存为base目录下的sources.list文件。

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic universe
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates universe
deb http://mirrors.aliyun.com/ubuntu/ bionic multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic-security universe
deb http://mirrors.aliyun.com/ubuntu/ bionic-security multiverse

在容器命令行下运行命令更新源。

$ cp /host/sources.list /etc/apt/sources.list
$ apt update

安装基本工具

$ apt install -y vim curl git iputils-ping net-tools telnet tmux unzip

创建工作及下载目录

$ mkdir -p /work/download

修改~/.bashrc

在文件尾部添加下面内容:

alias u='cd ..'
alias ins='apt install -y'
alias ta='tmux a -t' export PATH=/usr/local/cuda-10.0/bin:$PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH="/usr/local/lib:/usr/local/cuda-10.0/lib64:/home/etworker/anaconda3/lib:$LD_LIBRARY_PATH"
export CUDNN_PATH="/usr/local/cuda-10.0/lib64/libcudnn.so"

再使其生效:

$ source ~/.bashrc

安装cnDNN

Host下虽然已经安装了cnDNN环境,但是容器内没法使用,所以需要再搞一把。

先将cnDNN的压缩包解压到base目录,此处为cudnn-10.0-linux-x64-v7.4.2.24目录,在容器命令行下运行:

$ cp /host/cudnn-10.0-linux-x64-v7.4.2.24/cuda/include/cudnn.h /usr/local/cuda-10.0/include
$ cp /host/cudnn-10.0-linux-x64-v7.4.2.24/cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64
$ chmod a+r /usr/local/cuda-10.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*

然后验证一下,不报错就OK了。

$ echo -e '#include"cudnn.h"\n void main(){}' | nvcc -x c - -o /dev/null -lcudnn

安装openssh-server

$ apt install -y openssh-server

修改/etc/ssh/sshd_config,找到#PermitRootLogin开头的这一行,修改为PermitRootLogin yes,这样就可以通过root登录了。

然后修改密码:

$ passwd

两次输入密码,然后重启ssh:

$ /etc/init.d/ssh restart

出现下面内容就OK了。

 * Restarting OpenBSD Secure Shell server sshd [ OK ]

这里为了简单粗暴,采用了root来登陆。

如果考虑安全,可自行创建用户,并对ssh进行配置。

安装python常用组件

Ubuntu 18.04的容器,默认安装了python 3.6.7,此时还需安装pip:

$ apt install -y python3-pip

建议不要更新pip,否则容易出现问题。

创建pip的配置文件目录~/.pip,再创建文件~/.pip/pip.conf,内容如下:

[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/

安装常用的包:

$ pip3 install numpy matplotlib Pillow scipy jupyter pandas h5py easydict sklearn

安装opencv-python

$ apt install -y libsm6 libxext6 libfontconfig1 libxrender1
$ pip3 install opencv-python

此时安装的opencv版本是4.0.0。

保存镜像

至此,就可以在Host下运行命令将容器保存为镜像了。

$ sudo nvidia-docker commit dl-base dl/base

这样就生成了一个镜像dl/base,大小为4.36GB。

在此镜像基础上,可以自行安装不同的框架。

jupyter notebook

如果希望在容器中启动jupyter notebook,需要加上参数如下:

$ jupyter notebook --ip=0.0.0.0 --allow-root

[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程的更多相关文章

  1. [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2

    之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...

  2. 基于NVIDIA GPUs的深度学习训练新优化

    基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...

  3. vitess基础镜像构建流程Centos

    以下列出了构建vitess使用的Centos镜像的简单流程,由于较早基础版本是Centos7.2的,重新构建可以基于最新的Centos版本构建 1.基础镜像拉取 #拉取官方版本 docker pull ...

  4. NVIDIA GPUs上深度学习推荐模型的优化

    NVIDIA GPUs上深度学习推荐模型的优化 Optimizing the Deep Learning Recommendation Model on NVIDIA GPUs 推荐系统帮助人在成倍增 ...

  5. CUDA上深度学习模型量化的自动化优化

    CUDA上深度学习模型量化的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参数 ...

  6. NVIDIA TensorRT高性能深度学习推理

    NVIDIA TensorRT高性能深度学习推理 NVIDIA TensorRT 是用于高性能深度学习推理的 SDK.此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和高 ...

  7. 算法工程师<深度学习基础>

    <深度学习基础> 卷积神经网络,循环神经网络,LSTM与GRU,梯度消失与梯度爆炸,激活函数,防止过拟合的方法,dropout,batch normalization,各类经典的网络结构, ...

  8. 大数据下基于Tensorflow框架的深度学习示例教程

    近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...

  9. 机器学习&深度学习基础(目录)

    从业这么久了,做了很多项目,一直对机器学习的基础课程鄙视已久,现在回头看来,系统的基础知识整理对我现在思路的整理很有利,写完这个基础篇,开始把AI+cv的也总结完,然后把这么多年做的项目再写好总结. ...

随机推荐

  1. 【BZOJ】1617: [Usaco2008 Mar]River Crossing渡河问题(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1617 裸dp,很好做. 设f[i]表示i头牛到对岸所需最小时间.sum[i]表示运i头牛到对岸的时间 ...

  2. PyQt的QString 和 QStringList

    在Qt的C++实现中的QString 和 QStringList 在Python的实现中等效替换为 "str1" 和 ["str1","str2&qu ...

  3. 解决myeclipse启动慢的问题

    去掉拼写检查:windows->preferences->General->Editors->Text Editors->Spelling 将"Enable s ...

  4. myeclipse10中对象无法点出下面的方法和属性

    刚安装完最新的myeclipse4spring-10.6,发现通过对象无法点出下面的方法和属性,没有自动联想或自动补全,使用“Alt + /”也没得效果,解决方法如下: Window -> Pr ...

  5. hdu 2234(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2234 思路:IDA*可以搞,借鉴的是大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者 ...

  6. Python爬虫(七)

    源码: import requests import re from my_mysql import MysqlConnect # 获取详情页链接和电影名称 def get_urls(page): u ...

  7. A*寻路算法(曼哈顿距离)

    前一些天,在群有人问到A*算法的问题. 之前我已经有实现过,并将之放到github上(https://github.com/XJM2013/A_Star).有兴趣的能够下载下来看看. 这里上传了一个相 ...

  8. iOS面试题--网络--如何处理多个网络请求的并发的情况

    如何处理多个网络请求的并发的情况 一.概念 1.并发 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配 ...

  9. Linq------错误: Unable to determine the principal end of an association between the types

    [Table("bma_stores")] public class Store { //加上即可 [Required] public virtual Product Produc ...

  10. Hadoop日志分析系统启动脚本

    Hadoop日志分析系统启动脚本 #!/bin/bash #Flume日志数据的根文件夹 root_path=/flume #Mapreduce处理后的数据文件夹 process_path=/proc ...