Spark in me - Internet, data science, math, deep learning, philo

snakers4 @ telegram, 1166 members, 1154 posts since 2016

All this - lost like tears in rain.

Internet, data science, math, deep learning, philosophy.
No bullshit.

На чай
- goo.gl/zveIOr
- Договор ТКС 5011673505

Сайт spark-in.me
Файл goo.gl/5VGU5A
Чат goo.gl/IS6Kzz

October 05, 12:34

Несколько раз подряд запускал нейросети с разными ограничениями по ресурсам (CPU bound, GPU-bound, storage-bound).

Вывел для себя ряд простых эмпирических правил, которые подсказывают, что оптимизировать, чтобы на 100% использовать доступные ресурсы.

Также очень помогает консольная утилита

glances

Самые простые случаи:

1. HD / Full-HD картинки без ресайза. Практически независимо от архитектуры - будет GPU-bound. Если у вас нет стека из 2+ видео-карт, можно почти не париться по ускорению

2. Большое число маленьких картинок (миллионы, сотни тысяч) - при отсутствии оптимизации скорее всего сначала будет storage-bound, потом если грузить картинки параллельно - то GPU или CPU-bound

3. Очень тяжелая архитектура - GPU bound

Как детектировать:

1. При многопоточной загрузке картинок, загружено существенно менее ресурсов процессора чем воркеров (воркеров 8, а загрузка ЦП условно 1 из 8)

2. Загрузка постоянно GPU неполная и на низком уровне;

3. Низкая загрузка CPU и GPU

4. Бенчмарк для чтения с диска - 200 мбайт/c - плохо, 400 лучше, 1000 совсем хорошо

5. Чтение датасета из RAM - совсем хорошо

Примерно общая последовательность действий (архитектура модели - константа):

1. Если видеокарты не загружены до конца - увеличивать размер батча до максимально возможного

2. Если это не помогает (или батч уже максимальный), то нужно загружать в несколько потоков

3. Если это не помогает, то нужно проверить каждый этап своего генератора данных на скорость работы

4. Если это не помогает, нужно уже оптимизировать дисковое хранилище

5. Не стоит забывать, что данные как правило движутся (очень условно) диск => CPU => RAM => GPU и боттлнек на каждом этапе ниже делает быструю обработку на этапе выше невозможным

При прочих равных проще всего дозагружать ресурсы так

1 GPU - увеличивать батч-сайз

2 CPU - количество потоков загрузки данных (если нет ограничения по скорости чтения)

Способы оптимизация хранилища

1. Вставить SSD диск или NVME диск вместо HDD

2. Если нет времени / денег - RAID массив с / без SSD кешем

#data_science

#neural_nets