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(
|
||||
|
|
|
|||
111
references.bib
111
references.bib
|
|
@ -278,3 +278,114 @@
|
|||
year = {2009},
|
||||
pages = {1--314},
|
||||
}
|
||||
|
||||
@misc{abadi_tensorflow:_2016,
|
||||
title = {{TensorFlow}: {A} system for large-scale machine learning},
|
||||
shorttitle = {{TensorFlow}},
|
||||
url = {http://arxiv.org/abs/1605.08695},
|
||||
doi = {10.48550/arXiv.1605.08695},
|
||||
abstract = {TensorFlow is a machine learning system that operates at large scale and in heterogeneous environments. TensorFlow uses dataflow graphs to represent computation, shared state, and the operations that mutate that state. It maps the nodes of a dataflow graph across many machines in a cluster, and within a machine across multiple computational devices, including multicore CPUs, general-purpose GPUs, and custom designed ASICs known as Tensor Processing Units (TPUs). This architecture gives flexibility to the application developer: whereas in previous "parameter server" designs the management of shared state is built into the system, TensorFlow enables developers to experiment with novel optimizations and training algorithms. TensorFlow supports a variety of applications, with particularly strong support for training and inference on deep neural networks. Several Google services use TensorFlow in production, we have released it as an open-source project, and it has become widely used for machine learning research. In this paper, we describe the TensorFlow dataflow model in contrast to existing systems, and demonstrate the compelling performance that TensorFlow achieves for several real-world applications.},
|
||||
urldate = {2025-12-08},
|
||||
publisher = {arXiv},
|
||||
author = {Abadi, Martín and Barham, Paul and Chen, Jianmin and Chen, Zhifeng and Davis, Andy and Dean, Jeffrey and Devin, Matthieu and Ghemawat, Sanjay and Irving, Geoffrey and Isard, Michael and Kudlur, Manjunath and Levenberg, Josh and Monga, Rajat and Moore, Sherry and Murray, Derek G. and Steiner, Benoit and Tucker, Paul and Vasudevan, Vijay and Warden, Pete and Wicke, Martin and Yu, Yuan and Zheng, Xiaoqiang},
|
||||
month = may,
|
||||
year = {2016},
|
||||
note = {arXiv:1605.08695},
|
||||
keywords = {Computer Science - Distributed, Parallel, and Cluster Computing, Computer Science - Artificial Intelligence},
|
||||
}
|
||||
|
||||
@misc{paszke_pytorch:_2019,
|
||||
title = {{PyTorch}: {An} {Imperative} {Style}, {High}-{Performance} {Deep} {Learning} {Library}},
|
||||
shorttitle = {{PyTorch}},
|
||||
url = {http://arxiv.org/abs/1912.01703},
|
||||
doi = {10.48550/arXiv.1912.01703},
|
||||
abstract = {Deep learning frameworks have often focused on either usability or speed, but not both. PyTorch is a machine learning library that shows that these two goals are in fact compatible: it provides an imperative and Pythonic programming style that supports code as a model, makes debugging easy and is consistent with other popular scientific computing libraries, while remaining efficient and supporting hardware accelerators such as GPUs. In this paper, we detail the principles that drove the implementation of PyTorch and how they are reflected in its architecture. We emphasize that every aspect of PyTorch is a regular Python program under the full control of its user. We also explain how the careful and pragmatic implementation of the key components of its runtime enables them to work together to achieve compelling performance. We demonstrate the efficiency of individual subsystems, as well as the overall speed of PyTorch on several common benchmarks.},
|
||||
urldate = {2025-12-08},
|
||||
publisher = {arXiv},
|
||||
author = {Paszke, Adam and Gross, Sam and Massa, Francisco and Lerer, Adam and Bradbury, James and Chanan, Gregory and Killeen, Trevor and Lin, Zeming and Gimelshein, Natalia and Antiga, Luca and Desmaison, Alban and Köpf, Andreas and Yang, Edward and DeVito, Zach and Raison, Martin and Tejani, Alykhan and Chilamkurthy, Sasank and Steiner, Benoit and Fang, Lu and Bai, Junjie and Chintala, Soumith},
|
||||
month = dec,
|
||||
year = {2019},
|
||||
note = {arXiv:1912.01703},
|
||||
keywords = {Computer Science - Machine Learning, Computer Science - Mathematical Software, Statistics - Machine Learning},
|
||||
}
|
||||
|
||||
@misc{lattner_mlir:_2020,
|
||||
title = {{MLIR}: {A} {Compiler} {Infrastructure} for the {End} of {Moore}'s {Law}},
|
||||
shorttitle = {{MLIR}},
|
||||
url = {http://arxiv.org/abs/2002.11054},
|
||||
doi = {10.48550/arXiv.2002.11054},
|
||||
abstract = {This work presents MLIR, a novel approach to building reusable and extensible compiler infrastructure. MLIR aims to address software fragmentation, improve compilation for heterogeneous hardware, significantly reduce the cost of building domain specific compilers, and aid in connecting existing compilers together. MLIR facilitates the design and implementation of code generators, translators and optimizers at different levels of abstraction and also across application domains, hardware targets and execution environments. The contribution of this work includes (1) discussion of MLIR as a research artifact, built for extension and evolution, and identifying the challenges and opportunities posed by this novel design point in design, semantics, optimization specification, system, and engineering. (2) evaluation of MLIR as a generalized infrastructure that reduces the cost of building compilers-describing diverse use-cases to show research and educational opportunities for future programming languages, compilers, execution environments, and computer architecture. The paper also presents the rationale for MLIR, its original design principles, structures and semantics.},
|
||||
urldate = {2025-12-08},
|
||||
publisher = {arXiv},
|
||||
author = {Lattner, Chris and Amini, Mehdi and Bondhugula, Uday and Cohen, Albert and Davis, Andy and Pienaar, Jacques and Riddle, River and Shpeisman, Tatiana and Vasilache, Nicolas and Zinenko, Oleksandr},
|
||||
month = mar,
|
||||
year = {2020},
|
||||
note = {arXiv:2002.11054},
|
||||
keywords = {Computer Science - Programming Languages, Computer Science - Machine Learning},
|
||||
}
|
||||
|
||||
@misc{chen_tvm:_2018,
|
||||
title = {{TVM}: {An} {Automated} {End}-to-{End} {Optimizing} {Compiler} for {Deep} {Learning}},
|
||||
shorttitle = {{TVM}},
|
||||
url = {http://arxiv.org/abs/1802.04799},
|
||||
doi = {10.48550/arXiv.1802.04799},
|
||||
abstract = {There is an increasing need to bring machine learning to a wide diversity of hardware devices. Current frameworks rely on vendor-specific operator libraries and optimize for a narrow range of server-class GPUs. Deploying workloads to new platforms -- such as mobile phones, embedded devices, and accelerators (e.g., FPGAs, ASICs) -- requires significant manual effort. We propose TVM, a compiler that exposes graph-level and operator-level optimizations to provide performance portability to deep learning workloads across diverse hardware back-ends. TVM solves optimization challenges specific to deep learning, such as high-level operator fusion, mapping to arbitrary hardware primitives, and memory latency hiding. It also automates optimization of low-level programs to hardware characteristics by employing a novel, learning-based cost modeling method for rapid exploration of code optimizations. Experimental results show that TVM delivers performance across hardware back-ends that are competitive with state-of-the-art, hand-tuned libraries for low-power CPU, mobile GPU, and server-class GPUs. We also demonstrate TVM's ability to target new accelerator back-ends, such as the FPGA-based generic deep learning accelerator. The system is open sourced and in production use inside several major companies.},
|
||||
urldate = {2025-12-08},
|
||||
publisher = {arXiv},
|
||||
author = {Chen, Tianqi and Moreau, Thierry and Jiang, Ziheng and Zheng, Lianmin and Yan, Eddie and Cowan, Meghan and Shen, Haichen and Wang, Leyuan and Hu, Yuwei and Ceze, Luis and Guestrin, Carlos and Krishnamurthy, Arvind},
|
||||
month = oct,
|
||||
year = {2018},
|
||||
note = {arXiv:1802.04799},
|
||||
keywords = {Computer Science - Machine Learning, Computer Science - Artificial Intelligence, Computer Science - Programming Languages},
|
||||
}
|
||||
|
||||
@inproceedings{ragan-kelley_halide:_2013,
|
||||
address = {Seattle Washington USA},
|
||||
title = {Halide: a language and compiler for optimizing parallelism, locality, and recomputation in image processing pipelines},
|
||||
isbn = {9781450320146},
|
||||
shorttitle = {Halide},
|
||||
url = {https://dl.acm.org/doi/10.1145/2491956.2462176},
|
||||
doi = {10.1145/2491956.2462176},
|
||||
language = {en},
|
||||
urldate = {2025-12-08},
|
||||
booktitle = {Proceedings of the 34th {ACM} {SIGPLAN} {Conference} on {Programming} {Language} {Design} and {Implementation}},
|
||||
publisher = {ACM},
|
||||
author = {Ragan-Kelley, Jonathan and Barnes, Connelly and Adams, Andrew and Paris, Sylvain and Durand, Frédo and Amarasinghe, Saman},
|
||||
month = jun,
|
||||
year = {2013},
|
||||
pages = {519--530},
|
||||
}
|
||||
|
||||
@inproceedings{ansel_opentuner:_2014,
|
||||
address = {Edmonton AB Canada},
|
||||
title = {{OpenTuner}: an extensible framework for program autotuning},
|
||||
isbn = {9781450328098},
|
||||
shorttitle = {{OpenTuner}},
|
||||
url = {https://dl.acm.org/doi/10.1145/2628071.2628092},
|
||||
doi = {10.1145/2628071.2628092},
|
||||
language = {en},
|
||||
urldate = {2025-12-08},
|
||||
booktitle = {Proceedings of the 23rd international conference on {Parallel} architectures and compilation},
|
||||
publisher = {ACM},
|
||||
author = {Ansel, Jason and Kamil, Shoaib and Veeramachaneni, Kalyan and Ragan-Kelley, Jonathan and Bosboom, Jeffrey and O'Reilly, Una-May and Amarasinghe, Saman},
|
||||
month = aug,
|
||||
year = {2014},
|
||||
pages = {303--316},
|
||||
}
|
||||
|
||||
@inproceedings{baghdadi_tiramisu:_2019,
|
||||
address = {Washington, DC, USA},
|
||||
title = {Tiramisu: {A} {Polyhedral} {Compiler} for {Expressing} {Fast} and {Portable} {Code}},
|
||||
copyright = {https://ieeexplore.ieee.org/Xplorehelp/downloads/license-information/IEEE.html},
|
||||
isbn = {9781728114361},
|
||||
shorttitle = {Tiramisu},
|
||||
url = {https://ieeexplore.ieee.org/document/8661197/},
|
||||
doi = {10.1109/CGO.2019.8661197},
|
||||
urldate = {2025-12-08},
|
||||
booktitle = {2019 {IEEE}/{ACM} {International} {Symposium} on {Code} {Generation} and {Optimization} ({CGO})},
|
||||
publisher = {IEEE},
|
||||
author = {Baghdadi, Riyadh and Ray, Jessica and Romdhane, Malek Ben and Sozzo, Emanuele Del and Akkas, Abdurrahman and Zhang, Yunming and Suriana, Patricia and Kamil, Shoaib and Amarasinghe, Saman},
|
||||
month = feb,
|
||||
year = {2019},
|
||||
pages = {193--205},
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue