时效性
本篇撰写时间为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
或之类的地方)修改版本号等。