使用 conda 从 tensorflow 1.14.0 升级到 2.2.0 时的大量包更改

Huge number of package changes when using conda to upgrade from tensorflow 1.14.0 to 2.2.0

我正在尝试在我的一个 conda 环境中更新 tensorflow。但是,每次我设置更新时,预览显示 upgraded/added/removed 的软件包数量远远超过我认为合理的数量。我想弄清楚是不是我理解错了:

当我检查当前环境(即 dnn_py3)时,我看到:

(dnn_py3) me@Home:~$ conda list
# packages in environment at /home/me/anaconda3/envs/dnn_py3:
#
# Name                    Version                   Build  Channel
...
tensorboard               1.14.0           py37hf484d3e_0    anaconda
tensorflow                1.14.0          gpu_py37h4491b45_0    anaconda
tensorflow-base           1.14.0          gpu_py37h8d69cac_0    anaconda
tensorflow-estimator      1.14.0                     py_0    anaconda
tensorflow-gpu            1.14.0               h0d30ee6_0    anaconda

我想升级到tensorflow 2.2.0

当我进入

(dnn_py3) me@Home:~$ conda update tensorflow-gpu

(dnn_py3) me@Home:~$ conda update -n dnn_py3 tensorflow-gpu

我得到了一个非常多(我认为)的下载列表、新安装列表、删除列表、替代包列表和下载列表,我在此处进行了总结:

Summary of Changes:
122 - download packages
5 - installs (none actually tensorflow !?)
24 - removals
263 - upgrades
140 - updates

我目前在我的环境中使用tensorflow 1.14,所以我不明白为什么这个升级需要做这么多。我预计只会看到 1 次升级(对于 tensorflow-gpu),可能还有少量其他更改 - 与我看到的大量提议更改完全不同。

由于我看到的与我的预期有很大的不同,我想在继续之前了解发生了什么。

发生这种情况的原因有多种。

1:依赖更新

Conda 有一个 two-stage 解决策略。首先,它试图仅通过 installing/updating 指定的包来满足用户规范。如果这在没有任何其他更改的情况下是可能的,那么它认为解决已完成并将提出这些(最小)更改。否则,将进入第二阶段求解,允许更新所有需要更改的依赖项。这是递归正确的,即依赖项的依赖项也可能更新。因此,这可能会导致许多更新。

此外,还有一个配置选项 update_dependencies,允许更新依赖链中的 所有 包,而不仅仅是那些与用户规范冲突的包.此选项的默认值为 False,但可能值得检查它是否已关闭 (conda config —-show update_dependencies)。

2:通道配置的变化

许多用户最终需要来自 non-default 渠道的软件包,Conda Forge 是最常见的。自 Conda Forge recommends prioritizing the conda-forge channel 以来,这通常会导致用户更改其全局频道配置。每当用户进行此类更改时,它都会有效地更改所有未来解决方案发生的上下文。特别是,每当包发生变化时,它都会尝试从更高优先级的渠道切换到构建。

OP 仅显示原始环境中来自 anaconda 通道的构建,因此改变通道优先级是肯定的。但是,在没有看到实际提议的更改的情况下,我不能肯定地说这是驱动原因。

3: Auto-Updates

conda 包和 aggressive_updates_packages 将在请求对环境进行变异操作时尝试更新。因此,这些可能会显示为未经请求的安装。但是,这可能与 OP 无关,因为此类软件包主要属于 base 环境,但 OP 清楚地表明这与 base 无关.尽管如此,我在这里列举它主要是为了完整性,因为它可能是其他用户的问题。

我会用conda来安装tensorflow。它将安装 tensorflow 2.1.0。 Tensorflow 2 可以使用或不使用 GPU。它还会安装 cuda 工具包 10.1.243 和 cudnn 7.6.5。 Conda 最多只能安装 2.1.0 版本的 tensorflow。安装版本 2.1.0 后,您可以使用 pip 安装版本 2。 tensorflow 版本 2 兼容 conda 已安装的工具包版本 10.1.243 和 cudnn 7.6.5。