Skip to content

Commit 23f228a

Browse files
committed
Merge branch 'develop' of github.com:shubpal07/cluster-toolkit into shubham/kueue-on-helm
2 parents 3dba1f2 + 159fdcc commit 23f228a

10 files changed

Lines changed: 137 additions & 56 deletions

File tree

community/examples/gke-tpu-v6/gke-tpu-v6.yaml

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ vars:
5656
deployment_groups:
5757
- group: primary
5858
modules:
59-
- id: gke-tpu-v6-net
59+
- id: gke-tpu-v6-net-0
6060
source: modules/network/vpc
6161
settings:
62+
network_name: $(vars.deployment_name)-net-0
6263
subnetworks:
6364
- subnet_name: $(vars.deployment_name)-sub-0
6465
subnet_region: $(vars.region)
@@ -72,7 +73,25 @@ deployment_groups:
7273
ip_cidr_range: 10.0.32.0/20
7374
firewall_rules:
7475
- name: $(vars.deployment_name)-internal-0
75-
ranges: [192.168.0.0/18]
76+
ranges: [192.168.0.0/16]
77+
allow:
78+
- protocol: tcp
79+
ports: ["0-65535"]
80+
- protocol: udp
81+
ports: ["0-65535"]
82+
- protocol: icmp
83+
84+
- id: gke-tpu-v6-net-1
85+
source: modules/network/vpc
86+
settings:
87+
network_name: $(vars.deployment_name)-net-1
88+
subnetworks:
89+
- subnet_name: $(vars.deployment_name)-sub-1
90+
subnet_region: $(vars.region)
91+
subnet_ip: 192.168.64.0/18
92+
firewall_rules:
93+
- name: $(vars.deployment_name)-internal-1
94+
ranges: [192.168.0.0/16]
7695
allow:
7796
- protocol: tcp
7897
ports: ["0-65535"]
@@ -107,7 +126,7 @@ deployment_groups:
107126

108127
- id: gke-tpu-v6-cluster
109128
source: modules/scheduler/gke-cluster
110-
use: [gke-tpu-v6-net, workload_service_account]
129+
use: [gke-tpu-v6-net-0, workload_service_account]
111130
settings:
112131
system_node_pool_machine_type: "n2-standard-8"
113132
system_node_pool_disk_size_gb: $(vars.system_node_pool_disk_size_gb)
@@ -117,6 +136,21 @@ deployment_groups:
117136
master_authorized_networks:
118137
- cidr_block: $(vars.authorized_cidr) # Allows your machine to run the kubectl command. Required for multi network setup.
119138
display_name: "kubectl-access-network"
139+
additional_networks:
140+
$(concat(
141+
[{
142+
network=gke-tpu-v6-net-1.network_name,
143+
subnetwork=gke-tpu-v6-net-1.subnetwork_name,
144+
subnetwork_project=vars.project_id,
145+
nic_type="GVNIC",
146+
queue_count=null,
147+
network_ip=null,
148+
stack_type=null,
149+
access_config=[{nat_ip=null, public_ptr_domain_name=null, network_tier=null}],
150+
ipv6_access_config=[],
151+
alias_ip_range=[]
152+
}]
153+
))
120154
# Cluster versions cannot be updated through the toolkit after creation
121155
# Please manage cluster version from the Google Cloud Console directly
122156
version_prefix: "1.32."
@@ -140,6 +174,21 @@ deployment_groups:
140174
zones: [$(vars.zone)]
141175
disk_size_gb: $(vars.v6e_node_pool_disk_size_gb)
142176
static_node_count: $(vars.static_node_count)
177+
additional_networks:
178+
$(concat(
179+
[{
180+
network=gke-tpu-v6-net-1.network_name,
181+
subnetwork=gke-tpu-v6-net-1.subnetwork_name,
182+
subnetwork_project=vars.project_id,
183+
nic_type="GVNIC",
184+
queue_count=null,
185+
network_ip=null,
186+
stack_type=null,
187+
access_config=[{nat_ip=null, public_ptr_domain_name=null, network_tier=null}],
188+
ipv6_access_config=[],
189+
alias_ip_range=[]
190+
}]
191+
))
143192
reservation_affinity:
144193
consume_reservation_type: SPECIFIC_RESERVATION
145194
specific_reservations:

community/front-end/ofe/requirements.txt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
altgraph==0.17.4
22
archspec==0.2.5
33
argcomplete==3.6.2
4-
asgiref==3.9.1
4+
asgiref==3.10.0
55
astroid==3.3.11
66
attrs==25.3.0
77
# This should be supported by zoneinfo in Python 3.9+
88
backports.zoneinfo==0.2.1;python_version<"3.9"
99
cachetools>=2.0,<6.0
10-
certifi==2025.8.3
10+
certifi==2025.10.5
1111
cffi>=2.0.0
1212
cfgv==3.4.0
1313
charset-normalizer==3.4.3
14-
click==8.2.1
14+
click==8.3.0
1515
crispy-bootstrap5==2025.6
1616
cryptography==46.0.2
1717
decorator==5.2.1
@@ -21,42 +21,42 @@ distlib==0.4.0
2121
# django-revproxy==0.11.0 released but not yet in pypi
2222
git+https://github.com/jazzband/django-revproxy.git@d2234005135dc0771b7c4e0bb0465664ccfa5787
2323
Django==5.2.7
24-
django-allauth==65.11.1
24+
django-allauth==65.12.0
2525
django-crispy-forms==2.4
2626
django-extensions==3.2.3
2727
djangorestframework==3.16.1
2828
filelock==3.19.1
29-
google-api-core==2.25.1
30-
google-api-python-client==2.179.0
31-
google-auth==2.40.3
29+
google-api-core==2.25.2
30+
google-api-python-client==2.184.0
31+
google-auth==2.41.1
3232
google-auth-httplib2==0.2.0
3333
google-cloud-artifact-registry==1.16.1
3434
google-cloud-secret-manager==2.24.0
35-
google-cloud-build==3.31.3
35+
google-cloud-build==3.32.0
3636
google-cloud-billing==1.16.3
3737
google-cloud-core==2.4.3
3838
google-cloud-pubsub==2.31.1
39-
google-cloud-compute==1.35.0
40-
google-cloud-storage==3.3.1
39+
google-cloud-compute==1.38.0
40+
google-cloud-storage==3.4.0
4141
google-cloud-secret-manager==2.24.0
4242
google-crc32c==1.7.1
4343
google-resumable-media==2.7.2
4444
googleapis-common-protos==1.70.0
4545
grafana-api==1.0.3
4646
grpc-google-iam-v1==0.14.2
47-
grpcio==1.74.0
48-
grpcio-status==1.74.0
47+
grpcio==1.75.1
48+
grpcio-status==1.75.1
4949
h11==0.16.0
50-
httplib2==0.30.0
51-
identify==2.6.13
50+
httplib2==0.31.0
51+
identify==2.6.15
5252
idna==3.10
5353
importlib-resources==6.5.2
54-
isort==6.0.1
54+
isort==6.1.0
5555
Jinja2==3.1.6
5656
jsonschema==4.25.1
5757
jsonschema-specifications==2025.9.1
5858
lazy-object-proxy==1.12.0
59-
libcst==1.8.2
59+
libcst==1.8.5
6060
macholib==1.16.3
6161
MarkupSafe==2.1.3
6262
mccabe==0.7.0
@@ -71,23 +71,23 @@ proto-plus==1.26.1
7171
protobuf>=6.31.1,<7.0.0
7272
pyasn1==0.6.1
7373
pyasn1-modules==0.4.2
74-
pycparser==2.22
74+
pycparser==2.23
7575
PyJWT==2.10.1
76-
pylint==3.3.8
76+
pylint==3.3.9
7777
pylint-django==2.6.1
7878
pylint-plugin-utils==0.9.0
79-
pyparsing==3.2.3
79+
pyparsing==3.2.5
8080
python3-openid==3.2.0
8181
pytz==2023.3
82-
PyYAML==6.0.2
82+
PyYAML==6.0.3
8383
referencing==0.36.2
8484
requests==2.32.5
8585
requests-oauthlib==2.0.0
8686
retry==0.9.2
8787
rpds-py==0.27.1
8888
rsa==4.9.1
8989
ruamel.yaml==0.18.15
90-
ruamel.yaml.clib==0.2.12
90+
ruamel.yaml.clib==0.2.14
9191
semantic-version==2.10.0
9292
setuptools-rust==1.12.0
9393
six==1.17.0
@@ -99,7 +99,7 @@ typing-inspect==0.9.0
9999
typing_extensions==4.15.0
100100
uritemplate==4.2.0
101101
urllib3==2.5.0
102-
uvicorn==0.35.0
102+
uvicorn==0.37.0
103103
virtualenv==20.34.0
104104
wrapt==1.17.3
105105
xmltodict==1.0.2

community/modules/scripts/wait-for-startup/scripts/wait-for-startup-status.sh

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ FINISH_LINE="startup-script exit status"
6060
# Match string for failures on the new guest agent
6161
FINISH_LINE_ERR="Script.*failed with error:"
6262

63+
# NEW: Accept also these finish lines as success.
64+
STARTUP_SCRIPT_SUCCEEDED_LINE="google-startup-scripts.service: Succeeded."
65+
STARTUP_SCRIPT_FINISHED_LINE="Finished Google Compute Engine Startup Scripts."
66+
6367
NON_FATAL_ERRORS=(
6468
"Internal error"
6569
)
@@ -68,7 +72,7 @@ until [[ now -gt deadline ]]; do
6872
ser_log=$(
6973
set -o pipefail
7074
${fetch_cmd} 2>"${error_file}" |
71-
c1grep "${FINISH_LINE}\|${FINISH_LINE_ERR}"
75+
c1grep "${FINISH_LINE}\|${FINISH_LINE_ERR}\|${STARTUP_SCRIPT_SUCCEEDED_LINE}\|${STARTUP_SCRIPT_FINISHED_LINE}"
7276
) || {
7377
err=$(cat "${error_file}")
7478
echo "$err"
@@ -100,6 +104,12 @@ if [[ "${STATUS}" == 0 ]]; then
100104
elif [[ "${STATUS}" == 1 ]]; then
101105
echo "startup-script finished with errors, ${INSPECT_OUTPUT_TEXT}"
102106
echo "${fetch_cmd}"
107+
elif echo "${ser_log}" | grep -qE "${STARTUP_SCRIPT_SUCCEEDED_LINE}"; then
108+
echo "startup-script finished successfully (startup script succeeded line detected)"
109+
exit 0
110+
elif echo "${ser_log}" | grep -qE "${STARTUP_SCRIPT_FINISHED_LINE}"; then
111+
echo "startup-script finished successfully (startup script finished line detected)"
112+
exit 0
103113
elif [[ now -ge deadline ]]; then
104114
echo "startup-script timed out after ${TIMEOUT} seconds"
105115
echo "${INSPECT_OUTPUT_TEXT}"

examples/hpc-slurm-h4d.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ vars:
2626
#Provisioning model, select one, lack of selection will rely on on-demand capacity
2727
h4d_dws_flex_enabled: false
2828
h4d_reservation_name: ""
29+
h4d_enable_spot_vm: false
2930

3031
# Documentation for each of the modules used below can be found at
3132
# https://github.com/GoogleCloudPlatform/hpc-toolkit/blob/main/modules/README.md
@@ -85,6 +86,7 @@ deployment_groups:
8586
node_count_static: 2
8687
node_count_dynamic_max: 0
8788
enable_placement: false
89+
enable_spot_vm: $(vars.h4d_enable_spot_vm)
8890

8991
#Provisioning models
9092
reservation_name: $(vars.h4d_reservation_name)
Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# Copyright 2024 "Google LLC"
1+
# Copyright 2025 "Google LLC"
22
#
33
# Licensed under the Apache License, Version 2.0 (the "License");
44
# you may not use this file except in compliance with the License.
55
# You may obtain a copy of the License at
66
#
7-
# http://www.apache.org/licenses/LICENSE-2.0
7+
# http://www.apache.org/licenses/LICENSE-2.0
88
#
99
# Unless required by applicable law or agreed to in writing, software
1010
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -13,25 +13,38 @@
1313
# limitations under the License.
1414

1515
ARG NEMOFW_VERSION=24.12
16+
ARG NCCL_GIB_VERSION=v1.1.0
17+
18+
# Stage 1: Use the nccl-plugin-gib container as an installer
19+
FROM us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/nccl-plugin-gib:${NCCL_GIB_VERSION} AS nccl-gib
20+
RUN /scripts/container_entry.sh install --install-nccl
21+
22+
# Stage 2: Build the final NeMo container
1623
FROM nvcr.io/nvidia/nemo:$NEMOFW_VERSION
1724

18-
ENV NCCL_DEBUG=INFO,WARN
19-
ENV NCCL_DEBUG_SUBSYS=NET,COLL,GPU,INIT,ENV
20-
ENV NCCL_SOCKET_IFNAME=enp0s19,enp192s20
21-
ENV GLOO_SOCKET_IFNAME=enp0s19,enp192s20
25+
# Copy the NCCL gIB plugin and other binaries from the installer stage.
26+
# This replaces the need to manually install and mount /var/lib/gib from the host.
27+
COPY --from=nccl-gib /var/lib/gib /usr/local/gib
28+
29+
# Set the following to match what is in /usr/local/gib/scripts/set_nccl_env.sh
30+
ENV NCCL_NET=gIB
2231
ENV NCCL_CROSS_NIC=0
2332
ENV NCCL_NET_GDR_LEVEL=PIX
24-
#ENV PMIX_MCA_gds=^ds12
2533
ENV NCCL_P2P_NET_CHUNKSIZE=131072
2634
ENV NCCL_NVLS_CHUNKSIZE=524288
27-
ENV NCCL_IB_GID_INDEX=3
2835
ENV NCCL_IB_ADAPTIVE_ROUTING=1
2936
ENV NCCL_IB_QPS_PER_CONNECTION=4
3037
ENV NCCL_IB_TC=52
3138
ENV NCCL_IB_FIFO_TC=84
32-
ENV NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE=/usr/local/gib/configs/guest_config.txtpb
33-
ENV NCCL_TUNER_CONFIG_PATH=/usr/local/gib/configs/tuner_config.txtpb
34-
ENV NCCL_NET=gIB
39+
# Use A3 Ultra tuner config
40+
ENV NCCL_TUNER_CONFIG_PATH=/usr/local/gib/configs/tuner_config_a3u.txtpb
41+
42+
43+
# Add NCCL DEBUG at WARN level (useful for debugging)
44+
ENV NCCL_DEBUG=WARN
45+
ENV NCCL_DEBUG_SUBSYS=NET,COLL,GPU,INIT,ENV
46+
ENV GLOO_SOCKET_IFNAME=enp0s19,enp192s20
3547

48+
# Set up ldconfig to load nccl-gib
3649
RUN echo "/usr/local/gib/lib64" >> /etc/ld.so.conf.d/gib.conf && ldconfig
3750
ENV LD_LIBRARY_PATH=/usr/local/gib/lib64:$LD_LIBRARY_PATH

examples/machine-learning/a3-ultragpu-8g/nemo-framework/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ README
4343

4444
```shell
4545
cd launcher_scripts
46-
mkdir data
46+
mkdir -p data
4747

4848
MAX_STEPS=10
4949
NUM_NODES=8
@@ -53,8 +53,8 @@ README
5353
stages=[training] \
5454
training=gpt3/5b \
5555
env_vars.TRANSFORMERS_OFFLINE=0 \
56-
container=../nemo-24.12.sqsh \
57-
container_mounts=[${HOME}/.cache,/usr/local/gib] \
56+
container=../nemo-24.12-v1.1.0.sqsh \
57+
container_mounts=[${HOME}/.cache] \
5858
cluster.srun_args=["--container-writable"] \
5959
training.model.data.data_impl=mock \
6060
training.model.data.data_prefix=[] \

examples/machine-learning/a3-ultragpu-8g/nemo-framework/setup_nemo.sh

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
2-
# Copyright 2024 "Google LLC"
2+
# Copyright 2025 "Google LLC"
33
#
44
# Licensed under the Apache License, Version 2.0 (the "License");
55
# you may not use this file except in compliance with the License.
@@ -19,12 +19,19 @@
1919
#SBATCH --exclusive
2020

2121
: "${NEMOFW_VERSION:=24.12}"
22+
: "${NCCL_GIB_VERSION:=v1.1.0}"
2223

23-
srun docker build --build-arg="NEMOFW_VERSION=${NEMOFW_VERSION}" -t nemo-"${NEMOFW_VERSION}" .
24-
srun rm -f nemo-"${NEMOFW_VERSION}".sqsh
25-
srun enroot import dockerd://nemo-"${NEMOFW_VERSION}"
24+
# This ensures that the docker process on the compute node can access us-docker.pkg.dev
25+
srun gcloud auth configure-docker us-docker.pkg.dev --quiet
26+
27+
srun docker build \
28+
--build-arg="NEMOFW_VERSION=${NEMOFW_VERSION}" \
29+
--build-arg="NCCL_GIB_VERSION=${NCCL_GIB_VERSION}" \
30+
-t nemo-"${NEMOFW_VERSION}"-"${NCCL_GIB_VERSION}" .
31+
srun rm -f nemo-"${NEMOFW_VERSION}"-"${NCCL_GIB_VERSION}".sqsh
32+
srun enroot import dockerd://nemo-"${NEMOFW_VERSION}"-"${NCCL_GIB_VERSION}"
2633

2734
srun \
2835
--container-mounts="${PWD}":/workspace/mount_dir,/var/tmp:/var/tmp \
29-
--container-image=./nemo-"${NEMOFW_VERSION}".sqsh \
36+
--container-image=./nemo-"${NEMOFW_VERSION}"-"${NCCL_GIB_VERSION}".sqsh \
3037
bash -c "cp -r /opt/NeMo-Framework-Launcher/requirements.txt /opt/NeMo-Framework-Launcher/launcher_scripts /opt/NeMo-Framework-Launcher/auto_configurator /workspace/mount_dir/"

modules/network/vpc/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,9 @@ limitations under the License.
173173

174174
| Name | Source | Version |
175175
|------|--------|---------|
176-
| <a name="module_cloud_router"></a> [cloud\_router](#module\_cloud\_router) | terraform-google-modules/cloud-router/google | ~> 6.0 |
176+
| <a name="module_cloud_router"></a> [cloud\_router](#module\_cloud\_router) | terraform-google-modules/cloud-router/google | ~> 7.3 |
177177
| <a name="module_nat_ip_addresses"></a> [nat\_ip\_addresses](#module\_nat\_ip\_addresses) | terraform-google-modules/address/google | ~> 4.1 |
178-
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-google-modules/network/google | ~> 10.0 |
178+
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-google-modules/network/google | ~> 12.0 |
179179

180180
## Resources
181181

modules/network/vpc/main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ resource "terraform_data" "network_profile_firewall_validation" {
180180

181181
module "vpc" {
182182
source = "terraform-google-modules/network/google"
183-
version = "~> 10.0"
183+
version = "~> 12.0"
184184

185185
depends_on = [terraform_data.network_profile_firewall_validation]
186186

@@ -235,7 +235,7 @@ module "nat_ip_addresses" {
235235

236236
module "cloud_router" {
237237
source = "terraform-google-modules/cloud-router/google"
238-
version = "~> 6.0"
238+
version = "~> 7.3"
239239

240240
depends_on = [terraform_data.cloud_nat_validation]
241241

0 commit comments

Comments
 (0)