性能#

Conda 的性能可能受多种因素影响。与许多包管理器不同,Anaconda 的仓库通常不会从索引中过滤或删除旧包。这使得旧环境可以轻松地重新创建。然而,这也意味着索引元数据始终在增长,因此随着包数量的增加,conda 会变得更慢。

包是如何安装的#

在您等待时,conda 正在进行大量工作来安装软件包。在这些步骤中的任何时候,都可能出现性能问题。

Conda 在安装软件包时遵循以下步骤

  1. 下载和处理索引元数据。

  2. 缩减索引。

  3. 将软件包数据和约束表示为 SAT 问题。

  4. 运行求解器。

  5. 下载和解压软件包。

  6. 验证软件包内容。

  7. 将软件包从包缓存链接到环境中。

因此,如果您遇到速度减慢的情况,请评估以下问题以找出潜在原因

  • 您是在创建新环境还是安装到现有环境中?

  • 您的环境中是否有 pip 安装的依赖项?

  • 您正在使用哪些通道?

  • 您正在安装哪些软件包?

  • 通道元数据是否正常?

  • 通道是否以不良方式交互?

提高 conda 性能#

为了应对这些挑战,您可以将软件包移动到存档通道,并按照以下方法为 conda 提供比所有可用软件包更小、更简单的视图。

为了加快 conda 的速度,我们提供以下建议。

您是否
  • 正在使用 conda-forge?
    • 使用 conda-metachannel 来减小 conda 的问题规模。

  • 正在使用 bioconda?
  • 指定非常宽泛的包规范?
    • 更具体一些。让 conda 过滤更多候选包可以使其更快。例如,我们建议使用 numpy=1.15,或者更好的 numpy=1.15.4,而不是只写 numpy。

    • 如果您正在使用 R,请指定 r-base=3.5 r-essentials,而不是仅指定 r-essentials。

  • 对“验证事务”感到沮丧,并且也觉得自己幸运吗?
    • 运行 conda config --set safety_checks disabled

  • 是否遇到 defaults 和 conda-forge 的奇怪混合?
    • 运行 conda config --set channel_priority strict

    • 这也通过消除可能的混合解决方案来加快速度。

  • 观察到 Anaconda 或 Miniconda 安装随着时间的推移变得越来越慢?
    • 创建一个全新的环境。随着环境的增长,它们变得越来越难以解决。使用小型、专用的环境可能会快得多。

阅读更多关于我们如何使 conda 更快的信息。

设置严格的通道优先级#

设置严格的通道优先级使得如果一个包存在于一个通道上,conda 将忽略所有在较低优先级通道上具有相同名称的包。

../../_images/strict-disabled.png
../../_images/strict-enabled.png

这可以显著减少包搜索空间,并减少不正确约束的包的使用。

需要考虑的一点是,设置严格的通道优先级可能会使环境无法满足。了解更多关于严格通道优先级的信息。

缩减索引#

加快 conda 速度的一个选项是缩减索引。索引由 conda 基于用户的输入规范进行缩减。您的 repodata 很可能包含在求解阶段未使用的包数据。在求解之前过滤掉这些不必要的包可以节省时间。

使您的输入规范更具体可以提高索引缩减的有效性,从而加快该过程。为您的每个规范列出版本和构建字符串可以显著减少求解时考虑的包的数量,从而减少 SAT 的工作量。

缩减索引
  • 减少生成求解器子句的不必要输入。

  • 降低求解复杂性。

  • 优先选择应用约束的较新软件包。

阅读更多关于理解和提高 Conda 性能的信息。