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

snakers4 @ telegram, 1797 members, 1726 posts since 2016

All this - lost like tears in rain.

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

Our website
Our chat
DS courses review

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](

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

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


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':
elif loop_type=='Val':

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

(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.




📖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.



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,


The above code essentially does the same as:

model = some_other_block






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.



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
return img



snakers4 (Alexander), July 14, 2018

Once again stumbled upon this amazing PyTorch related post

For those 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


(1) Tensor / Variable merged

(2) Zero-dimensional Tensors

(3) dtypes

(4) migration guide



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

Does not work for datasets with different resolution though


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


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])



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



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


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





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.

snakers4 (Alexander), February 01, 2018

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




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

Adds feature requested in #1909. Mimics the parameters from 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





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

snakers4 (Alexander), November 17, 2017

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


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





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

snakers4 (Alexander), November 15, 2017

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


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




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. В документации написано

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

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



snakers4 (Alexander), October 25, 2017

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

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


snakers4 (Alexander), October 23, 2017

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

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

68 Cheat sheet-ы Data wrangling - //

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

70 Новый курс от - прикладная линейная алгебра - //

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

72 Sklearn cheat-sheet - //

73 Советы от призеров на Kaggle //

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

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

76 ROC и AUC простыми словами - //

77 Еще прогресс бары на питоне - //

78 открыли вторую серию курса про глубокое обучение - //

79 Чит шиты - архитектуры нейросетей - //

80 РАБОТАЮЩИЙ пример multi-curl - //

81 Многопоточность в питоне - //

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

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

84 Новый курс от Andrew Ng - //

85 Разложения матриц - //

86 Дельные статьи с Хабра - //

87 Музыкальные рекоммендации - //

88 Визуализация в виде карты - //

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

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

91 Мобильные архитектуры нейросетей //



Spark in me

Пара сверх-полезных cheat-sheet-ов для "ковыряния" в данных на pandas - Часть раз - Часть два Полезно будет тем, кто только начинает такие "ковыряния". На мой взгляд тут сильно не хватает сводных таблиц. Про них можно прочитать тут: - In a nutshell - - Ссылка #data_science #cheat_sheet

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

30 Переход на HTTPS - //

31 The art of learning - //

32 Как пользоваться каналом - //

33 Про деплой и поддержку сервера - //

34 Про бекапы - //

35 Про бекенд нашего сайта - //

36 Как пользоваться каналом - //

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

39 Книга про самообразование - //

40 Заметка про семантическое ядро - //

41 Заметка про RTB - //

42 Анализ рынка через сайтмапы - //

43 SMTP шлюзы -

44 Сайтмапы - часть 3 //

45 Сайтмапы - часть 2 //

46 Анализ 1.5м фоток квартир - начало - //

47 Визуализации нейросетей - фейл - //

48 Визуализация звука в питоне - //

50 Про глупость и способы ее исправить - //

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

52 Работа с U-NET на практике - //

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

54 Про трудовую миграцию - //



Spark in me

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

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

Гайд раз - // и pytorch - //

Цикл статей про SSD на pytorch - //

Pytorch и докер -//

Впечатления про pytorch - //

Расширение классов Pytorch - //

Аугментации на pytorch - //

Pytorch - снижение lr по шагам - //

Внутрянка tf и pytorch - //




Spark in me

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

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

Как начать в докер - //

Как начать в докер - уже серьезнее - //

Бойлерплейты на докере для DS - //

Pytorch и докер -//

Докер и проброс ssh - //

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




Spark in me

Если вы хотите начать превращать свой локальный или удаленный зоопарк в более структурированный зоопарк, или избавиться от конфликтов софта и необходимости все иметь всегда в последней версии, то вот несколько хороших вводных точек про докер - Раз - Два #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())



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 = * (gamma ** (step))
for param_group in optimizer.param_groups:
param_group['lr'] = lr

snakers4 (Alexander), October 15, 2017

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





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

snakers4 (Alexander), October 14, 2017

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

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

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

Из минусов:

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

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

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

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



snakers4 (Alexander), October 12, 2017

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

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

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

- тут

- и тут



| Docker Documentation

Configure containers at runtime

older first