文章目录

  • 指定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/对比会发现源码是有区别的。

总结和问答练习

  1. Q: 自己作分支的时候,为了做一个负责任的开发者,你不应该让conda list | grep mm和原来看不出区别,那应该怎么做呢?
    A: 在发布包时(setup.py或之类的地方)修改版本号等。

ExpRe[18] 手动构建Docker镜像[1] 指定cuda、python包版本相关推荐

  1. ExpRe[19] 手动构建Docker镜像[2] 远程ssh开发

    文章目录 对容器ssh 配置设置 保存镜像并复用 指定端口连接`ssh` VSCode远程编辑和调试 配置 连接 时效性 本篇撰写时间为2021.12.9,由于计算机技术日新月异,博客中所有内容都有时 ...

  2. SpringBoot 2.3.x 分层构建 Docker 镜像实践

    目录[-] . 一.什么是镜像分层 . 二.SpringBoot 2.3.x 新增对分层的支持 . 三.创建测试的 SpringBoot 应用 . 1.Maven 中引入相关依赖和插件 . 2.创建测 ...

  3. Spring Boot 2.3.x 分层构建 Docker 镜像实战

    目录 一.什么是镜像分层 二.SpringBoot 2.3.x 新增对分层的支持 三.创建测试的 SpringBoot 应用 1.Maven 中引入相关依赖和插件 2.创建测试的 Controller ...

  4. 【超全教程】SpringBoot 2.3.x 分层构建 Docker 镜像实践

    作者:超级小豆丁 http://www.mydlq.club/article/98/ 目录 什么是镜像分层 SpringBoot 2.3.x 新增对分层的支持 创建测试的 SpringBoot 应用 ...

  5. SpringBoot 项目构建 Docker 镜像调优实践

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:超级小豆丁 http://www.mydlq.club/article/16/ PS ...

  6. docker ss-pannel_如何构建Docker镜像

    构建Docker 镜像有如下两种方法: (一)使用docker commit命令. (二)使用docker build命令和 Dockerfile 文件. 在这里并不推荐使用docker commit ...

  7. Docker Hub + Github 自动化构建docker镜像

    自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说,十分方便. 有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像. 而自动创建允许用户通过Doc ...

  8. Spring Boot 分层构建 Docker 镜像实战

    目录 一.什么是镜像分层 二.SpringBoot 2.3.x 新增对分层的支持 三.创建测试的 SpringBoot 应用 1.Maven 中引入相关依赖和插件 2.创建测试的 Controller ...

  9. 通过Dockerfile构建Docker镜像

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添 ...

最新文章

  1. 如何优雅地展示机器学习项目!
  2. 小学生python-小学生学python(三)
  3. 写入指定长度的字节到文件
  4. fpga初始化错误_FPGA低温启动失败
  5. 关于计算机网络的英语演讲稿,上网利弊的英语演讲稿范文
  6. C#设计模式之6-适配器模式
  7. 留下考题答案造福我校后来人(考试过后再看,不要抄袭)
  8. Deepin Linux已经做得相当不错了
  9. 有安全研究者混入了 PHP 8.0 开发组!
  10. android multimedia框架总结,Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程...
  11. vi编辑器 常用命令汇总
  12. 神策分析 1.17 重磅来袭,四大特性让数据治理更轻松,数据分析更深入
  13. C调用Lua与解决Lua环境问题
  14. Java 解压 gzip 和 tar.gz 文件
  15. 620集成显卡和mx250_MX250属于什么档次的显卡
  16. keyshot怎么贴logo_KeyShot实例渲染技巧教程,教你如何给产品添加有织纹的Logo
  17. 为什么10M、20M的宽带只有大约1、2M的下载速度——网速KB/s与Kbps(Kb/s)的区别
  18. java 分卷压缩_Java:分卷压缩和解压缩请选择Zip4j
  19. 手机免费使用PDF编辑器一键支持PDF转Word,随时随地处理文档
  20. 【Midjourney教程】设计麻瓜也能10分钟上架一套表情包

热门文章

  1. Hololens 开发笔记(2)——MRTK
  2. linux iic设备中断,Linux设备驱动之I2C架构分析(一)
  3. 模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法matlab仿真
  4. python实现异或
  5. day10上节内容补充和初始函数
  6. 微信小程序仿系统自带下拉刷新效果
  7. 串口 YModem 协议 发送文件
  8. Redis--优化详解
  9. 华清远见上海中心班--11.17作业
  10. Android网络图片异步加载