Pull to refresh

Comments 10

Интересно бы прочитать про приблизительную задачу и нагрузку, которую такая сборка тянет.

Приветствую.

В статье нет ничего о том какие НС мы обучаем, с чем они связаны: с расп изображений, генерацией изобр, или со звуком, или текстом.. Например, для расп изображений хватало видео карты GF1050 для обучения нс типа resnet или unet, но это было лет 5 назад, мбыть сейчас уже перестало хватать)).

Еще второй момент заметил. Вы как заложник питона здесь действуете, попробуйте выйти из него: если об изобр говорим, то возьмите посмотрите исходники Darknet - фр-к для создания и обучения нс, на С написан, код более-менее понятный, на нем базируется известная архитектура yolo.

Попробуйте с darknet разобраться, как и когда там грузятся батчи и веса в карту, и может быть получится у вас поправить код, чтобы не все батчи хранил в памяти, а частями. Если опер памяти тоже мало, можете жест диск использовать, не обязательно все в оперативке держать, и не надо будет вам 44тр тратить или видяху купить на эти деньги.

И лучше считать всеравно на видеокарте, она на порядок быстрее (раньше была, сейчас мбыть еще больше), чем cpu, причем разница на порядок получалась с высокооптимиз кодом на cpu. Поэтому, если на cpu будет код не оптимальный (хотя бы лишние выделения памяти), то разница еще вырастит.

Мой совет только для "простых" задач актуален, чатжпт таким образом не обучишь конечно, времени не хватит, не то что данных. Но это все от вашей задачи зависит и архит-ры нс, которую вы используете.

Вы как заложник питона здесь действуете

Тема этой статьи была именно про PyTorch. Да, есть и фреймфорке на Си-подобных языках и очень интересные, но рассмотрение их не было целью данной статьи. Да и PyTorch - это не совсем питон. Он ведь компилирует модели в so-файлы, которые подгружает в питон, через свой бэкенд на C++.

Попробуйте с darknet разобраться, как и когда там грузятся батчи и веса в карту, и может быть получится у вас поправить код, чтобы не все батчи хранил в памяти, а частями.

Тут проблема не в самих батчах, а в том что модель, загружаемая в видеокарту в PyTorch, так спроектирована, что она хранит градиенты батча в видеопамяти. Поэтому реально большие батчи для сети с тысячами нейронов может не потянуть по видеопамяти.

PyTorch - всё-таки высокоуровневое средство с минимальным порогом входа, поэтому не под все виды задач хорошо оптимизирован.

не обязательно все в оперативке держать, и не надо будет вам 44тр тратить или видяху купить на эти деньги.

За эти деньги нормальную видяху (например, 4070 Ti Super) не купишь. А видяха с 256GB памяти - это уже не видяха, а некий монстр, который стоит как особняк)

Память - одно из самых выгодных вложений.

  1. Использование всех слотов открывает 8-ми канальный режим, что даёт прирост производительности абсолютно во всех задачах.

  2. Автоматом увеличиваются кеширующие буфера, что даже даёт прирост скорости при работе с диском.

  3. И открываются новые возможности для вычислений, огромных LLM и т.п.

И лучше считать всеравно на видеокарте, она на порядок быстрее (раньше была, сейчас мбыть еще больше), чем cpu, причем разница на порядок получалась с высокооптимиз кодом на cpu.

В PyTorch я тестировал в сравнении с видеоускорителем Tesla T4 GPU 16ГБ. Я, конечно, не проверял все топологии, но на моих нейросетках (несколько тысяч нейронов, backpropagation) не было практической разницы.

Но тут нужно отметить, что я использовал сверхоптимизированную библиотеку ZenDNN, которая выжимает из процессора всё, включая операции AVX.

Это довольно неожиданно. По-вашему, выходит, что донастройка CPU позволяет добиться лучших результатов, чем GPU. С чем это связано, слабая видеокарта?

Вообще T4 уже устаревший ускоритель. Типовые модели PyTorch в ZenDNN очень хорошо оптимизированы.

Может быть, дело в том, что я тестировал модели из тысяч нейронов, а не из миллионов и ускоритель не смог раскрыться.

В типичном сценарии видеокарта регулярно отдаёт и получает данные от питона по pci-e, и это относительное медленное действие по сравнению с передачей через Ram в едином адресном пространстве.

Плюс процессор поддерживает больше команд, чем вычислительные блоки в gpu. Имитация нативных команд Cpu на gpu тоже может приводить к просадке.

Ну и, в конце концов, я же не типовой десктопный процессор сравнивал, а натурального 64-поточного и 8-канального монстра с не самым новым gpu.

Думаю, что для обучения real-life моделей производительность на ватт у GPU будет лучше.
Можно пооптимизировать под конкретную задачу и бюджет, но перевес всё же есть.

Переубедите меня если я неправ.

Думаю, всё зависит от моделей. Если у модели много нейронов (миллионы) и они умещаются в видеопамять, то вы, безусловно, правы. В целом эта статья для того, чтобы у тех кто имеет мощный CPU или доступ такому серверу было понимание, что они могут спокойно изучать нейросетки даже без видеокарты.

Epyc 7713 (64 ядра, 128 поток) имеет TDP 225W. Если он будет справляться с нагрузкой, то TDP у него ниже, чем у большинства видеокарт.

Причём тут нужно учитывать, что процессор для видеокарты нужен по-любому. То есть ватт 50 по-любому от процессора потребуется.

Итого мы за 175 ватт имеем производительность среднего графического адаптера, уровня Tesla T4 или GeForce 3060-3070. Но это только в моделях для PyTorch, где есть хорошо оптимизированные библиотеки для процессоров с использованием сверхшироких регистров AVX.

Процессор TDP 225W для домашнего компа - это всё же жарковато.
Для себя всегда беру 65W, вот сейчас стоит Ryzen9 7900 (12 cores 24 threads), вполне себе зверь.

Но глобально я вашу позицию понимаю и даже скорее соглашусь - при условии что обучение НС происходит нечасто, имеется очень быстрая многоканальная память и нет желания/бюджета/возможности подключить GPU.

Ну тут нужно учитывать, что в обычном режиме он и будет работать с TDP 50-70 ватт. Это же максимальный TDP. Зато, я был удивлён, когда CPU на условно-бесплатном видеоредакторе, где был заблокирован рендеринг на видеокарте, показал отличнейший результат при рендеринге на чисто CPU!

Sign up to leave a comment.