Несколько раз подряд запускал нейросети с разными ограничениями по ресурсам (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
Внезапно полезная и прикольная хрень. Я в свое время очень долго искал нормальные шаблоны.
Читать полностью…Из разряда софта для консоли, о котором можно узнать только от знакомых:
Наберите
ncdu ~Показывает в командной строке сколько места жрут папки.
Можно перемещаться по папкам.
- http://ashep.org/2013/analiz-ispolzovaniya-diska-pri-pomoshhi-ncdu/#.WdNYn9bTQV0
До этого я использовал du -hs * | sort -hr | head
Полезно когда на вашей помойке данных не много, а ОЧЕНЬ много.
#linux
#data_science
Интересное в мире Интернета:
- Ben Evans - https://goo.gl/4UgqSu
- Ответ ФБ на баян с жидо-ненавистниками - https://goo.gl/9AdQQk
- Apple переводит еще часть поиска на Google - https://goo.gl/tCg7xQ
- Икеа купила Task Rabbit - https://goo.gl/VrK94s
- SEС запустила кибер юнит - https://goo.gl/BPB4xa
- Размышления про Google и мобилку - https://goo.gl/jxqxcw
- Баннеро-резка и большой брат внутри нового браузера Apple - https://goo.gl/fh5qPm ?
- В 2017 году twitter ... тестирует формат в 280 символов вместо 140...лол - https://goo.gl/A5eiQv
- Интел закрывает свой AR проект - https://goo.gl/udL1PF
- Slack и AI - https://goo.gl/jMhB5V
______________________________________________
- Датасет из 100к рентгеновских снимков грудной клетки - https://goo.gl/ARsM7K С РАЗМЕТКОЙ - если вы медик или делаете прикладные исследования в нейросетях в медицицине то вам сюда
______________________________________________
#digest
#internet
Знакомый прислал еще такое - как в juputer notebook одновременно запускать несколько ячеек
- https://github.com/alexanderkuk/parallel-cell
#data_science
#python
Еще один набор иерархических докер-файлов, которые заявлены как простые к установке для целей data science
- https://github.com/jupyter/docker-stacks
Spark in me
В процессе ковыряния и размышлений на тему того, что все-таки надо сделать следующим, взор пал на то, что надо разобраться в докере и сделать любой проект на торче. Пойдем по плану с простого.
Почему докер? Потому, что если вы работаете вдвоем на одном железе и у вас 2 пользователя с sudo доступом, то все рано или поздно скатится или в месиво или sudo доступ останется у одного пользователя. А в рамках образа в докере вы сам себе админ.
Также такие знания могут очень пригодится в корпоративной среде, где с железом работает сразу много людей.
Сегодня не без помощи знакомого и репозитория от fchollet мы смогли родить пару докерфайлов, которые
- работают с jupyter notebooks c расширениями (что внезапно было геморройно из-за конфликта версий html5lib) из коробки
- работают с картами nvidia
- работают с keras, tf, theano и pytorch
- там стоят 95% основных либ на питоне
Если вы тоже хотите работать через докер,то вот последовательность шагов (это все делалось на Ubuntu 16.04):
0. Убедитесь что у вас стоят дрова для ваших карт и все работает (на канале было про это)
1.
Почитать про докер (в таком порядке):
- https://habrahabr.ru/post/337306/
- https://docs.docker.com/get-started/part1/
- https://docs.docker.com/get-started/part2/
- https://github.com/fchollet/keras/tree/master/docker
- https://github.com/NVIDIA/nvidia-docker
2.
Докерфайлы
- Раз - resources.spark-in.me/docker_deep_learning
- Два - resources.spark-in.me/docker_deep_learning_2
Отличаются способом решения головняка с html5lib.
3.
Последовательные шаги с комментариями, по идее если вы выполните вдумчиво и читая доку, то все будет работать:
- resources.spark-in.me/docker_commands_share
4.
Заметки про докер
- Если вы запускаете docker команды не от sudo, то не забудьте добавить юзера в группу docker - это не совсем явно в доке написано
- Докер создает промежуточные образы, поэтому если вы меняете конфиг, то лучше всегда дописывайте снизу - не придется качать файлы заново
- Пасхалка - посмотрите имена контейнеров если вы их не называете никак
- Докер позволяет пробрасывать порты и папки на дисках. Грубо говоря дисковое пространство тоже может быть параметров в ваших извращениях
- После остановки jupyter (ctr+c) НЕ НАДО заново запускать контейнер через run - так вы наплодите тьму контейнеров. Надо делать docker start -i CONTAINER_ID
#linux
#deep_learning
@
Spark in me
Закончился конкурс с вырезанием машин:
- https://www.kaggle.com/c/carvana-image-masking-challenge/leaderboard
Аффтар занял 66 место из 737 участников с решением без TTA / ансамблей и прочего. Что характерно, на публичном ЛБ было на 45 мест хуже. А разгадка простая - если вовремя соскочить с иглы и не оверфититься (ибо выиграть невозможно, т.к. ближе к конце начинается натуральный зерг в лице русских и китайцев), то решение получается простое и генерализуемое.
Фишкой, которая дала такой буст оказалось применение selu вместо relu в качестве функции активации.
Из полезного - архитектуры для семантической сегментации картинок можно и нужно пробовать применять с VGG-16 или Resnet на imagenet в качестве энкодера. Я запускал что-то такое на коленке, но довести до ума было лень - может и к лучшему =)
В keras не так сложно запускать модели на 2+ карточках, но там это делается криво - по идее мотивация пробовать pytorch.
Список перепробованных мной идей тут:
- https://goo.gl/m7p8sF
#data_science
#neural_nets
@
Внезапно нашел набор ссылок в интернете про то, как строить в первую очередь линейные модели через консольные утилиты - работает быстро и просто:
- https://habrahabr.ru/company/ods/blog/326418/
- https://aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html
- https://github.com/JohnLangford/vowpal_wabbit/wiki/Tutorial
- https://habrahabr.ru/company/mlclass/blog/248779/
Плюсы такого подхода
- данные и ETL процессы разделены максимально просто - данные хранятся в текстовых файлах
- можно учиться на больших объемах данных которые не входят в память и сразу на нескольких машинах
- работает быстро
- поддерживается онлайн обучение с добавлением новой информации
#data_science
Хорошая компилляция про год в ML, чтобы быть в курсе того, что может быть сделано sota методами:
- https://habrahabr.ru/company/mailru/blog/338248/
Многое было в дайджестах.
#data_science
#neural_nets
Выше писал, что open-cv очень удобно устанавливать из pypi. Но там нет работы с видео. Печаль.
Читать полностью…Пара отличных тредов про то, как сделать ваш генератор на питоне thread-safe, то есть минимальными усилиями использовать параметр workers > 1 у fit_generator в Keras. Полезно, если ваша модель сильно CPU-bound.
- https://github.com/fchollet/keras/issues/1638
- https://stackoverflow.com/questions/41194726/python-generator-thread-safety-using-keras
- http://anandology.com/blog/using-iterators-and-generators/
#data_science
#python
В новом конкурсе нашел на Kaggle отличный "мануал", про то как работать c bson (архив базы Монго).
Очень рекомендую к прочтению
- https://www.kaggle.com/humananalog/keras-generator-for-reading-directly-from-bson/notebook
#data_science
#python
Вы интересовались, мы отвечаем.
http://telegra.ph/Diagramma-Vodopad-v-Excel-Poshagovaya-instrukciya-10-04
Все о Диаграмме Водопад (Каскадная).
Для тех, кто занимается анализом,
а не играми (/channel/excel_everyday/310) в Excel
В линуксе есть симлинки, lvm и mdadm и еще есть mount bind.
Пока не подскажут не узнаешь про такое.
По сути позволяет примонтировать одну папку в другую.
- https://unix.stackexchange.com/questions/198590/what-is-a-bind-mount
#linux
Долго смотрел на SSD vs Yolo для сегментации ~миллиона картинок. Все-таки осилил запуск Yolo, т.к. есть предобученная модель и на первый взгляд оно кажется быстрее и проще (хотя бы по архитектуре). Посмотрим.
https://goo.gl/QAt4JD
Еще лучше сниппет для скачивания файлов с докачиваением и ordered dictionaries. Качает в последовательности в которой вы загружаете ключи в словарь.
import collections
file_dict = collections.OrderedDict()
file_dict['FILENAME'] = 'URL'
for file,url in file_dict.items():
url_q = "'" + url + "'"
! wget --continue --no-check-certificate --no-proxy -O $file $url_q
#data_science
#python
Spark in me
Вкратце из того, что тебе было бы интересно:
1. Псевдолейблинг работает хорошо, но только начиная с какого-то нормального скора.
2. Все у кого некорректно была отстроена валидация, провалились на привате.
3. Фуллсайз не рулит (его мало кто довел до ума.
@
Spark in me
Каггл увеличивает число ресурсов для своих kernels
- https://goo.gl/1Rk2xf
- https://www.kaggle.com/product-feedback/39790
GPUs там нет, так что в принципе прикольно, но лично для меня бессмысленно.
#data_science
@
Простое объяснение чисел с плавающей точкой
- http://fabiensanglard.net/floating_point_visually_explained/index.php
#math
Гайд по настройке виртуальных окружений на питоне и установке open-cv (не самая последняя версия есть тупо в репозитории pip)
- https://www.pyimagesearch.com/2017/09/25/configuring-ubuntu-for-deep-learning-with-python/
По идее на работе правильно работать через докер или виртуальные окружения.
#data_science
#python
Для сомневающихся что выбрать - пример недавнего опроса с Хабра не тему языков для работы с данными
- https://goo.gl/NbmQb2
#data_science