[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2
之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准。
基于NVidia官方的nvidia/cuda
image,构建适用于Deep Learning的基础image。
思路就是先把常用的东西都塞进去,build成image,此后使用时想装哪个框架就装。
为了体验重装系统的乐趣,所以采用慢慢来比较快的步骤,而不是通过Dockerfile
来build。
环境信息
已经安装了Docker CE
和NVIDIA Container Toolkit
,具体流程参考这里。
Host OS: Ubuntu 18.04 64 bit
CUDA: 10.0
cuDNN: 7.4
Docker CE: 19.03.0
镜像信息
可以在nvidia/cuda查看提供的镜像列表,不同tag的区别是:
- base: 基于CUDA,包含最精简的依赖,用于部署预编译的CUDA应用,需要手工安装所需的其他依赖。
- runtime: 基于base,添加了CUDA toolkit共享的库
- devel: 基于runtime,添加了编译工具链,调试工具,头文件,静态库。用于从源码编译CUDA应用。
为了省事,这里选择nvidia/cuda:10.0-cudnn7-devel
。
$ sudo docker pull nvidia/cuda:10.0-cudnn7-devel
目前拉取到的镜像信息如下:
OS: Ubuntu 18.04.2 LTS
Size: 3.09 GB
启动镜像
创建目录base
,方便数据导入导出,映射为容器内的/host
目录,然后在这个目录下运行命令创建容器dl-base
。
$ sudo docker run -it --gpus all -P --name dl-base -v `pwd`:/host nvidia/cuda:10.0-cudnn7-devel
一切顺利的话,出现类似下面的命令行:
root@d6421dac4cec:/#
可以运行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'
alias jn='jupyter notebook --ip=0.0.0.0 --allow-root'
再使其生效:
$ source ~/.bashrc
安装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进行配置。
安装miniconda
也可按需安装anaconda等python包,这里以miniconda为例。
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ sh Miniconda3-latest-Linux-x86_64.sh
安装时问是否初始化,选择yes:
Do you wish the installer to initialize Miniconda3 by running conda init? [yes|no]
再使其生效:
$ source ~/.bashrc
配置pip源为阿里源:
$ pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
配置conda源为清华源:
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
$ conda config --set show_channel_urls yes
安装常用的包:
$ conda install jupyter numpy matplotlib Pillow scipy pandas opencv
这里安装的opencv是3.4.2
保存镜像
至此,就可以在Host下运行命令将容器保存为镜像了。
$ sudo docker commit dl-base dl/base
这样就生成了一个镜像dl/base
,大小为6.51GB。
在此镜像基础上,可以自行安装不同的框架。
jupyter notebook
如果希望在容器中启动jupyter notebook
,需要加上参数如下:
$ jupyter notebook --ip=0.0.0.0 --allow-root
这个已经加入alias了。
[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2的更多相关文章
- [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程
基于NVidia开源的nvidia/cuda image,构建适用于DeepLearning的基础image. 思路就是先把常用的东西都塞进去,再装某个框架就省事儿了. 为了体验重装系统的乐趣,所以采 ...
- 基于NVIDIA GPUs的深度学习训练新优化
基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...
- vitess基础镜像构建流程Centos
以下列出了构建vitess使用的Centos镜像的简单流程,由于较早基础版本是Centos7.2的,重新构建可以基于最新的Centos版本构建 1.基础镜像拉取 #拉取官方版本 docker pull ...
- NVIDIA GPUs上深度学习推荐模型的优化
NVIDIA GPUs上深度学习推荐模型的优化 Optimizing the Deep Learning Recommendation Model on NVIDIA GPUs 推荐系统帮助人在成倍增 ...
- CUDA上深度学习模型量化的自动化优化
CUDA上深度学习模型量化的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参数 ...
- NVIDIA TensorRT高性能深度学习推理
NVIDIA TensorRT高性能深度学习推理 NVIDIA TensorRT 是用于高性能深度学习推理的 SDK.此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和高 ...
- 算法工程师<深度学习基础>
<深度学习基础> 卷积神经网络,循环神经网络,LSTM与GRU,梯度消失与梯度爆炸,激活函数,防止过拟合的方法,dropout,batch normalization,各类经典的网络结构, ...
- 大数据下基于Tensorflow框架的深度学习示例教程
近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...
- 机器学习&深度学习基础(目录)
从业这么久了,做了很多项目,一直对机器学习的基础课程鄙视已久,现在回头看来,系统的基础知识整理对我现在思路的整理很有利,写完这个基础篇,开始把AI+cv的也总结完,然后把这么多年做的项目再写好总结. ...
随机推荐
- 小程序UI设计(9)-文字排版
小程序中一般很少大段落的文字,基本是4.5个字的主题.一行标题.一行摘要.两行描述.显示时超出部分用省略号代替.下面结合工具使用介绍一下文字排版的方法.先看效果图. 工具中属性设置如下图:两行文字属 ...
- C# NET 微信临时素材上传
最近在做这个,一开始也是不明白为什么给个URL带着两个参数就直接上传了,网上看了很多都是PHP,但是PHP没看过是不会 的 所以就一直在找网上什么Demo之类的讲解,最后还是不错找到了一个比较好理解的 ...
- 常用到用css3实现的转换,过渡和动画
为什么要用css动画替换js动画 导致JavaScript效率低的两大原因:操作DOM和使用页面动画. 通常我们会通过频繁的操作 DOM的CSS来实现视觉上的动画效果,导致js效率低的两个因素都包括在 ...
- 一次使用自定义 Http Header 引发的血案
一次使用自定义 Http Header 引发的血案 HttpClient Http Header 自定义 nginx 不转发 起因 最近在整理我们产品的 OpenAPI Demo (Python.C ...
- Storm实践(二):集群搭建
集群规划 角色 IP hostname nimbus 192.168.100.101 dda supervisor 192.168.100.102 ddb supervisor 192.168.100 ...
- 使用SpringSession和Redis解决分布式Session共享问题
SpringSession优势 遵循servlet规范,同样方式获取session,对应用代码无侵入且对于developers透明化 关键点在于做到透明和兼容 接口适配:仍然使用HttpServlet ...
- 【bug解决】ios微信浏览器中背景音乐无法播放
我记得之前在一次项目中,出现过浏览报错: 当时的文档链接如右:[解决]HTML5新标签audio的autoplay自动播放属性失效的解决方案 所以在这次H5的制作中,我使用了iframe来加载音频文件 ...
- 扩展性很强的python实现方式
一:先上目录结构 二:各个文件的代码 # -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/4 16:42 from util ...
- 【CUDA 基础】4.2 内存管理
title: [CUDA 基础]4.2 内存管理 categories: - CUDA - Freshman tags: - CUDA内存管理 - CUDA内存分配和释放 - CUDA内存传输 - 固 ...
- navicat连接oracle报错
Navicat 连接 Oracle ORA-28547:connection to server failed, probable Oracle Net admin error Navicat for ...