Мыслящие машины Дженсена Хуанга: История Nvidia и мировой ИИ-революции - Стивен Витт
Увлекшись CUDA, Хуанг завел корабль компании далеко в неизведанные воды. Десять лет он стоял на капитанском мостике, всматриваясь в горизонт в ожидании земли, и теперь ему казалось, что он открыл Атлантиду. Хуанг с головой погрузился в изучение и обсуждение новой технологии, и чем больше он узнавал, тем сильнее разгорался его энтузиазм. К середине 2013 года Дженсен испытывал невероятное воодушевление, граничащее с одержимостью. Он пригласил Катандзаро в конференц-зал (который все еще использовал как свой офис) и заявил, что проект cuDNN – самый важный за всю двадцатилетнюю историю компании. Все старые диаграммы, формулы и графики на стенах были стерты, а на доске красовалась загадочная аббревиатура OIALO. Как объяснил Хуанг, это означало Once in a Lifetime Opportunity, то есть «возможность, выпадающая раз в жизни». Он предложил ошарашенному Катандзаро поучаствовать в мысленном эксперименте. «Представьте, – сказал он, – что я построил восемь тысяч сотрудников Nvidia на парковке. Вы можете выбрать любого из них для своей команды».
Хуанг далеко не всегда так быстро проникался новыми идеями. «С параллельными вычислениями нам потребовалось немало усилий, чтобы убедить Дженсена, – вспоминает Кирк. – То же случилось с CUDA. Нам пришлось поработать над обоснованием целесообразности проекта». Но в случае искусственного интеллекта на Хуанга как будто снизошло озарение. «Он понял это мгновенно, раньше всех, – говорит Кирк. – Он увидел, чем это все может стать. Действительно увидел первым».
Хуанг утверждает, что просто рассуждал логически. «Увидев, как система справляется с абсолютно неструктурированной задачей "зрительного" распознавания, я сразу задался вопросом, чему еще ее можно научить», – сказал он. И ответил: «Всему». Хуанг пришел к выводу, что нейронные сети могут произвести настоящую революцию и нужно использовать CUDA, чтобы застолбить рынок необходимого для них оборудования. Он объявил о полной переориентации компании. «В пятницу вечером он разослал всем электронное письмо, в котором сообщал, что мы полностью переходим на глубокое обучение и больше не являемся компанией, специализирующейся на графическом оборудовании, – рассказывает Грег Эстес, вице-президент Nvidia. – К утру понедельника мы стали компанией по разработке ИИ. Я не преувеличиваю, все было именно так».
Незадолго до этого Хуангу исполнилось пятьдесят. Несмотря на появившуюся седину, он сохранил юношеский задор и энергично носился по коридорам компании, то и дело останавливаясь, чтобы расспросить сотрудников об их работе. По мере роста компании Хуанг ввел практику устраивать ежеквартальные выступления перед всем коллективом. Он мог спонтанно говорить более двух часов на излюбленные темы: о концепции планирования «со скоростью света», о мифическом «еще не существующем миллиардном рынке» – и в первую очередь предупреждать об опасности бюрократического подхода.
Хотя Nvidia уже была крупной компанией, Хуанг поддерживал гибкую корпоративную структуру без жестко разграниченных подразделений и четкой иерархии. Высшее руководство, по сути, представлял только он сам; в Nvidia не было операционного, технического и маркетингового директоров, так же как и заместителей генерального. Не было даже управляющего персоналом. Вместо этого более 30 человек подчинялись ему напрямую, занимая гибкие универсальные должности «вице-президентов». Мысленный эксперимент с парковкой, который он предложил Катандзаро, отражал его уверенность в том, что компания способна в любой момент произвести радикальную реорганизацию. «Мне нужно, чтобы вы всегда были готовы ко всему, – говорил он своим менеджерам. – Неизвестно, в какой момент именно вам придется стать самыми важными людьми в компании».
В начале 2014 года таким «самым важным человеком» оказался Катандзаро, несмотря на то что он не вписывался в корпоративную культуру и часто получал не самые высокие оценки на аттестациях. Управляя командой инженеров, Катандзаро свел работу над cuDNN к ключевой задаче: ускорению эволюции нейросетей. В тканях человеческого мозга каждый нейрон образует в среднем около 1000 синаптических связей с соседними нейронами. Мозг может менять и настраивать их с помощью химических процессов, а нейронная сеть делает это методом умножения матриц.
При умножении матриц числа из одной сетки перемножаются с числами из другой, и таким образом создается третья. Правила заполнения новой сетки несложные, но по мере увеличения размеров матриц количество расчетов возрастает в геометрической прогрессии. Это делает параллельную обработку данных самой подходящей технологией для умножения матриц, однако до появления нейронных сетей никто в Nvidia всерьез этим не занимался.
Долгие годы за библиотеку матричного умножения CUDA отвечал Филипп Вандермерш – эксцентричный француз, приезжавший на работу на велосипеде. Предыдущие разработчики оставили проект незавершенным, и он привел библиотеку в порядок. На протяжении нескольких лет Вандермерш безуспешно пытался убедить исследователей глобального потепления обновить свои климатические симуляции, написанные древним кодом на языке Fortran, используя более современные решения. Но лишь немногие из них были готовы тратить на это время и силы. «Вообще, эти ребята в лабораториях иногда слишком ленивы», – жалуется он.
В случае с нейронными сетями издержки перехода отсутствовали. Почти весь код писался с нуля талантливыми и целеустремленными программистами, для которых производительность имела первостепенное значение. Это были именно те энтузиасты, о которых давно мечтал Хуанг: сообщество разработчиков нейросетей, объединившееся вокруг CUDA, на долгие годы стало надежной клиентской базой Nvidia. Вандермерш, выбранный из той самой «толпы на парковке», присоединился к команде Катандзаро в качестве ведущего специалиста в технической реализации проекта и оптимизировал библиотеку функций для задач ИИ. (По его словам, программированием по большей части тоже занимался он. «Можно сказать, что Катандзаро был Джобсом cuDNN, – говорит он, – а я Возняком».)
Программисты Nvidia творчески подошли к задаче ускорения операций с матрицами. Они быстро обнаружили, что большинство весов в нейронной сети попадают в промежуток от плюс одного до минус одного. Числами за пределами этого диапазона часто можно было пренебречь, что повышало скорость операций и уменьшало их объем. Кроме того, они увидели, что даже в этом промежутке не требуется идеальная точность. Так же как в мозге, нейроны в сети были «размытыми», а синаптические связи между ними – гибкими и изменчивыми. Поэтому в некоторых случаях достаточно было правильно определить знак.
В AlexNet было 650 000 нейронов и 630 миллионов синаптических связей. В таких масштабах отдельный синапс едва ли имел значение. Последовательный код бывает настолько капризным, что одна неправильно поставленная точка с запятой может привести к сбою всей системы. В нейронных сетях один ошибочный вес был всего лишь одной из миллионов точек данных. Поэтому при разработке cuDNN программисты Nvidia пересмотрели приоритеты в выборе между точностью и скоростью. По их мнению, в программном обеспечении для нейросетей выбор нужно было делать в пользу скорости.
AlexNet была сравнима по размерам с мозгом насекомого, но в


