Как объединить мощности нескольких компьютеров
Перейти к содержимому

Как объединить мощности нескольких компьютеров

  • автор:

Как объединить мощность нескольких компьютеров под управлением одной Linux системы?

В офисе валяется куча ненужных, рабочих системных блоков. Вот я и решил объединить их в единую вычислительную сеть, а по сути в обычный компьютер управляемый единой ОС, но представляющий собой 3+ системных блока.

Итог: Мне нужно что бы 5+ коробок работала как одна, при этом я не хочу управлять каждым серваком отдельно, моя цель единая машина состоящая физически из нескольких под управлением одной системы. Что она будет делать? Да что угодно, хоть пусть будет web сервером с ip в интернете или просто рабочей станцией Ubuntu или fedora

Gybernaty's user avatar

Ответ сводится к тому, что Вам необходимо создать кластер компьютеров под управлением какой-либо Linux-like OS.

Вот несколько готовых решений:

[useless link: has been removed].

Описывать весь процесс в ответе особого смысла нет. Думаю, мой ответ вам полезен.

69 420 1970's user avatar

В таком виде — в котором вы спрашиваете: решения будут неэффективными. Системы из множества компьютеров(серверов) делаются отдельно, под каждую задачу свои, мало того программы — для работы которых и создаётся такая система — тоже пишутся именно под определённые системы серверов.

Называются они «высоконагруженные системы», и их создание/использование — это очень дорогой процесс, который называется «масштабирование». Крупнейшие примеры таких систем — социальные сети: например работу VK обеспечивает 10к машин, но сравнимых по мощности с домашним компьютером(как утверждают владельцы). Да и сам StackOverflow конечно работает не на одном сервере.

Если вам действительно интересно масштабирование: то стоит на крутом уровне освоить системное администрирование, docker, а также почитать лирику на тему хайлода https://ruhighload.com/scale

Гончаров Александр's user avatar

обычно решения строятся от задачи, а не от платформы

что конкретно вы хотите делать?

из личного опыта — анализ логов на биллинге, и ретарификация: делал ручным шардингом на уровне приложения (скрипты на Python), на пачке списанных десктопов, аккаунте на конторском IBM eServer, и паре десктопов под windows.

если у вас межсоединения на древнем 100mbit ethernet, а не как минимум 1G (не говоря уж о спецжелезе типа Infiniband) — дешевле будет пойти в магазин, купить самую поганую материнку и набить ее памятью под завязку, съэкономите на дорогом быстром 1G свитче и энергопотреблении

ваш вариант конфигурации может быть эффективен только в одном случае: все параллельные потоки полностью независиммы, и каждый блок задачи польностью влазит в ОЗУ и ресурсы одного узла, неплохо решаются вычислительные задачи с полным отсутствием зависимостей в архитектуре «одна нода — один расчетный блок»

с другой стороны, в качестве кластерной рабочей станции подобная утилизация вполне интересная и имеет право на жизнь, и может оказаться выигрышным вариантом: на рабочей станции активно не более 2-3 тяжелых задач, остальные ресурсы тратятся на хранение гигабайтных вкладок в браузере, текстовые редакторы и редкие пробежки утилит по файловой системе

Linux реализаций похоже нет:

    (R.I.P 2008, kernel 2.4)

так что решение задачи в оригинальной постановке сводится по факту к освоению системного программирования в полном объеме: написать аналог ядра Linux обеспечивающий весь необходимый функционал DOS, адаптировать базовые библиотеки в т.ч. из поставки копиляторов GNU (libc, libatomic, gomp. ) и пересобрать всю систему до состояния, когда сможет работать весь компплект ПО который вы используете

возможно более простым решением может оказаться написание слоя виртуализации: переписать только слой всех системных библиотек, который использует ваше прикладное ПО, с реализацией функционала distributed POSIX поверх обычных дистрибутивов, поставленных на каждый узел, или гипервизоров (желаю много весеслья с исходниками Xen и libgcc/libstdc++ 😎

с практической точки зрения:

  • ищите задачи с минимальным объемом обмена данными между потоками, и
  • пишите свое ПО: смотрите в сторону готовых распределенных платформ для веб/микросервисов, требующие для работы минимальных ресурсов
  • перетаскивайте бизнес-процессы в вашей конторе на веб-технологии, чтобы можно было раздать хилое железо юзерам в качестве терминалов/запускалок браузеров

к сожалению, насколько знаю бесплатных реализаций распределенного Smalltalk не существует, а то бы в первую очередь посоветовал его — как вариант, искать библиотеки для программирования на распределенном обмене сообщениями между объектами для mainstream языков

Увеличиваем мощность двух компьютеров: как объединить их в единую систему

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

Со временем любой компьютер становится устаревшим и не может справляться с требованиями новых технологий. Один из способов решения этого проблемы — объединение двух компьютеров в одну единую систему. Это позволяет увеличить мощность и производительность компьютеров и использовать их вместе для выполнения сложных задач.

Существует несколько способов объединения двух компьютеров. Один из них — использование сетевого кабеля или Wi-Fi. Для этого нужно подключить оба компьютера к одной и той же сети и настроить специальное программное обеспечение, которое позволит передавать информацию между компьютерами. Кроме того, можно использовать технологию облачных вычислений: создавать облачные хранилища и работать с ними с помощью двух компьютеров одновременно.

Если у вас есть два компьютера сразу с десктопного компьютера и ноутбука со всеми необходимыми приложениями и файлами, вам нужно знать, как это сделать правильно. Вот, что нужно сделать, чтобы сделать из двух компьютеров одну мощную систему:

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

2. Настройте сетевую общую папку
Для обмена файлами между двумя компьютерами необходимо создать общую папку и настроить ее доступность для обоих компьютеров.

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

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

Объединение двух компьютеров — это прекрасное решение для увеличения мощности и производительности. Следуя инструкциям, вы можете легко и быстро сделать из двух компьютеров одну мощную систему, которая позволит вам работать эффективнее и быстрее.

Как объединить два (или больше) компьютера для увеличения производительности

Что быстрее одного ПК? Два (или больше) ПК? И да, и нет. Как это часто бывает, всё зависит от ваших рабочих нагрузок. И даже если ваши рабочие нагрузки подходят для работы на нескольких ПК, как вы можете объединить их вычислительную мощность?

В этой статье мы рассмотрим различные рабочие нагрузки – от рендеринга до игр – и посмотрим, когда вам выгодно объединять несколько ПК – и как это сделать.

Преимущества объединения вычислительной мощности нескольких ПК

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

Соединение компьютеров и объединение их ресурсов вместе осуществляется по трём основным причинам:

  1. Вы можете продолжать использовать свой основной компьютер без замедлений. То есть, вы можете продолжать работать над своим следующим проектом или даже играть, в то время как, например, рендеринг или другие задачи обработки выполняются на вспомогательном компьютере.
  2. Чтобы ускорить чрезвычайно трудоемкие задачи. Некоторые задачи могут выполняться ужасно долго. На ум сразу приходят «Визуализация» и «Моделирование». Такие задачи обычно можно разделить на подзадачи и назначить их на одновременный запуск на разных компьютерах, что часто приводит к почти линейному уменьшению времени обработки. Однако, узким местом здесь является задержка сетевого подключения, но для хорошо распараллеленных рабочих нагрузок ею можно пренебречь.
  3. Из соображений безопасности и надёжности. Может быть вы ведёте процесс, который вы не хотите прерывать, так почему бы не иметь дополнительный компьютер, который может взять на себя управление, если первый выйдет из строя? Это может уберечь вас от любой потенциальной потери данных или временных задержек, которые могут замедлить проект или текущий процесс (например, сеанс прямой трансляции).

Как объединяется вычислительная мощность (на высоком уровне)

Слово «объединяется» здесь немного вводит в заблуждение. Если бы я действительно объединил 2 ПК, я бы ожидал, что в результате один ПК будет в два раза мощнее. Но, объединение вычислительной мощности не работает таким образом. Вы не собираете и не комбинируете оборудование физически.

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

Для простоты мы будем измерять вычислительную мощность ПК тем, сколько времени требуется для выполнения одной задачи. Этой задачей может быть, например, рендеринг видео (последовательности изображений).

Если одному ПК требуется 1 час для рендеринга нашего видео, то двум ПК оптимально потребуется всего 30 минут для завершения рендеринга. Если у вас 10 ПК, то рендеринг видео будет выполнен всего за 6 минут.

Это оптимальный случай.

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

Существует множество способов объединения ПК, но наиболее часто используемым и самым простым является сетевое подключение. Вы идёте, покупаете коммутатор и несколько LAN-кабелей и подключаете их друг к другу.

Так же работают сервера. Сервер – это просто красивое слово для компьютера с другим форм-фактором и предполагаемым вариантом использования, но все они подключены друг к другу через сетевое соединение.

Задержка сетевого соединения

Конечно, сетевое (или любое другое) соединение приводит к задержке.

Чем дальше данные должны перемещаться, тем больше становится задержка (с точки зрения непрофессионала).

Расстояния внутри ПК очень малы, поэтому передача данных чрезвычайно быстрая (например, между ЦП и ОЗУ одного ПК). Но, от одного ПК к другому ПК по неоптимальным проводам (кабелям локальной сети) намного медленнее.

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

Это также означает, что не все задачи можно легко распараллелить. Только задачи, которые можно легко разделить на независимые подзадачи. Подробнее об этом позже.

Какие виды производительности можно совмещать

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

Варианты использования установки на основе двух компьютеров

Процессор объединенного ПК

Если вы собираетесь делегировать задачу рендеринга дополнительному компьютеру, скорее всего, вам понадобится мощность его процессора.

Лучший процессор для рендеринга – это процессор с большим количеством ядер и высокой тактовой частотой.

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

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

Резюмируем: вы сможете использовать CPU второго ПК, но, в зависимости от его производительности, польза может быть не такой уж большой.

Видеокарта объединенного ПК

Если ваши рабочие нагрузки зависят от производительности графического процессора (например, рендеринг на GPU), то второй, неиспользуемый графический процессор может очень помочь вам в сокращении ресурсов или добавлении ресурсов к вашему основному ПК.

ПК могут управлять более чем одним графическим процессором. С помощью сборок рабочей станции HEDT, которые могут функционировать как узлы рендеринга, вы можете добавить до 4 видеокарт на (настольный) ПК.

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

Рендеринг на CPU и GPU – что выбрать

Другие элементы объединенного ПК

Хотя вторичный ПК, скорее всего, будет использоваться либо из-за его ЦП, либо из-за видеокарты, в некоторых случаях могут использоваться аппаратные компоненты без прямой обработки.

Хранилище объединенного ПК

Например, вы можете использовать дополнительные устройства хранения для создания системы сетевого хранилища (NAS), конфигурации RAID или того и другого через соединение Ethernet.

Конфигурации хранилища по типам RAID

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

Однако, это может означать не столько объединение «вычислительной мощности», сколько «наилучшее использование независимых ресурсов».

ОЗУ / видеопамять объединенного ПК

В некоторых случаях вы также можете использовать ОЗУ (память) дополнительного устройства.

Оперативная память подключена к ЦП через высокоскоростную шину, поэтому к ней можно получить доступ в одно мгновение.

Если бы ЦП одного компьютера обращался к ОЗУ другого, это заняло бы значительное количество времени, что сделало бы весь процесс бессмысленным.

Однако, если вы назначаете подзадачу второму ПК и ЦП использует ОЗУ этого ПК для выполнения задачи, вы можете освободить память ОЗУ на своём основном компьютере.

Это делается автоматически и идёт рука об руку с использованием вычислительной мощности ЦП или GPU (и его видеопамяти) дополнительного ПК.

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

Какие рабочие нагрузки можно запускать на нескольких ПК

Давайте рассмотрим некоторые из наиболее распространенных задач, которые можно выполнять, используя несколько компьютеров:

  • 3D визуализация
  • Рендеринг видео
  • Симуляторы
  • Пакетная обработка
  • Майнинг криптовалюты
  • Последовательная обработка изображений
  • Машинное обучение
  • Потоковая трансляция

Вы можете добавить в этот список любые другие рабочие нагрузки, которые можно разделить на независимые подзадачи.

Почему подзадачи?

Помните, что мы говорили о задержке выше? Чем меньше «разговоров в сети», тем быстрее могут выполняться процессы.

Если простой задаче требуется 1 секунда для передачи данных по сети, то задача, состоящая из 1 миллиона таких простых задач, займёт целую вечность.

Вот если бы эта простая задача получала данные не через сеть, а из своей локальной памяти, этот запрос занял бы всего 10 наносекунд! В 100000000 раз быстрее.

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

Мы можем сделать это, взяв большую задачу и разделив её на независимые подзадачи.

Независимые, так что отдельный ПК может работать над этой подзадачей без необходимости какого-либо доступа к сети (до тех пор, пока задание не будет завершено и результат не будет отправлен обратно на хост).

Давайте сделаем пример. Рабочая нагрузка/задача, которую можно легко распараллелить:

Обработка изображений (например, пакетное масштабирование изображений до другого разрешения)

Если вы хотите изменить размер 1000 изображений на 4 компьютерах, нет ничего проще, чем изменить размер 250 изображений на каждом компьютере.

Задачу изменения размера 1000 изображений можно легко разделить на 1000 подзадач. Каждое изменение размера изображения является одной подзадачей.

Рендеринг 3D-анимации

Это работает так же. Рендеринг анимации, состоящей из 100 кадров, можно легко разделить на 100 отдельных подзадач. Рендеринг 1 кадра является подзадачей.

Если бы у вас было 100 ПК, эта анимация из 100 кадров отображалась бы в 100 раз быстрее, чем на одном ПК (оптимально).

Что, если бы у нас был 101 ПК? Или 1000 ПК? Поможет ли это?

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

Это подводит нас к следующему разделу:

Можно ли объединить вычислительную мощность двух ПК для игр

Это пример задачи, которую нельзя разделить на подзадачи:

Вы не можете разделить запуск игры на подзадачи, которые выиграют от запуска на нескольких ПК. Из-за задержки.

Допустим, вы хотите использовать видеокарту на дополнительном ПК для графических вычислений, а не на основном ПК, на котором запущена ваша игра.

Поскольку графическому процессору требуется доступ к данным 3D-модели, данным сцены, текстурам, анимации заданного уровня в режиме реального времени, 60 раз (или более) в секунду, ваше сетевое соединение слишком медленное и имеет неподходящую задержку для отправки требуемых данных. Вы столкнётесь с ужасным отставанием.

Любая задача, требующая взаимодействия в реальном времени, обычно не подходит для выполнения на нескольких ПК.

Конечно, вы можете просто запустить игру на своём втором ПК, а также удаленно / совместно использовать экран и управлять этим вторым ПК с вашего первого ПК, но это не объединяет вычислительную мощность. Это просто игра на втором ПК и управление им с первого.

Задержка намного меньше, но некоторая задержка всё же есть, так как готовые отрендеренные кадры все равно должны быть отправлены вам по сети для отображения на мониторе вашего первого ПК. Кстати, именно так работают онлайн-игры.

Что насчёт стриминга?

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

Если использовать термины, которые мы ввели выше: запуск игры – это одна (под) задача, запуск потока – другая (под) задача. Хотя это не идеально масштабируется, у вас есть две задачи, и потоковая трансляция может быть передана на второй компьютер без каких-либо проблем.

Это не только высвобождает ресурсы главного компьютера, позволяя процессору и видеокарте сосредоточиться на обработке игрового приложения, но и обеспечивает безопасность.

Как настроить дополнительный ПК для потоковой трансляции

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

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

Как объединить вычислительную мощность нескольких ПК

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

Объединение компьютеров через сеть

Мы уже немного говорили о сетевых соединениях.

Это, пожалуй, самый простой способ соединить несколько компьютеров друг с другом. Вы можете использовать устройства в сети домашней группы (Windows), чтобы обмениваться файлами и периферийными устройствами.

Это также шаг, который позволяет определенному специализированному программному обеспечению (например, Render Manager Thinkbox Deadline) использовать вычислительную мощность обоих ваших ПК за счёт возможностей конкретного приложения.

Программные возможности для объединения ПК

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

Например, некоторые механизмы 3D-рендеринга, такие как OctaneRender, будут иметь опцию «сетевой рендеринг». Использование этой опции в настройках позволит вам отправлять задачи рендеринга на второй компьютер одним нажатием кнопки (после некоторой настройки).

Менеджеры рендеринга

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

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

Если вы хотите сделать инвестиции и создать собственную рендер-ферму, ваши компьютеры могут стать узлами рендеринга. Эти узлы рендеринга впоследствии контролируются менеджером рендеринга.

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

Одним из таких приложений Render Manager является Deadline от Thinkbox.

Параллельная виртуальная машина

Две широко используемые формы распределенных вычислений: параллельная виртуальная машина (PVM) и интерфейс передачи сообщений (MPI). Они немного сложнее и сложны в настройке.

PVM позволяет вам подключать разнородные компьютеры (в основном, ПК с разной аппаратной архитектурой, например, AMD или Intel) для параллельных операций.

Интерфейс передачи сообщений

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

VirtualBox также позволяет создавать гостевые операционные системы на устройстве, что даёт вам возможность тестировать приложения в разных операционных системах (если есть проблема совместимости).

Например, если вы используете Mac, но приложение, которое вы хотите запустить, работает только в Windows, вы можете установить виртуальную ОС и подключить свои отдельные компьютеры к этой ОС и заставить их выполнять приложение.

Я знаю, это звучит сложно, но на самом деле это проще, чем кажется.

В конце концов, вы всегда ограничены узким местом, которое создает сетевое подключение.

Имеет ли смысл объединение нескольких компьютеров

Как уже говорилось, это зависит от выполняемых вами рабочих нагрузок.

  • Можно ли разделить вашу рабочую нагрузку на независимые подзадачи? (это хорошо для распределения между несколькими ПК). Примеры – пассивные задачи, такие как рендеринг, пакетная обработка.
  • Или ваши рабочие нагрузки сильно зависят от задержки? (это плохо для распределения между несколькими ПК). Примеры – активные задачи, такие как игры, активная работа в программном приложении.

Можно ли объединить ноутбук и ПК

Конечно! Ноутбуки – это просто ПК в другом форм-факторе, поэтому всё вышесказанное относится и к ним.

Однако, их более низкая производительность по сравнению с настольными ПК или серверами не делает их моим первым выбором.

Если у вас уже есть ноутбук, смело используйте его, но не покупайте дополнительный ноутбук для повышения производительности.

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

Выводы

Объединение вычислительной мощности двух или более ПК может значительно повысить вашу эффективность, ускорить рабочие нагрузки и снизить риск потери данных или потери времени.

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

Просто помните: это метод, используемый в основном для разделения процесса на подзадачи и распределения их по разным машинам, чтобы они могли выполняться одновременно.

Создание кластера для расчета в OpenFOAM

В статье я расскажу, как можно (при необходимости) быстро и дешево собрать кластер Beowulf на основе домашних компьютеров. Выполню я это с помощью компьютеров находящихся в аудитории университета, используя существующую локальную сеть. Используемые программные инструменты: средства численного моделирования механики сплошных сред OpenFOAM, сетевого протокола прикладного уровня SSH и распределенного протокола файловой системы NFS. Все выполнялось под управлением операционной системы ubuntu 20.04.

Предисловие

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

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

Введение

Определение кластера

Кластер – группа компьютеров, объединенных в локальную вычислительную сеть (ЛВС) и способных работать в качестве единого вычислительного ресурса.

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

Кластер Beowulf

Общеизвестный кластер NASA

Общеизвестный кластер NASA

В настоящее время под кластером типа Beowulf понимается система, которая состоит из одного серверного узла и одного или более клиентских узлов, соединенных при помощи Ethernet или некоторой другой сети. Это система, построенная из готовых серийно выпускающихся промышленных компонентов, на которых может работать ОС Linux, стандартных адаптеров Ethernet и коммутаторов. Она не содержит специфических аппаратных компонентов и легко воспроизводима. Серверный узел управляет всем кластером и является файл-сервером для клиентских узлов. Он также является консолью кластера и шлюзом во внешнюю сеть. Большие системы Beowulf могут иметь более одного серверного узла, а также, возможно, специализированные узлы, например консоли или станции мониторинга. Они конфигурируются и управляются серверными узлами и выполняют только то, что предписано серверным узлом.

Вычислительная среда OpenFOAM

OpenFOAM — это бесплатное программное обеспечение CFD с открытым исходным кодом, разработанное, в основном, компанией OpenCFD Ltd с 2004 года. Оно имеет большую базу пользователей в большинстве областей техники и науки, как коммерческих, так и академических организаций. OpenFOAM имеет широкий набор функций для решения любых задач — от сложных потоков жидкости, включающих химические реакции, турбулентность и теплопередачу, до акустики, механики твердого тела и электромагнитных систем.

Настройка рабочей среды

Физическое соединение устройств

Два и более компьютера нужно соединить друг с другом. Самый простой способ это сделать — задействовать коммутатор и соединить их с помощью витой пары.

Выбор операционной системы

Решено использовать систему Linux, конкретный дистрибутив — Ubuntu 20.04, десктопной и серверной версии соответственно.

Это связано с тем, что по состоянию на 2022 год среда вычисления OpenFOAM, выбранная для расчётов, стабильно работает именно на этом дистрибутиве именно этой версии. Также система Linux, будучи системой с распространяемыми исходными кодами, является основой для кластера Beowulf.

Десктоп-версия

Десктоп-версия — это версия системы, имеющая графический интерфейс. Он нужен будет для удобного взаимодействия с файлами, а также для просмотра результатов расчёта. Десктоп-версия будет стоять на главном компьютере.

После того, как вы с загрузочного диска запустите установщик, следуйте серии шагов:

Выберите язык (предпочтителен English);

Нажимаем install ubuntu;

Выберите язык (предпочтителен English);

Не изменяем предустановленные программы;

Не изменяем типы инсталляторов;

Выбираем время системы;

Введите имя пользователя (в данном случае используется pisi), а также пароль. Пароли и имена серверов должны быть абсолютно одинаковы для всех компьютеров, связанных с кластером.

После перезагрузите систему (вам предложит это сделать система)

Серверная версия

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

После того, как вы с загрузочного диска запустите установщик, следуйте серии шагов:

Выберите язык (предпочтителен English);

Не обновляйте установщик;

Не изменяйте настройки клавиатуры;

Не изменяйте настройки сети;

Используйте весь диск для установки и подтвердите его перезапись, если потребуется;

Не изменяйте настройки зеркала;

Не изменяйте настройки файловой системы;

Введите имя пользователя, сервера, а также пароль. Пароли и имена серверов должны быть абсолютно одинаковы для всех компьютеров, связанных с кластером.

Server Snaps оставьте без изменений;

После окончания установки извлеките загрузочный диск и перезагрузите компьютер.

Завершения установки

В обоих случаях, вам надо завершить установку, зайдя в директорию Home /home/<user>/, и создать папку OpenFOAM mkdir/OpenFOAM. Должен получиться путь: /home/<user>/OpenFOAM. <user> — это заданное вами имя пользователя (на изображениях в данном документе можно заметить имя «pisi»).

Наличие подкаталогов в текущем каталоге можно проверить с помощью команды ls.

Установка OpenFOAM

Установка OpenFOAM состоит так же из двух этапах и должна производиться всех компьютерах участвующих в объединении, это связано с тем, что OpenFOAM это не программа, а набор библиотек необходимых для произведения расчетов системы.

Для того чтобы установить OpenFOAM необходимо в терминале прописать следующую команду что представлена ниже.

Кратко опишем функционал команды.

curl — команда взаимодействия с интернетом.

-s –- сохранение скачанных фалов в систему.

url — ссылка на скачиваемый файл.

bash — дает возможность создания скриптов.

Примечание: если по каким то причинам не оказалось команды curl, то введите следующую команду в терминал: sudo apt install curl и убедиться что установлена правильная версия системы.

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

Примечания: так как это набор библиотек, то нет практического способа проверить правильность действий, то необходимо проверить их наличие в файловой системе операционной системы.

Для этого необходимо выполнить следующую команду в терминале.

Кратко опишем функционал команды.

cd — это переход в папку по пути.

далее идет путь.

Если в результате выполнения команды не появилось ошибок, то все действия выполнены правильно, в противном случае выполните последовательность действий начиная с скачивания OpenFOAM.

Если проверка прошла успешно, то выполняем команду cd.

Установка и настройка SSH

SSH — это защищенный протокол для удаленного управления операционной системой. Он пригодится для безопасного соединения компьютеров друг с другом.

Десктоп-версия

Десктоп-версия по-умолчанию не имеет встроенного SSH, поэтому его нужно установить, это продемонстрировано на примере ниже.

Других отличий нет. Выполняйте все те шаги, что описаны ниже, для серверной версии.

Серверная версия

В отличие от версии с графическим интерфейсом, серверная версия по-умолчанию имеет в себе предустановленный пакет OpenSSH (точнее, эту опцию можно выбрать при установке), и здесь этап установки не требуется. В противном же случае повторите действия, предназначенные для десктоп-версии.

Следом выполните следующие шаги.

Создаёт директорию SSH. Может выдать ошибку, если директория уже есть.

Назначает права полного доступа для этой директории. Может потребоваться ввести вместе с sudo.

Создаёт новый ключ. Оставьте все поля по-умолчанию.

ssh-copy-id -i /home/<user>/.ssh/id_rsa.pub <user>@<ip>

Копирует ваш ключ на другой компьютер по IP-адресу. Это позволит вам позже входить на этот компьютер без пароля.

<user> — это имя вашего пользователя.

<ip> — это IP-адрес компьютера, куда вы передаёте ключ.

Проверка подключения (должна быть без пароля).

Настройте так все компьютеры. Ключи должны быть переданы каждому сателлиту от сервера, и наоборот.

Примечание: для проверки работоспособности SSH соединение необходимо проверить несколько условий:

Соединение должно работать от каждого устройства к каждому.

Все устройства должны производить соединения без пароля за исключением первого раза.

Главное, чтобы главный компьютер мог подключиться к серверу и наоборот без пароля.

Установка и настройка NFS

Установка NFS для Десктоп-версии

В командной строке необходимо прописать команду установки утилиты для создания общей сетевой папки среди всех компьютерах кластера.

Примечание: предварительно необходимо иметь папку в домашнем каталоге, если этого нет, то просмотрите пункт «Завершения установки».

Чтобы установить NFS, необходимо скачать его. Для этого пропишем в терминале следующую команду.

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

Кратко опишем функционал команды.

chown — это изменение владельца файла или папки

nobody:nogroup — сообщает системе что папка не принадлежит не одному владельцу и группе

Предоставим права доступа для папки.

Кратко опишем функционал команды:

777 — это теговое значение прав доступа к последующей папке.

После необходимо внести изменения в файл exports, указав узлы связи, которые вы хотите подключить к ранее приписываемой папке.

Кратко опишем функционал команды:

nano — это встроенный редактор текста, основные команды которого являются: Ctrl+S (сохранение файла) и Ctrl+X (выход из редактора).

В самом редакторе необходимо в конце прописать следующую строку.

После вписывания в файл следующей команды, повторяем её со всеми компьютерами серверной версии операционной системы.

Примечание: для того чтобы узнать IP-адрес компьютера, в командной строке введите команду ip address, там вы сможете узнать узнать адрес конкретной системы.

После всех вышеописанных действий необходимо произвести монтирование сервера. Для этого пропишем в терминале команду.

Кратко опишем функционал команды:

exportfs — это изменяемый файл.

-a — то применения изменений к нему.

Следующим шагом необходимо произвести перезагрузку сервера с настроенными параметрами сетевой папки. Для этого пропишем команду в терминале, представленную ниже.

Кратко опишем функционал команды:

systemctl — системный диспетчер.

restart — рестарт сервера.

nfs-kernel-server.service — файл сервера .

Настройка утилиты NFS для серверной версии

Для этого необходимо произвести закачку программного пакета на устройства. Воспользуемся командной, вводимой в терминале.

После, по аналогии с десктоп-версией, необходимо изменить файлы настройки сетевой папки. Для этого воспользуемся командой.

После введем в редакторе кода одну строчку, относящуюся к десктоп-версии системы.

Примечание: Ctrl+S (сохранение файла) и Ctrl+X (выход из редактора).

Далее смонтируем точку для того, чтобы сообщить десктоп-версии, что сервер готов к общению.

Примечание: Тут могут возникнуть проблемы, это нормально, значит вы что то сделали не так, как было указано в инструкции, это связано с тем что в Ubuntu нет фиксации ошибок. Для этого необходимо произвести ряд проверок, чтобы определить где произошла ошибка.

Проверьте настройку SSH, произведя подключения со всех устройств ко всем командой: ssh @.

Проверьте отсутствие запрашиваемого пароля при SSH-соединение..

Проверьте правильность файлов, где прописываются IP-адреса.

Проверьте, чтобы не изменились IP-адреса во время настройки (такой случай возможен).

Проверьте опечатки местоположения синхронизируемой папки.

Проверьте одинаковость названий синхронизируемой папки.

Если все вышеперечисленные проверки прошли верно, однако система все равно не заработала, то сделайте все шаги заново, так как старые файлы не удаляются, есть шанс что вы случайно исправите ошибку (на практике это часто срабатывало).

Начало вычислений

Тест проверки ядер

Перед началом работы непосредственно с OpenFOAM стоит разработать программу, которая смогла бы проверить, отзываются ли ядра у всех компьютеров, которые надо будет использовать для последующих вычислений.

Программа написана на языке С. Исходный код этой программы компилируется в исполняемый файл, именуемый «mpi_hello» (тестовое наименование, наподобие «Hello World!»). Команда компиляции в терминале следующая.

Кратко опишем функционал команды:

mpicc — команда запуска компиляции.

mpi_hello.c — файл с исходным кодом.

-o mpi_hello — выходной файл.

Полный исходный код этой программы приведен в приложении 1, здесь описаны основные моменты её работы.

Данный фрагмент кода последовательно получает три параметра: количество ядер, ранг текущего процесса, и имя хоста. Затем эти данные выводятся в терминал.

Программу можно запустить с помощью команды, представленной ниже.

Кратко опишем функционал команды:

mpirun — запуск исполняемого файла.

./mpi_hello — исполняемый файл.

Результат выводится в консоль.

Результаты работы

Результаты работы

Проверка работы программы на нескольких ядрах

Следующий этап — указание количества ядер. Для mpirun это возможно сделать с помощью аргумента «np».

Кратко опишем функционал команды:

-np — указания количества ядер.

Результат работы представлен ниже.

Отчет работы программы по нескольким ядрам

Отчет работы программы по нескольким ядрам

Проверка работы на нескольких компьютерах

С помощью команды “mpirun” в терминале можно также послать скомпилированную программу на несколько компьютеров.

Количество процессоров –- общее для всех компьютеров, а имя файла — это имя файла, где перечислены IP-адреса и количество ядер, которое будет у него использоваться.

Параметр slots отвечает за количество ядер.

Первый адрес, 127.0.0.1, — это локальный адрес компьютера (localhost), с него всегда начинается основная работа. Другие IP-адреса — это IP-адреса других компьютеров.

Примечание. Данную команду не надо выполнять на компьютере-сателлите, так как локальный адрес будет совпадать с одним из ниже перечисленных, что приведёт к путанице с распределением и последующей ошибке.

Отчет программы после работы на нескольких компах

Отчет программы после работы на нескольких компах

Проверка концепции ускорения (уменьшение времени) скорости вычислений общей задачи. Для этого воспользуемся стандартной задачей предложенной openfoam на головной странице. Так что первоначально копируем пример из домашней директории OpenFOAM в папку, синхронизируемую ранее (сетевую папку).

Примечание: предварительно необходимо создать папку -v2006 в папке синхронизируемой системы. Это можно сделать в ручном режиме, если вы создаёте его в десктоп-версии.

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

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

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

Примечание: этот процесс занимает крайне много времени и требует большой объем оперативной памяти. В нашем случае — около 80 ГБ на 3 компьютера. Чтобы не устанавливать дорогостоящую память в компьютер, необходимо увеличить файл подкачки на SSD-диске. Для этого необходимо выполнить команду.

Примечание: все промежуточные значения прописываются в файле log ,и если что то пошло не так, то подробности можно узнать там.

Далее, после просчета сетки, можно приступить к запуску самого расчета задачи. Для этого вставим в командную строку текст.

ЗАКЛЮЧЕНИЕ

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

Примечание: точность выводов основана на субъективной оценке в связи с невозможностью составления прогноза работы и скорости вычислений.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *