Для информации: статься предназначена для владельцев видеокарт NVIDIA.
Многие начинающие пользователи питона и нейросетей сталкиваются с непонятным буквосочетанием "торч-куда", что в силу отсутствия информации внутри головы превращается для них в аналог "Гравицапа, только зеленая".
Разберемся, что это такое, с чем едят, можно ли его жарить, или можно только варить на медленном огне и без масла.
Итак, формулировки:
NVIDIA — американская технологическая компания, разработчик графических процессоров и систем на чипе (SoC).
CUDA — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia. Это технология, запатентованная NVIDIA и используемая только в их видеокартах.
ЯДРА CUDA — аппаратные ядра видео-процессора NVIDIA, похожие на обычные ядра, используемые в процессорах, но отличаются от них архитектурой и нацелены на то, чтобы эффективно работать параллельно.
Нейросети нуждаются в проведении огромного количества математических векторных вычислений, и чем быстрее эти вычисления производятся, тем быстрее совершается работа по генерации результатов.
Последнее время технологии развивались так, что наибольший прирост производительности пришелся на микросхемы видеопамяти и видео-процессоры, поэтому естественным желанием программистов является перенос вычислений данных в видеопамять и проведение вычисления вместо CPU на GPU, из-за огромного повышения производительности оных.
Вы сами просто не замечаете, как плавно софт перетекает из оперативной памяти и работы на CPU, в видеопамять и работу на GPU. Откройте "Панель управление NVIDIA":
... зайдите в меню "Рабочий стол" и включите пункт "Отображать окно активности ГП в области уведомлений".
Откроете для себя много нового, о чем раньше даже не подозревали, как много приложений "тихой сапой" перебрались с процессора на видеокарту.
"А мужики то и не знают..."
Все эти приложения предпочитают работать в видеопамяти и на видео-процессоре просто по причине того, что там все происходит намного быстрее.
Формулировка:
TORCH — это гибкий фреймворк глубокого обучения, основанный на языке программирования Python. Он специализируется на создании и обучении нейронных сетей, а также на проведении различных экспериментов в области искусственного интеллекта и машинного обучения.
Соответственно, и "torch" имеет желание перебраться на работу в видеопамять для многократного ускорения своей работы.
Как "Крокодилы летают, только так низЭнько-низЭнько...", так и торч работает на CPU, но с такой же скоростью в цифровом выражении, как и цифровое выражение высоты полета крокодилов над землей.
А, если торча запустить на видеокарте, то он с такой скоростью "полетит" (по сравнению с CPU), что может "убитьсяапстену" на первом же повороте (а крокодилов вообще потом не найдут).
У торча (я дальше буду его так называть) существуют две версии:
- для работы на CPU
- для работы на GPU
Собственно за обозначением "torch" понимают торч вообще, а для выделения версии торча, работающего в видеопамяти, применяют обозначение "torch-cuda", фактически означающее, что это торч, работающий на видео-ядрах "cuda" в видеокартах NVIDIA.
По умолчанию торч устанавливается как "для CPU" (версия для процессора), и, если у вас видеокарта NVIDIA, поддерживающая технологию ядер "cuda", имеет смысл установить версию торча для работы с "cuda", что многократно повысит скорость работы.
Это было "О формулировках вообще".
Установка torch-cuda, где взять, как установить, где "подводные камни"
Проект "PyTorch" (Python Torch) располагается по адресу:
Открыв этот сайт, пролистайте главную страницу чуть вниз, пока не увидите сию таблицу:
Выберите интерактивные ячейки таблицы в соответствии с вашей операционной системой, и внизу (зеленым выделено) появится строка с командой установки выбранной вами версии:
Примечание: команда установки приведена так, как принято в линуксе - "pip3", для Windows вместо "pip3" ставьте просто "pip".
В этой таблице и берется адрес последней активной версии торча для установки на любой системе, и для CPU тоже. Просто мы выбрали то, что устраивает нас.
Установка TORCH
Дальше все как обычно.
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
Команда остается почти постоянной, меняется в основном только адрес URL в зависимости от выбранной версии TROCH.
Подводные камни установки TORCH
Владельцы карт NVIDIA часто получают ошибку, в которой упоминаются строки: cuda, torch-cuda, not available и т.п. (сообщение зависит от работающей системы), что означает, что УСТАНОВЛЕНА НЕ ТА ВЕРСИЯ TORCH.
К примеру, если на машине с картой NVIDIA установлена CPU-версия TORCH, то при запуске приложения вы получите сообщение о несоответствии версии TORCH или о невозможности найти некоторые компонента (как правило - DLL), в именах которых упоминается "cuda", "CUDA" и т.п.
Рассмотрим установку обычной и GPU-версии торча
Ставится торч обычным "pip"
Так поставится обычный торч (CPU-версия).
Поскольку версия после имени не указана, то поставится "последняя стабильная версия".
python -m pip install torch torchvision torchaudio
А так поставится cuda-версия торча:
Поскольку версия после имени не указана, то поставится "последняя стабильная версия".
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
Пакеты торча инсталлируются в папку "Lib\sitr-packages" того экземпляра питона, который вызван для установки пакета.
Ниже приведен вид каталогов в папке "Lib\site-packages" питона:
Установка пакета создает ДВЕ папки (установка каждого пакет создает две папки), одна папка с именем пакета, вторая папка - служебная папка PIP-а с припиской "номер версии"+"dist-info" (информация о дистрибутиве), описывающая, что именно установлено в папке самого пакета.
Поскольку исторически так сложилось, что разные версии компонента ЗАНИМАЮТ ОДНУ И ТУ ЖЕ ПАПКУ, то вместе они не могут быть установлены, только какая-то одна из них.
PIP не различает сами файлы пакета, он их просто игнорирует, PIP всегда ориентируется только ан свою "запись" - папку "dist-info" и оттуда берет информацию о версии компонента!
Если удалить саму папку с компонентом, но оставить аналогичную "dist-info" папку, то PIP будет считать что "Компонент установлен" и не даст его установить повторно!!!
Поэтому для установки другой версии компонента ВСЕГДА НАДО СНАЧАЛА УДАЛИТЬ УЖЕ ИМЕЮЩИЙСЯ!!!!
Просто перед командой "install" проводится аналогичная "uninstall" !!!
Пример переустановки пакета torch:
(ключ "-y" означает "удали и вопросов не задавай")
python -m pip uninstall torch torchvision torchaudio -y
python -m pip install torch torchvision torchaudio --index-url [+URL]
Таким образом, не увидев торч в списке установленных пакетов PIP согласится его установить, и установит ту версию, которую ему "подсунули".
Установить CUDA-версии торча "поверх" имеющейся версии торча не получится!!! PIP посмотрит в свои "записи" и увидит, что "Пакет с таким именем уже установлен!" и... откажется переустанавливать. Так что только ЧЕРЕЗ ПРЕДВАРИТЕЛЬНОЕ УДАЛЕНИЕ!
Примечание: для удаления любого пакета (и торча в том числе), можно просто физически зайти в папку "Lib\site-packages" питона и просто "грохнуть все ненужное", не забыв потом перезагрузить питон.
Примечание: при "ручном удалении" папок с пакетами,
НАДО УДАЛЯТЬ ОБЕ ПАПКИ:
- папку с именем компонента
- и папку с именем компонента + номер версии + "dist-info"
Чем отличаются друг от друга версии TORCH
Никаких различи в математической логике работы пакетов нет, различие заключается только с СИСТЕМНЫХ НАСТРОЙКАХ - куда именно загружаются данные, в оперативную память, или в видео-память, и какое устройство используется для математических вычислений - CPU или GPU (центральный процессор компьютера, или "cuda-ядра" видео-процессора NVIDIA).
Физически пакеты отличаются друг от друга только наличием в cuda-версии дополнительных добавленных библиотек для работы с видеопамятью, при чем эти отличия проявляются только в папке "torch\lib" пакета.
Скриншот отличий в файлах CPU и CUDA версий пакетов:
Слева красным отмечен файл имеющий отличия от аналогичного файла в правой части, а СПРАВА красным отмечено то, что "имеет отличия" (или вообще отсутствует) в левой части.
Больше принципиальных отличий в файлах НЕТ. Различия имеются только в "описательной части", типа "это версия такая-то".
В CUDA-версии торча добавлены DLL-ины (библиотеки) для работы с видеопамятью, имена можно посмотреть на скриншоте.
Размеры CPU и GPU-версий торча
Как видим - разница огромная! И основной объем занимают как раз библиотеки по работе с CUDA-ядрами.
Ниже - размер файлов в папке "torch\lib" (CPU-версия)
Ниже - размер файлов в папке "torch\lib" (CUDA-версия)
Причем, заметьте, что файл:
torch_cpu.dll
... имеется в обеих версиях и абсолютно одинаков и в той, и в другой версии, что означает, что CUDA-версия - это "расширенная" версия торча, которая может работать как с CPU, так и с GPU, а "обычная" версия торча только с CPU.
Мои личные "размышлизмы" по поводу экономии места на дисках путем организации размещения пакетов торча
Поскольку торч - это один из самых "тяжелых" пакетов питона в нейросетях, а требуется он почти в каждом экземпляре приложения, имеет смысл как-то организовать его "присутствие" в системе не в качестве "множества копий, по экземпляру на каждое приложение", а в единственном экземпляре, благо используется он всеми в режиме "только чтение".
Для этого достаточно установить его в "базовый" питон, а от "базового" питона уже создавать "VENV с наследованием пакетов от базового", что автоматически в каждом "дочернем VENV" откроет доступ к торчу из "базового" питона.
Подробнее об этом вот тут: https://dzen.ru/a/Zt1yTafHcxO7tgPs
Удачи!
NStor
https://t.me/stable_cascade_rus
https://t.me/srigert