ExpRe[18] 手动构建Docker镜像[1] 指定cuda、python包版本
文章目录
- 指定cuda版本
- 准备miniconda
- 创建环境,指定包版本
- 使用`git clone -b`指定分支并安装
- 总结和问答练习
时效性
本篇撰写时间为2021.12.9,由于计算机技术日新月异,博客中所有内容都有时效和版本限制,具体做法不一定总行得通,链接可能改动失效,各种软件的用法可能有修改。但是其中透露的思想往往是值得学习的。
本篇前置:
- ExpRe[3] python[0] Anaconda配置python环境
https://www.cnblogs.com/minor-second/p/15549061.html - ExpRe[17] 手动构建Docker镜像[0] 内外联通,镜像内git,tmux
https://www.cnblogs.com/minor-second/p/15640860.html
本篇是手动构建docker镜像所需技术总结之1
指定cuda版本
镜像有一个好处是方便管理不同的cuda版本
注:对于某张卡,某版本nvidia驱动,如果可以兼容多个版本的cuda,那么不妨用多个镜像管理。每个镜像中,都把驱动暴露给相应版本cuda。然而,如果该驱动本来就不兼容某版本cuda,那使用docker也没用。即镜像解决多个版本的管理问题,但不解决有无问题。
例如sudo docker run --runtime=nvidia --rm nvidia/cuda:10.0-base nvidia-smi
:验证cuda:10.0
镜像确实能用。
sudo docker pull nvidia/cuda:10.0-cudnn7-devel
:拉取镜像
sudo docker run -it --gpus all -P --name <名称> -v <目录>:<目录> nvidia/cuda:10.0-cudnn7-devel
:实例化容器,同时作目录的映射。
进入容器,在根目录find . -name *cuda-10*
可以看到确实是指定版本。
准备miniconda
apt update
apt install -y vim curl git telnet tmux unzip wget
找合适的地方,wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
(当然,最推荐的是从外面拷进去或者映射。参考17期。否则可能真的很慢)
sh Miniconda3-latest-Linux-x86_64.sh
,一路enter和yes
退出重进容器,发现左侧已经有(base)
了。然后就是参考第3期配置.condarc
等等。
可参考
channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/peterjc123/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
custom_channels:pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
- 注:配置
pip
源和conda
大同小异,可以手动改vim ~/.pip/pip.conf
,也可以
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
可以看到~/.pip/pip.conf
并不是yaml
语法,而是另一种配置设置语法。
创建环境,指定包版本
我们创建镜像的一大目的就是指定版本,之后可以到处迁移,避免各种兼容性问题。且以后其它地方出兼容性问题了也可以参考能用的镜像中的版本。
conda create -n <name> python=3.7
conda activate <name>
conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=10.0 -c pytorch
然后可以conda list
(或conda list | grep torch
查找)确认包版本正确。
使用git clone -b
指定分支并安装
有时候,直接conda或pip安装的版本(即使指定了版本号)都是不对的,只有github下指定分支才是对的。这时需要手动下载安装。
例如下面这个mmcv
的指定分支(和直接pip install mmcv==0.2.8
是不一样的)
git clone -b ego-topo https://github.com/lyttonhao/mmcv.git
然后在clone
到的这个目录
直接用pip
通过源码安装
pip install . # (add "-e" if you want to develop or modify the codes)
注:以下是README.rst
里的说明。
注:如果报错没有Cython
则需要pip install cython
补包。
conda list | grep mm
效果如下
在这个输出处,还看不出和直接pip install mmcv==0.2.8
有什么区别。
但是你分别尝试两种方式装mmcv
包,去/root/miniconda3/envs/<name>/lib/python3.7/site-packages/mmcv/
对比会发现源码是有区别的。
总结和问答练习
- Q: 自己作分支的时候,为了做一个负责任的开发者,你不应该让
conda list | grep mm
和原来看不出区别,那应该怎么做呢?
A: 在发布包时(setup.py
或之类的地方)修改版本号等。
ExpRe[18] 手动构建Docker镜像[1] 指定cuda、python包版本相关推荐
- ExpRe[19] 手动构建Docker镜像[2] 远程ssh开发
文章目录 对容器ssh 配置设置 保存镜像并复用 指定端口连接`ssh` VSCode远程编辑和调试 配置 连接 时效性 本篇撰写时间为2021.12.9,由于计算机技术日新月异,博客中所有内容都有时 ...
- SpringBoot 2.3.x 分层构建 Docker 镜像实践
目录[-] . 一.什么是镜像分层 . 二.SpringBoot 2.3.x 新增对分层的支持 . 三.创建测试的 SpringBoot 应用 . 1.Maven 中引入相关依赖和插件 . 2.创建测 ...
- Spring Boot 2.3.x 分层构建 Docker 镜像实战
目录 一.什么是镜像分层 二.SpringBoot 2.3.x 新增对分层的支持 三.创建测试的 SpringBoot 应用 1.Maven 中引入相关依赖和插件 2.创建测试的 Controller ...
- 【超全教程】SpringBoot 2.3.x 分层构建 Docker 镜像实践
作者:超级小豆丁 http://www.mydlq.club/article/98/ 目录 什么是镜像分层 SpringBoot 2.3.x 新增对分层的支持 创建测试的 SpringBoot 应用 ...
- SpringBoot 项目构建 Docker 镜像调优实践
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:超级小豆丁 http://www.mydlq.club/article/16/ PS ...
- docker ss-pannel_如何构建Docker镜像
构建Docker 镜像有如下两种方法: (一)使用docker commit命令. (二)使用docker build命令和 Dockerfile 文件. 在这里并不推荐使用docker commit ...
- Docker Hub + Github 自动化构建docker镜像
自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说,十分方便. 有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像. 而自动创建允许用户通过Doc ...
- Spring Boot 分层构建 Docker 镜像实战
目录 一.什么是镜像分层 二.SpringBoot 2.3.x 新增对分层的支持 三.创建测试的 SpringBoot 应用 1.Maven 中引入相关依赖和插件 2.创建测试的 Controller ...
- 通过Dockerfile构建Docker镜像
Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添 ...
最新文章
- 如何优雅地展示机器学习项目!
- 小学生python-小学生学python(三)
- 写入指定长度的字节到文件
- fpga初始化错误_FPGA低温启动失败
- 关于计算机网络的英语演讲稿,上网利弊的英语演讲稿范文
- C#设计模式之6-适配器模式
- 留下考题答案造福我校后来人(考试过后再看,不要抄袭)
- Deepin Linux已经做得相当不错了
- 有安全研究者混入了 PHP 8.0 开发组!
- android multimedia框架总结,Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程...
- vi编辑器 常用命令汇总
- 神策分析 1.17 重磅来袭,四大特性让数据治理更轻松,数据分析更深入
- C调用Lua与解决Lua环境问题
- Java 解压 gzip 和 tar.gz 文件
- 620集成显卡和mx250_MX250属于什么档次的显卡
- keyshot怎么贴logo_KeyShot实例渲染技巧教程,教你如何给产品添加有织纹的Logo
- 为什么10M、20M的宽带只有大约1、2M的下载速度——网速KB/s与Kbps(Kb/s)的区别
- java 分卷压缩_Java:分卷压缩和解压缩请选择Zip4j
- 手机免费使用PDF编辑器一键支持PDF转Word,随时随地处理文档
- 【Midjourney教程】设计麻瓜也能10分钟上架一套表情包