Кластер CycleCloud GridEngine
Open Grid Scheduler (Grid Engine) можно легко включить в кластере Azure CycleCloud, изменив "run_list" в определении кластера. Двумя основными компонентами кластера grid Engine являются главный узел, который предоставляет общую файловую систему, на которой выполняется программное обеспечение Grid Engine, и узлы execute, которые являются узлами, которые подключают общую файловую систему и выполняют отправленные задания. Например, простой фрагмент шаблона кластера Grid Engine может выглядеть следующим образом:
[cluster grid-engine]
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[configuration]]]
run_list = role[sge_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[configuration]]]
run_list = role[sge_execute_role]
Примечание
Имена ролей содержат "sge" по устаревшим причинам: Grid Engine был продуктом Sun Microsystems.
При импорте и запуске кластера с определением в CycleCloud будет получен один главный узел. Узлы выполнения можно добавить в кластер с помощью cyclecloud add_node
команды . Например, чтобы добавить еще 10 узлов, выполните следующую команду:
cyclecloud add_node grid-engine -t execute -c 10
Автомасштабирование подсистемы сетки
Azure CycleCloud поддерживает автомасштабирование для Grid Engine. Это означает, что программное обеспечение будет отслеживать состояние очереди и включать и отключать узлы по мере необходимости, чтобы завершить работу в оптимальное время или затраты. Вы можете включить автомасштабирование для grid Engine, добавив Autoscale = true
в определение кластера:
[cluster grid-engine]
Autoscale = True
По умолчанию все задания, отправленные в очередь ядра сетки, будут выполняться на компьютерах типа "execute", которые определяются массивом узлов с именем "execute". Вы не ограничиваетесь именем "execute" и не ограничиваетесь одним типом конфигурации компьютера для запуска заданий и автомасштабирования.
Например, типичным случаем может быть кластер с двумя разными определениями узлов, одно из которых предназначено для выполнения "обычных" заданий, которые используют стандартный ЦП, в то время как другой тип заданий может использовать компьютеры с GPU. В этом случае необходимо независимо масштабировать очередь как по обычным заданиям, так и по заданиям GPU, чтобы убедиться, что у вас есть соответствующий объем каждого компьютера для использования рабочей очереди. Пример определения может выглядеть примерно так:
[cluster grid-engine]
Autoscale = True
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A3 # 4 cores
[[[configuration]]]
run_list = role[sge_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[configuration]]]
run_list = role[sge_execute_role]
[[nodearray gpu]]
MachineType = Standard_NV12 # 2 GPUs
ImageName = cycle.image.centos7
# Set the number of cores to the number of GPUs for autoscaling purposes
CoreCount = 2
[[[configuration]]]
run_list = role[sge_execute_role]
gridengine.slot_type = gpu
gridengine.slots = 2
В приведенном выше примере теперь есть два массива узлов: один является "стандартным" массивом узлов выполнения, второй называется GPU, предоставляя MachineType с двумя GPU Nvidia (Standard_NV12 в Azure). Кроме того, обратите внимание, что в разделе конфигурации есть два новых элемента, кроме рецепта csge:sgeexec. Добавление gridengine.slot_type = gpu
сообщает планировщику ядра сетки, что эти узлы должны называться узлами GPU и поэтому должны выполнять только задания GPU. Имя gpu является произвольным, но наиболее полезным является имя, описывающее узел. Задайте gridengine.slots = 2
параметр , который сообщает программному обеспечению, что узел этого типа может выполнять только два задания одновременно (Standard_NV12 имеет только 2 GPU). По умолчанию число слотов на узел в Grid Engine будет равно количеству ЦП в системе, что в этом случае приведет к одновременному выполнению слишком большого количества заданий на узле. В приведенном выше примере параметр задается в nodearray в соответствии с количеством GPU, CoreCount=2
доступными в MachineType, что позволяет CycleCloud правильно масштабировать этот массив на GPU и количество ЦП.
Вы можете проверить количество слотов и slot_type компьютеров, выполнив команду :
-bash-4.1# qstat -F slot_type
queuename qtype resv/used/tot. load_avg arch states
---------------------------------------------------------------------------------
all.q@ip-0A000404 BIP 0/0/4 0.17 linux-x64
hf:slot_type=execute
---------------------------------------------------------------------------------
all.q@ip-0A000405 BIP 0/0/2 2.18 linux-x64
hf:slot_type=gpu
---------------------------------------------------------------------------------
all.q@ip-0A000406 BIP 0/0/4 0.25 linux-x64
Обратите внимание, что мы указали один из всех slot_type (execute и GPU), а количество слотов для слота execute равно 4, то есть числу ЦП на компьютере. Число слотов для типа слота GPU равно 2, которые мы указали в нашем шаблоне конфигурации кластера. Третий компьютер является главным узлом, на котором не выполняются задания.
Расширенное использование подсистемы сетки
Приведенные выше параметры конфигурации позволяют выполнять расширенную настройку узлов и массивов узлов. Например, если заданиям требуется определенный объем памяти, скажем, 10 ГБ, можно определить узел выполнения, который запускает компьютеры с 60 ГБ памяти, а затем добавить параметры gridengine.slots = 6
конфигурации, чтобы гарантировать, что на узле этого типа одновременно могут выполняться только 6 заданий (чтобы каждое задание было иметь не менее 10 ГБ памяти для работы).
Сгруппированные узлы в подсистеме сетки
При отправке параллельного задания в подсистему сетки поведение автомасштабирования по умолчанию, которое будет использовать CycleCloud, заключается в том, чтобы обрабатывать каждое задание MPI как запрос на сгруппированные узлы. Сгруппированные узлы тесно связаны и идеально подходят для рабочих процессов MPI.
Когда набор сгруппированных узлов присоединяется к кластеру Grid Engine, идентификатор группы каждого узла используется в качестве значения сложного значения affinity_group
. Требуя указать для заданий affinity_group
, он позволяет планировщику Подсистемы сетки гарантировать, что задания будут находиться только на компьютерах, которые находятся в одной группе.
Автоматизация CycleCloud автоматически запрашивает сгруппированные узлы и назначает их доступным группам сходства при обнаружении параллельных заданий.
Отправка заданий в подсистему сетки
Наиболее универсальным способом отправки заданий в планировщик подсистемы сетки является команда :
qsub my_job.sh
Эта команда отправит задание, которое будет выполняться на узле типа "execute", который является узлом, определенным в nodearray "execute". Чтобы задание выполнялось на узле другого типа, например в приведенном выше типе узла GPU, мы изменим нашу отправку:
qsub -l slot_type=gpu my_gpu_job.sh
Эта команда гарантирует, что задание выполняется только на slot_type gpu.
Если slot_type опущен, задание будет автоматически назначено "execute". Пользователь может изменить механизм, который автоматически назначает заданиям slot_type. Можно создать скрипт Python, расположенный по адресу /opt/cycle/jetpack/config/autoscale.py , который должен определить одну функцию "sge_job_handler". Эта функция получает представление задания в словаре, аналогично выходным данным qstat -j JOB_ID
команды, и должна возвращать словарь жестких ресурсов, которые необходимо обновить для задания. Например, ниже приведен скрипт, который назначит задание slot_type gpu, если имя задания содержит буквы gpu. Это позволит пользователю отправлять задания из автоматизированной системы без необходимости изменять параметры задания и по-прежнему выполнять задания на правильных узлах и автомасштабировать их:
#!/usr/env python
#
# File: /opt/cycle/jetpack/config/autoscale.py
#
def sge_job_handler(job):
# The 'job' parameter is a dictionary containing the data present in a 'qstat -j JOB_ID':
hard_resources = {'slot_type': 'execute', 'affinity_group' : 'default' }
# Don't modify anything if the job already has a slot type
# You could modify the slot type at runtime by not checking this
if 'hard_resources' in job and 'slot_type' in job['hard_resources']:
return hard_resources
# If the job's script name contains the string 'gpu' then it's assumed to be a GPU job.
# Return a dictionary containing the new job_slot requirement to be updated.
# For example: 'big_data_gpu.sh' would be run on a 'gpu' node.
if job['job_name'].find('gpu') != -1:
hard_resources {'slot_type': 'gpu'}
else:
return hard_resources
Переданный параметр job — это словарь, содержащий данные в вызове qstat -j JOB_ID
:
{
"job_number": 5,
"job_name": "test.sh",
"script_file": "test.sh",
"account": "sge",
"owner": "cluster.user",
"uid": 100,
"group": "cluster.user",
"gid": 200,
"submission_time": "2013-10-09T09:09:09",
"job_args": ['arg1', 'arg2', 'arg3'],
"hard_resources": {
'mem_free': '15G',
'slot_type': 'execute'
}
}
Эту функцию сценариев можно использовать для автоматического назначения slot_type на основе любого параметра, определенного в задании, например аргументов, других требований к ресурсам, таких как память, отправка пользователя и т. д.
Если вы хотите отправить 5 заданий каждого "slot_type":
qsub -t 1:5 gpu_job.sh
qsub -t 1:5 normal_job.sh
Теперь в очереди будет 10 заданий. Из-за сценария, определенного выше, пять заданий с gpu в имени будут автоматически настроены для запуска только на узлах "slot_type=gpu". Механизм автомасштабирования CycleCloud определяет наличие 5 заданий GPU и 5 заданий выполнения. Так как узел GPU определяется как имеющий 2 слота на узел, CycleCloud будет запускать 3 из этих узлов (5/2=2,5 с округлением до 3). Существует 5 обычных заданий, так как тип компьютера для узла "выполнение" имеет 4 ЦП каждое, CycleCloud запустит 2 из этих узлов для обработки заданий (5/4 = 1,25 округлено до 2). Через некоторое время для загрузки и настройки вновь запущенных узлов все 10 заданий будут выполняться до завершения, а затем 5 узлов автоматически завершатся, прежде чем поставщик облачных служб снова будет выставлять счета.
Предполагается, что продолжительность заданий составляет один час. Если среда выполнения задания известна, алгоритм автомасштабирования может воспользоваться этой информацией. Сообщите автомасштабированию об ожидаемом времени выполнения задания, добавив его в контекст задания. В следующем примере автомасштабирование показывает, что среда выполнения задания в среднем составляет 10 минут:
qsub -ac average_runtime=10 job_with_duration_of_10m.sh
Справочник по конфигурации ядра сетки
Ниже приведены параметры конфигурации, относящиеся к подсистеме сетки, которые можно переключить для настройки функциональных возможностей:
Параметры конфигурации SGE-Specific | Описание |
---|---|
gridengine.slots | Количество слотов для данного узла, отчитывающегося в компонент Grid Engine. Количество слотов — это количество одновременных заданий, которые может выполнять узел. Это значение по умолчанию равно количеству ЦП на данном компьютере. Это значение можно переопределить в случаях, когда задания выполняются не на основе ЦП, а на памяти, GPU и т. д. |
gridengine.slot_type | Имя типа слота, который предоставляет узел. Значение по умолчанию — execute. Если задание помечено жестким ресурсом "slot_type=", это задание будет выполняться только на компьютере с тем же типом слота. Это позволяет создавать различные конфигурации программного обеспечения и оборудования для каждого узла и гарантировать, что на узле правильного типа всегда запланировано соответствующее задание. |
gridengine.ignore_fqdn | Значение по умолчанию — true. Установите значение false, если все узлы в кластере не являются частью одного домена DNS. |
gridengine.version | Значение по умолчанию: "2011.11". Это версия ядра сетки для установки и запуска. В настоящее время это единственный параметр по умолчанию. В будущем могут поддерживаться дополнительные версии программного обеспечения Grid Engine. |
gridengine.root | По умолчанию: "/sched/sge/sge-2011.11". Это место, где модуль сетки будет установлен и подключен на каждом узле в системе. Это значение не рекомендуется изменять, но если оно так, оно должно быть равно одному и тому же значению на каждом узле в кластере. |
CycleCloud поддерживает стандартный набор атрибутов автостопа в планировщиках:
attribute | Описание |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | Включена ли автостопома на этом узле? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | Время (в секундах), в течение которого узел находится в режиме простоя после завершения заданий до уменьшения масштаба. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Время (в секундах), в течение которого узел находится в режиме простоя перед выполнением заданий перед уменьшением масштаба. |
Известные проблемы
-
qsh
Команда для интерактивного сеанса не работает. Используйтеqrsh
в качестве альтернативы. - При
exclusive=1
автомасштабировании комплекс не учитывается. В результате может запуститься меньше узлов, чем ожидалось.
Примечание
Хотя Windows является официально поддерживаемой платформой GridEngine, CycleCloud в настоящее время не поддерживает запуск GridEngine в Windows.
Эта страница касается возможностей и конфигурации использования GridEngine (Altair) с CycleCloud.
Настройка ресурсов
Приложение cyclecloud-gridengine сопоставляет ресурсы sge с облачными ресурсами Azure, предоставляя широкие возможности автомасштабирования и настройки кластера. Приложение будет развернуто автоматически для кластеров, созданных с помощью пользовательского интерфейса CycleCloud, или может быть установлено на любом узле администратора gridengine в существующем кластере.
Установка или обновление cyclecloud-gridengine
Пакет cyclecloud-gridengine доступен в GitHub в качестве артефакта выпуска. Установка и обновление будут выполняться одинаково. Приложению требуется Python3 с virtualenv.
tar xzf cyclecloud-gridengine-pkg-*.tar.gz
cd cyclecloud-gridengine
./install.sh
Важные файлы
Приложение анализирует конфигурацию sge при каждом вызове — задания, очереди, комплексы. Сведения предоставляются в stderr и stdout команды, а также в файле журнала на настраиваемых уровнях. Все команды управления gridengine с аргументами также записываются в файл.
Описание | Расположение |
---|---|
Конфигурация автомасштабирования | /opt/cycle/gridengine/autoscale.json |
Журнал автомасштабирования | /opt/cycle/jetpack/logs/autoscale.log |
Журнал трассировки qconf | /opt/cycle/jetpack/logs/qcmd.log |
Очереди SGE, группы узлов и параллельные среды
Служебная программа azge
автомасштабирования cyclecloud-gridengine добавит узлы в кластер в соответствии с конфигурацией кластера. Операции автомасштабирования выполняют следующие действия.
- Чтение запроса ресурса задания и поиск подходящей виртуальной машины для запуска
- Запустите виртуальную машину и дождитесь ее готовности
- Чтение очереди и параллельной среды из задания
- На основе очереди или pe назначьте узел соответствующей группе узлов.
- Добавление узла в кластер, а также в любую другую очередь, содержащую группу узлов.
Рассмотрим следующее определение очереди для очереди с именем short.q.
hostlist @allhosts @mpihg01 @mpihg02 @lowprio
...
seq_no 10000,[@lowprio=10],[@mpihg01=100],[@mpihg02=200]
pe_list NONE,[@mpihg01=mpi01], \
[@mpihg02=mpi02]
Отправка задания начинается qsub -q short.q -pe mpi02 12 my-script.sh
с аренды одной виртуальной машины, а при добавлении в кластер она присоединяется к группе узлов @mpihg02 , так как это группа узлов, доступная как в очереди, так и в параллельной среде. Она также будет добавлена в @allhosts, которая является специальной группой узлов.
Без указания pe qsub -q short.q my-script.sh
результирующая виртуальная машина будет добавлена в @allhosts и @lowpriority это группы узлов в очереди, которым не назначены pes.
Наконец, задание, отправленное с qsub -q short.q -pe mpi0* 12 my-script.sh
, приведет к добавлению виртуальной машины в @mpihg01 или @mpihg02 в зависимости от прогнозов выделения CycleCloud.
Параллельные среды неявно приравниваются к группе размещения cyclecloud. Виртуальные машины в среде предустановки ограничены тем, что находятся в одной сети. Если вы хотите использовать PE, в котором не хранится группа размещения, используйте autoscale.json , чтобы отказаться.
Здесь мы отказываемся от групп размещения для make pe:
"gridengine": {
"pes": {
"make": {
"requires_placement_groups": false
}
},
Группы размещения CycleCloud
Группы размещения CycleCloud сопоставляют один к одному с VMSS Azure с SinglePlacementGroup . Виртуальные машины в группе размещения совместно используют Infiniband Fabric и совместно используют только виртуальные машины в группе размещения. Чтобы интуитивно сохранить эти разрозненности, группы размещения сопоставляют 1:1 с параллельной средой gridengine.
Указание параллельной среды для задания ограничит выполнение задания в группе размещения с помощью логики назначения смарт-группы узлов. Вы можете отказаться от этого поведения с помощью упомянутой выше конфигурации в autoscale.json : "required_placement_groups" : false
.
Конфигурация автомасштабирования
Этот подключаемый модуль автоматически масштабирует сетку в соответствии с требованиями рабочей нагрузки. Файл конфигурации autoscale.json определяет поведение автомасштабирования подсистемы сетки.
- Настройка сведений о подключении cyclecloud
- Установка таймера завершения для неактивных узлов
- Возможно многомерное автомасштабирование. Укажите, какие атрибуты следует использовать в упаковке заданий, например слоты, память.
- Регистрация очередей, параллельных сред и групп узлов для управления
Параметр Configuration | Тип | Описание |
---|---|---|
url | Строковый тип | URL-адрес cc |
имя пользователя и пароль | Строка | Сведения о подключении CC |
cluster_name | Строковый тип | Имя кластера CC |
default_resources | Карта | Связывание ресурса узла с ресурсом узла ядра сетки для автомасштабирования |
idle_timeout | Int | Время ожидания перед прекращением бездействующих узлов (ов) |
boot_timeout | Int | Время ожидания перед прекращением завершения узлов на длительных этапах (ы) конфигурации |
gridengine.relevant_complexes | List (String) | Комплексы подсистемы сетки, которые следует учитывать при автомасштабировании, например слоты, mem_free |
gridengine.logging | Файловый | Расположение файла конфигурации ведения журнала |
gridengine.pes | Структура | Укажите поведение PE, например requires_placement_group = false |
Программа автомасштабирования будет учитывать только соответствующий ресурс
Дополнительный ресурс автомасштабирования
По умолчанию кластер с масштабированием зависит от того, сколько слотов запрашивается заданиями. К автомасштабированию можно добавить еще одно измерение.
Предположим, мы хотим выполнить автомасштабирование по запросу ресурса задания для m_mem_free
.
- Добавьте
m_mem_free
вgridengine.relevant_resources
файл в файле autoscale.json. - Связывание
m_mem_free
с ресурсом памяти на уровне узла в autoscale.json
Эти атрибуты могут быть ссылками с node.*
в качестве значения в _default/resources.
Узел | Тип | Описание |
---|---|---|
Массив узлов | Строковый тип | Имя узла cyclecloudarray |
placement_group | Строка | Имя группы размещения cyclecloud в пределах объекта nodearray |
vm_size | Строковый тип | Имя продукта виртуальной машины, например "Standard_F2s_v2" |
vcpu_count | Int | Виртуальные ЦП, доступные на узле, как указано на страницах отдельных продуктов |
pcpu_count | Int | Физические ЦП, доступные на узле |
Память | Строковый тип | Приблизительная физическая память, доступная на виртуальной машине с индикатором единицы измерения, например "8.0g" |
Дополнительные атрибуты находятся в node.resources.*
пространстве имен, например node.resources.
Узел | Тип | Описание |
---|---|---|
ncpus | Строковый тип | Количество ЦП, доступных в виртуальной машине |
pcpus | Строка | Количество физических ЦП, доступных на виртуальной машине |
ngpus | Целое число | Количество gpu, доступных на виртуальной машине |
memb | Строковый тип | Приблизительная физическая память, доступная на виртуальной машине с индикатором единицы измерения, например "8.0b" |
memkb | Строка | Приблизительная физическая память, доступная на виртуальной машине с индикатором единицы измерения, например "8,0k" |
memmb | Строковый тип | Приблизительная физическая память, доступная на виртуальной машине с индикатором единицы измерения, например "8,0 м" |
memgb | Строка | Приблизительная физическая память, доступная на виртуальной машине с индикатором единицы измерения, например "8.0g" |
memtb | Строка | Примерная физическая память, доступная на виртуальной машине с индикатором единицы измерения, например "8.0t" |
slots | Целое число | То же, что и ncpus |
slot_type | Строка | Добавление метки для расширений. Обычно не используется. |
m_mem_free | Строковый тип | Ожидаемая свободная память на узле выполнения, например "3.0g" |
mfree | Строка | Совпадает с _m/_mem/free |
Сопоставление ресурсов
Для default_resources также доступны математические вычисления: сократите слоты в определенном массиве узлов на два и добавьте ресурс Docker на все узлы:
"default_resources": [
{
"select": {"node.nodearray": "beegfs"},
"name": "slots",
"value": "node.vcpu_count",
"subtract": 2
},
{
"select": {},
"name": "docker",
"value": true
},
Сопоставление виртуальных ЦП узла со сложными слотами и memmb
с mem_free
часто используемыми значениями по умолчанию.
Первая связь является обязательной.
"default_resources": [
{
"select": {},
"name": "slots",
"value": "node.vcpu_count"
},
{
"select": {},
"name": "mem_free",
"value": "node.resources.memmb"
}
],
Обратите внимание, что если сочетание клавиш не равно всему значению, определите оба значения в default_resources где physical_cpu
— это комплексное имя:
"default_resources": [
{
"select": {},
"name": "physical_cpu",
"value": "node.pcpu_count"
},
{
"select": {},
"name": "pcpu",
"value": "node.resources.physical_cpu"
}
]
Порядок важен, если требуется определенное поведение для определенного атрибута. Чтобы выделить один слот для определенного массива узлов с сохранением количества слотов по умолчанию для всех остальных узлов, выполните указанные ниже действия.
"default_resources": [
{
"select": {"node.nodearray": "FPGA"},
"name": "slots",
"value": "1",
},
{
"select": {},
"name": "slots",
"value": "node.vcpu_count"
},
]
Группы узлов
Средство автомасштабирования CycleCloud в попытке удовлетворить требования задания будет сопоставлять узлы с соответствующей группой узлов. Учитываются очереди, параллельные среды и комплексы. Большая часть логики соответствует соответствующему контейнеру cyclecloud (и количеству узлов) с соответствующей группой узлов sge.
Для задания, отправленного как: qsub -q "cloud.q" -l "m_mem_free=4g" -pe "mpi*" 48 ./myjob.sh
CycleCloud найдет пересечение групп узлов, которые:
- Включены в pe_list для cloud.q и соответствуют имени pe, например
pe_list [@allhosts=mpislots],[@hpc1=mpi]
. - Иметь достаточные ресурсы и квоту подписки для предоставления всех ресурсов задания.
- Не фильтруются по конфигурации ограничений группы узлов.
Вполне возможно, что несколько групп узлов будут соответствовать этим требованиям, и в этом случае логика потребуется выбрать. Существует три способа устранения неоднозначности в членстве в группе узлов:
- Настройте очереди, чтобы не было неоднозначности.
- Добавьте ограничения в файл autoscale.json.
- Позвольте CycleCloud выбрать подходящие группы узлов в порядке упорядочения
weight_queue_host_sort < weight_queue_seqno
имен путем настройки в конфигурации планировщика. - Задайте
seq_no 10000,[@hostgroup1=100],[@hostgroup2=200]
в конфигурации очереди, чтобы указать предпочтения группы узлов.
Ограничения группы узлов
Если очередь или xproject определяет несколько групп узлов, то все эти группы узлов потенциально могут быть добавлены в них. Вы можете ограничить типы узлов, в которые можно добавлять очереди, задав ограничения группы узлов. Задайте ограничение на основе свойств узла.
"gridengine": {
"hostgroups": {
"@mpi": {
"constraints": {
"node.vm_size": "Standard_H44rs"
}
},
"@amd-mem": {
"constraints" : {
"node.vm_size": "Standard_D2_v3",
"node.nodearray": "hpc"
}
},
}
}
ПОДСКАЗКА. Проверьте все доступные свойства узла с помощью
azge buckets
.
azge
Этот пакет поставляется с командной строкой azge. Эта программа должна использоваться для выполнения автомасштабирования и разорвана все подпроцессы в режиме автомасштабирования.
Эти команды зависят от заданных переменных среды gridengine. Вы должны иметь возможность вызывать qconf
и qsub
из того же профиля, где azge
вызывается .
команды azge | Описание |
---|---|
validate | Проверяет наличие известных ошибок конфигурации в автомасштабировании или gridengine |
jobs | Отображение всех заданий в очереди |
контейнеры | Отображение доступных пулов ресурсов для автомасштабирования |
Узлы | Отображение узлов и свойств кластера |
demand (потребление) | Соответствует требованиям задания к контейнерам cyclecloud и предоставляет результат автомасштабирования |
Автомасштабирование | Выполняет полное автомасштабирование, запуск и удаление узлов в соответствии с конфигурациями |
При изменении конфигураций планировщика (qconf) или конфигураций автомасштабирования (autoscale.json) или даже при первой настройке можно использовать azge для проверки соответствия поведения автомасштабирования ожиданиям. В качестве привилегированного пользователя можно выполнять следующие операции. Рекомендуется ознакомиться с этими параметрами, чтобы понять поведение автомасштабирования.
- Запустите
azge validate
, чтобы проверить конфигурации на наличие известных проблем. - Выполните команду
azge buckets
, чтобы проверить, какие ресурсы предлагает кластер CycleCloud. - Запустите
azge jobs
, чтобы проверить сведения о задании в очереди. - Выполните
azge demand
задание для сопоставления контейнеров, проверьте, какие задания сопоставляются с контейнерами и группами узлов. - Запустите
azge autoscale
для запуска процесса выделения узлов или добавьте узлы, готовые к присоединению.
Затем, когда эти команды ведут себя должным образом, включите текущее автомасштабирование, добавив azge autoscale
команду в корневой crontab. (С помощью переменных среды gridengine)
* * * * * . $SGE_ROOT/common/settings.sh && /usr/local/bin/azge autoscale -c /opt/cycle/gridengine/autoscale.json
Создание гибридного кластера
CycleCloud будет поддерживать сценарий ускорения перехода в облако. Базовая конфигурация предполагает, что $SGE_ROOT
каталог доступен облачным узлам. Это предположение можно смягчить, задав gridengine.shared.spool = false
gridengine.shared.bin = false
и установив GridEngine локально.
В простом случае необходимо предоставить файловую систему, которую можно подключить с помощью узлов выполнения, содержащих $SGE_ROOT
каталог, и настроить это подключение в дополнительных параметрах. После освобождения зависимости каталогов sched и общих каталогов можно завершить работу узла планировщика, который по умолчанию является частью кластера, и использовать конфигурации из внешней файловой системы.
- Создайте новый кластер gridengine.
- Отключите прокси-сервер возврата.
- Замените /sched и /shared внешними файловыми системами.
- Сохраните кластер.
- Удалите узел планировщика как действие в пользовательском интерфейсе.
- Запустите кластер, узлы не будут запускаться изначально.
- Настройка
cyclecloud-gridengine
с помощью autoscale.json для использования нового кластера
Использование модуля Сетки Univa в CycleCloud
Проект CycleCloud для GridEngine по умолчанию использует sge-2011.11 . Вы можете использовать собственные установщики Altair GridEngine в соответствии с лицензионным соглашением Altair.
В этом разделе описано, как использовать Altair GridEngine с проектом CycleCloud GridEngine.
Предварительные условия
В этом примере будет использоваться демонстрационная версия 8.6.1, но поддерживаются все версии > ge 8.4.0.
- Пользователи должны предоставлять двоичные файлы UGE
- ge-8.6.x-bin-lx-amd64.tar.gz
- ge-8.6.x-common.tar.gz
- Необходимо настроить интерфейс командной строки CycleCloud. Документация доступна здесь.
Копирование двоичных файлов в облачное хранилище
Дополнительная версия AGE (8.6.7-demo) распространяется вместе с CycleCloud. Чтобы использовать другую версию, отправьте двоичные файлы в учетную запись хранения, используемую CycleCloud.
$ azcopy cp ge-8.6.12-bin-lx-amd64.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/
$ azcopy cp ge-8.6.12-common.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/
Изменение конфигураций в шаблоне кластера
Создайте локальную копию шаблона gridengine и измените ее, чтобы использовать установщики UGE вместо стандартного.
wget https://raw.githubusercontent.com/Azure/cyclecloud-gridengine/master/templates/gridengine.txt
В файлеgridengine.txt найдите первое вхождение [[[configuration]]]
и вставьте текст таким образом, чтобы он соответствовал приведенному ниже фрагменту. Этот файл не чувствителен к отступам.
ПРИМЕЧАНИЕ. Сведения в конфигурации, в частности версия, должны соответствовать имени файла установщика.
[[[configuration gridengine]]]
make = ge
version = 8.6.12-demo
root = /sched/ge/ge-8.6.12-demo
cell = "default"
sge_qmaster_port = "537"
sge_execd_port = "538"
sge_cluster_name = "grid1"
gid_range = "20000-20100"
qmaster_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool/qmaster"
execd_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool"
spooling_method = "berkeleydb"
shadow_host = ""
admin_mail = ""
idle_timeout = 300
managed_fs = true
shared.bin = true
ignore_fqdn = true
group.name = "sgeadmin"
group.gid = 536
user.name = "sgeadmin"
user.uid = 536
user.gid = 536
user.description = "SGE admin user"
user.home = "/shared/home/sgeadmin"
user.shell = "/bin/bash"
Эти конфигурации переопределяют версию gridengine по умолчанию и расположение установки при запуске кластера.
Отходить от /sched
небезопасно, так как это специально общее расположение nfs в кластере.