Comments 20
А сравнение фрйемворков на каких-нибудь бенчмарках кто-нибудь проводил?
Да, очень непонятно как фреймворк, который для каждого нового шага дергает интерпретатор питона, тягается по скорости вычислений с фрейворками на статических графах, которые устремлены в их низкоуровневом вычислении максимально эффективными способами.
Хотя гибкость и простота PyTorch, конечно, фантастические — за это можно всё простить!

Конкретных бенчмарков я не видел, но по субъективным ощущениям на моих задачах PyTorch работает с той же скоростью, что и TensorFlow. Если погуглить, то на первой странице выдачи окажутся ссылки на весьма неоднозначные посты и issue. У кого-то PyTorch в два раза обгоняет TensorFlow по скорости, у кого-то работает медленнее. Нельзя однозначно сказать, что PyTorch медленнее остальных фреймворков, но и рекорды он никакие, конечно, бьёт.


Разработчики утверждают, что сейчас они активно трудятся над JIT-компилятором. Когда он появится вопрос производительности должен будет отпасть сам собой.

Чудес не бывает, скорее всего дело в том, что основное время занимают всё-же сами вызываемые математические алгоритмы, которые написаны и оптимизированы на С/С++. И на фоне времени их работы, расходы на сам Python практически не заметны.
Спасибо за пост!
Пара простых вопросов. Умеет ли PyTorch оптимизировать выражения вида x + y — z? Т.е. создаст ли он промежуточный тензор под результат операции a = x + y? Насколько сложные выражения он умеет таким образом оптимизировать.
Второй вопрос — умеет ли он делать прямой AD (как у вас в примере), или же только обратный?
Ну и наконец — есть ли что-то вроде обертки для C++?

1) PyTorch ничего сам не оптимизирует, всё в руках программиста.


Если вы напишите


a = x + y - z

то два промежуточных тензора будут созданы.


Если же вы напишите


a = x.add(y).sub_(z)

то будет создан только один промежуточный тензор.


Если вы напишите


a = x.add_(y).sub_(z)

то ни одного тензора не будет создано, содержимое x будет изменено, a и x будут указывать на один и тот же тензор.


2) Нет, не умеет.


3) Пока нет. В качестве основного способа деплоя моделей авторы видят конвертацию в формат Caffe2 или TensorFlow. Для написания же расширений в скором времени должен появиться интерфейс на C.

1) PyTorch ничего сам не оптимизирует, всё в руках программиста.

Жаль, всегда хочется немного упростить себе жизнь =)
a = x.add_(y).sub_(z)

Правильно ли я понимаю, что дифференцировать по этому выражению все еще возможно?

Еще такой вопрос — PyTorch выделяет для каждого тензора дополнительную память для самого дифференцирования сразу при создании тензора, или же как-то хитрее?

Тензоры не хранят никакой дополнительной информации сами по себе, для этого используется обёртка torch.autograd.Variable.


Дополнительная память выделяется только при вызове backward() и только в том объеме в каком она требуется.


Inplace функции add_() и sub_() допустимы для автоматического дифференцирования.

В лекции, ссылку на которую давал выше говорили, что сейчас нет, но пилят оптимизацию «закэшированных» алгоритмов. Насколько понял, если какой-то алгоритм/кусок будет повторяться без изменений, он может быть оптимизирован библиотекой перед вторым и последующим использованием. Но про детали думаю ещё рано говорить.
в TensorFlow мы «программируем» граф на некотором декларативном урезанном DSL, который затем компилируется в код на C и исполняется

Странное утверждение верное лишь очень в малой части (XLA compiler — experimental and considered alpha)

Пожалуй. Здесь я думал скорее о Theano, который действительно генерирует код на Си, компилирует его и запускает.

Имхо, PyTorch'у сильно не хватает мощной поддержки со стороны какого-нибудь гиганта рынка… по удобству эксплуатации оно по субъективным ощущениям превосходит мейнстримный tensorflow, но вот в деталях везеде чувствуется, что сделано тяп-ляп: например, фреймворк мало того, что не позволяет модельки прозрачно запускать на мобильных девайсах, так там даже запустить инференс модели, тренированой на GPU, на CPU — это танцы с бубном вокруг контейнейра с весами. И такая небрежность чувствуется во всем… в то время как tensorflow хоть и не так удобен, зато выглядит как законченые продукт, готовый к исопльзованию.

Есть поддержка такого гиганта как FB, но, судя по всему, в данный момент они используют торч только для ресерча. Можно послушать хороший подкаст на тему планов команды www.oreilly.com/ideas/why-ai-and-machine-learning-researchers-are-beginning-to-embrace-pytorch

После этого интервью другие модные фреймворки стали казаться мне стариками.

FB — так себе гигант, у них семь пятниц на неделе: то они поддерживали торч (еще луашный), то они переключились на caffe2, а теперь у них появилась новая игрушка в виде pytorch… при этом качество выпускаемых ими подобных продуктов традиционно "так себе" (тот-же caffe2 периодически вообще не компилируется из мастера, а уж CI-ные билдеры я там зелеными и не видел никогда :-) )

Спасибо, это гениальное интро. До этого мне было сложно разобраться в том, чем местный АД лучше любого другого АДа, и чем tape-based это не обычный бэкпроп, и что вообще подразумевают под динамическими сетями, т.к. эти термины употребляются разными авторами в немного различающихся контекстах. Мне кажется, надо уделить больше внимания разжёвыванию всего этого прямо на главной странице.

К этому классу фреймворков как раз и относятся Torch и PyTorch.
Кажется, Torch состоит из фиксированных модулей. А к динамическим фреймворкам можно еще добавить Chainer.

Для Torch есть AD, так что в теории он может использоваться для построения динамических графов. Модуль torch.nn же действительно представляет собой коллекцию заранее написанных и оптимизированных блоков.


В целом, да, Torch нельзя назвать настолько же динамическим, как PyTorch, однако, на мой взгляд, он намного ближе к PyTorch, чем к представителям двух других групп.


Про Chainer не знал, спасибо. Посмотрел сейчас: он выглядит точь в точь как PyTorch вплоть до названий класов и методов. Интересно, у них общие корни или они просто синхронно пришли к похожей структуре и похожему API?

Only those users with full accounts are able to leave comments. Log in, please.