docs: add new section on high-level models and DSLs for HPC
This commit is contained in:
parent
1a7a00609a
commit
1dd2cd94a4
2 changed files with 159 additions and 0 deletions
48
main.typ
48
main.typ
|
|
@ -289,6 +289,52 @@ NVIDIA приняла решение создать закрытую экоси
|
|||
|
||||
#pagebreak()
|
||||
|
||||
= Развитие высокоуровневых моделей и DSL для HPC
|
||||
|
||||
== "Наращивание" абстракций с TensorFlow, PyTorch, MLIR и TVM
|
||||
|
||||
Взрывной рост машинного обучения и нейронных сетей ознаменовал трансформацию высокопроизводительных вычислений начиная с около 2010-го года. Традиционная модель разработки, требовавшая от программиста глубокого понимания аппаратной архитектуры и ручной оптимизации каждого аспекта параллельного кода, оказалась неподходящей для новой волны исследователей и инженеров в области ИИ. Это привело к созданию фреймворков, которые не просто упростили программирование, но кардинально изменили саму философию взаимодействия разработчика с вычислительными ресурсами.
|
||||
|
||||
Фреймворк TensorFlow, представленный Google в 2015 году, стал одним из первых масштабных проектов, реализовавших концепцию вычислительного графа как высокоуровневой абстракции над гетерогенными вычислительными архитектурами. Система позволяла описывать алгоритмы машинного обучения в терминах операций над тензорами, автоматически распределяя вычисления между центральными процессорами и графическими ускорителями. Ключевым достижением TensorFlow стала реализация автоматического дифференцирования и оптимизация графа вычислений на этапе компиляции@abadi_tensorflow:_2016.
|
||||
|
||||
Параллельно развивался PyTorch, выпущенный Facebook AI Research в 2016 году и предложивший альтернативную парадигму динамических вычислительных графов, которые строятся в процессе исполнения программы. Этот подход обеспечил большую гибкость для исследовательских задач и упростил отладку, сохранив при этом способность к эффективному выполнению на GPU через систему автоматической генерации CUDA-кернелов. Архитектура PyTorch продемонстрировала, что высокий уровень абстракции не обязательно требует жертв в производительности, если промежуточные представления спроектированы правильно@paszke_pytorch:_2019.
|
||||
|
||||
Критической проблемой обоих фреймворков стала их привязанность к специфичным доменам и ограниченная переносимость оптимизаций между различными типами операций и аппаратных платформ. Ответом на эту проблему стало создание MLIR (Multi-Level Intermediate Representation), анонсированного командой Google в 2019 году. MLIR представил иерархическую систему промежуточных представлений, где каждый уровень соответствует определенному уровню абстракции от высокоуровневых операций машинного обучения до низкоуровневых инструкций целевой архитектуры. Фундаментальная идея MLIR заключалась в создании расширяемой инфраструктуры, позволяющей различным доменно-специфичным языкам и компиляторам совместно использовать общие оптимизационные проходы и трансформации@lattner_mlir:_2020.
|
||||
|
||||
Проект TVM, начатый исследователями из университета Вашингтона в 2017 году, сфокусировался на автоматической оптимизации и генерации кода для разнородных аппаратных платформ. TVM ввел концепцию автоматического планирования через систему template-based code generation с последующим автоматическим тюнингом производительности. Система использует машинное обучение для предсказания оптимальных конфигураций кернелов на основе характеристик операций и целевого оборудования@chen_tvm:_2018.
|
||||
|
||||
Роль промежуточных представлений в этой эволюции крайне велика -- IR стали не просто техническим артефактом процесса компиляции, но ключевым механизмом, позволяющим разделить спецификацию алгоритма от деталей его реализации на конкретной аппаратной платформе. Многоуровневая структура современных IR позволяет проводить оптимизации на различных уровнях абстракции: от алгебраических упрощений и операторного слияния на верхних уровнях до оптимизации использования памяти и векторизации на нижних. Это создало возможность для композиции оптимизаций, где высокоуровневые трансформации открывают возможности для низкоуровневых, и наоборот.
|
||||
|
||||
Автоматическая генерация CUDA и OpenCL кернелов достигла уровня, когда для многих классов операций генерируемый код сравним или превосходит по производительности код, написанный вручную экспертами. Это стало возможным благодаря систематическому исследованию пространства оптимизаций, включающего выбор размера блоков, стратегии использования разделяемой памяти, развертывание циклов и другие параметры. Современные системы используют комбинацию аналитических моделей производительности и эмпирического профилирования для навигации в экспоненциально большом пространстве возможных конфигураций.
|
||||
|
||||
== Эволюция "параллелизма по умолчанию"
|
||||
|
||||
Концепция "параллелизма по умолчанию" претерпела существенную эволюцию от идеи явного параллельного программирования к модели, где параллелизм извлекается и управляется автоматически компиляционной инфраструктурой. Этот переход отражает фундаментальное изменение в распределении ответственности между программистом и инструментарием.
|
||||
|
||||
Ранние попытки автоматического параллелизма -- которые обозревались мной ранее -- демонстрировали ограниченную эффективность из-за сложности анализа зависимостей и недостатка информации о намерениях программиста. Новая волна систем автотюнинга изменила подход: вместо попыток автоматически обнаружить параллелизм в последовательном коде, системы стали требовать от программиста явной спецификации параллельной структуры алгоритма на высоком уровне абстракции, беря на себя ответственность за выбор оптимальных параметров исполнения.
|
||||
|
||||
Проект Halide, представленный MIT в 2012 году, стал пионером в области декларативного программирования для обработки изображений. Halide ввел разделение алгоритма и расписание его исполнения: программист описывает вычисление математически, а затем отдельно выбирает стратегию параллелизации, тайлинга и векторизации. Разработчики Halide поняли, что для многих классов алгоритмов существует множество функционально эквивалентных, но различающихся по производительности способов организации вычислений@ragan-kelley_halide:_2013.
|
||||
|
||||
Системы автотюнинга, такие как OpenTuner@ansel_opentuner:_2014 и AutoTVM, развили эту идею дальше, применяя методы машинного обучения для автоматического исследования пространства возможных расписаний выполнения. Вместо того чтобы требовать от программиста вручную специфицировать оптимальное расписание, эти системы могут автоматически найти близкое к оптимальному решение через итеративное профилирование различных конфигураций. Этот подход особенно ценен при портировании кода на новые аппаратные платформы, где интуиция, разработанная для одной архитектуры, может не работать для другой.
|
||||
|
||||
Современные системы также интегрируют адаптивные стратегии исполнения, где решения об оптимизации принимаются частично во время выполнения программы на основе фактических характеристик данных и текущей загрузки системы. Это особенно важно для гетерогенных систем, где оптимальное распределение работы между CPU и GPU может зависеть от размера входных данных и доступности вычислительных ресурсов в конкретный момент времени.
|
||||
|
||||
== Изменение философии программирования
|
||||
|
||||
Трансформация подхода к высокопроизводительному программированию в 2010-х годах отражает более глубокие изменения в философии разработки программного обеспечения. Традиционная модель HPC-программирования предполагала, что оптимальная производительность достигается только через глубокое понимание аппаратной архитектуры и тщательную ручную оптимизацию каждого аспекта кода. Программист был обязан управлять иерархией памяти, распределением работы между вычислительными блоками, векторизацией и множеством других деталей низкого уровня. Это демократизировало доступ к вычислительной мощности и ускорило инновации в прикладных областях.
|
||||
|
||||
Новая парадигма переносит фокус программиста с оптимизации реализации на спецификацию модели и алгоритма. Программист определяет математическую структуру вычислений, а используемая инфраструктура берет на себя ответственность за оптимизацию исполнения. Это изменение не означает, что производительность стала менее важной, но что методы её достижения фундаментально изменились.
|
||||
|
||||
Критическим фактором, делающим этот подход возможным, стало развитие компиляторов, способных эффективно транслировать высокоуровневые спецификации в оптимизированный машинный код. Современные компиляторы для машинного обучения используют комбинацию классических оптимизационных техник, эвристик, основанных на доменных знаниях, и методов машинного обучения для навигации в сложном пространстве возможных реализаций. Система Tiramisu, например, использует полиэдральную модель компиляции для автоматической оптимизации линейной алгебры и свёрточных операций@baghdadi_tiramisu:_2019
|
||||
|
||||
Однако важно признать, что этот переход не является абсолютным. Для критических по производительности приложений или при работе с новыми, еще не поддержанными стандартными фреймворками паттернами вычислений, знание низкоуровневых деталей остается необходимым. Более того, разработка самих компиляционных инфраструктур требует глубокого понимания как высокоуровневых абстракций, так и низкоуровневых деталей аппаратной реализации. Можно говорить о специализации ролей: большинство программистов работают на уровне высокоуровневых абстракций, в то время как относительно небольшая группа экспертов развивает инфраструктуру, делающую это возможным.
|
||||
|
||||
Эволюция также изменила критерии оценки успешности программных решений. Если ранее основной метрикой было достижение максимальной производительности на конкретной аппаратной конфигурации, то современные системы оцениваются по способности обеспечить хорошую производительность на широком спектре архитектур с минимальными модификациями кода. "Портативность" производительности стала не менее важной, чем абсолютная производительность.
|
||||
|
||||
Будущее развитие этого направления, вероятно, будет характеризоваться дальнейшим повышением уровня абстракции и интеграцией более продвинутых методов автоматической оптимизации, включая использование самих нейронных сетей для предсказания оптимальных стратегий компиляции.
|
||||
|
||||
#pagebreak()
|
||||
|
||||
#align(
|
||||
center,
|
||||
pad(
|
||||
|
|
@ -312,6 +358,8 @@ MIMD (Multiple Instruction, Multiple Data) -- вычислительный по
|
|||
|
||||
CUDA (Compute Unified Device Architecture) -- программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы NVIDIA
|
||||
|
||||
IR (Intermediate Representation) -- промежуточное представление высокоуровневого кода, который можно оптимизировать и компилировать в нативный код любой поддерживаемой компилятором платформы
|
||||
|
||||
#pagebreak()
|
||||
|
||||
#align(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue