赞
踩
为了理解导致解决阶段持续时间延长的因素,我首先参考了有关Conda性能的文档。该文档提供了一些在遇到减速问题时需要考虑的问题:
为了回答这些问题,我当时正在创建一个新的虚拟环境,其中包含通过pip安装的依赖项。我同时使用了anaconda
和conda-forge
渠道,并且包都来自不同的渠道。
为了验证渠道元数据是否正常,我执行了以下命令。
conda search --override-channels --channel=anaconda
conda search --override-channels --channel=conda-forge
幸运的是,没有遇到错误,表明渠道元数据似乎正常。但我仍然不确定渠道是否以不良方式互动。
之前提到的文档以及标题为了解和改善Conda的性能的博客文章提供了一些建议的方法来解决这个问题。
由于涉及到大量的包和渠道交互的复杂性,当时没有测试这种方法。
我最初尝试通过调整.condarc
文件中的渠道优先级来解决问题。我将较小的渠道,如defaults
和anaconda
,放在较大的渠道,如conda-forge
之前,使用strict
模式。然而,这种方法并没有有效解决问题,有时甚至在解决阶段失败。随后,我尝试了flexible
模式,但解决时间仍然过长。以下是.condarc
文件中的配置示例。
channel_priority: flexible
channels:
- defaults
- anaconda
- conda-forge
为了优化索引过程,我选择明确为每个包指定版本。例如,我使用了numpy==1.15.4
的格式,而不是numpy
。理论上,这种方法应该通过允许Conda更有效地缩小候选选项来加快解决阶段。
在实施此修改后,我观察到解决阶段需要大约70分钟才能完成。为了评估此解决方案的可靠性,我在其他计算机上进行了测试。令人惊讶的是,在某些计算机上,该过程在大约15分钟内完成,而在其他计算机上似乎无限运行。因此,显然这种方法并不能提供明确的解决方案。
尽管遵循了之前提到的建议但没有成功,我决定探索另一种解决问题的方法。基于同事的建议,我研究了mamba,这是Conda包管理器的C++实现。在使用这个工具进行实验后,我成功解决了问题。现在,环境创建过程只需要几分钟。
因此,我从运行以下命令(适用于Linux)开始了安装mamba:
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh"
bash Mambaforge-$(uname)-$(uname -m).sh
在安装过程中,可能会遇到一个提示,询问是否初始化conda。在这种情况下,建议选择“是”,以确保mamba可以与conda正常协作,并避免两个包管理器之间可能的冲突。
安装成功后,终端将显示如下截图中的信息。重新启动终端后,您可以通过在命令提示符中键入mamba
来验证安装。
如果您在重新启动终端后仍然遇到“未找到’mamba’命令”的错误,请检查您的.bashrc
文件中的conda部分。确保conda.sh
的路径指向mamba的安装目录,如下图所示。
在安装之后,我继续使用mamba创建了一个新的虚拟环境。我执行了以下命令 mamba env create -f environment.yaml --prefix $(pwd)
,使用environment.yaml
文件中提供的规范创建环境,并将环境放在当前目录中。
尽管问题最终得到解决,但由于需要使用mamba而不是conda来创建环境,引发了一个新的问题。这提出了一个潜在的挑战,因为我们的项目中有许多地方都使用conda来配置环境设置和部署。
然而,有一个好消息:mamba和conda命令在某种程度上是可以互换的。这意味着我们仍然可以使用conda与mamba创建的环境进行交互,如下图所示。
因此,很幸运,我们的团队不需要重构任何现有的流程,除了环境创建的特定步骤之外。这意味着我们可以无缝地集成使用mamba来创建环境,而不会干扰我们的工作流程的其他部分。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。