简介:这份资源面向深度学习初学者,尤其是使用Windows系统、准备跟随《动手学深度学习》一书入门的新手,解决从零手动搭建开发环境时容易卡壳的问题。资源包共1个文件,为399KB的PDF文档,内容以图文并茂的方式呈现,配有截图辅助理解,便于对照操作。目前已有5143人学习下载,说明其在入门群体中具有一定参考价值。文档围绕Miniconda安装、代码压缩包下载、虚拟环境创建、国内镜像源配置、依赖库安装以及Jupyter Notebook启动等环节展开,并针对自动安装失败的情况给出手动逐项安装与版本核对的排错思路,例如对照environment.yml检查mxnet、d2lzh等包的版本。读者可借此获得一份可跟随操作的环境配置指引,减少因版本冲突或依赖缺失导致的反复试错,更顺畅地进入深度学习实践阶段。
1. 手动装环境这件事,为什么比跑通第一个模型更值得较真
很多人第一次接触《动手深度学习》这本书,卡住的地方不是卷积、不是反向传播,而是打开书配套的 Jupyter Notebook 那一刻——ModuleNotFoundError: No module named 'd2l'。这个报错背后,其实是环境配置没做对。手动安装深度学习环境,指的是不依赖一键脚本、不靠别人打包好的镜像,自己从 Miniconda 开始,一步步把 conda 环境、Jupyter、GPU 版框架和 d2l 库装到位。它解决的核心问题是:你清楚每一个包从哪来、装在哪、版本为什么是它。适合谁?适合被“装了半天跑不起来”折磨过、想真正掌控自己开发环境的人。这篇笔记就按我实际装机的顺序,把每一步的命令、参数和翻车点讲清楚。
2. 从 Miniconda 到 conda 环境:把地基打对
2.1 为什么选 Miniconda 而不是 Anaconda
Anaconda 预装了上百个包,体积大、依赖杂,装完 base 环境里一堆你用不上的东西,反而容易和后面要装的框架版本打架。Miniconda 只带 conda、python 和几个基础依赖,干净。深度学习环境最怕的就是“包冲突”,base 环境越干净,后面建独立环境时越省心。常见做法是:Miniconda 管 base,每个项目单独conda create一个环境,互不干扰。
下载去 Miniconda 官网,选对应系统的安装包。Windows 下双击安装时,有一个选项叫“Add Miniconda3 to my PATH environment variable”,官方默认不勾。我的建议是勾上,否则后面在普通终端里敲conda会提示找不到命令。如果你没勾,也不用重装,用安装目录里的“Anaconda Prompt”也能操作,只是每次都得开那个专用终端。
安装完成后,打开终端验证:
conda --version conda info --envs第一条输出 conda 版本号,第二条列出所有环境,正常情况下只有一个base,前面带星号表示当前激活的是它。如果conda --version报“不是内部或外部命令”,说明 PATH 没配好,回到安装目录找到Scripts和condabin两个文件夹,手动加进系统环境变量。
2.2 创建独立环境与 conda 换源
不要直接在 base 里装 PyTorch。base 一旦被污染,后面想清理非常麻烦。建一个专门的环境:
conda create -n d2l python=3.9 -y conda activate d2l-n d2l是环境名,你可以改成任何名字;python=3.9指定版本,这个版本和后面 PyTorch、d2l 的兼容性比较稳;-y表示自动确认,省去交互。激活后终端提示符前面会从(base)变成(d2l)。
这里有个高频翻车点:执行conda activate d2l时报condaerror: run 'conda init' before 'conda activate'。原因是你的 shell 还没被 conda 初始化。解决办法是执行一次:
conda init然后关掉终端重新打开。Windows 下如果用的是 PowerShell,可能还需要把执行策略改成 RemoteSigned,否则 conda 的初始化脚本会被拦。
国内下载包慢,换源是常规操作。注意不要照抄网上那些把defaults删掉的配置,删了之后某些包会找不到。稳妥的做法是保留 defaults,追加清华源:
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 yesshow_channel_urls yes的作用是安装时显示包来自哪个源,方便排查“为什么这个包下载这么慢”。换源后如果之前有过失败的缓存,执行conda clean -i清一下索引再重试。
2.3 装 PyTorch 与 d2l:版本对齐是关键
《动手深度学习》配套代码依赖d2l这个包,而 d2l 又依赖特定版本的 PyTorch。三者版本不对齐,就会出现“代码能跑但结果不对”或者“import 直接报错”。我一般先确定 PyTorch 版本,再装对应 d2l。
去 PyTorch 官网的“Get Started”页面,按你的 CUDA 版本选命令。如果没有 NVIDIA 显卡,就选 CPU 版。假设是 CUDA 11.8:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118装完验证 GPU 是否可用:
import torch print(torch.__version__) print(torch.cuda.is_available())torch.cuda.is_available()返回True才算 GPU 版装对了。返回False但你有显卡,通常是 CUDA 版本和驱动不匹配,或者装成了 CPU 版。这时候用conda list torch看装的是哪个包,CPU 版包名里通常带cpu字样。
接着装 d2l:
pip install d2l==0.17.6版本号不是随便写的,d2l 的版本和书的内容是对应的,装太新或太旧都可能对不上章节代码。装完在 Python 里import d2l不报错,环境就算通了。
3. Jupyter Notebook 配置:让代码能跑、文件能找到
3.1 安装与把 conda 环境注册成内核
Jupyter 本身可以装在 base,也可以装在 d2l 环境里。我习惯装在 d2l 环境,这样打开 Notebook 默认就是对的解释器:
conda activate d2l pip install jupyter但即便 Jupyter 装在 d2l 里,新建 Notebook 时内核列表里可能还是只有默认的 Python。需要手动注册:
python -m ipykernel install --user --name d2l --display-name "Python (d2l)"--name是内核标识,--display-name是你在 Jupyter 界面里看到的名字。注册完重启 Jupyter,新建 Notebook 时就能选到“Python (d2l)”。这一步不做,你会在 Notebook 里import torch报找不到模块,然后怀疑人生。
3.2 改默认保存路径与权限问题
Jupyter 默认把文件存在用户目录下,路径又长又难找。改默认路径的办法是先生成配置文件:
jupyter notebook --generate-config它会告诉你配置文件在哪,通常是~/.jupyter/jupyter_notebook_config.py。打开这个文件,找到c.NotebookApp.notebook_dir这一行,去掉注释,改成你想要的目录,比如:
c.NotebookApp.notebook_dir = 'D:/d2l-notes'注意路径用正斜杠或者双反斜杠,单反斜杠在 Python 字符串里会被当转义。改完保存,重启 Jupyter。
另一个高频报错是jupyter permissionerror:[errno 13] permission denied。现象是 Jupyter 启动后打不开某个文件或写不进去。原因通常是目标目录没有写权限,或者你用了系统盘里需要管理员权限的目录。解决办法是把工作目录换到用户目录下,或者手动给目录加写权限。Windows 下如果目录在 C 盘根目录,右键属性里改安全设置;Linux 下用chmod给当前用户加写权限。
3.3 给 Notebook 加目录与常用插件
长 Notebook 没有目录,翻起来很痛苦。装jupyter_contrib_nbextensions:
pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user装完重启 Jupyter,首页会多一个“Nbextensions”标签,进去勾选“Table of Contents (2)”。之后打开的 Notebook 左侧会出现目录按钮,点开就能看到所有标题层级。这个插件对读《动手深度学习》这种章节多的书特别有用。
4. 避坑与排查:那些让我重装三次的问题
4.1 现象:conda activate无效,提示符不变
原因:shell 没初始化,或者你用的是 PowerShell 但没改执行策略。解决:执行conda init,关终端重开;PowerShell 下执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。
4.2 现象:Jupyter 里 import torch 报 ModuleNotFoundError
原因:Notebook 用的内核不是 d2l 环境。解决:用python -m ipykernel install注册内核,然后在 Notebook 菜单 Kernel → Change kernel 里选对的那个。验证方法是import sys; print(sys.executable),看输出的路径是不是 d2l 环境下的 python。
4.3 现象:pip 装包极慢或超时
原因:没换 pip 源,或者 conda 源和 pip 源混用导致解析混乱。解决:给 pip 也配清华源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple注意 conda 装包和 pip 装包尽量别交叉,同一个环境里优先用 conda 装,conda 没有的再用 pip。
4.4 现象:GPU 版 PyTorch 装完cuda.is_available()返回 False
原因:装成了 CPU 版,或者 CUDA 版本和显卡驱动不匹配。解决:先用nvidia-smi看驱动支持的 CUDA 版本,再去 PyTorch 官网选对应命令重装。重装前先pip uninstall torch torchvision torchaudio卸干净。
4.5 现象:Jupyter 启动后浏览器打不开或端口被占
原因:默认端口 8888 被其他程序占用。解决:启动时指定端口jupyter notebook --port 8889,或者关掉占用 8888 的程序。如果浏览器没自动弹出,手动复制终端里带 token 的 URL 到浏览器。
5. 验证环境是否真的可用:跑通一个最小训练循环
环境装完不算完,得跑一段真实代码验证。用《动手深度学习》里最经典的线性回归做检查,它能同时验证 PyTorch、d2l、Jupyter 内核和 GPU 是否都正常。
import torch from torch import nn from d2l import torch as d2l # 造一份简单数据 true_w = torch.tensor([2.0, -3.4]) true_b = 4.2 features, labels = d2l.synthetic_data(true_w, true_b, 1000) # 定义数据迭代器 def load_array(data_arrays, batch_size, is_train=True): dataset = torch.utils.data.TensorDataset(*data_arrays) return torch.utils.data.DataLoader(dataset, batch_size, shuffle=is_train) batch_size = 10 data_iter = load_array((features, labels), batch_size) # 定义模型和损失 net = nn.Sequential(nn.Linear(2, 1)) loss = nn.MSELoss() trainer = torch.optim.SGD(net.parameters(), lr=0.03) # 训练三轮 for epoch in range(3): for X, y in data_iter: l = loss(net(X), y) trainer.zero_grad() l.backward() trainer.step() print(f'epoch {epoch + 1}, loss: {l.item():.6f}') # 对比学到的参数 print('w:', net[0].weight.data) print('b:', net[0].bias.data)这段代码的逻辑:synthetic_data按给定权重和偏置生成带噪声的数据;DataLoader把数据分批;nn.Linear(2,1)定义一个输入两维输出一维的线性层;MSELoss是均方误差;SGD做梯度下降。每轮训练后打印 loss,正常情况 loss 会快速下降。最后打印学到的w和b,应该接近[2.0, -3.4]和4.2。
如果这段代码在 Jupyter 里跑通、loss 下降、参数接近真实值,说明你的环境从 conda 到 PyTorch 到 d2l 到 Jupyter 内核全部打通。如果中途报错,按第 4 章的排查条目对号入座。我自己的习惯是每装完一个新环境,都先跑这个最小循环,比任何import测试都靠谱。希望帮到你。
本文还有配套的精品资源,点击获取