Победитель декабрьского AI Hackathon в Минске Марат Духан не живёт на родине уже 11 лет. За это время белорус успел поучиться в трёх университетах в России и США и поработать в ABBYY, Intel, «Яндексе», AMD, Facebook и израильском стартапе. В интервью 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. Есть очень закрытые — например, 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.
Фото: из личного архива Марата Духана.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.