ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Miniconda vs Anaconda:虚拟环境管理与PyTorch CUDA配置实战

Miniconda vs Anaconda:虚拟环境管理与PyTorch CUDA配置实战 1. 为什么我最终选择了 Miniconda 而不是 Anaconda1.1 一次被 3GB 安装包支配的恐惧刚入行那会儿我装的是 Anaconda一个安装包 3GB 起步装完之后整个盘符直接少了 5GB 空间。当时觉得没什么反正硬盘大。直到后来我在一台只有 128GB 固态的笔记本上要同时跑三个项目——一个用 PyTorch 1.12 CUDA 11.3一个用 PyTorch 2.0 CUDA 11.8还有一个是纯 CPU 的 sklearn 项目——我才真正意识到 Anaconda 的问题不是大而是它把一堆你根本用不上的东西塞进了 base 环境。Miniconda 是什么说白了就是 Anaconda 的精简版。Anaconda 预装了 1500 多个包涵盖数据分析、机器学习、可视化、Web 开发你能想到的一切Miniconda 只给你三样东西conda 包管理器、Python 解释器、以及几个基础依赖。安装包大概 80MB 左右装完也就 400MB 出头。这个差别在实际使用中意味着什么我举个例子。你用 Anaconda 的时候base 环境里已经有一堆包了你在 base 里再装 PyTorchconda 的依赖解析器要在这 1500 个包的依赖图里找解速度慢不说还经常出现版本冲突。而 Miniconda 的 base 几乎是空的你创建虚拟环境之后从零开始装依赖树干净解析快冲突少。1.2 Miniconda 和 Anaconda 的核心区别到底在哪很多人搜miniconda和anaconda的区别看到的答案都是一个包多一个包少。这个回答没错但没说到点子上。真正的区别在于工作流的哲学对比维度AnacondaMiniconda安装包大小约 3GB约 80MB预装包数量1500仅 conda Python 基础依赖base 环境用途直接当工作环境用只用来管理虚拟环境依赖解析速度较慢依赖图大较快依赖图小适合人群完全新手、不想折腾环境需要多环境切换的开发者环境隔离效果容易不小心在 base 里装东西天然隔离base 保持干净我个人的做法是base 环境永远不装任何项目依赖只用来创建和管理虚拟环境。这个习惯一旦养成你会发现环境问题少了一大半。Anaconda 用户最容易犯的错误就是在 base 里直接pip install或者conda install装了几十个包之后 base 环境彻底乱掉最后只能重装。1.3 哪些人适合用 Miniconda不是所有人都适合 Miniconda。如果你满足以下任意一条Miniconda 是更好的选择你需要同时维护多个项目的不同依赖版本比如一个项目要 PyTorch 1.x另一个要 2.x你的硬盘空间有限或者你受不了装个 Python 环境就吃掉 5GB你需要在服务器上部署服务器通常不给你那么多磁盘配额你已经有一定 Python 基础知道虚拟环境是怎么回事你要用 CUDA 做深度学习需要精确控制 PyTorch 和 CUDA 的版本匹配反过来如果你刚学 Python连 pip 和 conda 都分不清那 Anaconda 的开箱即用确实更省心。但说实话我建议哪怕新手也直接上 Miniconda因为迟早你要面对多环境的问题不如一开始就养成好习惯。2. 各平台安装 Miniconda 的完整实操2.1 Windows 下的安装与踩坑记录Windows 安装 Miniconda 有几个关键决策点我一个个说。首先去 Miniconda 官网下载安装包。注意选择版本Python 3.11 或 3.12 的 64 位版本。除非你有特殊需求必须用 Python 3.8否则不要选老版本。下载的时候选 Miniconda3 Windows 64-bit。安装过程中有两个勾选项非常关键Add Miniconda3 to my PATH environment variable这个选项官方默认是不勾的理由是可能与其他软件冲突。但我实测下来如果你不勾后面在 CMD 或 PowerShell 里直接敲 conda 会报conda 不是内部或外部命令也不是可运行的程序或批处理文件。所以我的建议是勾上。如果你担心冲突可以先不勾装完之后手动把 Miniconda 的安装路径比如C:\Users\你的用户名\miniconda3和C:\Users\你的用户名\miniconda3\Scripts加到系统环境变量 Path 里。Register Miniconda3 as my default Python这个看情况。如果你电脑上已经装了 Python不想让 Miniconda 的 Python 抢了默认位置就别勾。如果你是一台干净的机器勾上也无妨。装完之后打开 CMD输入conda --version如果输出了版本号就说明安装成功。如果报错八成是 PATH 没配好手动加一下就行。还有一个 Windows 特有的坑PowerShell 下 conda activate 可能不生效。这是因为 PowerShell 的执行策略限制。解决办法是以管理员身份打开 PowerShell执行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser然后执行conda init powershell重启 PowerShell 就好了。2.2 Linux 服务器上的静默安装Linux 服务器通常没有图形界面安装方式跟 Windows 完全不同。我一般用命令行直接下载安装脚本# 下载最新版 Miniconda 安装脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 执行安装-b 表示批处理模式-p 指定安装路径 bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3 # 初始化 conda关键步骤不执行的话 conda activate 用不了 $HOME/miniconda3/bin/conda init bash # 重新加载 bash 配置 source ~/.bashrc这里有几个细节值得说。-b参数是静默安装不会弹出交互式确认适合脚本化部署。-p指定安装路径我习惯装在$HOME/miniconda3这样不需要 root 权限也不会污染系统目录。conda init bash这一步很多人会漏掉。它的作用是在你的.bashrc里写入一段初始化脚本让你在终端里能直接用conda activate。如果你不执行这一步直接敲conda activate myenv会报错condaerror: run conda init before conda activate这个报错我见过太多次了新手经常一脸懵。解决办法就是执行conda init bash然后source ~/.bashrc。如果你用的是 zsh比如 macOS 默认的 shell把bash换成zsh就行。2.3 macOS 上的安装注意事项macOS 分两种情况Intel 芯片和 Apple SiliconM1/M2/M3。下载的时候要选对版本Intel Mac选 Miniconda3 macOS Intel x86 64-bitApple Silicon选 Miniconda3 macOS Apple M1 64-bit装完之后同样需要conda init zshmacOS 默认 shell 是 zsh。如果你用的是 bash就conda init bash。macOS 上有一个常见问题安装完之后终端提示符前面多了一个(base)。这是因为 conda 默认会自动激活 base 环境。如果你不喜欢这个行为可以执行conda config --set auto_activate_base false这样每次打开终端就不会自动进 base 环境了需要的时候手动conda activate base就行。3. conda 虚拟环境的核心操作与换源加速3.1 创建、激活、退出、删除四个必须刻进肌肉记忆的命令conda 虚拟环境的操作其实就四个核心命令但每个都有细节# 创建环境指定 Python 版本 conda create -n myenv python3.11 # 激活环境 conda activate myenv # 退出环境 conda deactivate # 删除环境 conda remove -n myenv --all创建环境的时候-n后面跟的是环境名建议用有意义的英文名比如pytorch2、tf-gpu、sklearn-exp。不要用中文不要用空格不要用特殊字符。python3.11这个版本号很重要。如果你不指定conda 会装它默认的 Python 版本可能是 3.12 也可能是 3.13。而 PyTorch 对 Python 版本是有要求的比如 PyTorch 2.0 支持 Python 3.8-3.11你装个 3.12 可能就装不上。所以创建环境时一定要显式指定 Python 版本。还有一个常见问题conda create -n myenv特别慢卡在 Solving environment 半天不动。这是因为 conda 默认的源在国外网络延迟高。解决办法就是换源。3.2 换源把下载速度从 20KB/s 拉到 10MB/sconda 换源是每个国内用户必做的操作。不换源的话conda install pytorch可能下一个小时都下不完。我一般用清华源或者阿里源。# 添加清华源 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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ # 设置搜索时显示通道地址 conda config --set show_channel_urls yes阿里源的配置类似把上面的 URL 换成https://mirrors.aliyun.com/anaconda/对应的路径就行。换源之后conda create和conda install的速度会有质的提升。我实测过同一个包从默认源下载要 15 分钟换清华源之后 40 秒搞定。注意换源之后如果遇到某个包找不到的情况可以临时用-c参数指定官方源比如conda install -c defaults somepackage。另外pip 也要单独换源conda 的源配置不影响 pip。pip 换源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple3.3 环境迁移把一台机器上的环境搬到另一台python虚拟环境迁移是个高频需求。比如你在本地配好了 PyTorch 环境现在要部署到服务器上。有几种做法方法一导出 environment.yml# 在当前环境执行 conda env export environment.yml # 在目标机器执行 conda env create -f environment.yml这个方法的问题是environment.yml里会包含很多本地特有的包比如libgcc-ng、ld_impl_linux-64这种系统相关的跨平台迁移经常失败。方法二只导出显式安装的包conda env export --from-history environment.yml--from-history只导出你手动conda install的包不包含自动安装的依赖。这样迁移成功率高很多但目标机器需要重新解析依赖。方法三pip freeze requirements.txt如果你主要用 pip 装包那直接pip freeze requirements.txt # 目标机器 pip install -r requirements.txt这个方法最简单但只适用于纯 pip 管理的环境。如果环境里有 conda 装的包pip freeze 可能抓不全。我个人的经验是如果是同平台迁移用方法一跨平台迁移用方法二纯 pip 环境用方法三。另外如果环境特别复杂直接打包整个 envs 目录拷贝过去也是一种办法但要注意路径问题。4. PyTorch CUDA 环境搭建的完整流程4.1 先搞清楚 CUDA 版本和 PyTorch 版本的对应关系这是整个流程里最关键的一步。很多人装 PyTorch 失败根本原因就是 CUDA 版本和 PyTorch 版本不匹配。先看你的显卡驱动支持什么 CUDA 版本。在终端执行nvidia-smi输出右上角会显示 CUDA Version: 12.2 之类的信息。这个数字表示你的驱动最高支持的 CUDA 版本不是说你必须装这个版本。比如显示 12.2你可以装 CUDA 11.8、12.1、12.2但装不了 12.3。然后去 PyTorch 官网查版本对应表。我整理了一个常用的对应关系PyTorch 版本支持的 CUDA 版本支持的 Python 版本2.0.x11.7, 11.83.8 - 3.112.1.x11.8, 12.13.8 - 3.112.2.x11.8, 12.13.8 - 3.122.3.x11.8, 12.13.8 - 3.122.4.x11.8, 12.1, 12.43.8 - 3.12选一个你的驱动支持的 CUDA 版本然后对应到 PyTorch 版本。比如你的驱动支持 CUDA 12.2那你可以选 PyTorch 2.1 CUDA 12.1或者 PyTorch 2.0 CUDA 11.8。4.2 用 conda 安装 PyTorch 的实操步骤假设我们要装 PyTorch 2.1 CUDA 12.1 Python 3.11# 创建环境 conda create -n pytorch21 python3.11 -y # 激活环境 conda activate pytorch21 # 安装 PyTorch注意这里用 pip 装不用 conda 装 pip install torch2.1.0 torchvision0.16.0 torchaudio2.1.0 --index-url https://download.pytorch.org/whl/cu121这里我要特别说明为什么用 pip 而不是 conda 装 PyTorch。原因有几个conda 装 PyTorch 会连带装一堆 CUDA 相关的包cudatoolkit、cudnn 等这些包加起来好几个 GB而且经常和系统已有的 CUDA 冲突pip 装的 PyTorch 自带 CUDA 运行时不需要系统预装 CUDA Toolkitpip 的版本更新更快conda 源有时候会滞后当然如果你需要用conda install -c nvidia cuda-toolkit11.8这种方式装完整的 CUDA Toolkit比如你要编译自定义算子那就另说。但纯粹跑 PyTorch 训练和推理pip 装就够了。安装完成之后验证import torch print(torch.__version__) # 应该输出 2.1.0 print(torch.cuda.is_available()) # 应该输出 True print(torch.cuda.device_count()) # 显卡数量 print(torch.cuda.get_device_name(0)) # 显卡型号如果torch.cuda.is_available()返回 False那说明 CUDA 没配好。排查步骤确认nvidia-smi能正常输出确认安装的 PyTorch 是 GPU 版本torch.__version__里应该带cu121后缀确认环境变量CUDA_VISIBLE_DEVICES没有被设成空如果是 WSL 环境确认 WSL 的 CUDA 驱动装好了4.3 WSL 下搭建 PyTorch 环境的特殊处理7900xtx pytorch wsl和pytorch环境搭建wsl是热搜词说明很多人在 WSL 下折腾 PyTorch。WSL 的好处是可以在 Windows 上用 Linux 的开发体验但 CUDA 配置有特殊性。WSL2 下用 NVIDIA 显卡不需要在 WSL 里单独装显卡驱动。你只需要在 Windows 宿主机上装好 NVIDIA 驱动版本要足够新WSL 会自动透传 CUDA 支持。在 WSL 里执行nvidia-smi如果能看到显卡信息就说明透传成功了。然后 WSL 里装 PyTorch 的步骤和普通 Linux 一样conda create -n wsl-pytorch python3.11 -y conda activate wsl-pytorch pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121WSL 下常见的坑显存不足WSL 默认分配的显存可能不够可以在%UserProfile%\.wslconfig里配置[wsl2] memory32GB swap8GBCUDA 版本不匹配WSL 里的 CUDA 版本取决于 Windows 驱动的版本不是你在 WSL 里装了什么。所以如果nvidia-smi显示的 CUDA 版本太低要去更新 Windows 的 NVIDIA 驱动。AMD 显卡如果你用的是 AMD 显卡比如 7900 XTXWSL 下的 PyTorch 支持比较有限。ROCm 在 WSL 下的支持还在完善中目前建议直接用 Linux 原生系统或者用 DirectML 方案性能有损失。5. 常见报错与排查速查表5.1 conda 相关报错报错信息原因解决办法conda: command not foundPATH 没配好把 miniconda3/bin 和 miniconda3/Scripts 加到 PATHcondaerror: run conda init before conda activate没执行 conda init执行conda init bash或 zsh/powershell然后 source 配置文件conda create -n xxx 卡在 Solving environment默认源太慢换清华源或阿里源PackagesNotFoundError源里没有这个包换源或用-c conda-forge指定通道CondaHTTPError: HTTP 000 CONNECTION FAILED网络问题检查网络换源或加代理注意合规conda activate 后 Python 版本没变环境没激活成功检查终端提示符前是否有(envname)没有就重新 activate5.2 PyTorch 相关报错报错信息原因解决办法torch.cuda.is_available() 返回 FalseCUDA 没配好检查 nvidia-smi、PyTorch 版本、CUDA_VISIBLE_DEVICESRuntimeError: CUDA out of memory显存不够减小 batch size清理缓存torch.cuda.empty_cache()RuntimeError: Expected all tensors to be on the same device数据和模型不在同一设备检查.to(device)是否都调用了ImportError: libcudart.so.11.0: cannot open shared object fileCUDA 运行时库找不到确认 PyTorch 版本和 CUDA 版本匹配重装 PyTorchpip install torch 下载极慢默认源在国外用--index-url https://download.pytorch.org/whl/cu121或换国内镜像5.3 PyCharm 中使用 conda 虚拟环境的配置方法pycharm 用 anaconda3 虚拟环境中的 python 创建项目报错是个高频问题。在 PyCharm 里配置 conda 环境的正确姿势打开 PyCharm进入File - Settings - Project - Python Interpreter点击齿轮图标选择Add Interpreter - Add Local Interpreter选择Conda Environment在Conda executable里填你的 conda 路径比如C:\Users\你的用户名\miniconda3\Scripts\conda.exe在Python interpreter里选你创建的环境比如C:\Users\你的用户名\miniconda3\envs\pytorch21\python.exe点击 OK常见报错是 Conda executable is not found这是因为 PyCharm 找不到 conda 的可执行文件。手动指定路径就行。另外如果你在 PyCharm 里创建新环境时报错可以先在终端里用conda create创建好然后在 PyCharm 里直接选已有环境。6. 我踩过的坑和总结的经验6.1 不要在 base 环境里装任何东西这是我反复强调的一点。base 环境是 conda 用来管理其他环境的你在 base 里装包轻则导致 conda 自身依赖冲突重则 conda 直接罢工。我见过有人把 base 环境装了几百个包最后conda install什么都装不上只能重装 Miniconda。正确的做法是每开始一个新项目就创建一个新的虚拟环境。环境名用项目名或者技术栈名比如nlp-exp、cv-train、rl-test。项目结束之后如果不再需要直接conda remove -n envname --all删掉干净利落。6.2 版本锁定比什么都重要做深度学习项目最怕的就是昨天还能跑今天跑不了了。原因通常是某个包自动升级了。解决办法是锁定版本。在环境配好之后立刻导出精确的依赖列表conda env export environment.yml这个文件里包含了所有包的精确版本号。下次重建环境时用这个文件创建就能保证版本完全一致。另外在requirements.txt里也要写死版本号torch2.1.0 torchvision0.16.0 numpy1.24.3不要写torch2.0这种因为意味着每次安装都可能装到不同的版本。6.3 磁盘空间管理Miniconda 虽然比 Anaconda 小但如果你创建了十几个环境每个环境几个 GB加起来也很可观。定期清理不用的环境# 查看所有环境 conda env list # 删除环境 conda remove -n old_env --all # 清理 conda 缓存 conda clean --allconda clean --all会清理下载的包缓存、索引缓存、未使用的包等通常能释放几个 GB 的空间。我一般每个月执行一次。6.4 关于 CUDA 安装的一个反直觉事实很多人以为要跑 PyTorch GPU 版本必须先装 CUDA Toolkit。其实不是。pip 安装的 PyTorch 自带 CUDA 运行时库你不需要系统预装 CUDA Toolkit。只有当你需要编译自定义 CUDA 算子比如用torch.utils.cpp_extension时才需要完整的 CUDA Toolkit。所以如果你只是跑现成的模型训练和推理nvidia-smi显示驱动正常直接 pip 装 PyTorch 就行不用折腾 CUDA Toolkit 的安装。这个认知能帮你省掉至少两个小时的折腾时间。6.5 环境变量 CUDA_VISIBLE_DEVICES 的妙用如果你有多张显卡可以通过CUDA_VISIBLE_DEVICES控制 PyTorch 用哪张# 只用第 0 张卡 CUDA_VISIBLE_DEVICES0 python train.py # 用第 0 和第 1 张卡 CUDA_VISIBLE_DEVICES0,1 python train.py # 不用 GPU CUDA_VISIBLE_DEVICES python train.py这个在服务器共享的场景下特别有用。你可以指定用哪张卡避免和别人抢显卡。另外在代码里也可以用os.environ[CUDA_VISIBLE_DEVICES] 0来设置但必须在import torch之前设置才生效。6.6 最后分享一个环境诊断脚本我写了一个小脚本每次配好新环境之后跑一下能快速确认环境是否正常import sys import torch import platform print(fPython 版本: {sys.version}) print(f操作系统: {platform.system()} {platform.release()}) print(fPyTorch 版本: {torch.__version__}) print(fCUDA 可用: {torch.cuda.is_available()}) if torch.cuda.is_available(): print(fCUDA 版本: {torch.version.cuda}) print(fcuDNN 版本: {torch.backends.cudnn.version()}) print(f显卡数量: {torch.cuda.device_count()}) for i in range(torch.cuda.device_count()): print(f 显卡 {i}: {torch.cuda.get_device_name(i)}) print(f 显存: {torch.cuda.get_device_properties(i).total_memory / 1024**3:.1f} GB) else: print(CUDA 不可用请检查驱动和 PyTorch 版本)这个脚本能一次性输出所有关键信息排查问题时直接把输出贴出来比一条条命令敲快多了。我把它保存为check_env.py放在项目根目录每次换环境都跑一遍。环境配置这件事说难不难说简单也不简单。核心就三点选对工具Miniconda、管好环境虚拟环境隔离、锁死版本导出依赖。把这三点做到位后面跑模型的时候就能少掉很多头发。
返回列表