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

snakers4 @ telegram, 1818 members, 1744 posts since 2016

All this - lost like tears in rain.

Data science, ML, a bit of philosophy and math. No bs.

Our website
- http://spark-in.me
Our chat
- https://t.me/joinchat/Bv9tjkH9JHbxiV5hr91a0w
DS courses review
- http://goo.gl/5VGU5A
- https://goo.gl/YzVUKf

Posts by tag «pytorch»:

snakers4 (Alexander), February 13, 09:02

PyTorch NLP best practices

Very simple ideas, actually.

(1) Multi GPU parallelization and FP16 training

Do not bother reinventing the wheel.

Just use nvidia's apex, DistributedDataParallel, DataParallel.

Best examples [here](github.com/huggingface/pytorch-pretrained-BERT).

(2) Put as much as possible INSIDE of the model

Implement the as much as possible of your logic inside of nn.module.

Why?

So that you can seamleassly you all the abstractions from (1) with ease.

Also models are more abstract and reusable in general.

(3) Why have a separate train/val loop?

PyTorch 0.4 introduced context handlers.

You can simplify your train / val / test loops, and merge them into one simple function.

context = torch.no_grad() if loop_type=='Val' else torch.enable_grad()

if loop_type=='Train':
model.train()
elif loop_type=='Val':
model.eval()

with context:
for i, (some_tensor) in enumerate(tqdm(train_loader)):
# do your stuff here
pass

(4) EmbeddingBag

Use EmbeddingBag layer for morphologically rich languages. Seriously!

(5) Writing trainers / training abstractions

This is waste of time imho if you follow (1), (2) and (3).

(6) Nice bonus

If you follow most of these, you can train on as many GPUs and machines as you wan for any language)

(7) Using tensorboard for logging

This goes without saying.

#nlp

#deep_learning

huggingface/pytorch-pretrained-BERT

📖The Big-&-Extending-Repository-of-Transformers: Pretrained PyTorch models for Google's BERT, OpenAI GPT & GPT-2, Google/CMU Transformer-XL. - huggingface/pytorch-pretrained-BERT


PyTorch DataLoader, GIL thrashing and CNNs

Well all of this seems a bit like magic to me, but hear me out.

I abused my GPU box for weeks running CNNs on 2-4 GPUs.

Nothing broke.

And then my GPU box started shutting down for no apparent reason.

No, this was not:

- CPU overheating (I have a massive cooler, I checked - it works);

- PSU;

- Overclocking;

- It also adds to confusion that AMD has weird temperature readings;

To cut the story short - if you have a very fast Dataset class and you use PyTorch's DataLoader with workers > 0 it can lead to system instability instead of speeding up.

It is obvious in retrospect, but it is not when you face this issue.

#deep_learning

#pytorch

snakers4 (Alexander), October 06, 2018

Monkey patching a PyTorch model

Well, ideally you should not do this.

But sometimes you just need to quickly test something and amend your model on the fly.

This helps:


import torch
import functools

def rsetattr(obj, attr, val):
pre, _, post = attr.rpartition('.')
return setattr(rgetattr(obj, pre) if pre else obj, post, val)

def rgetattr(obj, attr, *args):
def _getattr(obj, attr):
return getattr(obj, attr, *args)
return functools.reduce(_getattr, [obj] + attr.split('.'))

for module in model.named_modules():
old_module_path = module[0]
old_module_object = module[1]
# replace an old object with the new one
# copy some settings and its state
if isinstance(old_module_object,torch.nn.SomeClass):
new_module = SomeOtherClass(old_module_object.some_settings,
old_module_object.some_other_settings)

new_module.load_state_dict(module_object.state_dict())
rsetattr(model,old_module_path,new_module)

The above code essentially does the same as:


model

.path.to.some.block = some_other_block

`

#python

#pytorch

#deep_learning

#oop

snakers4 (Alexander), September 11, 2018

Useful Python / PyTorch bits

dot.notation access to dictionary attributes

class dotdict(dict):
__getattr__ = dict.get
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__

PyTorch embedding layer - ignore padding

nn.Embedding has a padding_idx attribute not to update the padding token embedding.

#python

#pytorch

snakers4 (Alexander), July 18, 2018

Lazy failsafe in PyTorch Data Loader

Sometimes you train a model and testing all the combinations of augmentations / keys / params in your dataloader is too difficult. Or the dataset is too large, so it would take some time to check it properly.

In such cases I usually used some kind of failsafe try/catch.

But looks like even simpler approach works:

if img is None:
# do not return anything
pass
else:
return img

#deep_learning

#pytorch

snakers4 (Alexander), July 14, 2018

Once again stumbled upon this amazing PyTorch related post

For those learning PyTorch

discuss.pytorch.org/t/feedback-on-pytorch-for-kaggle-competitions/2252/11

#deep_learning

#pytorch

Feedback on PyTorch for Kaggle competitions

Hello team, Great work on PyTorch, keep the momentum. I wanted to try my hands on it with the launch of the new MultiLabeling Amazon forest satellite images on Kaggle. Note: new users can only post 2 links in a post so I can’t direct link everything I created the following code as an example this weekend to load and train a model on Kaggle data and wanted to give you my feedback on PyTorch. I hope it helps you. Loading data that is not from a regular dataset like MNIST or CIFAR is confusin...


snakers4 (Alexander), April 25, 2018

PyTorch 0.4 released

github.com/pytorch/pytorch/releases/tag/v0.4.0

Key

(1) Tensor / Variable merged

(2) Zero-dimensional Tensors

(3) dtypes

(4) migration guide pytorch.org/2018/04/22/0_4_0-migration-guide.html

#pytorch

pytorch/pytorch

Tensors and Dynamic neural networks in Python with strong GPU acceleration - pytorch/pytorch


snakers4 (Alexander), March 31, 2018

Wow PyTorch is so cool that it even has a concat dataset class

pytorch.org/docs/master/data.html#torch.utils.data.ConcatDataset

Does not work for datasets with different resolution though

#pytorch

snakers4 (Alexander), March 06, 2018

I have seen questions on forums - how to add Keras-like progress bar to PyTorch for simple models?

The answer is to use tqdm and this property

- goo.gl/cG6Ug8

This example is also great

from tqdm import trange
from random import random, randint
from time import sleep

t = trange(100)
for i in t:
# Description will be displayed on the left
t.set_description('GEN %i' % i)
# Postfix will be displayed on the right, and will format automatically
# based on argument's datatype
t.set_postfix(loss=random(), gen=randint(1,999), str='h', lst=[1, 2])
sleep(0.1)

#deep_learning

#pytorch

Can I add message to the tqdm progressbar?

When using the tqdm progress bar: can I add a message to the same line as the progress bar in a loop? I tried using the "tqdm.write" option, but it adds a new line on every write. I would like each


snakers4 (Alexander), February 18, 2018

Even though I am preparing a large release on GAN application on real example, I just could not help sharing these 2 links.

They are just an absolute of perfection for GANs on PyTroch

- github.com/martinarjovsky/WassersteinGAN

- github.com/soumith/ganhacks

Also this is the most idiomatic PyTorch code (Imagenet finetuning) code I have ever seen

- gist.github.com/panovr/2977d9f26866b05583b0c40d88a315bf

So if you are new to PyTorch, then these links will be very useful)

#pytorch

#deep_learning

#gans

martinarjovsky/WassersteinGAN

Contribute to martinarjovsky/WassersteinGAN development by creating an account on GitHub.


Which of the latest projects did you like the most?

anonymous poll

Still waiting for GANs – 17

👍👍👍👍👍👍👍 47%

Satellites! – 10

👍👍👍👍 28%

Nothing / not interested / missed them – 5

👍👍 14%

Jungle! – 3

👍 8%

PM me for other options – 1

▫️ 3%

👥 36 people voted so far.

  • Satellites! – 10
  • Jungle! – 3
  • Nothing / not interested / missed them – 5
  • Still waiting for GANs – 17
  • PM me for other options – 1

snakers4 (Alexander), February 01, 2018

Cyclical Learning rates are not merged in Pytorch yet, but they are in the PR stage

- github.com/pytorch/pytorch/pull/2016/files

#data_science

#pytorch

Adds Cyclical Learning Rates by thomasjpfan · Pull Request #2016 · pytorch/pytorch

Adds feature requested in #1909. Mimics the parameters from https://github.com/bckenstler/CLR. Since Cyclical Learning Rate (CLR) requires updating the learning rate after every batch, I added batc...


snakers4 (Alexander), January 29, 2018

Nice example of group convolutions via pytorch

- goo.gl/4d3JQC

#deep_learning

#pytorch

Cadene/pretrained-models.pytorch

pretrained-models.pytorch - Pretrained ConvNets for pytorch: NASNet, ResNeXt, ResNet, InceptionV4, InceptionResnetV2, Xception, DPN, etc.


snakers4 (Alexander), November 17, 2017

Библиотека, которая позволяет использовать почти все визуализации tensorboard с pytorch

- github.com/lanpa/tensorboard-pytorch

Особенно интересен пример для отладки графа вычислений

- goo.gl/oLWhfP

#data_science

#pytorch

lanpa/tensorboardX

tensorboard for pytorch (and chainer, mxnet, numpy, ...) - lanpa/tensorboardX


snakers4 (Alexander), November 15, 2017

Лайфхак дня. Как прикрутить TensorBoard к pytorch за 10 минут

- github.com/yunjey/pytorch-tutorial/tree/master/tutorials/04-utils/tensorboard

По сути единственное, что продолжает вымораживать в pytorch по сравнению с tf - отсутствие инструментов для дебага графа вычислений (может потому, что он динамический?)

#deep_learning

#pytorch

yunjey/pytorch-tutorial

PyTorch Tutorial for Deep Learning Researchers. Contribute to yunjey/pytorch-tutorial development by creating an account on GitHub.


snakers4 (Alexander), October 26, 2017

Заметка про тренировку сетей с разным lr в pytorch. В документации написано

optim.SGD([
{'params': model.base.parameters()},
{'params': model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)
На все слои не указанные в листе lr не распространяется. Может это очевидно, но я возился 3 дня, не понимая почему модель не работает, пока не догадался до такой простой вещи - что надо переписать модель вынеся все свои функции из forward в __init отдельного класса.

Лучшее - враг хорошего.

#data_science

#pytorch

snakers4 (Alexander), October 25, 2017

Если вы пытаетесь скрестить код, который должен работать на 2 GPU и код который должен работать только на 1 GPU (ужа с ежом) на Pytorch, не переписывая ни один из них, то такой сниппет поможет вам

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"]="1"

#pytorch

snakers4 (Alexander), October 23, 2017

Давно не делал подборки с канала. Сделаю несколько штук)

Интересные ссылки на тему DS / ML

68 Cheat sheet-ы Data wrangling - t.me/snakers4/1219

69 Bokeh - замена D3.js но на питоне - t.me/snakers4/1220

70 Новый курс от fast.ai - прикладная линейная алгебра - t.me/snakers4/1224

71 Быстрый анализ потокового видео - t.me/snakers4/1227

72 Sklearn cheat-sheet - t.me/snakers4/1229

73 Советы от призеров на Kaggle t.me/snakers4/1231

74 Интуиция при использовании t-SNE - t.me/snakers4/1239

75 Бенчмарки либ для градиентного бустинга - t.me/snakers4/1250

76 ROC и AUC простыми словами - t.me/snakers4/1262

77 Еще прогресс бары на питоне - t.me/snakers4/1269

78 Fast.ai открыли вторую серию курса про глубокое обучение - t.me/snakers4/1270

79 Чит шиты - архитектуры нейросетей - t.me/snakers4/1273

80 РАБОТАЮЩИЙ пример multi-curl - t.me/snakers4/1274

81 Многопоточность в питоне - t.me/snakers4/1276

82 Как эффективно загружать .npy массивы в память в питоне - t.me/snakers4/1279

83 Туториалы по Keras + tf с примерами в ipynb - t.me/snakers4/1278

84 Новый курс от Andrew Ng - t.me/snakers4/1293

85 Разложения матриц fast.ai - t.me/snakers4/1294

86 Дельные статьи с Хабра - t.me/snakers4/1303

87 Музыкальные рекоммендации - t.me/snakers4/1305

88 Визуализация в виде карты - t.me/snakers4/1306

89 Классная презентация про ML в гугле - t.me/snakers4/1309

90 Многопоточная работа с файлами в питоне в Keras - t.me/snakers4/1313

91 Мобильные архитектуры нейросетей t.me/snakers4/1316

#digest

#data_science

Spark in me

Пара сверх-полезных cheat-sheet-ов для "ковыряния" в данных на pandas - Часть раз https://goo.gl/NYkqWb - Часть два https://goo.gl/EXjGXu Полезно будет тем, кто только начинает такие "ковыряния". На мой взгляд тут сильно не хватает сводных таблиц. Про них можно прочитать тут: - In a nutshell - https://goo.gl/K1xucE - Ссылка http://pbpython.com/pandas-pivot-table-explained.html #data_science #cheat_sheet


Подборка - статьи и заметки автора

30 Переход на HTTPS - t.me/snakers4/1109

31 The art of learning - t.me/snakers4/1099

32 Как пользоваться каналом - t.me/snakers4/1084

33 Про деплой и поддержку сервера - t.me/snakers4/1074

34 Про бекапы - t.me/snakers4/1069

35 Про бекенд нашего сайта - t.me/snakers4/1046

36 Как пользоваться каналом - t.me/snakers4/1084

37 Заметка про Гугл, Андроид, Эппл и машинное обучение - t.me/snakers4/1085

39 Книга про самообразование - t.me/snakers4/1099

40 Заметка про семантическое ядро - t.me/snakers4/1102

41 Заметка про RTB - t.me/snakers4/1110

42 Анализ рынка через сайтмапы - t.me/snakers4/1127

43 SMTP шлюзы - spark-in.me/post/smtp-relay-outsiders-view-1

44 Сайтмапы - часть 3 t.me/snakers4/1171

45 Сайтмапы - часть 2 t.me/snakers4/1153

46 Анализ 1.5м фоток квартир - начало - t.me/snakers4/1180

47 Визуализации нейросетей - фейл - t.me/snakers4/1196

48 Визуализация звука в питоне - t.me/snakers4/1197

50 Про глупость и способы ее исправить - t.me/snakers4/1263

51 Установка софта для работы с GPU и нейросетями - t.me/snakers4/1287

52 Работа с U-NET на практике - t.me/snakers4/1307

53 Как тренировать сверточные нейросети в 10 раз быстрее - t.me/snakers4/1319

54 Про трудовую миграцию - t.me/snakers4/1328

#digest

#data_science

Spark in me

Итак, закончилась небольшая эпопея по переводу сайта на HTTPS. Надеюсь кому-то покажется интересным. Описал основные блоки, которые по идее должны быть применимы для любого веб-проекта. Что самое главное - все старые ссылки и все-все-все должно работать) TLDR - ставьте https сразу и не мучайтесь) - https://spark-in.me/post/spark-in-me-https #internet


Подборка - статьи про pytorch

Гайд раз - t.me/snakers4/1362

Fast.ai и pytorch - t.me/snakers4/1367

Цикл статей про SSD на pytorch - t.me/snakers4/1435

Pytorch и докер -t.me/snakers4/1438

Впечатления про pytorch - t.me/snakers4/1442

Расширение классов Pytorch - t.me/snakers4/1447

Аугментации на pytorch - t.me/snakers4/1449

Pytorch - снижение lr по шагам - t.me/snakers4/1457

Внутрянка tf и pytorch - t.me/snakers4/1467

#digest

#deep_learning

#pytorch

Spark in me

Знакомый поделился классным гайдом по PyTorch, который объясняет в чем его фишка. Если вы не пользуетесь Keras и ищете на чем потренироваться - то вам как раз подойдет. https://habrahabr.ru/post/334380/ #data_science #neural_nets


Подборка - Докер

Как начать в докер - t.me/snakers4/1365

Как начать в докер - уже серьезнее - t.me/snakers4/1403

Бойлерплейты на докере для DS - t.me/snakers4/1409

Pytorch и докер -t.me/snakers4/1438

Докер и проброс ssh - t.me/snakers4/1439

Как поднять себе окружение в докере с уровня железа

t.me/snakers4/1461

#digest

#linux

Spark in me

Если вы хотите начать превращать свой локальный или удаленный зоопарк в более структурированный зоопарк, или избавиться от конфликтов софта и необходимости все иметь всегда в последней версии, то вот несколько хороших вводных точек про докер - Раз https://habrahabr.ru/post/337306/ - Два https://docs.docker.com/get-started/ #linux


snakers4 (Alexander), October 21, 2017

Если используете pytorch, то самый простой способ посмотреть картинку в формате генератора pytorch примерно такой. Поменять каналы местами, перевести в float, нормализовать. Тогда легко открыть картинку через pyplot.

img = images[15].cpu().numpy().astype(np.float32).transpose((1, 2, 0))
img += -img.min()
img *= (1/img.max())

plt.imshow(img)
plt.show()

#pytorch

snakers4 (Alexander), October 18, 2017

Копипаста на pytorch для снижения lr по шагам.

...

parser.add_argument('--gamma', default=0.1, type=float, help='Gamma update for SGD')

...

...

stepvalues = (80000, 100000, 120000)

...

if iteration in stepvalues:
step_index += 1
adjust_learning_rate(optimizer, args.gamma, step_index)

...

def adjust_learning_rate(optimizer, gamma, step):

parser.add_argument('--gamma', default=0.1, type=float, help='Gamma update for SGD')

lr = args.lr * (gamma ** (step))
for param_group in optimizer.param_groups:
param_group['lr'] = lr
#pytorch

snakers4 (Alexander), October 15, 2017

В процессе ковыряния SSD нашел такой бойлерплейт для своих кастомных аугментаций на pytorch. Приятность состоит в том, что все такие штуки очень удобно реализовывать на основе их готовых классов

- github.com/amdegroot/ssd.pytorch/blob/master/utils/augmentations.py

#data_science

#pytorch

amdegroot/ssd.pytorch

ssd.pytorch - A PyTorch Implementation of Single Shot MultiBox Detector


snakers4 (Alexander), October 14, 2017

Пробую Pytorch (goo.gl/YySVm1) - у меня пока безумно позитивные ощущения. Внезапно там гимора больше чем в керасе раза в 2-3, но свобода почти абсолютно полная. Очень много сахара программного, но работа с большим числом карточек (>1) делается одной оберткой.

Довольно легко расширять классы. Документация отстает от функционала, но поэтому проще читать сорс код. Примеры в документации по архитектурам и fine-tuning просто отличные, хоть и громоздкие. Зато они настроены на профессиональное использование.

Из чисто технических плюсов - граф расчетов в торче динамический, т.е. мы можем по понедельникам делать одно, а по вторникам другое (в этих двух гайдах лучше написано - goo.gl/GwN5hx - goo.gl/AJQ5PW)

Из минусов:

- нет такого же тула как Tensorboard. Для этих целей все используют visdom насколько я понимаю - goo.gl/UTD94E . Что с одной стороны отлично, т.к. можно делать все, что угодно, а с другой нужно

- нет встроенных оберток для коллбеков в виде early stopping, lr decay и прочих вкусностей. Есть такой репозиторий - но мне говорили что он пока очень сырой - goo.gl/kWRrbJ

- аугментации и работа с картинками - все построены на PIL, что как бы не тру - их там кот наплакал. Благо все очень легко дописывается

Есть опция работы на (!) кластере компьютеров с GPU через сеть.

#data_science

#pytorch

snakers4 (Alexander), October 12, 2017

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

Докер надо запускать с флагом nvidia-docker run --shm-size 2G (вставьте сколько не жалко), потому что он использует дисковый кеш и его стандартный размер стоит 64M.

Больше про подобные флаги:

- тут docs.docker.com/engine/reference/run/#runtime-constraints-on-resources

- и тут docs.docker.com/engine/admin/resource_constraints/

#data_science

#pytorch

| Docker Documentation

Configure containers at runtime


older first