Блог

  • Вспышка уже началась

    Вспышка уже произошла

    Мы всё ещё обсуждаем, начнётся ли технологическая революция, находясь уже внутри неё.

    Города стоят. Люди живут, учатся, гуляют, строят, воюют, развиваются. Кажется, что всё как всегда. Но катастрофа уже началась — катастрофа, начала которой не заметили, и от которой пострадают в той или иной степени сотни миллионов людей. Шанс того, что цифра перевалит за миллиард, более чем реален. Катаклизмов подобного масштаба человечество ещё не встречало. Хотя кажется, что всё как всегда.

    Одна часть привычного мира изменилась. И эта часть — сама скорость изменений.

    Сейчас человек за компьютером способен на то, что буквально пару десятилетий назад было разделом научной фантастики. И не только в мире виртуальном, хотя пока чаще всё-таки в нём. Но уже не только. Вполне в реальности, вполне руками, вполне в цеху и на полигоне.

    Один оператор на складе управляет не одним погрузчиком — отрядом. Не пятью машинами по очереди, а роем, который сам перестраивает маршруты, сам обходит препятствия, сам решает, кто куда едет. Человек не водит. Человек дирижирует. На строительных площадках в Японии, в Китае, в ОАЭ бригады роботов-каменщиков и роботов-сварщиков работают посменно, без перекура, без больничного, без профсоюза. Один инженер с планшетом ставит задачу на смену и уходит пить кофе. В армии дело зашло ещё дальше. Рои дронов — не десять, не пятьдесят, а сотни машин, идущих в скоординированной атаке, — перестали быть лабораторным демо. В Украине операторы управляют звеньями FPV-дронов, где одна машина разведывает, вторая подавляет, третья добивает, и всё это в реальном времени, одним человеком, сидящим в блиндаже за ноутбуком. Пентагон запускает программу Replicator — тысячи автономных систем, которые должны быть развёрнуты не через десятилетие, а сейчас. Китай показывает на парадах рои из сотен беспилотников, управляемых одним алгоритмом и одним оператором-наблюдателем. Боевой лётчик в кабине истребителя нового поколения уже не один — рядом с ним летит «верный ведомый», беспилотник, который принимает решения на уровне, ещё вчера доступном только второму пилоту-человеку.

    Роль одного человека меняется кардинально. Но не одного человека. Связки. Человек плюс ИИ.

    Это уже не «человек использует инструмент». Молоток не спорит с вами, не предлагает альтернативу, не говорит «а что если попробовать вот так». Связка человек–ИИ — это пара, где один ставит задачу и принимает решение, а второй исполняет, ищет, считает, генерирует, проверяет — со скоростью, которая физически невозможна для любого коллектива из двадцати, пятидесяти, ста человек. Один разработчик с ИИ-ассистентом пишет, тестирует и выкатывает продукт, на который ещё три года назад нужен был отдел. Один переводчик с ИИ закрывает объём, который раньше требовал бюро из пятнадцати человек. Один дизайнер генерирует за вечер столько вариантов айдентики, сколько студия выдавала за месяц. Один аналитик прогоняет через себя массив документов, на который раньше уходила команда и неделя.

    И это не «помощь». Это не «автоматизация рутины». Это смена единицы измерения. Раньше единицей был отдел. Теперь единица — связка. Один человек и модель. И те, кто это понял, получают ускорение настолько большое, что для них конкуренты, двигающиеся по старинке, ежедневно отстают на дни, недели, месяцы. Не на проценты. На порядки.

    Скорость разрыва ускоряется. То, что недавно было полностью рентабельно, сейчас не выходит даже на самоокупаемость. Но те, кто используют старые, проверенные технологии, это ещё не осознали. Они видят, что выручка чуть просела. Что конкурент появился, странный, маленький, без офиса, без штата, без понятной структуры. Они говорят: подождём, рынок выровняется, это временное.

    И вот здесь вопрос, который неудобно задавать на совете директоров.

    У вас есть деньги. У вас есть бренд, выстроенный за пятнадцать лет. У вас есть контракты, связи, понятная модель: вложили — получили прибыль за квартал. Вы действуете по инерции, потому что инерция работала двадцать лет подряд. Вы ожидаете следующий отчёт. Следующую дивидендную выплату. Следующий цикл.

    Но действительно ли у вас всё ещё есть этот самый квартал?

    Действительно ли у вас всё ещё есть эти самые деньги — или они уже обесценились не инфляцией, а тем, что ваша услуга, ваш продукт, ваша экспертиза стоят теперь ноль, потому что один человек в съёмной квартире, с подпиской за двести долларов в месяц и моделью, которая думает быстрее вашего отдела, сделал то же самое за выходные. Лучше. Дешевле. Без вашего совещания в понедельник.

    Вашу фирму не убил конкурент. Вашу фирму сместил один человек. И он даже не заметил, что сместил. Для него это был вторник.

    Вспышка уже произошла. Свет уже другой. Тени легли иначе. А вы всё ещё смотрите на старые тени и удивляетесь, почему они не сходятся.

  • Deep Learning MIT Lab 1: как я настраивал окружение и почему всё оказалось сложнее одной команды

    Я начал проходить первую лабораторную работу курса 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
    Все импорты работают

    На сегодня этого достаточно.

    Лабораторную продолжу уже в следующий раз.

  • Hello world!

    Welcome to WordPress. This is your first post. Edit or delete it, then start writing!