Skip to content

Commit 4485845

Browse files
authored
Release candidate: v1.93.0 (GoogleCloudPlatform#5759)
2 parents a5db34f + 563782f commit 4485845

145 files changed

Lines changed: 2948 additions & 767 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmd/job/submit.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ func init() {
111111
SubmitCmd.Flags().StringVarP(&dryRunManifest, "dry-run-out", "o", "", "Path to output the generated Kubernetes manifest instead of applying it.")
112112
SubmitCmd.Flags().StringVarP(&platform, "platform", "f", "linux/amd64", "Target platform for the image build (e.g., 'linux/amd64', 'linux/arm64'). Used with --base-image.")
113113

114+
SubmitCmd.Flags().StringSliceVar(&volumeStr, "mount", nil, "Volumes to mount (format: <src>:<dest>[:<mode>], mode can be 'ro' or 'rw', default 'ro').")
115+
114116
SubmitCmd.Flags().StringVarP(&workloadName, "name", "n", "", "Name of the workload to create. Required.")
115117
SubmitCmd.Flags().StringVarP(&kueueQueueName, "queue", "q", "", "Name of the Kueue LocalQueue to submit the workload to. If empty, it will be auto-discovered.")
116118
SubmitCmd.Flags().IntVar(&numNodes, "num-nodes", 1, "The number of nodes to use per group/slice. Defaults to 1 for CPU/GPU, or auto-calculated for TPUs.")
@@ -131,9 +133,9 @@ func init() {
131133
SubmitCmd.Flags().BoolVar(&awaitJobCompletion, "await-job-completion", false, "If true, gcluster will wait for the submitted job to complete.")
132134
SubmitCmd.Flags().StringVar(&timeoutStr, "timeout", "-1s", "Time to wait for job in seconds or string format (e.g. 1h, 10m). Default is max timeout (-1s).")
133135
SubmitCmd.Flags().StringVar(&priorityClassName, "priority", "medium", "A priority, one of `very-low`, `low`, `medium`, `high` or `very-high`. Defaults to `medium`.")
136+
SubmitCmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose logging for the workload (TPUs and GPUs).")
134137

135138
SubmitCmd.Flags().BoolVar(&isPathwaysJob, "pathways", false, "If present, gcluster will generate a manifest for a Pathways job.")
136-
SubmitCmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose logging for the workload (TPUs and GPUs).")
137139
SubmitCmd.Flags().StringVar(&pathways.ProxyServerImage, "pathways-proxy-server-image", "", "The image for the Pathways proxy server.")
138140
SubmitCmd.Flags().StringVar(&pathways.ServerImage, "pathways-server-image", "", "The image for the Pathways server.")
139141
SubmitCmd.Flags().StringVar(&pathways.WorkerImage, "pathways-worker-image", "", "The image for the Pathways worker.")
@@ -147,8 +149,6 @@ func init() {
147149
SubmitCmd.Flags().StringVar(&pathways.ColocatedPythonSidecarImage, "pathways-colocated-python-sidecar-image", "", "Image for an optional Python-based sidecar container to run alongside the Pathways head components.")
148150
SubmitCmd.Flags().StringVar(&pathways.HeadNodePool, "pathways-head-np", "", "The node pool to use for the Pathways head job. If empty, it will be auto-detected (looking for 'cpu-np' or 'pathways-np').")
149151

150-
SubmitCmd.Flags().StringSliceVar(&volumeStr, "mount", nil, "Volumes to mount (format: <src>:<dest>[:<mode>], mode can be 'ro' or 'rw', default 'ro').")
151-
152152
_ = SubmitCmd.MarkFlagRequired("command")
153153
_ = SubmitCmd.MarkFlagRequired("name")
154154
_ = SubmitCmd.MarkFlagRequired("compute-type")

community/examples/AMD/hpc-amd-slurm.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,9 @@ deployment_groups:
171171
# these images must match the images used by Slurm modules below because
172172
# we are building OpenMPI with PMI support in libraries contained in
173173
# Slurm installation
174-
family: slurm-gcp-6-12-hpc-rocky-linux-8
174+
# Rocky 8: slurm-gcp-6-12-hpc-rocky-linux-8
175+
# Rocky 9: slurm-gcp-6-12-hpc-rocky-linux-9
176+
family: slurm-gcp-6-12-hpc-rocky-linux-9
175177
project: schedmd-slurm-public
176178

177179
- id: low_cost_nodeset

community/examples/hpc-build-slurm-image.yaml

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ vars:
2424
zone: us-central1-a
2525

2626
image_build_machine_type: n2d-standard-16
27-
build_from_image_family: hpc-rocky-linux-8
27+
# Rocky 8: hpc-rocky-linux-8
28+
# Rocky 9: hpc-rocky-linux-9
29+
build_from_image_family: hpc-rocky-linux-9
2830
build_from_image_project: cloud-hpc-image-public
2931
build_from_git_ref: 6.12.1
3032
built_image_family: my-custom-slurm
@@ -49,15 +51,17 @@ deployment_groups:
4951
content: |
5052
#!/bin/bash
5153
set -e -o pipefail
52-
# Slurm build on Rocky8 will upgrade to python3.12 as part of build
53-
dnf install -y python3.12 python3.12-pip
54-
alternatives --set python3 /usr/bin/python3.12
55-
python3 -m pip install pip --upgrade
56-
python3 -m pip install ansible==8.7.0
57-
python3 -m pip install selinux
54+
# Slurm build will install and set python3.12 as the default python3
55+
dnf install -y python3.12 python3.12-pip perl-ExtUtils-MakeMaker perl-devel
56+
python3.12 -m pip install pip --upgrade
57+
python3.12 -m pip install ansible==8.7.0
5858
export PATH=/usr/local/bin:$PATH
5959
ansible --version
60-
ansible-galaxy role install googlecloudplatform.google_cloud_ops_agents
60+
n=0
61+
until [ "$n" -ge 3 ] || ansible-galaxy role install googlecloudplatform.google_cloud_ops_agents; do
62+
((n=n+1))
63+
sleep 5
64+
done
6165
- type: data
6266
destination: /var/tmp/slurm_vars.json
6367
content: |
@@ -67,7 +71,8 @@ deployment_groups:
6771
"nvidia_version": "latest",
6872
"install_ompi": true,
6973
"install_lustre": false,
70-
"install_gcsfuse": true
74+
"install_gcsfuse": true,
75+
"monitoring_agent": "cloud-ops"
7176
}
7277
- type: shell
7378
destination: install_slurm.sh
Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
# Copyright 2026 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
---
16+
17+
blueprint_name: hpcslurmha
18+
19+
vars:
20+
project_id: # Set Project ID
21+
deployment_name: hpcslurmha
22+
region: us-central1
23+
zone: us-central1-a
24+
25+
terraform_backend_defaults:
26+
type: gcs
27+
configuration:
28+
bucket: # Set Bucket Name Here
29+
30+
deployment_groups:
31+
- group: primary
32+
modules:
33+
# Service Accounts
34+
- id: controller_sa
35+
source: modules/project/service-account
36+
kind: terraform
37+
settings:
38+
deployment_name: $(vars.deployment_name)
39+
project_id: $(vars.project_id)
40+
name: controller-sa
41+
description: Controller Service Account
42+
display_name: Controller SA
43+
project_roles:
44+
- compute.instanceAdmin.v1
45+
- iam.serviceAccountUser
46+
- storage.objectViewer
47+
- logging.logWriter
48+
- monitoring.metricWriter
49+
50+
- id: login_sa
51+
source: modules/project/service-account
52+
kind: terraform
53+
settings:
54+
deployment_name: $(vars.deployment_name)
55+
project_id: $(vars.project_id)
56+
name: login-sa
57+
description: Login Node Service Account
58+
display_name: Login SA
59+
project_roles:
60+
- logging.logWriter
61+
- monitoring.metricWriter
62+
- storage.objectViewer
63+
64+
- id: compute_sa
65+
source: modules/project/service-account
66+
kind: terraform
67+
settings:
68+
deployment_name: $(vars.deployment_name)
69+
project_id: $(vars.project_id)
70+
name: compute-sa
71+
description: Compute Node Service Account
72+
display_name: Compute SA
73+
project_roles:
74+
- logging.logWriter
75+
- monitoring.metricWriter
76+
- storage.objectViewer
77+
78+
# Network
79+
- id: network
80+
source: modules/network/vpc
81+
settings:
82+
network_name: $(vars.deployment_name)-net
83+
subnetworks:
84+
- subnet_name: $(vars.deployment_name)-primary-subnet
85+
subnet_region: $(vars.region)
86+
subnet_ip: 10.80.0.0/24
87+
88+
# Filestore (Shared /home)
89+
- id: home_fs
90+
source: modules/file-system/filestore
91+
settings:
92+
network_id: $(network.network_id)
93+
size_gb: 1024
94+
zone: $(vars.zone)
95+
96+
# Debug Logic (Define Login Node properties, does not create VM directly)
97+
- id: debug_nodes
98+
source: community/modules/scheduler/schedmd-slurm-gcp-v6-login
99+
settings:
100+
name_prefix: debug
101+
num_instances: 1
102+
machine_type: n1-standard-2
103+
service_account_email: $(login_sa.service_account_email)
104+
service_account_scopes: ["https://www.googleapis.com/auth/cloud-platform"]
105+
enable_oslogin: true
106+
subnetwork_self_link: $(network.subnetwork_self_link)
107+
enable_login_public_ips: false # NO EXTERNAL IP
108+
109+
# Nodeset (Compute)
110+
- id: compute_nodes
111+
source: community/modules/compute/schedmd-slurm-gcp-v6-nodeset
112+
settings:
113+
name: a2-nodes
114+
node_count_dynamic_max: 4
115+
node_count_static: 0
116+
machine_type: n1-standard-2
117+
service_account_email: $(compute_sa.service_account_email)
118+
service_account_scopes: ["https://www.googleapis.com/auth/cloud-platform"]
119+
enable_oslogin: true
120+
subnetwork_self_link: $(network.subnetwork_self_link)
121+
enable_placement: false
122+
network_storage:
123+
- server_ip: $(home_fs.network_storage.server_ip)
124+
remote_mount: $(home_fs.network_storage.remote_mount)
125+
local_mount: /home
126+
fs_type: nfs
127+
mount_options: _netdev,hard,intr
128+
129+
# Partition
130+
- id: debug_partition
131+
source: community/modules/compute/schedmd-slurm-gcp-v6-partition
132+
use: [compute_nodes]
133+
settings:
134+
partition_name: debug
135+
is_default: true
136+
137+
# Filestore (Dedicated State for Controller)
138+
- id: controller_fs
139+
source: modules/file-system/filestore
140+
settings:
141+
network_id: $(network.network_id)
142+
size_gb: 1024
143+
zone: $(vars.zone)
144+
145+
# Cloud SQL (External DB)
146+
- id: slurm_db
147+
source: community/modules/database/slurm-cloudsql-federation
148+
settings:
149+
deployment_name: $(vars.deployment_name)
150+
project_id: $(vars.project_id)
151+
region: $(vars.region)
152+
tier: db-f1-micro
153+
sql_instance_name: $(vars.deployment_name)-db
154+
network_id: $(network.network_id)
155+
use_psc_connection: true
156+
subnetwork_self_link: $(network.subnetwork_self_link)
157+
158+
# Controller (Custom HA Module)
159+
- id: slurm_controller
160+
source: community/modules/scheduler/schedmd-slurm-gcp-v6-controller
161+
use: [debug_partition]
162+
settings:
163+
enable_backup_controller: true
164+
slurm_cluster_name: hpcslurmha
165+
backup_zone: us-central1-f
166+
# Disable PD state disk, rely on /var/spool/slurm filestore share
167+
controller_state_disk: null
168+
cloudsql:
169+
server_ip: $(slurm_db.cloudsql.server_ip)
170+
user: $(slurm_db.cloudsql.user)
171+
password: $(slurm_db.cloudsql.password)
172+
db_name: $(slurm_db.cloudsql.db_name)
173+
enable_controller_public_ips: false # NO EXTERNAL IP
174+
machine_type: n1-standard-2
175+
zone: $(vars.zone)
176+
service_account_email: $(controller_sa.service_account_email)
177+
service_account_scopes: ["https://www.googleapis.com/auth/cloud-platform"]
178+
enable_oslogin: true
179+
subnetwork_self_link: $(network.subnetwork_self_link)
180+
login_nodes: $(debug_nodes.login_nodes)
181+
network_storage:
182+
- server_ip: $(home_fs.network_storage.server_ip)
183+
remote_mount: $(home_fs.network_storage.remote_mount)
184+
local_mount: /home
185+
fs_type: nfs
186+
mount_options: _netdev,hard,intr
187+
- server_ip: $(controller_fs.network_storage.server_ip)
188+
remote_mount: $(controller_fs.network_storage.remote_mount)
189+
local_mount: /var/spool/slurm
190+
fs_type: nfs
191+
mount_options: _netdev,hard,intr
192+
login_network_storage:
193+
- server_ip: $(home_fs.network_storage.server_ip)
194+
remote_mount: $(home_fs.network_storage.remote_mount)
195+
local_mount: /home
196+
fs_type: nfs
197+
mount_options: _netdev,hard,intr
198+
static_ips:
199+
- "10.80.0.10"
200+
- "10.80.0.11"

community/examples/hpc-slurm6-apptainer.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ deployment_groups:
6363
settings:
6464
source_image_project_id: [schedmd-slurm-public]
6565
# see latest in https://github.com/GoogleCloudPlatform/slurm-gcp/blob/master/docs/images.md#published-image-family
66-
source_image_family: slurm-gcp-6-12-hpc-rocky-linux-8
66+
# Rocky 8: slurm-gcp-6-12-hpc-rocky-linux-8
67+
# Rocky 9: slurm-gcp-6-12-hpc-rocky-linux-9
68+
source_image_family: slurm-gcp-6-12-hpc-rocky-linux-9
6769
# You can find size of source image by using following command
6870
# gcloud compute images describe-from-family <source_image_family> --project schedmd-slurm-public
6971
disk_size: $(vars.disk_size)

0 commit comments

Comments
 (0)