snakers4 | Technologies

Telegram-канал snakers4 - Spark in me

2278

Lost like tears in rain. DS, ML, a bit of philosophy and math. No bs or ads.

Subscribe to a channel

Spark in me

Красивое лайтовое видео от 3Blue1Brown на разрядку)

Читать полностью…

Spark in me

Демонстрация того, что могут sota нейросети в реальном времени.

Читать полностью…

Spark in me

Несколько раз подряд запускал нейросети с разными ограничениями по ресурсам (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

Читать полностью…

Spark in me

https://youtu.be/nsuAQcvafCs

Читать полностью…

Spark in me

Внезапно полезная и прикольная хрень. Я в свое время очень долго искал нормальные шаблоны.

Читать полностью…

Spark in me

Из разряда софта для консоли, о котором можно узнать только от знакомых:

Наберите

ncdu ~Показывает в командной строке сколько места жрут папки.
Можно перемещаться по папкам.
- http://ashep.org/2013/analiz-ispolzovaniya-diska-pri-pomoshhi-ncdu/#.WdNYn9bTQV0

До этого я использовал du -hs * | sort -hr | head

Полезно когда на вашей помойке данных не много, а ОЧЕНЬ много.

#linux
#data_science

Читать полностью…

Spark in me

Интересное в мире Интернета:
- 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

Читать полностью…

Spark in me

Знакомый прислал еще такое - как в juputer notebook одновременно запускать несколько ячеек
- https://github.com/alexanderkuk/parallel-cell

#data_science
#python

Читать полностью…

Spark in me

Еще один набор иерархических докер-файлов, которые заявлены как простые к установке для целей data science
- https://github.com/jupyter/docker-stacks

Читать полностью…

Spark in me

Spark in me
Понял, что важно научиться хорошо делать трансфер-лернинг
@

Читать полностью…

Spark in me

Spark in me
Мы попробовали многое
@

Читать полностью…

Spark in me

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

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
@

Читать полностью…

Spark in me

Внезапно нашел набор ссылок в интернете про то, как строить в первую очередь линейные модели через консольные утилиты - работает быстро и просто:

- 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

Читать полностью…

Spark in me

Хорошая компилляция про год в ML, чтобы быть в курсе того, что может быть сделано sota методами:

- https://habrahabr.ru/company/mailru/blog/338248/

Многое было в дайджестах.

#data_science
#neural_nets

Читать полностью…

Spark in me

https://youtu.be/aircAruvnKk

Читать полностью…

Spark in me

Выше писал, что open-cv очень удобно устанавливать из pypi. Но там нет работы с видео. Печаль.

Читать полностью…

Spark in me

Пара отличных тредов про то, как сделать ваш генератор на питоне 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

Читать полностью…

Spark in me

В новом конкурсе нашел на Kaggle отличный "мануал", про то как работать c bson (архив базы Монго).

Очень рекомендую к прочтению
- https://www.kaggle.com/humananalog/keras-generator-for-reading-directly-from-bson/notebook

#data_science
#python

Читать полностью…

Spark in me

Вы интересовались, мы отвечаем.
http://telegra.ph/Diagramma-Vodopad-v-Excel-Poshagovaya-instrukciya-10-04

Все о Диаграмме Водопад (Каскадная).
Для тех, кто занимается анализом,
а не играми (/channel/excel_everyday/310) в Excel

Читать полностью…

Spark in me

В линуксе есть симлинки, lvm и mdadm и еще есть mount bind.

Пока не подскажут не узнаешь про такое.

По сути позволяет примонтировать одну папку в другую.
- https://unix.stackexchange.com/questions/198590/what-is-a-bind-mount

#linux

Читать полностью…

Spark in me

Долго смотрел на SSD vs Yolo для сегментации ~миллиона картинок. Все-таки осилил запуск Yolo, т.к. есть предобученная модель и на первый взгляд оно кажется быстрее и проще (хотя бы по архитектуре). Посмотрим.

https://goo.gl/QAt4JD

Читать полностью…

Spark in me

Еще лучше сниппет для скачивания файлов с докачиваением и 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

Spark in me
Потом выложим решение с кодом
@

Читать полностью…

Spark in me

Spark in me
Но претрейн веса здесь хорошо зашли
@

Читать полностью…

Spark in me

Spark in me
Вкратце из того, что тебе было бы интересно:
1. Псевдолейблинг работает хорошо, но только начиная с какого-то нормального скора.
2. Все у кого некорректно была отстроена валидация, провалились на привате.
3. Фуллсайз не рулит (его мало кто довел до ума.
@

Читать полностью…

Spark in me

Spark in me
Каггл увеличивает число ресурсов для своих kernels
- https://goo.gl/1Rk2xf
- https://www.kaggle.com/product-feedback/39790

GPUs там нет, так что в принципе прикольно, но лично для меня бессмысленно.

#data_science
@

Читать полностью…

Spark in me

Простое объяснение чисел с плавающей точкой
- http://fabiensanglard.net/floating_point_visually_explained/index.php

#math

Читать полностью…

Spark in me

Гайд по настройке виртуальных окружений на питоне и установке open-cv (не самая последняя версия есть тупо в репозитории pip)

- https://www.pyimagesearch.com/2017/09/25/configuring-ubuntu-for-deep-learning-with-python/

По идее на работе правильно работать через докер или виртуальные окружения.

#data_science
#python

Читать полностью…

Spark in me

Для сомневающихся что выбрать - пример недавнего опроса с Хабра не тему языков для работы с данными
- https://goo.gl/NbmQb2

#data_science

Читать полностью…
Subscribe to a channel