Основным предназначением сайта является систематизация накопленных знаний, поэтому идея выложить описание проделанной работы в открытый доступ, пришла вполне ожидаемо. Бонусом для меня будут позитивные эмоции читателей, если кто-то найдет полезную информацию.

К сожалению, IT область меняется настолько быстро, что в скором времени многое из написанного может потерять свою актуальность. Я не отчаиваюсь, ведь на смену одной технологии приходят две другие. Такова IT индустрия, а рассуждения в ключе хорошо это или плохо требуют время, которому можно найти применение получше.

Итак, ближе к делу. В дальнейшем речь пойдет о моем опыте системного администрирования вычислительного кластера производительностью ~1 PTflops. Для наглядности, оставлю ссылку на «TOP 50 суперкомпьютеров СНГ» для ознакомления здесь.

Для неискушенных читателей, сразу отвечу на вопрос "зачем нужен кластер?" - для ускорения расчетов. Центральной идеей администрируемого мной кластера, является ускорение работы многопоточных приложений. Таким образом, чем большее число потоков содержит вычислительное устройство, тем быстрее будет работать программа разработчика.

Далее следует вопрос, "каким образом будут ускорены расчеты?" - с помощью многопоточности. Речь идет о распараллеливании однопоточных приложений для запуска на многоядерных вычислительных устройствах. Затронув тему многопоточности, мы подходим к развилке. Распараллеливание однопоточного кода будет возможно при наличии многоядерной вычислительного устройства и технологии параллельного программирования.

Можно выделить следующие вычислительные устройства, от которых зависит конфигурация серверов - GPU и CPU. Вычислительным устройствам с GPU архитектурой необходим определенный набор из драйвера и программного обеспечения, для разработки многопоточных приложений. Картина схожа и для вычислительных устройств с архитектурой CPU, за исключением возни с драйверами.

В 2014 году, когда я только начал работать в данной области, компания Intel активно пропагандировала MIC архитектуру с множеством особенностей в настройке, с точки зрения системного администратора. Сейчас, это еще больше веток в архитектурах вычислительных устройств.

Как показывает практика, наиболее эффективная конфигурация кластера содержит комбинацию из вычислительных устройств. Таким образом, затрагиваются интересы большего количества разработчиков, которым требуется ускорить свои расчеты.

Перейдем к технологиям параллельного программирования. Предлагаю рассуждать с точки зрения привязки к архитектурам вычислительных устройств. Таким образом, для программирования GPU устройств на сервере должна быть поддержка CUDA, для CPU это MPI и OpenMP. OpenCL может использоваться в обоих случаях.

К реализациям данных технологий параллельного программирования относятся одноименная CUDA от компании NVIDIA, Intel MPI и OpenMP, GNU OpenMPI и OpenMP, OpenCL, PGI и другие. Реализации от Intel и PGI платные. Каждая их реализаций имеет свой набор компиляторов и библиотек с оптимизированными функциями, доступными разработчикам.

Установка различных реализаций и версий ПО положит начало созданию локального репозитория. В нашем случае локальный репозиторий постоянно растет по горизонтали, с добавлением новых пакетов. Кроме того, он растет и по вертикали, то есть многие пакеты содержат различные версии, что усложняет поддержку актуального состояния персональных настроек.

Для поддержания жизни в этой экосистеме требуется развитая инфраструктура из микросервисов и компонент, построенная вокруг вычислительного ядра. К ним относятся интерфейсы доступа к ресурсам, хранение данных, хранение программного обеспечения, виртуализация. На мой взгляд перечисленные компоненты являются основой, которая год за годом обрастает новыми слоями.

Основным двигателем являются, конечно же, пользователи. Круг замыкается, когда грамотное сопровождение привлекает заинтересованных разработчиков. Те, в конечном счете, создают очередь за вычислительными ресурсами, что приводит к расширению, а в нашем случае к появлению новых компонент, требующих тщательного документирования и грамотного сопровождения.