开篇:AI训练第一步为什么总是Anaconda
做AI模型训练的人,电脑里几乎都装过Anaconda。不管是刚入门的大学生跑通第一个手写数字识别,还是在企业里训练大规模语言模型,你会发现所有教程开头几乎都是同一句话:“先安装Anaconda”。说它是AI训练的隐形地基,一点不夸张。没装它之前,你可能经历的是“装了TensorFlow后PyTorch用不了”、“Python版本升级把项目搞炸了”、“同事发来的环境配置代码怎么都跑不起来”这种连环噩梦。装了Anaconda之后,这些问题的基本盘就被稳住了。
Anaconda到底是什么?简单说,它是一个Python的发行版,自带了一个叫conda的包管理器和环境管理器,同时还捆绑了一批数据科学常用的库。但它的核心价值不在那一堆预装库,而在“环境隔离”四个字。AI训练是一种重度依赖环境的工作:不同的框架要求不同的Python版本,不同的CUDA版本对应不同的PyTorch版本,甚至同一个框架的不同版本之间都可能互不兼容。Anaconda让你可以把这些互为冲突的环境各自装进独立的小房间,互不干扰,随时切换。它解决的问题,本质上不是“怎么安装软件”,而是“怎么让一堆娇气的依赖共存”。
这篇文章我会从几个角度拆解Anaconda在AI模型训练里的核心作用,包括它的环境隔离机制、依赖管理逻辑、与深度学习框架配合的方式、完整实操流程,以及我实际工作中踩过的坑。无论你是刚开始接触AI训练的新手,还是已经在跑模型但被环境问题折磨过的开发者,这篇文章都值得看完。
1. 环境隔离:AI训练的“多版本共存药方”
1.1 为什么AI训练特别需要环境隔离
深度学习的世界里,依赖冲突不是偶然事件,而是常态。你可能在某个项目里需要用TensorFlow 2.10配合Python 3.9,在另一个项目里却要复现一篇论文的代码,人家用的是PyTorch 1.8加Python 3.7。如果这些东西全部装在一个全局Python环境里,后果就是:你装了这个库,那个库就崩了;你升级了NumPy,一个老项目立刻罢工。
我见过太多例子。有个朋友在某公司做模型复现,一开始图省事直接把所有依赖装进系统Python,结果某次升级NumPy之后,服务器上三个模型训练脚本全部报错,后来回滚版本又导致另外两个新项目受影响。最后花了整整两天才把环境梳理干净。这种事情一旦发生,耽误的不仅是时间,还有算力资源。试想你有一张昂贵的GPU在空转,只因为你花了两天在平复依赖混乱——这种代价显然不合理。
Anaconda的conda环境管理器恰恰就是治疗这种病的药。它允许你创建多个完全隔离的Python环境,每个环境里可以指定不同的Python版本、安装不同版本的库,环境之间井水不犯河水。你要训练A项目就激活A环境,训练B项目就切换B环境,整个过程像开关一样迅速自然。
1.2 conda create到conda activate的完整逻辑
创建环境是Anaconda中最基础、也最核心的操作。我常用的命令序列:
conda create -n llm-project python=3.10 conda activate llm-project第一行代码创建了一个名为llm-project的独立环境,指定Python版本为3.10。第二行激活这个环境。环境一旦激活,你在终端里输入python、pip、conda install等命令时,操作目标都变成了当前环境,和系统全局环境完全隔离开。
这里一定要理解一个细节:conda create不只是创建一个空目录,它还会根据你指定的Python版本,自动解析并安装与之匹配的基础依赖。比如在Python 3.10环境下,它会自动准备pip、setuptools这些基础工具。如果你不指定版本,它会使用Anaconda默认的Python版本,这通常不是你想要的结果。所以我建议每次创建环境时把Python版本写清楚,养成习惯。
环境创建好之后,用conda activate进入。进入了哪个环境,路径开头就会显示这个环境的名字。比如:
(base) user@machine:~$ (llm-project) user@machine:~$看到(llm-project)这样的前缀代表你现在正在使用该环境中的Python和库。这种视觉提示虽然不起眼,但是在同时管理多个环境时非常有帮助。
1.3 虚拟环境不是Anaconda的专利,但为什么选它
Python本身自带的venv模块和第三方的virtualenv也能创建虚拟环境。既然如此,为什么AI训练社区还是更倾向于Anaconda?关键在于两点。
第一,conda是跨语言的包管理器。它不只管理Python包,还能管理CUDA、cuDNN、OpenMP、MKL等非Python的二进制库。这在AI训练中是决定性的优势。举个具体场景:某个项目需要CUDA 11.8版本,另一个项目需要CUDA 10.2,如果用pip配合系统级的CUDA安装,你几乎不可能同时让两版CUDA共存。但conda可以做到:
conda create -n tf-cuda118 python=3.9 conda activate tf-cuda118 conda install cudatoolkit=11.8 conda install tensorflow你用这种方式,把CUDA的运行库也封装进了独立环境里,不同项目用不同CUDA版本,互不干扰。简单说,虚拟环境只是隔离空间的工具,conda则是连家具都可以按需搬进搬出的那一种。这对于AI训练这种依赖底层二进制库的场景,太关键了。
第二,conda在解决依赖冲突时,采用的是Solver机制,而不是简单覆盖安装。它会尝试解析当前环境下所有包之间的依赖关系,生成一个不冲突的安装方案。虽然这种机制运行速度慢,而且偶尔会让人等得心烦,但它在帮助你维持环境长期稳定上,作用不可替代。
2. 依赖管理:兼顾Python库与系统库的“大管家”
2.1 conda install和pip install到底怎么选
AI训练的依赖管理绕不开这个话题:同一个包,可以用conda install装,也可以用pip install装,到底有什么区别?
本质上,conda从Anaconda的软件源下载预编译的二进制包,pip从PyPI下载。conda的强项在于它能够处理包在系统层面的依赖,比如libstdc++、libgomp、cudatoolkit这些,pip则很难介入这一层。而PyPI上python包的数量远超Anaconda源,很多小众的库只有pip install才能安装。
我的使用习惯是这样:优先尝试conda install。如果conda源里没有这个包,或者conda在反复求解依赖时陷入死循环,那就果断切换到pip。混用两者的前提是,包必须安装进当前的环境内部,而不是全局环境。具体做法:
conda activate ai-project pip install some-package在激活的conda环境中使用pip,pip会把包安装到当前环境的site-packages目录。这样就不会污染全局环境。但有个坑:你必须确认这个环境中默认的pip就是conda环境内部的pip,而不是系统的pip。方法很简单:
which pip如果输出路径里包含你环境的名字,说明没问题。比如输出/home/user/anaconda3/envs/ai-project/bin/pip,这代表pip指向当前环境。
2.2 通过environment.yml实现可复现环境
环境可复现性在AI训练中占据重要位置。你训练出的一个模型效果不错,过了一个月想复现,如果环境变了,哪怕只是某个依赖库的小版本升级,模型的输出都可能发生微妙变化。所以,把环境配置保存下来,是每个AI训练工程师都应该养成的好习惯。
conda提供了两个导出命令:
conda env export > environment.yml这会把当前环境的所有包、版本、来源渠道完整导出到一个名为environment.yml的文件里。另一种更干净的做法是直接导出你主动安装的关键依赖,而省略依赖树中自动带出的子依赖——用conda env export --from-history可以实现。这样做的好处是可读性强,但不足之处是复现的精确度不如完整导出。
在新机器或新服务器上,恢复环境的操作也很简单:
conda env create -f environment.yml它会按照文件里的记录,把环境完整重建出来。在团队协作时,只需要把这个文件扔给同事,对方就能拥有一模一样的运行环境。这种可复现能力在AI训练里的价值怎么强调都不过分。跑过模型的人都知道,很多论文复现失败的原因,根本不是算法理解错了,而是环境版本和原作者不一致。
2.3 依赖冲突时的策略和心得
即便有conda做依赖管理,冲突依然可能发生。尤其是安装某些比较新的深度学习框架时,框架要求的依赖和环境中已有包会发生不可调和的版本冲突。这时conda会报出“Solving environment failed”之类的错误。
我第一次遇到这种问题时,第一反应是乱装一通,比如强制安装最新版本来覆盖。后来发现这种做法经常适得其反。更合理的思路是:查阅框架官方文档,看看它对各项依赖的具体版本要求,然后创建一个全新环境从头组装。虽然多花了点时间,但保证了底层的干净。
还有一种情况是conda在解析依赖时卡住,长时间无响应。这往往是因为源的配置不佳,或者包数量太多。这时有两个补救措施:一是更换镜像源,二是设置更短的求解超时时间。如果急切需要安装包,我会直接开一个干净的conda环境,用pip安装它——pip对冲突的容忍度更高,不过是把风险延后了,得随时留意后续使用问题。
3. 与深度学习框架和硬件加速的配合
3.1 conda对CUDA和cuDNN的版本管理逻辑
AI训练过程中,最让人头疼的依赖往往不是Python层面的库,而是GPU加速栈,比如CUDA Toolkit和cuDNN。Linux服务器上如果直接安装系统级的CUDA,那么一旦需要更换版本,系统级的操作会牵连到很多其他软件,风险极大。conda的cudatoolkit包把CUDA运行时库封装在环境内部,切环境就相当于切CUDA版本。
实际使用时,我通常这样操作:
conda create -n torch-cuda118 python=3.9 conda activate torch-cuda118 conda install cudatoolkit=11.8 cudnn=8.6.0 pip install torch==2.1.0这里需要注意,不同版本的PyTorch官方会给出推荐的CUDA版本对应关系。以PyTorch 2.1.0为例,它支持CUDA 11.8和12.1。那么你可以通过conda安装对应版本的cudatoolkit,再配合PyTorch的pip安装。只要CUDA版本在PyTorch的支持列表里,通常都能正常工作。
但有一点要清楚:conda的cudatoolkit主要是运行时库,不带完整的NVCC编译器。如果你需要编译自定义的CUDA扩展(比如自己写CUDA kernel),还是需要额外安装完整的CUDA Toolkit。这一点只靠conda是办不到的,需要自己去NVIDIA官网下载安装。
3.2 如何确认GPU训练环境真正就绪
环境配好后,验证是否真的能用GPU训练,是一个关键环节。很多人配置完环境后,程序能够运行,但实际上用的是CPU,GPU从未真正参与计算。这种情况在模型不太大时不容易察觉,一旦模型变大,训练速度的差异会让人怀疑人生。
验证的方法很简单。对于PyTorch:
import torch print(torch.cuda.is_available())如果输出True,那么可以继续查看GPU信息:
print(torch.cuda.get_device_name(0))对于TensorFlow:
import tensorflow as tf print(tf.config.list_physical_devices('GPU'))如果能正常列出GPU设备,说明环境搭配正确。如果返回False或者空列表,排查方向集中在两处:一是conda环境内安装的cudatoolkit版本是否与框架要求匹配,二是驱动版本是否支持当前CUDA版本。这里有个经验:显卡驱动向后兼容性较好,驱动版本新通常不是问题,关键是cudatoolkit这个环境内组件要和PyTorch的期望一致。
3.3 创建可供Jupyter Notebook使用的环境内核
在真正开始训练之前,还有一个环节经常被忽略:Jupyter Notebook的内核配置。Anaconda默认的base环境自带Jupyter,但如果你新建了一个虚拟环境,在Jupyter里却看不到这个环境。原因很简单——Jupyter需要显式注册环境的内核。
注册内核的命令是:
conda activate my-env python -m ipykernel install --user --name my-env --display-name "My Env"之后重启Jupyter Notebook或JupyterLab,就能在“New”菜单里找到名为“My Env”的内核。选中它,Jupyter就会用这个环境的Python解释器和库来执行代码。
这个操作在团队协作中很常用。比如我经常在一个服务器上维护多个项目,有人做计算机视觉,有人做自然语言处理,我们各自有独立环境,同时通过Jupyter共享服务器资源。只要正确注册内核,每个人都只在自己的环境中跑代码,互不干扰,也不必担心动了别人的项目。
4. 实操过程:从安装到训练一个模型的完整流程
4.1 安装Anaconda时的几个关键决定
安装Anaconda本身不复杂,但有几个决定会影响到后续使用的幸福感。
首先是版本选择。Anaconda官方提供两种主要安装包:Anaconda Distribution和Miniconda。前者带有一大堆预装包,体积好几个GB,适合网络条件好、磁盘空间充裕、希望开箱即用的用户。后者只包含conda和基础依赖,体积小得多,其他包按需安装,适合对磁盘空间敏感的用户。我个人更倾向于Miniconda——AI训练需要的库实际上就那几个,预装一大堆用不上的包反而增加了环境管理的复杂度。
其次是安装路径。默认安装在用户主目录下比较干净,不需要sudo权限。把它装在系统级目录也不是不行,但后续升级和权限管理可能会比较麻烦。我一般习惯装在家目录。
最后是初始化选项。安装过程中会询问是否将conda初始化到shell配置文件中,建议选择“是”。如果不初始化,每次使用conda都需要手动执行source /path/to/anaconda3/bin/activate,时间久了很容易忘记。选择初始化之后,打开新的终端就能看到(base)前缀,直接可以用了。
4.2 一个实际AI训练项目的环境完整配置
接下来我用一个实际项目来完整演示Anaconda在整个训练流程里的作用。假设我要在GPU服务器上训练一个图像分类模型,使用PyTorch框架。
第一步,创建环境并为它指定好Python版本。
conda create -n image-classification python=3.9 -y-y参数表示自动确认安装。不加的话conda会问你“Proceed?”,交互式确认虽然更安全,但脚本化运行时容易卡住。
第二步,激活环境并安装深度学习框架。
conda activate image-classification conda install cudatoolkit=11.8 cudnn=8.6.0 -y pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118这里我刻意选择了conda安装CUDA相关组件,用pip安装PyTorch本体。原因是PyTorch的官方pip源直接提供编译好对应CUDA版本的轮子,和conda源里的PyTorch相比,匹配关系更直接。
第三步,安装辅助库。
pip install numpy pandas matplotlib scikit-learn tqdm tensorboard这些是训练过程中一定用得到的工具库。tqdm给训练进度加个进度条,看着舒服;tensorboard用于可视化和监控训练指标。
第四步,验证环境。
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"如果输出类似2.1.0 True的信息,环境搭建成功。
到这一步,Anaconda的角色已经完成了很大部分。接下来你会进入代码编写和模型训练阶段,但环境这块的底子,已经可以保证你不会在依赖问题上翻车了。
4.3 训练过程中的日常环境操作技巧
训练过程中我常用的几个conda操作,虽然都是基础功夫,但能有效提升工作效率。
查看虚拟环境列表,用conda env list。输出会列出所有已存在的环境名称和路径,前面带*号的是当前激活的环境。这个命令比conda info --envs短一些,两则功能相同。
删除不再使用的环境,用conda env remove -n env-name。某天训练完项目、不再需要这个环境时,删掉它能释放不少磁盘空间。尤其是一些环境里装了大体积的CUDA组件,一个环境可能占用几个GB。
复制环境,用conda create -n new-env --clone old-env。这个操作在实验变体时很实用——你在某个环境里把模型A的参数调好,想为模型B复制一套完全一样的基础环境,直接克隆就行。注意复制过程需要一点时间,因为要重建整个包的链接。
升级某个包但不想影响其他包时,可以用conda update或pip install --upgrade。这里我要特别提醒:在训练中途升级关键依赖(比如PyTorch、CUDA组件)是非常冒险的行为。训练脚本跑到一半,环境突然变了,模型保存、数据加载逻辑都可能受影响。如果一定要升级,请在两个时间点做:要么训练开始前,要么完整训练结束后。
4.4 把Anaconda集成进入日常开发工作流
经常有人问,Anaconda是不是只适合在命令行里操作?实际上conda在可视化界面方面也提供支持。Anaconda Navigator是一个图形化管理工具,你可以在里面创建环境、安装包、启动Jupyter,不需要写命令。不过我的实际感受是,命令行方式效率高得多,尤其是熟练了之后,几秒就能完成环境的切换和包的安装。Anaconda Navigator更适合刚接触、对终端不熟悉的新手。
在集成开发环境方面,PyCharm和Visual Studio Code都原生支持conda环境的识别。以Visual Studio Code为例,你只需要在命令面板里选择Python解释器,它会自动列出当前机器上的所有conda环境,选中目标环境即是当前项目的解释器。这样在编写代码时,智能提示和代码补全都会基于该环境中的库,比较方便。
这种环境感知能力对于多项目并行的开发方式非常重要。你在写项目A的代码时切到环境A,写项目B时切到环境B,IDE对应的解释器也随之切换,不会混淆。
5. 常见问题与排查技巧实录
5.1 conda下载速度慢的应对策略
conda从官方源下载包时,速度慢是常见的痛点,尤其在需要安装大体积的包时更加明显。最直接的办法是更换镜像源。在国内环境,常见做法是指定清华或其他机构的镜像源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free conda config --set show_channel_urls yes但要注意,在使用深度学习相关包时,某些第三方频道(比如conda-forge)中可能会有更完整的新版本。如果切换官方频道后找不到某个包,到清华源的cloud/conda-forge目录下也能找到对应频道。
设置完镜像源后,清除缓存内的无效索引:
conda clean -i然后重新尝试安装,速度大概率会有明显改善。
5.2 终端中找不到conda命令的修复方式
明明安装了Anaconda,但新开的终端里输入conda却提示“command not found”。这个问题我以前也撞过好几回。常见原因有两个。
一是安装过程中没有选择初始化shell。解决办法是手动初始化:
source /path/to/anaconda3/bin/activate conda init执行后重新打开终端即可。
二是shell的配置文件被覆盖。如果你用的是zsh,需要确认~/.zshrc中存在conda的初始化代码;如果用的是bash,则检查~/.bashrc。init命令会往这些文件里写入一段conda的启动脚本。如果找不到,直接用conda init命令会自动识别当前shell并写入对应的配置文件。
遇到这个问题不要慌,逐项排查就能解决。但我确实见过有人因为这个问题,直接把整个Anaconda重新卸载再安装一遍,其实完全没有必要。
5.3 “Solving environment”卡住或失败的处理方法
conda的依赖求解器在遇到复杂的依赖冲突时,可能长时间停顿或直接报错。下面的命令是我遇到这种情况时的标准做法。
第一种,清理索引缓存和锁定文件:
conda clean --all这个命令会清理所有缓存。缓存过多有时会导致求解器处理速度显著下降。
第二种,使用更宽松的通道:
conda install package-name -c conda-forgeconda-forge社区维护的包通常更新更及时,对依赖的兼容性也更好。很多官方源的包在求解依赖时有矛盾,换成conda-forge反而能顺利安装。
第三种,放弃conda,改由pip安装。如果一个包在conda环境中折腾了超过十分钟还解决不了,我会直接激活环境后执行pip安装。实测中这往往是效率最高的路径。当然代价是这个包不会出现在conda list里,但用pip list依然能看到。
5.4 环境莫名其妙被破坏的恢复经验
有一种情况令人相当崩溃:某天你想跑一个训练脚本,但一导入torch就报错,各种奇奇怪怪的动态库找不到。这种环境被破坏的场景,绝大多数根源在于错误地升级了某个基础库,例如NumPy或者OpenSSL,导致大批包依赖发生连锁反应。
我的恢复流程很固定。首先尝试用conda重新修复基础包:
conda install --file requirements.txt --force-reinstall如果情况更严重,环境已经完全不可用,就直接删掉重建:
conda deactivate conda env remove -n broken-env conda create -n broken-env python=3.9 conda activate broken-env # 重新安装所需包这种做法虽然会把环境从零搭起,但至少干净可靠。那种在损坏环境里做各种修补尝试的操作,花费的时间往往比重建还多。我后来学到的教训是:虚拟环境本身就是用来“毁掉重来”的,别心疼它。
5.5 Jupyter Notebook中无法导入已安装的包
有时候你在conda环境里明明安装了某个包,但在Jupyter Notebook里执行import却报ModuleNotFoundError。这个问题的根源通常是Jupyter内核选择的是另一个环境。解决办法前面已经提到过,就是注册对应的ipykernel。这里再强调一个细节:重新注册内核后,需要重启Jupyter服务才能生效,不是刷新页面就可以。
在团队协作场景中,这个问题更容易发生在每个人有独立环境的情况下。注册错内核的后果是,你花了半天时间装的包,在Notebook里完全找不到。检查方法也很简单,在Notebook里执行:
import sys print(sys.executable)查看解释器路径,确认它指向目标conda环境。
5.6 训练脚本报缺.so文件的排查思路
在运行深度学习训练时,有时会遇到“libcudnn.so.8: cannot open shared object file”之类的错误。这类错误直观地说明环境里缺少某个动态库,或者版本对不上。
排查思路比较直接:检查conda环境里实际安装的cudnn版本。
conda list | grep cudnn如果版本号跟框架要求不一致,比如框架需要8.x而你装了7.x,就重新适配版本:
conda install cudnn=8.6.0 -c conda-forge安装完之后试着重新加载动态库:
conda activate env-name有时候动态链接库的链路较长,需要重新激活环境才能让新的库路径生效。这种问题在深度学习圈子实在太常见了,几乎每隔一阵子就会遇到一次。
6. 多环境高效管理的进阶心得
6.1 环境命名规范让管理成本大幅降低
环境用多了以后会发现,管理成本主要在于“记不住哪个环境是干嘛的”。如果环境名起得随意,比如test1、test2、newenv,一个月后你再看到这些名字,基本回想不起来对应什么项目。
我的建议是环境命名时带上项目名和用途信息,例如detection-yolov8、nlp-bert-finetune、gan-stylegan3。这种命名风格在终端提示符上也很直观——看到(detection-yolov8),你就知道当前正在用目标检测相关的环境。
如果你在组织层面管理多个GPU环境,还可以考虑在环境名中加入模型规模或框架版本,例如llm-finetune-70b、cv-pytorch-2.1。清晰的命名规范能省下大量回忆成本。
6.2 团队协作时如何共享conda环境
在团队训练项目中,多人共用一台服务器是很常见的工作方式。每个人的项目需要不同的依赖,但又不想互相干扰。此时大家各自创建自己的conda环境,是一种比较合理的组织方式。
共享环境配置时,environment.yml仍是标准做法。准备共享环境的一方:
conda env export > environment.yml接收方:
conda env create -f environment.yml这样就能在另一台机器上复现一模一样的运行环境。不过要注意,完整导出的environment.yml会记录本机特定的路径信息,如果换机器使用,报错时可以打开文件检查并手动编辑掉类似prefix:字段的那一行,再运行conda env create,通常就正常了。
另一种共享方式是使用--from-history参数:
conda env export --from-history > environment.yml它会只记录通过conda install显式安装的包,忽略自动依赖。这个文件更精简,跨平台兼容性更好,但可复现精度略低。我更倾向在正式复现时用完整导出,在日常协作时用from-history版本。
6.3 磁盘空间清理的实用操作
长时间训练多个AI项目,磁盘空间很容易被多个conda环境吃满。每个环境动辄几GB,其中大部分是可反复移植的缓存和重复包。清理时有几个方向。
首先清除conda的包缓存:
conda clean -p这个命令会删除曾经下载但已安装过的包缓存,不影响已安装环境。其次清除所有的索引缓存:
conda clean -t如果要彻底清理(包括未使用的索引文件、日志等),可以使用:
conda clean --all这个操作会比较久,但能释放出不少空间。
从根本上减少磁盘占用,还有两个更彻底的方式。一是尽量使用Miniconda替代完整版Anaconda,少装很多用不上的预装包。二是及时删除不再使用的环境,特别是跑完某个模型后不打算继续维护的环境,删除它比留在那儿占地方合理得多。
6.4 conda环境的备份和迁移
有时候你会遇到这种需求:要把当前服务器上的训练环境整体迁移到另一台没有外网权限的服务器。在无外网环境中,conda create和pip install都失效了,只能通过包文件离线恢复。这时可以用conda的离线打包方式:
conda pack -n my-env -o my-env.tar.gz这需要先安装pack工具:
conda install conda-pack打包完成后,把文件传到目标机器上解压,再手动指定环境路径,就能让环境在目标机器上生效。这种方式在进行离线模型训练环境的部署时,非常实用。如果没有conda-pack,也可以直接在conda环境目录下打tar包,恢复时配合conda create指定路径,但兼容性容易出问题,不推荐。
收尾:环境管理是AI训练的基本功,也是隐形护城河
很多人刚学AI时,把大量时间花在理解模型结构、调参、改进算法,却忽视了环境管理。但实际上,在我接触过的所有AI训练项目里,环境问题都是出现频率最高、拖慢进度最严重的问题之一。把Anaconda用好了,约等于在一开始就消灭了一整类“玄学问题”。模型训练不报错、复现不出错、团队协作顺畅,这些都建立在环境隔离和依赖可控的基础之上。
最后分享一个我自己坚持很久的习惯:每个项目开始的第一天,一定先花半小时把conda环境创建好,并且写好environment.yml放进项目仓库,然后才动手写代码。虽然前期看起来多了些准备工作,但项目后期几乎不会因为环境问题浪费时间。Anaconda在AI训练中的核心作用,从来不在于它本身多复杂多强大,而在于它用隔离和可复现这两个朴素思想,帮你挡住了AI训练中最容易翻车的那一关。