使用配置文件创建conda环境

参考链接:conda installpip install 的区别 https://www.cnblogs.com/yibeimingyue/p/14660246.html

注意:使用官方给出的部署文件进行环境的创建时,特别要注意 cuda 版本是否和服务器的版本(显卡驱动版本)一致(这里的一致是指:显卡驱动以及 CUDA 版本不能低于需要安装的 CUDA 版本)!否则即使安装了 PyTorch 或者时 Tensorflow,也会因为和服务器的硬件设备驱动版本不一致导致运行不成功!

写在前面

使用以下部署工具部署环境时,最好不要使用官方提供的文件,而是自己新创建一个文件,然后把必须的包写入,然后再进行部署!原因如下:

  • 作者提供的一般都是使用命令直接导出的,而导出的文件我们打开看,会发现除了各种版本信息 =... 外,后面还跟着许多奇奇怪怪的字符,这个虽然也是指定相应的版本,但是大概率是和自己的机器相匹配的信息,如果直接安装,后面出现各种奇怪的错误,你都不会发现是版本问题导致的!
  • 我们要做的,就是手动导入,然后自己指定相关版本信息,这样安装的包就是和自己的机器匹配的,不会安装错误!

一、pip 自动部署工具 requirements.txt

  • 官方说明文档:https://pip.pypa.io/en/stable/ 直接搜索 requirements.txt 就可以查找到。
  • 各个参数的说明:https://pip.pypa.io/en/stable/cli/pip_install/#install-index-url

生成当前环境的依赖:

pip freeze > requirements.txt

其中 requirements.txt 文件内容如下。

# 不写版本号默认安装最新的版本
matplotlib==xxx
Pillow==xxx

使用 requirements.yml 完成环境部署:

conda/source activate 虚拟环境
pip install -r requirements.txt

二、conda 自动部署工具 environment.yml

请注意,Conda 建议environment.yml 手工创建(即手动填写那些必须的依赖包以及相关配置),如果要跨平台(Windows / Linux /Mac)共享环境,这尤其重要。在这种情况下,您可以省略该 prefix 行。

  • 官方说明文档:https://docs.conda.io/projects/conda/en/latest/index.html
  • 参考链接1:http://www.codebaoku.com/question/question-cd-176717.html

使用以下命令将当前激活的虚拟环境保存:

conda env export > environment.yml

在当前目录下自动生成相关安装依赖关系,具体示例如下。

name: xxx
channels:
  # 指定下载通道,可以指定.condarc中的下载通道,也可以指定官方下载通道,从上到下进行优先选择
  - defaults  # 使用默认的下载源通道
  - custom  # 这个在清华源的官方配置文件中也进行指定的
  - pytorch  # 不要认为是官方的下载源,如果是直接复制的清华源配置,那么这里已经重定向到清华源了
  - anaconda
  - conda-forge  # cudatoolkit 就是从这个源里面下载
  # - nodefaults  # 使得默认的下载源失效!看情况使用
dependencies:
  # 以下python和pip必须指定
  - python=3.x  # 这里还能指定版本:python>=3.5
  - pip  # 这个必须有,因为后面使用到了 pip,不然都没有安装怎么执行后面的 pip 命令
  - xxx  # 这里可以指定使用 conda install 安装的包,比如 pytorch, torchvision, torchaudio 三套件(注意:不需要指定 cudnn,PyTorch-GPU 默认会安装[torch cudatoolkit cudnn] 这三者之间的匹配关系会自动帮我们选好,默认的是最新版)
  - pip:
      - xxx  # 这里也可以指定版本:numpy==1.16.0
      - [-f] https://..  # 指定的下载通道

例子:

name: GlobalTrack
channels:
  - defaults
  - pytorch
  - conda-forge
dependencies:
  # 注意 1: dependencies 里面版本指定与 pip 里面版本指定的区别
  # 这里使用的是 =, 或者 > <,而 pip 里面使用的是 == >= <=
  - python=3.8
  # 使用 conda install 安装 PyTorch,注意原来指定的通道这里放在 `channels` 里面了
  - pytorch=1.8.1
  - torchvision=0.9.1
  - torchaudio=0.8.1
  - cudatoolkit=11.1
  - pip
  - pip:
    - black
    - imageio
    - mmcv==0.4.3
    - numpy
    - opencv-python
    - opencv-python-headless
    - Pillow
    - scikit-image
    - scikit-learn
    - scipy
    - Shapely
    # 以下是使用 pip install 安装的配置
    # - torch==1.8.1+cu111
    # - torchaudio==0.8.1
    # - torchvision==0.9.1+cu111
    # - -f https://download.pytorch.org/whl/torch_stable.html
prefix: ~/anaconda3/envs/GlobalTrack  # 不会发生作用,只是给其他人说明安装的位置

指定安装版本时,注意 pip 使用双等号,dependencies 中为等号!如果不指定,默认安装最新的版本。

使用 envrionment.yml 完成环境部署:

conda env create -f environment.yml

参考链接:https://www.jianshu.com/p/7cc505f8e2bd

总结

使用 conda 部署时可以一步到位,简单,但是有以下两个明显的缺点:

  1. 整个安装过程的提示信息是很少的,而且安装的出错后的提示信息不是很全面。比如说如果是在 pip 那部分某一个包安装失败,导致整个部署过程直接结束,最后提示的信息竟然给我们定位到了 conda 自动创建的临时文件 conda.emvs.requirenmens.txt(好像是这个名字,其实在 pip 这部分,还是调用的 pip install -r requirements.txt 来安装,所以为什么会有这个临时文件),安装终止后,该临时文件也没有了!所以提示信息不是很友好。当然,如果要定位的话,还是可以的。一般会提示在多少行出错,直接从 environment.yml 中的 pip 开始,往下对应到相同的行数就可以。
  2. 如上所述,如果其中的某一个包安装失败,后面的所有包都不会被下载,直接终止。然而,该环境已经创建,如果直接使用上述命令进行部署,会提示 CondaValueError: prefix already exists:~/anaconda3/envs/GlobalTrack,这时如果需要重新安装,必须先卸载!
conda remove -n GlobalTrack --all
# 或者直接删除安装虚拟环境的文件夹
rm -rf ~/anaconda3/envs/GlobalTrack

这是相当麻烦的,令人不快!conda 好像并没有提供直接强行覆盖的功能,因此只能这样操作!

附:手动创建环境时顺便安装深度学习包

这里需要纠正一点的是,如果我们不需要做 CUDA 编程(相信大部分小伙伴都用不到),那么我们是不需要进行那么复杂的 CUDATOOLKIT cuDNN 的安装配置的,只需要把 NVIDIA 驱动安装好就可以了!然后在安装 PyTorch Tensorflow-GPU 的时候,只要指定的是 GPU 版,以及对应的 CUDA/cudatoolkit 版本(主要是和自己机器的 NVIDIA-DRIVER CUDA 版本匹配——自己机器的不能低于 PyTorch/Tensorflow 要求的最低版本)就会自动下载 这三套件了 pytorch/tensorflow cudatoolkit cudnn,小伙伴们可以自己仔细看看控制台的安装信息!

友情提示:为什么需要时刻关注控制台的安装信息呢?因为有的时候明明我们指定的是 GPU 版本,如果我们不仔细看,那么可能就会默认变成了 CPU 版本,那么后面调用相应的包时肯定是找不到了的啦!这里为什么会改变大概率是版本不匹配(CUDA & PyTorch/Tensorflow)引起的,可以更换下安装的版本试试!

你可能感兴趣的:(深度学习,环境,python,git,windows)