阿猫的博客

阿猫的博客

Conda深度学习使用指南

630
2021-09-22

什么是conda?

Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。

再简单点说就是一个预装了一些“常用”的软件包的环境管理工具,在所有系统上都可以用。

什么是环境和虚拟环境?为什么要使用conda?

环境就是代码运行的一些基础背景,例如说操作系统的版本、驱动的版本、依赖包的版本等等,但凡可能影响代码运行的因素都可以成为环境(aka玄学)。环境管理是一件非常麻烦的事情,在复现或者迁移代码时,要尽可能保证代码运行在相同的环境中(否则可能跑不通或者出现不同的结果)。

如果使用python官网安装的python解释器,那就只有一个默认的环境,在这个环境下某个包只能有一个版本。如果需要同时使用tensorflow 1.13和1.14版本,就无法实现。因此虚拟环境应运而生。虚拟环境就是创建不同的python解释器,环境之间依赖是独立的。

conda有环境管理的功能,通过conda可以方便地切换环境,安装不同的包和他对应的驱动等,尤其是安装cuda和cudnn这两个深度学习必须的依赖。

安装

可以在 Anaconda 找到对应系统的安装包。以Windows系统为例,提供了.exe的安装器,下载后双击安装,一路下一步即可。在Linux和MacOS下均有对应的安装器,根据架构和版本下载,按照提示安装即可。

在Windows环境下,在开始菜单中找到Anaconda Prompt (Anaconda 3),打开后出现命令行,如

(base) C:\Users\some_username>

输入conda —version能显示conda当前的版本即为安装成功。以下演示均为Windows环境,其他环境的命令行与Windows的类似,不再赘述。

在linux或其他命令行环境下,输入conda不提示命令不存在或输入conda —version能显示当前版本即为安装成功。

基本使用

创建conda环境

前面说到,环境管理是conda的一个核心功能,在使用中,一般一个项目对应使用一个环境。在创建项目前,先创建一个环境。

conda create -n project_name_and_stuff python=3.7

这条命令的意思是创建一个名为project_name_and_stuff的环境,其python版本为3.7

对于项目名称的命名,建议采用项目名称+深度学习框架及版本+CPU/GPU环境+其他需要说明的版本的形式,例如DIGIX_tf1_gpu表示该项目名称为DIGIX,使用TensorFlow1版本,使用GPU环境。若不需要深度学习环境,则只采用项目名称即可。python版本建议选择当前稳定的版本或适配环境中其他依赖的版本。

激活环境

环境创建完成后,可以根据项目的需要安装响应的依赖。首先需要激活环境。

conda activate demo-project

输入后,命令行会变成如下

(demo-project) C:\Users\some_username>

此时已经进入了demo_project的环境,可以开始安装对应的依赖了。

若要退出该环境,输入

conda deactivate

安装依赖

有两种安装方式,先介绍conda特有的conda install,另外还有原来的pip方式也可以用于安装依赖。

conda install

requests库为例,只需要输入

conda install requests

若要安装指定版本的某个包,可以使用

conda install package=version

其中package为包名,version为其版本号。连续输入多个包名和对应的版本号可以一次性安装多个包。可以使用的版本可以使用以下命令查询。

conda search package

pip

就是正常的包安装过程,输入

pip install package==version

注意这里版本前面是==而不是前面的=。连续输入多个包名和对应的版本号可以一次性安装多个包。

固化依赖

建议在安装好所有需要的依赖后,将目前依赖版本导出,方便复现或迁移项目时,能快速恢复环境。

conda方式

通过以下命令可以快速导出当前环境中所有依赖。

conda env export > environment.yml

到了新环境中,使用以下命令即可恢复。

conda env create -f environment.yml

** 2022-01-16 更新 **

以上方式适合导出同操作系统和架构的环境,能够保证依赖能原封不动安装。在不同操作系统/架构间迁移时,可能会由于系统/架构原因导致依赖有所不同,不能使用该方式导入。

对于这种情况,应该手动创建environment.yml,手动输入需要的主要依赖和其版本(如tensorflow、python和其版本号)。例子如下:

name: medusa
channels:
  - defaults
dependencies:
  - coverage=5.5
  - pytest=6.2.4
  - pytest-cov=3.0.0
  - python=3.7.11
  - requests=2.27.1
  - sqlite=3.37.0

参考资料:How to share conda environments across platforms

pip方式

通过以下命令可以快速导出当前环境中所有依赖。

pip freeze > requirements.txt

到了新环境中,使用以下命令即可恢复。

pip install -r requirements.txt

删除环境

conda remove -n demo-project --all

在pycharm中使用该环境

在打开项目之后,在右下角点击环境这部分,选择Interpreter Settings...,进入项目环境,点击Show All

点击+,找到Conda Environment,然后选择Existing Environment,在Interpreter中找到刚才新建的环境的python.exe即可。一般来说,路径在你的用户目录下的Anaconda3\envs下。最后点击ok即可。

然后选择刚添加的环境,点ok即可。

安装深度学习环境

TensorFlow

可以参考这篇文章。 https://docs.anaconda.com/anaconda/user-guide/tasks/tensorflow/

Conda可以为深度学习环境提供对应的cuda和cudnn版本,只需要在安装的时候指定cudatoolkit版本即可。

conda install tensorflow-gpu=1.14 cudatoolkit=10.0 // 1.x
conda install tensorflow=2.1.0 cudatoolkit=10.1 // 2.x

其中,cudatoolkit的版本请查阅https://www.tensorflow.org/install/source#linux

pytorch

可以参考 https://pytorch.org/get-started/locally/

安装方式比较简单。

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

拓展阅读

conda的安装与使用(2021-04-27更新)https://www.jianshu.com/p/edaa744ea47d

conda Command Reference https://docs.conda.io/projects/conda/en/latest/commands.html

Cheatsheet

清理空间

conda clean -p // 删除没用的包
conda clean --all // 删除所有缓存

升级conda

conda update conda
conda update anaconda

列出所有环境

conda env list
conda info --envs

重命名环境

conda create --name newname --clone oldname //克隆环境
conda remove --name oldname --all //彻底删除旧环境