Skip to content

Commit c1821aa

Browse files
committed
Add 3 new nodearrays and synchronize to latest standard spoke settings
1 parent 51a1b84 commit c1821aa

7 files changed

Lines changed: 153 additions & 138 deletions

File tree

bicep/ccw.bicep

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ param clusterInitSpecs types.cluster_init_param_t
2828
param slurmSettings types.slurmSettings_t
2929
param schedulerNode types.scheduler_t
3030
param loginNodes types.login_t
31-
param htc types.htc_t
32-
param htc2 types.htc_t
31+
param d64d types.htc_t
32+
param d16d types.htc_t
33+
param m64 types.htc_t
3334
param hpc types.hpc_t
3435
param gpu types.hpc_t
3536
param tags types.resource_tags_t
@@ -325,14 +326,14 @@ var ccwClusterInitSpec = {
325326
type: 'gitHubReleaseURL'
326327
gitHubReleaseURL: uri('https://github.com/Azure/cyclecloud-slurm-workspace/releases/tag/', projectVersion)
327328
spec: 'default'
328-
target: ['login', 'scheduler', 'htc', 'htc2', 'hpc', 'gpu', 'dynamic']
329+
target: ['login', 'scheduler', 'd64d', 'd16d', 'm64', 'hpc', 'gpu', 'dynamic']
329330
}
330331

331332
var monitoringClusterInitSpec = {
332333
type: 'gitHubReleaseURL'
333334
gitHubReleaseURL: uri('https://github.com/Azure/cyclecloud-monitoring/releases/tag/', monitoringProjectVersion)
334335
spec: 'default'
335-
target: ['login', 'scheduler', 'htc', 'htc2', 'hpc', 'gpu', 'dynamic']
336+
target: ['login', 'scheduler', 'd64d', 'd16d', 'm64', 'hpc', 'gpu', 'dynamic']
336337
}
337338

338339
// Use of azslurm 4.0 does not require pyxis
@@ -347,19 +348,24 @@ output schedulerNode types.scheduler_t = schedulerNode
347348
output loginNodes types.login_t = loginNodes
348349

349350
output partitions types.partitions_t = {
350-
htc: union({
351-
sku: htc.sku
352-
maxNodes: htc.maxNodes
353-
osImage: htc.osImage
354-
useSpot: htc.?useSpot ?? false
355-
}, contains(htc,'availabilityZone') ? { availabilityZone: htc.?availabilityZone } : {})
356-
htc2: union({
357-
sku: htc2.sku
358-
maxNodes: htc2.maxNodes
359-
osImage: htc2.osImage
360-
useSpot: htc2.?useSpot ?? false
361-
// we aren't using availability zones for now, ignore this for htc2 TODO
362-
}, contains(htc,'availabilityZone') ? { availabilityZone: htc.?availabilityZone } : {})
351+
d64d: union({
352+
sku: d64d.sku
353+
maxNodes: d64d.maxNodes
354+
osImage: d64d.osImage
355+
useSpot: d64d.?useSpot ?? false
356+
}, contains(d64d,'availabilityZone') ? { availabilityZone: d64d.?availabilityZone } : {})
357+
d16d: union({
358+
sku: d16d.sku
359+
maxNodes: d16d.maxNodes
360+
osImage: d16d.osImage
361+
useSpot: d16d.?useSpot ?? false
362+
}, contains(d16d,'availabilityZone') ? { availabilityZone: d16d.?availabilityZone } : {})
363+
m64: union({
364+
sku: m64.sku
365+
maxNodes: m64.maxNodes
366+
osImage: m64.osImage
367+
useSpot: m64.?useSpot ?? false
368+
}, contains(m64,'availabilityZone') ? { availabilityZone: m64.?availabilityZone } : {})
363369
hpc: hpc
364370
gpu: gpu
365371
}

bicep/files-to-load/create_cc_param.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,13 @@ def set_slurm_params(params, dbPassword, outputs):
3030
params['SubnetId'] = '/'.join([outputs['vnet']['value']['rg'], outputs['vnet']['value']['name'], outputs['vnet']['value']['computeSubnetName']])
3131

3232
# Define Availability Zone
33-
params['DefineNodesAvailabilityZone'] = any('availabilityZone' in zoneList for zoneList in [outputs['partitions']['value']['htc'], outputs['partitions']['value']['hpc'], outputs['partitions']['value']['gpu']])
34-
35-
#HTC
36-
params['HTCMachineType'] = outputs['partitions']['value']['htc']['sku']
37-
params['MaxHTCExecuteNodeCount'] = int(outputs['partitions']['value']['htc']['maxNodes'])
38-
params['HTCImageName'] = outputs['partitions']['value']['htc']['osImage']
39-
params['HTCUseLowPrio'] = outputs['partitions']['value']['htc']['useSpot']
40-
params['HTCAvailabilityZone'] = outputs['partitions']['value']['htc']['availabilityZone'] if params['DefineNodesAvailabilityZone'] and 'availabilityZone' in outputs['partitions']['value']['htc'] else None
41-
42-
#HTC2
43-
params['HTC2MachineType'] = outputs['partitions']['value']['htc2']['sku']
44-
params['MaxHTC2ExecuteNodeCount'] = int(outputs['partitions']['value']['htc2']['maxNodes'])
45-
params['HTC2ImageName'] = outputs['partitions']['value']['htc2']['osImage']
46-
params['HTC2UseLowPrio'] = outputs['partitions']['value']['htc2']['useSpot']
47-
params['HTC2AvailabilityZone'] = outputs['partitions']['value']['htc2']['availabilityZone'] if params['DefineNodesAvailabilityZone'] and 'availabilityZone' in outputs['partitions']['value']['htc'] else None
33+
params['DefineNodesAvailabilityZone'] = any('availabilityZone' in zoneList for zoneList in [outputs['partitions']['value']['hpc'], outputs['partitions']['value']['gpu']])
4834

35+
for na in ['D64D', 'D16D', 'M64']:
36+
params[f'{na}MachineType'] = outputs['partitions']['value'][na.lower()]['sku']
37+
params[f'Max{na}NodeCount'] = int(outputs['partitions']['value'][na.lower()]['maxNodes'])
38+
params[f'{na}ImageName'] = outputs['partitions']['value'][na.lower()]['osImage']
39+
4940
#HPC
5041
params['HPCMachineType'] = outputs['partitions']['value']['hpc']['sku']
5142
params['MaxHPCExecuteNodeCount'] = int(outputs['partitions']['value']['hpc']['maxNodes'])
@@ -212,8 +203,9 @@ def main():
212203
"login": "LoginClusterInitSpecs",
213204
"gpu": "GPUClusterInitSpecs",
214205
"hpc": "HPCClusterInitSpecs",
215-
"htc": "HTCClusterInitSpecs",
216-
"htc2": "HTC2ClusterInitSpecs",
206+
"d64d": "D64DClusterInitSpecs",
207+
"d16d": "D16DClusterInitSpecs",
208+
"m64": "M64ClusterInitSpecs",
217209
"scheduler": "SchedulerClusterInitSpecs",
218210
"dynamic": "DynamicClusterInitSpecs",
219211
"ood": "ClusterInitSpecs"

bicep/files-to-load/slurm.txt

Lines changed: 81 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -229,44 +229,58 @@ Autoscale = $Autoscale
229229
slurm.hpc = true
230230
slurm.partition = hpc
231231

232-
[[nodearray htc]]
232+
[[nodearray d64d]]
233233
Extends = nodearraybase
234-
MachineType = $HTCMachineType
235-
ImageName = $HTCImageName
236-
MaxCount = $MaxHTCExecuteNodeCount
234+
MachineType = $D64DMachineType
235+
ImageName = $D64DImageName
236+
MaxCount = $MaxD64DNodeCount
237237

238-
Interruptible = $HTCUseLowPrio
239-
MaxPrice = $HTCSpotMaxPrice
240-
AdditionalClusterInitSpecs = $HTCClusterInitSpecs
238+
AdditionalClusterInitSpecs = $D64DClusterInitSpecs
241239

242240
[[[configuration]]]
243241
slurm.hpc = false
244-
slurm.partition = htc
242+
slurm.partition = d64d
245243
# set pcpu = false for all hyperthreaded VMs
246244
slurm.use_pcpu = false
247245

248-
[[nodearray htc2]]
246+
[[nodearray d16d]]
249247
Extends = nodearraybase
250-
MachineType = $HTC2MachineType
251-
ImageName = $HTC2ImageName
252-
MaxCount = $MaxHTC2ExecuteNodeCount
248+
MachineType = $D16DMachineType
249+
ImageName = $D16DImageName
250+
MaxCount = $MaxD16DNodeCount
253251

254-
Interruptible = $HTC2UseLowPrio
255-
MaxPrice = $HTC2SpotMaxPrice
256-
AdditionalClusterInitSpecs = $HTC2ClusterInitSpecs
252+
AdditionalClusterInitSpecs = $D16DClusterInitSpecs
257253

258254
[[[configuration]]]
259255
slurm.hpc = false
260-
slurm.partition = htc2
256+
slurm.partition = d16d
257+
# set pcpu = false for all hyperthreaded VMs
258+
slurm.use_pcpu = false
259+
260+
[[nodearray m64]]
261+
Extends = nodearraybase
262+
MachineType = $M64MachineType
263+
ImageName = $M64ImageName
264+
MaxCount = $MaxM64NodeCount
265+
266+
AdditionalClusterInitSpecs = $M64ClusterInitSpecs
267+
268+
[[[configuration]]]
269+
slurm.hpc = false
270+
slurm.partition = m64
261271
# set pcpu = false for all hyperthreaded VMs
262272
slurm.use_pcpu = false
263273

264274
[[nodearray gpu]]
265275
CloudInit="""#!/bin/bash
266276
sed -i 's/^SHELL.*/SHELL=\/bin\/bash/g' /etc/default/useradd
267277
"""
278+
279+
# GB200: Peregrine disallows SinglePlacementGroup, but pkey requires SingleScaleset
268280
Azure.Overprovision = false
269281
Azure.MaxScaleSetSize = 1000
282+
Azure.SingleScaleset = true
283+
Azure.SinglePlacementGroup = false
270284

271285
Extends = nodearraybase
272286
MachineType = $GPUMachineType
@@ -347,17 +361,23 @@ Order = 10
347361
ParameterType = Cloud.MachineType
348362
DefaultValue = Standard_F2s_v2
349363

350-
[[[parameter HTCMachineType]]]
351-
Label = HTC VM Type
352-
Description = The VM type for HTC execute nodes
364+
[[[parameter D64DMachineType]]]
365+
Label = D64D VM Type
366+
Description = The VM type for D64D execute nodes
353367
ParameterType = Cloud.MachineType
354-
DefaultValue = Standard_F2s_v2
368+
DefaultValue = Standard_D64ds_v5
355369

356-
[[[parameter HTC2MachineType]]]
357-
Label = HTC2 VM Type
358-
Description = The VM type for HTC2 execute nodes
370+
[[[parameter D16DMachineType]]]
371+
Label = D16D VM Type
372+
Description = The VM type for D16D execute nodes
359373
ParameterType = Cloud.MachineType
360-
DefaultValue = Standard_F2s_v2
374+
DefaultValue = Standard_D16ds_v5
375+
376+
[[[parameter M64MachineType]]]
377+
Label = M64 VM Type
378+
Description = The VM type for M64 execute nodes
379+
ParameterType = Cloud.MachineType
380+
DefaultValue = Standard_M64s_v2
361381

362382
[[[parameter GPUMachineType]]]
363383
Label = GPU VM Type
@@ -382,17 +402,25 @@ Order = 10
382402
Widget.Plugin = pico.form.BooleanCheckBox
383403
Widget.Label = Start and stop execute instances automatically
384404

385-
[[[parameter MaxHTCExecuteNodeCount]]]
386-
Label = Max HTC Nodes
387-
Description = The total number of HTC execute nodes to start
405+
[[[parameter MaxD64DNodeCount]]]
406+
Label = Max D64D Nodes
407+
Description = The total number of D64D execute nodes to start
388408
DefaultValue = 100
389409
Config.Plugin = pico.form.NumberTextBox
390410
Config.MinValue = 0
391411
Config.IntegerOnly = true
392412

393-
[[[parameter Max2HTCExecuteNodeCount]]]
394-
Label = Max HTC2 Nodes
395-
Description = The total number of HTC2 execute nodes to start
413+
[[[parameter MaxD16DNodeCount]]]
414+
Label = Max D16D Nodes
415+
Description = The total number of D16D execute nodes to start
416+
DefaultValue = 100
417+
Config.Plugin = pico.form.NumberTextBox
418+
Config.MinValue = 0
419+
Config.IntegerOnly = true
420+
421+
[[[parameter MaxM64NodeCount]]]
422+
Label = Max M64 Nodes
423+
Description = The total number of M64 execute nodes to start
396424
DefaultValue = 100
397425
Config.Plugin = pico.form.NumberTextBox
398426
Config.MinValue = 0
@@ -430,36 +458,6 @@ Order = 10
430458
Config.MinValue = 1
431459
Config.IntegerOnly = true
432460

433-
434-
[[[parameter HTCUseLowPrio]]]
435-
Label = HTC Spot
436-
DefaultValue = false
437-
Widget.Plugin = pico.form.BooleanCheckBox
438-
Widget.Label = Use Spot VMs for HTC execute hosts
439-
440-
[[[parameter HTC2UseLowPrio]]]
441-
Label = HTC2 Spot
442-
DefaultValue = false
443-
Widget.Plugin = pico.form.BooleanCheckBox
444-
Widget.Label = Use Spot VMs for HTC execute hosts
445-
446-
[[[parameter HTCSpotMaxPrice]]]
447-
Label = Max Price HTC
448-
DefaultValue = -1
449-
Description = Max price for Spot VMs in USD (value of -1 will not evict based on price)
450-
Config.Plugin = pico.form.NumberTextBox
451-
Conditions.Excluded := HTCUseLowPrio isnt true
452-
Config.MinValue = -1
453-
454-
[[[parameter HTC2SpotMaxPrice]]]
455-
Label = Max Price HTC2
456-
DefaultValue = -1
457-
Description = Max price for Spot VMs in USD (value of -1 will not evict based on price)
458-
Config.Plugin = pico.form.NumberTextBox
459-
Conditions.Excluded := HTC2UseLowPrio isnt true
460-
Config.MinValue = -1
461-
462-
463461
[[[parameter GPUUseLowPrio]]]
464462
Label = GPU Spot
465463
DefaultValue = false
@@ -845,6 +843,7 @@ Order = 20
845843
Label = Slurm Configuration
846844
Description = Any additional lines to add to slurm.conf
847845
ParameterType = Text
846+
DefaultValue = "SuspendExcParts=gpu"
848847

849848
[[[parameter configuration_slurm_launch_parameters]]]
850849
Label = Launch Parameters
@@ -905,20 +904,26 @@ Order = 20
905904
DefaultValue = almalinux8
906905
Config.Filter := Package in {"cycle.image.ubuntu20", "cycle.image.ubuntu22", "cycle.image.sles15-hpc", "almalinux8"}
907906

908-
[[[parameter HTCImageName]]]
909-
Label = HTC OS
907+
[[[parameter D64DImageName]]]
908+
Label = D64D OS
910909
ParameterType = Cloud.Image
911910
Config.OS = linux
912911
DefaultValue = almalinux8
913912
Config.Filter := Package in {"cycle.image.ubuntu20", "cycle.image.ubuntu22", "cycle.image.sles15-hpc", "almalinux8"}
914913

915-
[[[parameter HTC2ImageName]]]
916-
Label = HTC2 OS
914+
[[[parameter D16DImageName]]]
915+
Label = D16D OS
917916
ParameterType = Cloud.Image
918917
Config.OS = linux
919918
DefaultValue = almalinux8
920919
Config.Filter := Package in {"cycle.image.ubuntu20", "cycle.image.ubuntu22", "cycle.image.sles15-hpc", "almalinux8"}
921920

921+
[[[parameter M64ImageName]]]
922+
Label = M64 OS
923+
ParameterType = Cloud.Image
924+
Config.OS = linux
925+
DefaultValue = almalinux8
926+
Config.Filter := Package in {"cycle.image.ubuntu20", "cycle.image.ubuntu22", "cycle.image.sles15-hpc", "almalinux8"}
922927

923928
[[[parameter GPUImageName]]]
924929
Label = GPU OS
@@ -946,16 +951,22 @@ Order = 20
946951
Description = Cluster init specs to apply to Login nodes
947952
ParameterType = Cloud.ClusterInitSpecs
948953

949-
[[[parameter HTCClusterInitSpecs]]]
950-
Label = HTC Cluster-Init
954+
[[[parameter D64DClusterInitSpecs]]]
955+
Label = D64D Cluster-Init
956+
DefaultValue = =undefined
957+
Description = Cluster init specs to apply to D64D execute nodes
958+
ParameterType = Cloud.ClusterInitSpecs
959+
960+
[[[parameter D16DClusterInitSpecs]]]
961+
Label = D16D Cluster-Init
951962
DefaultValue = =undefined
952-
Description = Cluster init specs to apply to HTC execute nodes
963+
Description = Cluster init specs to apply to D16D execute nodes
953964
ParameterType = Cloud.ClusterInitSpecs
954965

955-
[[[parameter HTC2ClusterInitSpecs]]]
956-
Label = HTC2 Cluster-Init
966+
[[[parameter M64ClusterInitSpecs]]]
967+
Label = M64 Cluster-Init
957968
DefaultValue = =undefined
958-
Description = Cluster init specs to apply to HTC2 execute nodes
969+
Description = Cluster init specs to apply to M64 execute nodes
959970
ParameterType = Cloud.ClusterInitSpecs
960971

961972
[[[parameter HPCClusterInitSpecs]]]

bicep/hub/deploy_spoke.sh

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ MOUNT_OPTIONS=$(jq -r '.mountOptions.value' outputs/hub-anf-outputs.json)
136136
replace_fields ".sharedFilesystem={ value: { type: \"nfs-existing\", ipAddress: \"$IP_ADDRESS\", exportPath: \"$EXPORT_PATH\", mountOptions: \"$MOUNT_OPTIONS\" } }"
137137

138138
# new vnet
139-
ADDRESS_SPACE="10.${SPOKE_NUMBER}.0.0/24"
139+
ADDRESS_SPACE="10.${SPOKE_NUMBER}.0.0/20"
140140
replace_fields ".network.value.addressSpace=\"$ADDRESS_SPACE\""
141141

142142
# vnet to peer
@@ -173,10 +173,9 @@ az deployment sub create \
173173
--parameters "$(pwd)/spoke_params.json" \
174174
--parameters location="$LOCATION" \
175175
--parameters resourceGroup="${SPOKE_RG_NAME}" \
176-
--parameters ccVMName="ccw-${SPOKE_NUMBER}-cyclecloud-vm" \
177-
--parameters clusterName="ccw-${SPOKE_NUMBER}" \
176+
--parameters ccVMName="ccw${SPOKE_NUMBER}-cyclecloud-vm" \
177+
--parameters clusterName="ccw${SPOKE_NUMBER}" \
178178
--parameters monitoringIngestionEndpoint="${MONITORING_INGESTION_ENDPOINT}" \
179179
--name "spoke-ccw-0${SPOKE_DEPLOYMENT_NAME}" \
180180
$WHATIF_FLAG
181-
182181

0 commit comments

Comments
 (0)