Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

NVIDIA: умножаем и делим заявления на десять

Для начала нужно умножить все заявления NVIDIA на десять: она об этом явно не говорит, но делает всё, чтобы захватить весь мир хардверного железа -- все уровни вычислений от всемогущих "облаков" в датацентрах до самих устройств "на переднем крае" (edge) -- смартфонов, кофейников, датчиков на турбинах и мостах.

Вычислений нужно всё больше и больше, процессорная мощь поэтому всегда в недостатке. Недаром у той же NVIDIA пример потребности -- количество операций, нужных для тренировки нейросети: в 2015 году тренировка MS ResNet потребовала 7ExaFLOP, а в 2017 тренировка Google NMT потребовала уже 105ExaFLOP (в презентации NVIDIA, очевидно, ошибка: там не FLOP, а FLOPS, не количество вычислений, а скорость -- http://cms.ipressroom.com.s3.amazonaws.com/219/files/20174/JHH_GTC17_FINAL_published.pdf). И такое количество вычислений для задач нереального (быстрее реального!) времени очень хочется дать не большим командам, а всем инженерам машинного обучения -- а то и в конечном итоге уместить в смартфон. Мощь мейнфреймов ведь сегодня как-то упихнута в смартфоны, так вот в то, что будет после смартфонов, такое же маленькое, нужно упихнуть вот эту потребную для искусственного интеллекта вычислительную мощь.

Идея текущих лидеров процессорного рынка (Intel, Samsung, ARM, AMD и т.д.) объехать закон Мура на козе многоядерности в CPU провалилась: 8 ядер CISC (complex instruction set computing) CPU ничего в родной задаче компьютера "вычислять", то есть заниматься "численными методами", заниматься арифметикой по формулам, не решают. 64 ядра RISC (reduced intstruction set, в ядрах ARM именно это) CPU решают ещё меньше -- RISC ведь вообще появился на волне отрицания численных задач как главных для аппаратной реализации!

А вычислять надо: в облаках нужно решать задачи искусственного интеллекта, в устройствах интернета вещей обрабатывать видео и аудио, планировать движения -- всё то, что невозможно передать далеко находящемуся вычислителю в силу либо огромного объёма данных (например, видео 4К с пары камер при 60fps -- там же всё быстро движется, поэтому снимать нужно с хорошим разрешением и много), либо требуемой минимальной задержки в вычислениях (даже за десятую секунды при передаче вычислений куда-нибудь в облако во время быстрого движения робота может много чего произойти, а задержки из-за всплесков интернет-трафика бывают и побольше).

Помним, что первый язык высокого уровня -- FORTRAN, formula translation, 1957 год (https://en.wikipedia.org/wiki/Fortran). Computer -- это ведь "вычислитель", ЭВМ -- это была "электронная вычислительная машина", начиналось всё с потребности вычислять. Компьютеры были придуманы не столько для работы с текстами, сколько для численных методов, они должны были стать калькуляторами-на-стероидах -- и некоторое время так и было. А потом об этом на полвека забыли.

Но за последние пять лет расцвели приложения BigData (тервер и статистика как shallow learning на разнородных и объёмных базах данных) и deep learning (глубокое обучение на искусственных нейронных сетях). Происходит возврат к основам: компьютер-как-компьютер, т.е. вычислитель-как-вычислитель, а не пишущая машинка для секретарш. Опять и снова в компьютерах требуется жонглировать числами, причём сегодня уже для огромных объёмов данных (видео, аудио, промышленные датчики). Для быстрых (в нереальном времени, т.е. быстрее реального времени -- http://ailev.livejournal.com/1347215.html) вычислений обычно нужно не слишком много управления, зато много параллельности. Прежде всего умножители и сумматоры для разных типов данных, работающие параллельно. И кто обеспечит эту рыночную потребность, тот и будет королём процессорного рынка очередного после мейнфреймов-миниЭВМ-персональных компьютеров-смартфонов поколения IT. Это новое поколение IT будет эффективно проводить нейровычисления для нереального времени для потоков видео и аудио -- на нескольких уровнях от оконечных (edge) устройств до самых облаков в датацентрах.

Дальше рассуждения идут в рамках технологического платформенного стека. Вот пример такого стека для искусственного интеллекта в моём исполнении: сентябрьский 2016 года http://ailev.livejournal.com/1222210.html, и подробное видео сентября 2015г. http://ailev.livejournal.com/1222210.html. Ключевой слайд там вот:
aistack
Стрелочки читаются как "деньги приходят от удачных применений сверху", и "подрыв всего сверху приходит от удачных новаций снизу". Один из тезисов, которые я высказывал в той серии публикаций, был: "только самые крупные бегемоты могут позволить себе удерживать весь стек: Google, Microsoft, IBM -- и то, некоторые уровни они удерживают не в продуктовой линейке, а в экспериментах".

А вот аж два технологических стека в исполнении Дженсена Хуанга в его презентации на GTC-2017 (http://cms.ipressroom.com.s3.amazonaws.com/219/files/20174/JHH_GTC17_FINAL_published.pdf):
nvidiastack-4levels

nvidiastack

Понятно, что разные слайды готовили разные люди, системный подход они "впитали из разговоров" и не заморачивались в маркетинговых презентациях строгостью прорисовки платформенных/системных уровней, поэтому такой бардак в изображении CUDA, System, GPU -- что для чего там "платформа" в разных картинках?

Тем не менее, про платформенные уровни в NVIDIA думают, сам стиль мышления "мы им подрывную платформу -- и все денежки сверху от самых разных приложений наши" в NVIDIA присутствует в явном виде, проверено мной лично в разговорах на GTC.

NVIDIA захватывает самый низ технологического стека численной работы, классических вычислений: GPU железо, драйверы к нему и прямая поддержка железа из языков программирования (типа https://julialang.org/blog/2017/03/cudanative для Julia). И даже NVIDIA делает кое-какую математику, например, CuDNN для глубокого обучения https://developer.nvidia.com/cudnn.

Но в этом месте амбиции вдруг серьёзно вырастают, и на этой базе трёх нижних уровней (по моему варианту стека -- поддержка языков программирования и общематематических библиотек) выстраиваются совсем другие стеки -- "далее повсюду, и мир наш". К примеру, для вычислений с разреженными вокселями есть целый пакет: https://developer.nvidia.com/gvdb, это используется для научных визуализаций в том числе, а также для генерации "пористых" 3D-моделей для печати на 3D-принтере. Для "просто графики" я даже ничего не говорю, там у NVIDIA задел на много лет вперёд -- просто по историческим причинам. А ещё поддерживаются и просто суперкомпьютерные вычисления -- моделирование метеорологическое, в ядерной физике, в астрофизике.

И даже разгон баз данных со встроенной аналитикой (я об этом ещё отдельно напишу -- блоки вычислений CUDA вставляются прямо внутрь запроса в базу данных, и теперь нет отдельно "подготовки данных на ускорителе" и "вычислений на ускорителе", всё происходит одномоментно, что даёт дикий выигрыш по времени).

Так что захвата мира "параллельной" NVIDIA достаточно реализовать эффективней текущих "мультиядерных" конкурентов все виды потребных вычислений:
-- общего вида (CPU)
-- работа с данными (уже реализовано в GPU -- ускорение баз данных, встроенная в них аналитика, я уже писал об этом в "Графоускорители: уже есть" http://ailev.livejournal.com/1345004.html, а про встраивание аналитики ещё напишу в ближайшее время)
-- работа с графикой (куда ж без неё! NVIDIA с этого ведь начиналась)
-- работа с видео, временными рядами, аудио (обработка самых разных сигналов)
-- работу с 64-битными плавающими, HPC (разные "научные задачи" и сложные моделирования, "суперкомпьютерные вычисления")
-- работу с 16-битными плавающими, machine learning/training
-- работу с fixed-point arithmetic для machine learning/inference
-- ... мало ли что там ещё найдётся, требующее распараллеливания! В принципе, можно потом вернуться и к обработке строк, и к логическим ускорителям и чему угодно ещё.

NVIDIA это делает абсолютно сознательно: как сказал на GTC один из ведущих разработчиков, они там тщательно рассматривают кейсы научных вычислений на суперкомпьютерах, моделирования для CAD, вычислений в нейросетях, вычислений для обработки видео и аудио, вычислений обработки сигналов -- и пытаются выработать для них общую архитектуру. Да, это не так эффективно, как иметь специализированную архитектуру для каждого случая, зато в разы и разы дешевле за счёт массовости. "Относительно плохая архитектура, но очень дешёвая и для всего", эклектика и грязные хаки съедят весь вычислительный рынок. А красивые и стройные, эффективные для огромных ниш архитектуры не выживут -- именно потому что они оказываются нишевыми и дорогими.

Люди будут жаловаться и стенать, требовать нишевых специализированных аппаратных решений, но потом всё одно покупать дешёвое "демократическое" железо, какое бы кривое оно не было -- и для этой кривизны будут находиться закрывающие её драйвера, и даже избыточная вдесятеро энергомощность. Дешевизна и демократичность будет за счёт того, что сначала разработку и производство оплачивали любители поиграть в компьютерные игры, затем любители распознавать голос и видео в датацентрах (обучение тут не главный рынок! Вот inference массов, за него нужно бороться!), и так далее -- с миру по нитке, миру универсальный вычислительный процессор. Это уже "просто GPU" -- general purpose unit или general processing unit, уже давно не GPGPU -- general purpose graphics processing unit. Gaming приносит NVIDIA половину доходов, но запланированный тренд -- датацентры (т.е. "просто вычисления") будут давать уже чуть ли не четверть -- http://files.shareholder.com/downloads/AMDA-1XAJD4/4464134367x0x941990/0A52C30A-D8A8-4B98-90B7-57BB4727B557/Rev_by_Mkt_Qtrly_Trend_Q118.pdf

NVIDIA начала развивать эту тему "ускорения всех вычислений" (а не просто поддержки графики в видеокартах) 11 лет назад с выходом GPU-архитектуры Tesla в 2008 году, где впервые была введена CUDA (compute unified device archetecture). Статья 2008 года (когда ещё не забылись подробности и детали) об истории её появления по-русски вот: http://www.ixbt.com/video3/cuda-1.shtml, http://www.ixbt.com/video3/cuda-2.shtml. И с каждым новым поколением процессоров к CUDA добавлялись возможности: в 2010 году стало возможно строить "суперкомпьютеры", ибо FP64 добавили в архитектуре Fermi, затем Kepler с dynamic paralellism в 2012г., Maxwell с unified virtual memory в 2014, Pascal с явной поддержкой deep learning и CuDNN 2016 и вот сейчас Volta с tensor core, новым вычислительным блоком для deep learning. И сейчас CUDA уже в девятой версии, https://devblogs.nvidia.com/parallelforall/cuda-9-features-revealed/

А если учесть, что CUDA начала разрабатываться отнюдь не в 2008 году, получала приоритетное развитие и поддержку со стороны обучения и предоставления методических материалов, технических решений системного уровня (та же Tesla с самого начала была предназначена для датацентров и суперкомпьютеров -- и до сих пор линейка плат для них называется Tesla), то прозорливости стратегов NVIDIA можно только позавидовать. Конкурентам приходится нагонять достижения отнюдь не одного года, им приходится сейчас тяжко. Чтобы стать женой вычислительного рынка-генерала, NVIDIA сначала давным-давно правильно вышла замуж за рынок-лейтенанта.

Конечно, Volta тут тоже проходная архитектура. Как уже понятно с Xavier и анонсированной DLA (deep learning accelerator на fixed point arithmetic для deep learning inference, писал об этом в http://ailev.livejournal.com/1347215.html) в следующей версии GPU-процессора можно ещё много чего ожидать для поддержки вычислений для нейросетей.

А ещё нужно обратить внимание, что Volta-архитектура специфически нацелена уже на суперкомпьютеры и датацентры -- поддержка GPU от NVIDIA есть у всех крупных поставщиков облачных сервисов (Amazon web services, MS Azure, Google Cloud Platform, IBM Cloud и т.д.), плюс NVIDIA развивает программный инструментарий -- NVIDIA GPU CLOUD, https://www.nvidia.com/en-us/gpu-cloud/home/, это программный стек, поддерживающий регистр контейнеров, наборов данных, предобученных моделей для глубокого обучения. Особая фишка в том, что решение будет с одним и тем же кодом работать на аппаратуре самого разного уровня: NGC Deep Learning Stack is optimized to run on any accelerated computing environment, from PC with NVIDIA TITAN Xp or GeForce® GTX 1080 Ti to NVIDIA DGX™ Systems or the cloud, providing flexibility as your deep learning needs evolve.

Там много интересных деталей в этом анонсе, например, переход от NCCL (NVIDIA Collective Communications Library -- implements multi-GPU collective communication primitives that are performance optimized for NVIDIA GPUs) к NCCL 2, что добавляет поддержку кластеров с узлами, в каждом из которых много GPU -- https://developer.nvidia.com/nccl

От Jetson на edge до Tesla в облаках, через съёживающийся (и поэтому отстающий в выходе новых продуктов) GT для десктопов -- NVIDIA закрывает весь спектр решений для вычислительного компьютинга. И акции NVIDIA после объявлений на GTC за день подскочили на 20%. Это ещё не предел, дальше будет ещё интересней: архитектура Volta только-только адресовала тензорные вычисления, полянка deep learning ещё не полностью накрыта, нужно подождать ещё годик и будет новый рост -- конкуренты к этому времени не столько не смогут разработать свои спецпроцессоры, сколько не смогут быстро развернуть для них учебную инфраструктуру, написать драйверы всех пакетов, средства контейнеризации, провести переговоры с десятками поставщиков облачных услуг и т.д.. Кто первым встал, того и тапки -- хорошо видно, кто первым встал и кого тапки, тут: https://www.nvidia.com/en-us/deep-learning-ai/developer/.

А ещё помним, что у NVIDIA есть и своё ядро ARM, и даже своя CPU-архитектура. Tegra явно не завоевала мир, но ещё не вечер -- опыт накоплен. Так что я жду в следующем году ещё более интересных новинок, чем сегодняшняя Volta.

А теперь disclaimer: делим всё высказанное в этом посте, презентациях и планах NVIDIA на десять.

Так, маркетинговые заявления "для прессы" и заявления для разработчиков у NVIDIA не совпадают. В реальной жизни достижения в каждой версии не "революционные", а вполне умеренные именно в силу желания NVIDIA поддержать эклектику, раздать всем вычислительным сестрам по серьгам, чуть-чуть подстелить соломки для каждого и всякого случая потребности в вычислениях -- размазать огромное количество доступных транзисторов на чипе тонким слоем по разным применениям. В итоге реальные результаты много скромней идеальных:

-- пока прирост производительности тренинга нейросеток на Volta по сравнению с Pascal -- в среднем x1.5 (от 1.2 до 1.8), а не заявленные x8 или даже в случае тензорных вычислений x12. В маркетинговых материалах "пиковая производительность", как если бы вы каким-то чудом для каких-то чудесных целей смогли вдруг задействовать все вычислительные ресурсы чипа. Но чудес не бывает: вы будете использовать на каждом такте только маленькую часть вычислительных ядер. Почитайте внимательно Inside Volta: The World's Most Advanced Data Center GPU из правильного места, для разработчиков: https://devblogs.nvidia.com/parallelforall/inside-volta/. Это "поздний закон Мура", прирост в полтора раза за год, а не вдвое. Из 21млрд. транзисторов на каждом такте вычислений в каждой задаче работает только крошечная часть. Остальное простаивает, это неизбежно, но эта неизбежность никак не отражена в залихватском хвастовстве keynote в http://cms.ipressroom.com.s3.amazonaws.com/219/files/20174/JHH_GTC17_FINAL_published.pdf

-- заявленный 12nm процесс -- это просто переименованные четвёртое поколение 16nm процесса http://y.tt/96650400070en.html, http://www.eenewsanalog.com/news/report-tsmc-relabel-process-12nm. Хотя это и не должно сильно смущать: все эти "нанометры" давно уже "попугаи", характеризуют не-пойми-что.

-- основная масса заявленного будет доступна избранным только в июле, а всем -- только в сентябре. Что-то и вообще "в четвёртом квартале". Так что это пока всё именно заявления и объявления, не сами продукты.

-- программировать на CUDA сложно, очень сложно. Если вы хотите "разогнать алгоритм на GPU", то за полдня работы вы это сделать не сможете. Впрочем, у конкурентов по GPU всё оказывается в этом плане ещё хуже, нет учебной поддержки, нет наработанных библиотек разных вычислений, позволяющих забыть о CUDA. А альтернативой получения результата будет сегодня только работа с FPGA, и после этого программирование на CUDA будет казаться сущими пустяками.

-- накопленная масса legacy прошлых "графических" решений тянет назад, как гиря. Именно невозможность отказаться от ошибок прошлого за счёт огромной накопленной массы настоящего и погубит лидерство NVIDIA. В какой-то момент, не прямо сейчас. Но раннее начало тут как раз будет залогом быстрого и неожиданного конца. В хардвере мы уже много видели таких быстрых и неожиданных концов при относительно раннем начале: от мейнфреймов Amdahl до процессоров Motorola, от DEC и LISP-компьютеров до SGI и серверов Sun с CompaQ. Захват мира в IT -- это обычно временное явление, хотя исключения (скажем, Intel) показывают, что бывает и по-другому. Посмотрим, что будет в случае NVIDIA.

UPDATE: дискуссия в https://www.facebook.com/ailevenchuk/posts/10210156697287965
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 4 comments