欢迎使用 WordPress!这是您的第一篇文章。您可以编辑或删除它,然后开始写作!
作者: Konstantin Stavratiy
-
MIT 深度学习实验 1:我如何配置环境,以及为什么事情比一条命令复杂得多
我开始学习 MIT 深度学习课程的第一个实验。还没真正接触到神经网络,我就先完成了一个小型的独立实验:配置运行环境。
实验本身的开头很简单。需要导入 PyTorch 和几个额外的库:
import torch import torch.nn as nn # Download and import the MIT Introduction to Deep Learning package !pip install mitdeeplearning --quiet import mitdeeplearning as mdl import numpy as np import matplotlib.pyplot as plt如果在 Jupyter Notebook 或 Google Colab 这类预先配置好的环境中运行实验,也许到这一步确实几乎不需要做其他事情。
但我决定在 Windows 上本地运行所有内容。于是我发现,实验中的几行代码至少要求我对实际发生的事情有一点基本了解。
第一次运行:Python 不知道 torch 是什么
我启动了普通的 Python 解释器并尝试:
import torch得到的回应是:
ModuleNotFoundError: No module named 'torch'这个错误很容易理解:Python 已经安装,但当前环境中没有 PyTorch。
我退出了解释器:
exit()然后在 PowerShell 中安装 PyTorch:
python -m pip install torch为什么使用
python -m pip,而不是直接使用pip?因为这种写法明确表示:用当前由
python命令调用的 Python 解释器运行pip模块。当系统中存在多个 Python 版本和多个环境时,这有助于避免混淆。安装成功完成:
Successfully installed ... torch-2.13.0 ...不过,系统提示某些可执行文件位于一个不在
PATH中的目录:WARNING: The scripts torchfrtrace.exe and torchrun.exe are installed in 'C:\Users\dante\AppData\Local\Python\pythoncore-3.14-64\Scripts' which is not on PATH.对于我当前的任务来说,这不是致命错误。软件包本身已经安装成功。
PyTorch 可以运行了,但下一个问题出现了
我再次启动 Python:
import torch这一次不再有
ModuleNotFoundError,但出现了一条警告:UserWarning: Failed to initialize NumPy: No module named 'numpy'也就是说,PyTorch 本身已经可以导入,但它缺少 NumPy。
我检查版本:
print(torch.__version__)得到:
2.13.0+cpu这已经是一个好迹象:PyTorch 已安装并可以工作。
这里的
+cpu表示安装的是 PyTorch 的 CPU 版本。对于开始这个实验来说已经足够。等真正需要时,再单独解决 GPU 的使用问题。实验中的命令并不是普通 Python
实验中的下一行是:
!pip install mitdeeplearning --quiet如果直接把它复制到普通的 Python 解释器中,它不会运行。
原因在于
!字符。这不是普通的 Python 语法。Jupyter/IPython 使用它从 Notebook 单元格中直接运行操作系统命令。
因此,我没有使用:
!pip install mitdeeplearning --quiet而是在 PowerShell 中使用:
python -m pip install mitdeeplearning看起来现在一切都应该能安装了。
但事实并非如此。
为什么我决定改用虚拟环境
安装
mitdeeplearning时出现了错误。此时我意识到,继续把所有内容直接安装到系统 Python 中并不是一个好主意。最好为这个实验创建一个单独的虚拟环境。
在项目目录中:
C:\Users\dante\OneDrive\Documents\Learning Lab1我创建了虚拟环境:
python -m venv .venv由此生成了一个目录:
.venv其中包含这个项目专用的独立 Python 解释器和独立的库集合。
通常,创建虚拟环境后要将其激活。但由于 PowerShell 的脚本执行策略,它拒绝运行激活脚本。
我不想仅仅为了这个实验修改 Windows 的系统策略。
这时我发现了一件很有用的事:虚拟环境根本不一定需要激活。
可以直接运行其中的 Python:
.\.venv\Scripts\python.exe --version我的结果是:
Python 3.14.5也可以用下面的方式,把软件包明确安装到这个环境中:
.\.venv\Scripts\python.exe -m pip install ...我甚至很喜欢这种方式的直观性:我可以准确看到自己正在使用哪个 Python。
setuptools 的问题
下一次尝试中,我限制了
setuptools的版本:.\.venv\Scripts\python.exe -m pip install "setuptools<82"安装了以下版本:
Successfully installed setuptools-81.0.0但这没有解决主要问题。
再次尝试后,我意识到问题已经不仅仅是
setuptools。真正的问题是 Python 版本。
Python 3.14 太新了
我安装的是 Python 3.14.5。
PyTorch 本身已经可以在该版本上运行,但
mitdeeplearning会引入一个相当庞大的依赖树。对于这么新的 Python 版本,其中某处出现了兼容性问题。这是一个很有意思的实践经验。
最新版本的 Python 并不总是科学计算库的最佳选择。
Python 的发展速度比整个生态系统的适配速度更快。在机器学习领域这一点尤其明显,因为这里常常使用包含原生组件并拥有大量依赖的大型库。
因此,我决定再安装一个 Python 版本:Python 3.13.15。
完全不需要删除系统中的 Python 3.14。Windows 可以同时安装多个 Python 版本。
使用 Python 3.13 重新创建环境
旧的虚拟环境是用 Python 3.14 创建的,因此仅仅安装 Python 3.13 并不会改变它。
我删除旧环境:
Remove-Item -Recurse -Force .venv然后明确使用 Python 3.13 创建新环境:
py -3.13 -m venv .venv进行检查:
.\.venv\Scripts\python.exe --version得到:
Python 3.13.15现在一切正确了。
我再次安装合适版本的
setuptools:.\.venv\Scripts\python.exe -m pip install "setuptools<82"然后安装 PyTorch:
.\.venv\Scripts\python.exe -m pip install torch安装成功完成。
我进行检查:
.\.venv\Scripts\python.exe -c "import torch; print(torch.__version__)"得到:
2.13.0+cpu同时再次出现了 NumPy 警告:
UserWarning: Failed to initialize NumPy: No module named 'numpy'但现在它已经不再显得可怕。PyTorch 可以工作,而 NumPy 无论如何都会作为
mitdeeplearning的依赖项之一安装。安装 mitdeeplearning
下一步:
.\.venv\Scripts\python.exe -m pip install --no-build-isolation mitdeeplearning这时,一次真正庞大的安装开始了。
mitdeeplearning远远不算一个小软件包。它开始同时下载:numpy tensorflow keras transformers datasets peft gym opik openai pandas pyarrow ...仅 TensorFlow 就超过了 350 MB:
Downloading tensorflow-2.21.0 ... (351.2 MB)此外,
pip还自行构建了mitdeeplearning和gym的 wheel 软件包:Building wheel for mitdeeplearning ... done Building wheel for gym ... done最后:
Successfully installed ... mitdeeplearning-0.7.5 ...主要问题得到了解决。
安装软件包并不意味着实验一定能运行
之后,我和 AI 助手决定不因为
pip显示了Successfully installed就认为任务已经完成。最好检查实验实际使用的那些导入。
结果发现缺少
matplotlib。我进行安装:
.\.venv\Scripts\python.exe -m pip install matplotlib下一次检查又发现了另一个依赖项:
ipython。.\.venv\Scripts\python.exe -m pip install ipython再下一次尝试执行到了:
import cv2cv2由 OpenCV 库提供,因此我安装了:.\.venv\Scripts\python.exe -m pip install opencv-python然后再次运行检查。
环境的最终检查
现在,我一次性检查实验的主要导入:
.\.venv\Scripts\python.exe -c "import torch; import torch.nn as nn; import mitdeeplearning as mdl; import numpy as np; import matplotlib.pyplot as plt; print('torch:', torch.__version__); print('numpy:', np.__version__); print('Все импорты работают')"这一次得到:
torch: 2.13.0+cpu numpy: 2.5.2 Все импорты работают终于成功了。
不过在此之前,TensorFlow 输出了关于 oneDNN 的信息:
oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors...这是警告,而不是错误。该库是在说明它使用了经过优化的 CPU 运算;由于计算顺序不同,浮点结果可能会有极小差异。
Gym 还显示了一条警告:
Gym has been unmaintained since 2022 and does not support NumPy 2.0... Please upgrade to Gymnasium...这更值得注意:
mitdeeplearning软件包使用的是旧版gym。该项目已经不再得到官方维护,并且会针对现代 NumPy 版本的兼容问题发出警告。但目前导入仍然成功。因此,我不打算提前修复尚未真正出错的东西。如果实验中的某个具体部分确实因为
gym和 NumPy 不兼容而失败,我会再单独调查这个问题。最终结果
实验的工作环境现在大致如下:
Learning Lab1 │ └── .venv ├── Scripts ├── Lib └── ...最重要的是,整套库都位于
.venv内,而不是散落在系统 Python 中。运行 Python 时,我甚至不需要激活环境:
.\.venv\Scripts\python.exe安装新软件包时:
.\.venv\Scripts\python.exe -m pip install имя_пакета运行脚本时:
.\.venv\Scripts\python.exe script.py如果让我重新安装一次
经过所有这些实验,整个顺序现在清楚得多。
安装 Python 3.13 并创建环境:
py -3.13 -m venv .venv检查版本:
.\.venv\Scripts\python.exe --version安装合适版本的
setuptools:.\.venv\Scripts\python.exe -m pip install "setuptools<82"安装 PyTorch:
.\.venv\Scripts\python.exe -m pip install torch安装 MIT 软件包:
.\.venv\Scripts\python.exe -m pip install --no-build-isolation mitdeeplearning然后安装我的实验版本所需但缺失的依赖项:
.\.venv\Scripts\python.exe -m pip install matplotlib ipython opencv-python最后检查环境:
.\.venv\Scripts\python.exe -c "import torch; import torch.nn as nn; import mitdeeplearning as mdl; import numpy as np; import matplotlib.pyplot as plt; print('torch:', torch.__version__); print('numpy:', np.__version__); print('Все импорты работают')"我从这次安装中学到了什么
有趣的是,我还没真正开始深度学习实验,却已经获得了几条非常实用的 Python 经验。
第一,不能总是不加思考地把 Jupyter Notebook 中的代码复制到普通 Python 中。下面这种结构:
!pip install ...属于 Jupyter/IPython 环境,而不属于 Python 语言本身。
第二,虚拟环境并不只是给专业程序员增加复杂度的东西。它是一种隔离特定项目依赖项的便捷方式。
第三,虚拟环境完全不一定要激活。可以明确调用其中的解释器:
.\.venv\Scripts\python.exe第四,最新版本的 Python 可能太新。Python 3.14 安装得很顺利,甚至可以运行 PyTorch,但
mitdeeplearning庞大的依赖树迫使我退回 Python 3.13。最后,
Successfully installed消息并不能保证整个项目已经准备好运行。实际执行所需的导入并查看还缺少什么,会有用得多。在整个过程中,AI 助手给了我很大帮助。如果完全靠自己,我大概也能逐步找到答案——文档、搜索、Stack Overflow 和反复尝试都还在那里。但要找出每一个新错误的原因,会花费更多时间。
在这里,AI 并没有取代学习,而更像是一位坐在旁边的助手:我运行命令,遇到错误,尝试理解它的含义,把结果展示给 AI,获得解释和下一种方案,然后再次验证。
这大概也是学习如何使用现代工具的一部分。
最重要的是,环境终于可以工作了:
torch: 2.13.0+cpu numpy: 2.5.2 Все импорты работают今天到这里就足够了。
下一次我会继续完成这个实验。
