Я начал проходить первую лабораторную работу курса MIT по Deep Learning. И ещё до того, как добрался непосредственно до нейронных сетей, получил небольшую отдельную лабораторную работу — установку окружения.
В самой лабораторной всё начинается довольно просто. Нужно импортировать 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?
Потому что такая запись явно говорит: запусти модуль pip именно тем интерпретатором Python, который сейчас вызывается командой python. Когда в системе несколько версий 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 здесь означает, что установлена CPU-версия PyTorch. Для начала лабораторной этого достаточно. Вопрос с использованием GPU можно решать отдельно, когда он действительно понадобится.
Команда из лабораторной не является обычным Python
Следующая строка из лабораторной выглядит так:
!pip install mitdeeplearning --quiet
Если просто скопировать её в обычный Python-интерпретатор, она не сработает.
Причина в символе !.
Это не синтаксис обычного Python. Так Jupyter/IPython позволяет запускать команды операционной системы прямо из ячейки ноутбука.
Поэтому вместо:
!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 МБ:
Downloading tensorflow-2.21.0 ... (351.2 MB)
Кроме того, pip самостоятельно собрал wheel-пакеты для mitdeeplearning и gym:
Building wheel for mitdeeplearning ... done
Building wheel for gym ... done
И наконец:
Successfully installed ... mitdeeplearning-0.7.5 ...
То есть основная проблема была решена.
Но установка пакета ещё не означает, что лабораторная запустится
После этого мы с нейросетью решили не считать задачу законченной только потому, что pip написал Successfully installed.
Лучше проверить именно те импорты, которые использует лабораторная.
Оказалось, что не хватает matplotlib.
Устанавливаю:
.\.venv\Scripts\python.exe -m pip install matplotlib
После следующей проверки обнаружилась ещё одна зависимость — ipython:
.\.venv\Scripts\python.exe -m pip install ipython
Следующая попытка дошла до:
import cv2
cv2 предоставляет библиотека 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 ещё не гарантирует, что весь проект готов к работе. Гораздо полезнее выполнить реальные импорты и посмотреть, чего не хватает.
Во всём этом мне сильно помогала нейросеть. Самостоятельно я, скорее всего, тоже постепенно нашёл бы ответы — документация, поиск, Stack Overflow и перебор вариантов никуда не делись. Но на выяснение причин каждой следующей ошибки ушло бы гораздо больше времени.
Здесь ИИ оказался не заменой обучению, а чем-то вроде помощника рядом: я запускаю команду, получаю ошибку, пытаюсь понять её смысл, показываю результат нейросети, получаю объяснение и следующий вариант, снова проверяю.
И это, пожалуй, тоже часть моего обучения работе с современными инструментами.
А главное — окружение наконец работает:
torch: 2.13.0+cpu
numpy: 2.5.2
Все импорты работают
На сегодня этого достаточно.
Лабораторную продолжу уже в следующий раз.
Добавить комментарий