Победитель минского хакатона написал библиотеку для Facebook и хочет ускорить нейросети вдвое

25 января 2017, 11:38

Победитель декабрьского AI Hackathon в Минске Марат Духан не живёт на родине уже 11 лет. За это время белорус успел поучиться в трёх университетах в России и США и поработать в ABBYY, Intel, «Яндексе», AMD, Facebook и израильском стартапе. В интервью dev.by программист рассказал о высокопроизводительных вычислениях, отличиях Кремниевой долины от Нью-Йорка и порассуждал о будущем нейронных сетей, которые он ускоряет.

Читать дальше...

Марат Духан на минском хакатоне. Фото: Андрей Давыдчик, dev.by

МФТИ, ABBYY, Intel

Я учился в минской гимназии №50, после поступил в Московский физико-технический институт, на прикладную математику и физику.

Выбрал МФТИ, потому что этот вуз собирает самых умных абитуриентов со всего русскоговорящего мира. Не скажу, что мне очень уж нравилось качество образования, зато я учился с людьми, которые выигрывали международные олимпиады по физике, программированию, математике. Останься я в Беларуси — в группе был бы, может, один такой человек.

На МФТИ нацеливался ещё и потому, что из него было проще устроиться в большие компании. Первое моё место работы — компания ABBYY, создавшая FineReader и Lingvo. Повезло, что попал туда: меня научили правильно писать код, и эти знания остаются важными до сих пор.

Я очень хотел попасть в московский офис Intel — и попал: почти год учёбы в МФТИ провёл там на стажировке. Занимался оптимизацией видеокодеков H.264, если точнее — энтропийного кодера CABAC. Из-за принципов алгоритма процесс кодирования нельзя распараллелить на несколько ядер. Я переделывал алгоритм так, чтобы он остался совместимым со стандартом, но работал на одном ядре значительно быстрее. Медиакодеками занималась отдельная команда внутри подразделения, которое отвечает за библиотеку IPP. Но энтропийным кодером в команде занимался только я.

Марат на первом курсе МФТИ

Из математики — в экономику

В российской системе государственного образования университетам платят за количество прочитанных курсов, поэтому у вузов есть большой стимул читать больше предметов. Но полезная информация примерно с третьего курса заканчивается, дальше программы создаются из ничего. После четырёх лет учёбы я решил, что делать в МФТИ больше нечего. Поскольку в Intel я стажировался от университета, оттуда тоже ушёл.

Решил поучиться в Российской экономической школе — это самый серьёзный экономический вуз в России. Тогда у них была только магистратура, большинство студентов — выпускники МФТИ, мехмата и факультета вычислительной математики и кибернетики МГУ, реже — экономических вузов.

Как и в случае с МФТИ, я выбирал скорее вуз, а не конкретную программу. РЭШ — частный вуз, большинство профессоров там либо имеют степень PhD западных университетов, либо по крайней мере работали в университетах Европы или США. И люди, с которыми я учился, тоже очень-очень сильные.

Изнутри РЭШ выглядит как американский вуз, перенесённый в Москву. Учёба очень интенсивная: семь недель слушаем лекции, на восьмую сдаём экзамены, и так пять раз в год. Не выйдет по полгода ничего не делать, а потом резко начинать работать.

За время учёбы в РЭШ поработал на стажировке в ЦЭФИР, исследовательском центре при РЭШ. У них есть совместный со Standard & Poor’s проект по рейтингу прозрачности российских компаний. Летом 2010 я работал в ЦЭФИР, читал годовые и квартальные отчётности российских компаний и отмечал, какие данные они раскрывают, а какие нет. Получил довольно полезный навык — всегда могу посмотреть годовой отчёт компании и быстро найти нужную цифру.

Как уехать на PhD в США

Примерно за год до выпуска из РЭШ я решил, что из России пора сваливать, и самый надёжный сособ это сделать — поехать на PhD в США. Тогда мне было интересно попробовать себя в академической науке, собирался стать профессором. Сейчас планы потеряли актуальность, но опыт работы над PhD в США или Европе рекомендую всем.

PhD — это когда вам дают пять лет, чтобы пробовать то, что вам интересно. Платят немного: в США — приблизительно ползарплаты школьного учителя. Не пошикуешь, но жить можно. А к зарплате прилагается довольно большая свобода действий.

В некотором смысле PhD — как стартап, только вам не нужно заботиться о прибыльности проекта. Но важно, чтобы он имел большое значение для науки, и чтобы другие люди его использовали либо делали что-то интересное на его основе.

В Техасском суперкомпьютерном центре в Остине

Попасть на хорошую PhD-программу реально, если заниматься этим целенаправленно. Ехать можно сразу после бакалавриата, магистратуру заканчивать не обязательно. Подаваться следует где-то за год до поступления. Если в университете не знают вас лично, то на программы PhD берут в основном по рекомендациям.

Рекомендация имеет вес, если её пишут люди, которых знают в мире — или хотя бы такие, по имени которых в Google можно найти что-то вразумительное. Важно, чтобы эти люди хорошо вас знали. Плохая рекомендация выглядит так: «Этот человек прослушал мой курс и получил 10 баллов». Хорошая рекомендация: «Этот человек проходил мой курс и написал дипломную работу, которая выглядит лучше, чем всё виденное мной ранее».

Поскольку в Беларуси, да и в России, довольно сложно найти людей, известных на Западе, то я рекомендую заранее писать профессорам западных университетов — может, даже за два года — и пробовать сделать с ними совместный проект. У профессоров всегда есть интересные идеи, на которые им не хватает времени. Если студент возьмётся за такой проект и сделает его, профессор будет ему очень благодарен. И даже если он не возьмёт студента к себе на программу, то точно напишет хорошую рекомендацию в другие университеты.

Мне повезло, что я учился в РЭШ: один из наших профессоров опубликовал статью о том, как реализовать определённые экономические конструкции с помощью криптографии — совместную с профессором MIT в области computer science. С ней наш преподаватель поездил по разным университетам, поэтому его там знали. Одну рекомендацию написал он, ещё одну — мой научный руководитель, третью — научный руководитель из МФТИ, который к тому времени уже переехал в США и работал в Intel на позиции senior architect. Работа не академическая, но понятно, что человек неслучайный, хорошо понимает область.

В итоге меня приняли в Технологический институт Джорджии. И я снова сменил специальность: после прикладной математики МФТИ и экономики РЭШ я перешёл в computer science. Перед отъездом успел постажироваться в «Яндексе» — меня уже взяли на PhD, и это ускорило принятие компанией положительного решения.

AMD и ассемблер для Python

Мой первый большой проект за время PhD — библиотека Yeppp! для ускорения векторных операций. Сначала я думал, что она и станет моим PhD-проектом, но её не подхватили в науке — никаких публикаций на её основе я так и не получил. Зато в процессе создания проекта мне довелось написать другие интересные библиотеки.

Одна из них — PeachPy: по сути, встроенный в Python ассемблер. С ней можно создавать сложные ассемблерные функции и тестировать их по кусочкам. Этот опыт мне очень пригодился позже, когда я занялся нейронными сетями и создавал библиотеку NNPACK — значительная её часть написана именно на PeachPy.

Некоторое время я работал в компании AMD: делал библиотеку для ускорения вычислений внутри веб-браузера. Идея — сделать приложение, которое могло бы использовать WebCL, тогда новый стандарт использования GPU на веб-страничках. При этом библиотека должна была использовать доступные ресурсы: в старых браузерах производить подсчёты через JavaScript, в Google Chrome — через Portable Native Client, а в браузерах с WebCL — с помощью нового движка.

А затем, к сожалению, WebCL умер: ни один браузер его так и не реализовал. Мой проект умер вместе с ним. Но опыт оказался полезным: в решении, которое я показывал на недавнем минском хакатоне, тоже использовал технологию Portable Native Client.

За время PhD я участвовал и в других проектах. Например, оптимизировал расчёты для квантовой химии. Участвовал в оптимизации кода, который потом запускали на «Тяньхэ-2» — самом большом на то время в мире кластере, расположенном в Китае. В итоге пришёл к нейронным сетям — и тут мне помогла работа в Facebook AI Research.

Facebook AI Research

В 2015 году я собеседовался на стажировку в Facebook и Google. В обеих компаниях система приёма похожая. Сначала тебя собеседуют технические работники, дают конкретные задачи, которые нужно решить в коде. Если компания решает, что твой технический уровень достаточно хорош, чтобы там работать, ты собеседуешься с разными группами: расспрашиваешь, чем занимаются они, рассказываешь, что делаешь сам. Технические вопросы там, как правило, уже не задают — скорее пытаются разобраться, интересно ли вам будет работать вместе.

Технические интервью я прошёл, и рекрутер Facebook спросил меня, с какой группой я хотел бы поообщаться. Тема моей PhD-программы — высокопроизводительные вычисления (например, я оптимизирую код, чтобы он быстрее работал на процессоре, адаптирую алгоритмы под многоядерность или GPU). А Facebook ведь в основном занимается написанием кода на PHP — какая уж тут производительность. Да, там много данных, но их анализом я не занимаюсь.

И тут я вспомнил про AI Research, но был уверен, что меня туда не возьмут, ведь занимаюсь совсем другими вещами. Но терять было нечего. «Хочу в Facebook AI Research», — заявил я рекрутеру.

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

На стажировке в FAIR я работал летом 2015, ровно 14 недель — это стандарт в Facebook. Сначала адаптировал алгоритм преобразования Фурье под современные CPU с большим кэшем, а потом сделал реализацию свёрточных слоёв на основе этого алгоритма. Стажировка закончилась, но мне было интересно продолжить работу в этом направлении. И я начал всё заново, уже с пониманием, что сделал неправильно в первый раз.

Результатом этой работы и стала библиотека NNPACK. Сейчас она довольно успешна: её использует Prisma, Facebook тоже на неё переключился — вместо той библиотеки, которую я сделал во время стажировки у них. NNPACK станет основной частью моего PhD-проекта. Права на библиотеку принадлежат университету, но она выложена как свободное ПО под лицензией BSD, использовать её может кто угодно.

Пост директора Facebook AI Reseach про разработанную Духаном библиотеку

Чем Кремниевая долина отличается от Нью-Йорка

Кремниевая долина — место для технарей. Экономистам там делать нечего: вся их работа — в Нью-Йорке и Чикаго. Что в Кремниевой долине (да и почти во всей Америке) плохо — там нужно водить машину. Если хочешь попасть из офиса в ближайшее кафе, спускаешься в подземную парковку под офисом, садишься в свою машину и едешь на парковку рядом с кафе. Я привык много ходить, и для меня это очень необычно.

Сообщество в Кремниевой долине неоднородно. Есть очень открытые компании — например, Facebook. Есть очень закрытые — например, Apple. Как правило, все, кроме Apple, не делают большого секрета из того, чем занимаются. А поскольку у всех хватает друзей из разных компаний, то хотя бы в целом понимаешь, что происходит вокруг.

Публичные встречи обычно организуются через meetup.com, записаться на них может любой человек. Скорее всего, митап по интересной тебе теме будет каждый день — будь то C++, big data, deep learning или даже использование GPU для расчётов.

В Нью-Йорке мне, честно говоря, не нравится, поэтому там я тусовался немного. Это очень грязный город: он воняет, метро просто ужасное — во время ливня вода с улицы льёт прямо на платформы, бегают крысы. Тараканы в городе вообще везде. Деревьев почти нету — только парочка парков, количество деревьев в которых сопоставимо с их количеством в среднем белорусском дворе. Плюс большой Центральный парк, по которому, говорят, ночью лучше не ходить.

Это не значит, конечно, что я всё время проводил в таких условиях. Я жил на Манхэттене в Челси, работал в офисе в районе Гринвич-Виллидж — это очень дорогие и удобные районы. Но впечатление от Нью-Йорка в целом у меня очень плохое. По мероприятиям в городе особо не ходил, но в целом там больше уклона в бизнес и экономику, больше финтеха, меньше чисто технологичных вещей.

Кремниевая долина и Нью-Йорк — одни из самых дорогих мест для жизни в США. Стоимость дорогих районов Сан-Франциско уже выше, чем дорогих районов Нью-Йорка, а Пало-Альто ещё дороже.

Бостон

Из американских городов мне больше всего нравится Бостон. Где ещё в мире MIT находится всего в одной остановке от Гарварда? Это приятный город, по расстояниям похожий скорее на Нью-Йорк: на машине в соседнее кафе ехать не нужно. Но в то же время он куда чище. В Бостоне есть офисы почти всех крупных компаний, но там относительно мало стартапов. Умные люди есть, но многие из них заканчивают университеты и тут же куда-то переезжают.

Из больших компаний — в израильский стартап

После того, как я побывал в главных ИТ-локациях США, мне было интересно попробовать что-то новое, так что прошлым летом я поехал на стажировку в Израиль. Готов был ехать в любой город: Израиль такой маленький, что путешествие из Хайфы в Тель-Авив занимает меньше времени, чем дорога от Пало-Альто до Сан-Франциско.

В итоге попал в Adience — маленький стартап, который занимается рекламой на мобильных устройствах. Мы занимались деплоем нейронных сетей прямо на мобильное устройство, а потом делали SDK для издателей, которые хотят показывать рекламу в своих популярных приложениях. Тема очень актуальная: пока я работал в Adience, компанию купили.

Интересная особенность Израиля — люди не стремятся работать в больших компаниях. Мне кажется, у них даже есть некая неприязнь к крупным брендам. Многие из коллег, с которыми я общался, говорят: «Как-то странно идти работать на большие компании. Стартапы ведь платят примерно те же деньги, а работать в них интереснее». Там даже сетевых кафе значительно меньше — по сравнению и с США, и с Беларусью.

Ситуации, когда люди продают свой стартап и тут же основывают новый, в Израиле никого не удивляют. Почти все, с кем я работал в Adience, сейчас трудятся в новых компаниях. В Израиле стартапы часто создают с расчётом на продажу: развить технологию, а затем её продать. Компаний, которые самостоятельно выходят на IPO, очень мало.

Почему Fabby и Prisma — не игрушки

До окончания моей PhD-программы осталось полгода. Степень дают не за проект, а за исследования, так что моя основная заслуга — не создание NNPACK, а сама демонстрация того, как адаптировать хорошо известные алгоритмы быстрой линейной алгебры для реализации нейронных сетей. Алгоритм перемножения матриц, которым сейчас все пользуются в вычислениях, известен уже несколько лет, но для нейронных сетей ему требуются некоторые модификации — и моя PhD-работа именно о них.

Пока я планирую продолжать работать в этой теме. С моей точки зрения, нейронные сети — это просто очередное приложение, которое работает недостаточно быстро. Людей, которые понимают и нейронные сети, и производительность, очень мало, а сделать в этой области можно очень много. Вот читаю я статью и вижу хорошую идею — но понимаю, что реализована она очень плохо. И мне становится интересно: будет ли идея работать лучше, если реализовать её правильно? Надеюсь, у меня получится увеличить скорость нейронных сетей ещё раза в два — а потом можно заниматься другими целями.

Я живу не в Минске уже двенадцатый год. Радует, что за это время в Беларуси появилось много продуктовых компаний — с ними индустрия стала куда интереснее. Когда я заканчивал школу, мечтой белорусских программистов была работа в аутсорсинге, в EPAM. Но если тебя нанимают просто потому, что ты дешевле, это всегда плохо.

Prisma, Fabby — это не просто игрушки, как многие о них думают. Что мы знали о DeepMind до того, как их купил Google? Мы видели одно видео на Youtube, на котором компания демонстрировала нейронную сеть, натренированную играть в старую игрушку Atari. И вдруг Google покупает их за полмиллиарда! Тогда венчурные капиталисты поняли: в AI происходит что-то особенное. То же самое сейчас происходит с нейронными сетями, и инвесторы это понимают. Fabby разрабатывает технологию обработки видео в реальном времени, Prisma — социальную сеть. Это может вырасти во что-то гораздо большее.

Что будет дальше? Возьмите любой продукт и добавьте к нему искусственный интеллект — и продукт сразу станет куда интереснее. Что, например, если добавить голосовое управление к программе поиска оптимального маршрута? Google в одной из своих статей утверждал, что их ПО может с очень высокой точностью определить по фотографии, где она снята — это открывает множество возможностей. И таких примеров сотни.

Сейчас только-только начинается процесс внедрения искусственного интеллекта в бизнес-системы. Часто у компаний есть много собранной, но непроанализированной информации: картинки, звук, записи с камер наблюдения. С помощью нейронных сетей всё это можно перевести в данные, пригодные для бизнес-анализа. Наверное, если бы я был более нацеленным на бизнес человеком, то занялся именно этим. Но пока я хочу реализовать ещё пару идей, связанных с NNPACK.


Фото: из личного архива Марата Духана.

подписка на главные новости 
недели != спам
# ит-новости
# анонсы событий
# вакансии
Обсуждение