diff --git a/cgpu101/config.yaml b/cgpu101/config.yaml index 5c675dd..6a921ee 100644 --- a/cgpu101/config.yaml +++ b/cgpu101/config.yaml @@ -7,9 +7,8 @@ jupyterhub::jupyterhub_config_hash: max: 55000 def: 55000 gpus: - def: gpu:1 - choices: - - gpu:1 + def: 'gpu:1' + choices: ['gpu:1'] jupyterhub::kernel::venv::packages: - cupy==12.2.0 diff --git a/cgpu101/main.tf b/cgpu101/main.tf index a63ac2b..f091b48 100644 --- a/cgpu101/main.tf +++ b/cgpu101/main.tf @@ -11,9 +11,5 @@ locals { mig = { gpupool = { "3g.20gb" = 2 } } - config_git_url = "https://github.com/computecanada/puppet-magic_castle.git" - config_version = "a3c80de" - image_cpu = "snapshot-cpunode-2026-A9.7-2" - image_gpu = "snapshot-cpunode-2026-A9.7-2" } } diff --git a/cip101/config.yaml b/cip101/config.yaml index 34ad16a..b22022a 100644 --- a/cip101/config.yaml +++ b/cip101/config.yaml @@ -4,7 +4,7 @@ jupyterhub::jupyterhub_config_hash: max: 1024 def: 1024 partition: - def: 'nodecpupool' + def: 'cpupool' ui: def: 'terminal' diff --git a/cip201/config.yaml b/cip201/config.yaml index fcc770c..44287b6 100644 --- a/cip201/config.yaml +++ b/cip201/config.yaml @@ -4,7 +4,7 @@ jupyterhub::jupyterhub_config_hash: max: 1024 def: 1024 partition: - def: 'nodecpupool' + def: 'cpu' ui: def: 'terminal' diff --git a/cip202/config.yaml b/cip202/config.yaml index 03bdee1..c46706e 100644 --- a/cip202/config.yaml +++ b/cip202/config.yaml @@ -4,7 +4,7 @@ jupyterhub::jupyterhub_config_hash: max: 1024 def: 1024 partition: - def: 'nodecpupool' + def: 'cpupool' ui: def: 'terminal' diff --git a/ciq102/config.yaml b/ciq102/config.yaml index f042d2b..025cc09 100644 --- a/ciq102/config.yaml +++ b/ciq102/config.yaml @@ -1,8 +1,8 @@ jupyterhub::jupyterhub_config_hash: - SbatchForm: - memory: - max: 4098 - def: 4098 + SbatchForm: + memory: + max: 4098 + def: 4098 jupyterhub::kernel::venv::packages: - aiohttp @@ -20,13 +20,11 @@ jupyterhub::kernel::venv::packages: - mthree - ply - pylatexenc - profile::software_stack::lmod_default_modules: ['StdEnv/2023', 'python/3.11', 'jupyterlab-apps/1.0'] profile::accounts::skel_archives: - - filename: ciq102-main.zip - source: https://github.com/calculquebec/ciq102/archive/refs/heads/main.zip - - filename: mnq101-main.zip - source: https://github.com/calculquebec/mnq101/archive/refs/heads/main.zip - + - filename: ciq102-main.zip + source: https://github.com/calculquebec/ciq102/archive/refs/heads/main.zip + - filename: mnq101-main.zip + source: https://github.com/calculquebec/mnq101/archive/refs/heads/main.zip diff --git a/common/common.tf b/common/common.tf index 8bf939c..8a942c8 100644 --- a/common/common.tf +++ b/common/common.tf @@ -51,23 +51,21 @@ data "tfe_workspace" "current" { locals { default_pod = { image = "AlmaLinux-9" - image_cpu = "snapshot-cpunode-2025.3-A9.6" - image_gpu = "snapshot-gpunode-2025.3-A9.6" + image_compute = "snapshot-cpunode-2026-A9.8-1" + image_map = { + cpupool = "snapshot-cpunode-2026-A9.8-1" + gpupool = "snapshot-gpunode-2026-A9.8-1" + } nb_users = 0 nnodes = { cpu = 2 - compute_node = 0 - gpu = 0 - cpupool = 0 - gpupool = 0 - jupyter = 0 login = 1 - gpupool12 = 0 - gpupool16 = 0 - gpupool80 = 0 - gpupool16-cq = 0 - gpupool12-j = 0 + } + + features = { + gpu = ["gpu"], + gpupool = ["gpu"], } home_size = 80 @@ -86,9 +84,18 @@ locals { } cluster_purpose = "formation" - config_git_url = "https://github.com/calculquebec/puppet-magic_castle_formation.git" - config_version = "e2d4f36" + config_git_url = "https://github.com/computecanada/puppet-magic_castle.git" + config_version = "15.6.1" + node_flavors = { + arbutus = ["cpu", "compute-node", "cpupool", "gpu", "gpupool"], + beluga = ["cpu", "compute-node", "cpupool"] + juno = ["cpu", "cpupool", "gpu", "gpupool"] + } + tags = { + cpu = ["node"] + gpu = ["node"] + } instances_type_map = { arbutus = { mgmt = "p8-12gb" @@ -96,7 +103,7 @@ locals { jupyter = "p4-6gb" cpu = "c8-30gb-186-avx2" cpupool = "c8-30gb-186-avx2" - compute_node = "p8-12gb" + compute-node = "p8-12gb" gpu = "g1-8gb-c4-22gb" gpupool = "g1-8gb-c4-22gb" } @@ -106,44 +113,33 @@ locals { jupyter = "p4-7.5gb" cpu = "c8-60gb" cpupool = "c8-60gb" - compute_node = "p8-15gb" + compute-node = "p8-15gb" } juno = { mgmt = "ha4-15gb" - login = "c4-15gb" + login = "ha4-15gb" jupyter = "c4-15gb" cpu = "c8-30gb" cpupool = "c8-30gb" gpu = "gpu16-240-3450gb-a100x1_cq" gpupool = "gpu12-120-850gb-a100x1_MC" - gpupool16 = "gpu16-240-3375gb-a100x1" - gpupool80 = "gpu13-240-2500gb-a100-80gx1" - gpupool12 = "gpu12-120-850gb-a100x1" - gpupool16-cq = "gpu16-240-3450gb-a100x1_cq" - gpupool12-j = "gpu12-120-850gb-a100x1_j" } } + disk_size = { + gpu = 50 + gpupool = 50 + } + mig = { gpu = { "1g.5gb" = 7 } gpupool = { "1g.5gb" = 7 } - gpupool16 = { "1g.5gb" = 7 } - gpupool80 = { "1g.10gb" = 7 } - gpupool12 = { "1g.5gb" = 7 } - gpupool16-cq = { "1g.5gb" = 7 } - gpupool12-j = { "1g.5gb" = 7 } } shard = { gpu = null gpupool = null - gpupool16 = null - gpupool80 = null - gpupool12 = null - gpupool16-cq = null - gpupool12-j = null } - } user_quotas = { @@ -168,198 +164,39 @@ locals { } default = { - instances_map = { - arbutus = { - mgmt = { - type = try(local.custom.instances_type_map.arbutus.mgmt, local.default_pod.instances_type_map.arbutus.mgmt), - tags = ["puppet", "mgmt", "nfs", "formation_extra", "cron"], - disk_size = 20, - count = 1 - } - login = { - type = try(local.custom.instances_type_map.arbutus.login, local.default_pod.instances_type_map.arbutus.login), - tags = try(local.custom.nnodes.jupyter, local.default_pod.nnodes.jupyter) == 0 ? ["login", "public", "proxy"] : ["login", "public"], - disk_size = 20, - count = try(local.custom.nnodes.login, local.default_pod.nnodes.login) - } - jupyter = { - type = try(local.custom.instances_type_map.arbutus.jupyter, local.default_pod.instances_type_map.arbutus.jupyter), - tags = ["public", "proxy"], - disk_size = 20, - count = try(local.custom.nnodes.jupyter, local.default_pod.nnodes.jupyter) - } - nodecpu = { - type = try(local.custom.instances_type_map.arbutus.cpu, local.default_pod.instances_type_map.arbutus.cpu), - tags = ["node"], - count = try(local.custom.nnodes.cpu, local.default_pod.nnodes.cpu), - image = try(local.custom.image_cpu, local.default_pod.image_cpu), - } - compute-node = { - type = try(local.custom.instances_type_map.arbutus.compute_node, local.default_pod.instances_type_map.arbutus.compute_node), - tags = ["node"], - count = try(local.custom.nnodes.compute_node, local.default_pod.nnodes.compute_node), - image = try(local.custom.image_cpu, local.default_pod.image_cpu), - } - nodecpupool = { - type = try(local.custom.instances_type_map.arbutus.cpupool, local.default_pod.instances_type_map.arbutus.cpupool), - tags = ["node", "pool"], - count = try(local.custom.nnodes.cpupool, local.default_pod.nnodes.cpupool), - image = try(local.custom.image_cpu, local.default_pod.image_cpu), - } - nodegpu = { - type = try(local.custom.instances_type_map.arbutus.gpu, local.default_pod.instances_type_map.arbutus.gpu), - tags = ["node"], - count = try(local.custom.nnodes.gpu, local.default_pod.nnodes.gpu), - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpu, local.default_pod.shard.gpu), - } - nodegpupool = { - type = try(local.custom.instances_type_map.arbutus.gpupool, local.default_pod.instances_type_map.arbutus.gpupool), - tags = ["node", "pool"], - count = try(local.custom.nnodes.gpupool, local.default_pod.nnodes.gpupool), - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpupool, local.default_pod.shard.gpupool), - } + mgmt_instances = { + mgmt = { + type = try(local.custom.instances_type_map[var.cloud_name]["mgmt"], local.default_pod.instances_type_map[var.cloud_name]["mgmt"]), + tags = ["puppet", "mgmt", "nfs", "formation_extra", "cron"], + disk_size = 20, + count = 1 } - beluga = { - mgmt = { - type = try(local.custom.instances_type_map.beluga.mgmt, local.default_pod.instances_type_map.beluga.mgmt), - tags = ["puppet", "mgmt", "nfs", "formation_extra", "cron"], - disk_size = 20, - count = 1 - } - login = { - type = try(local.custom.instances_type_map.beluga.login, local.default_pod.instances_type_map.beluga.login), - tags = try(local.custom.nnodes.jupyter, local.default_pod.nnodes.jupyter) == 0 ? ["login", "public", "proxy"] : ["login", "public"], - disk_size = 20, - count = try(local.custom.nnodes.login, local.default_pod.nnodes.login) - } - jupyter = { - type = try(local.custom.instances_type_map.beluga.jupyter, local.default_pod.instances_type_map.beluga.jupyter), - tags = ["public", "proxy"], - disk_size = 20, - count = try(local.custom.nnodes.jupyter, local.default_pod.nnodes.jupyter) - } - nodecpu = { - type = try(local.custom.instances_type_map.beluga.cpu, local.default_pod.instances_type_map.beluga.cpu), - disk_size = 20 - tags = ["node"], - count = try(local.custom.nnodes.cpu, local.default_pod.nnodes.cpu), - image = try(local.custom.image_cpu, local.default_pod.image_cpu), - } - compute-node = { - type = try(local.custom.instances_type_map.beluga.compute_node, local.default_pod.instances_type_map.beluga.compute_node), - disk_size = 20 - tags = ["node"], - count = try(local.custom.nnodes.compute_node, local.default_pod.nnodes.compute_node), - image = try(local.custom.image_cpu, local.default_pod.image_cpu), - } - nodecpupool = { - type = try(local.custom.instances_type_map.beluga.cpupool, local.default_pod.instances_type_map.beluga.cpupool), - disk_size = 20 - tags = ["node", "pool"], - count = try(local.custom.nnodes.cpupool, local.default_pod.nnodes.cpupool), - image = try(local.custom.image_cpu, local.default_pod.image_cpu), - } + login = { + type = try(local.custom.instances_type_map[var.cloud_name]["login"], local.default_pod.instances_type_map[var.cloud_name]["login"]), + tags = try(local.custom.nnodes.jupyter, 0) == 0 ? ["login", "public", "proxy"] : ["login", "public"], + disk_size = 20, + count = try(local.custom.nnodes.login, 1) } - juno = { - mgmt = { - type = try(local.custom.instances_type_map.juno.mgmt, local.default_pod.instances_type_map.juno.mgmt), - tags = ["puppet", "mgmt", "nfs", "formation_extra", "cron"], - disk_size = 20, - count = 1 - } - login = { - type = try(local.custom.instances_type_map.juno.login, local.default_pod.instances_type_map.juno.login), - tags = try(local.custom.nnodes.jupyter, local.default_pod.nnodes.jupyter) == 0 ? ["login", "public", "proxy"] : ["login", "public"], - disk_size = 20, - count = try(local.custom.nnodes.login, local.default_pod.nnodes.login) - } - jupyter = { - type = try(local.custom.instances_type_map.juno.jupyter, local.default_pod.instances_type_map.juno.jupyter), - tags = ["public", "proxy"], - disk_size = 20, - count = try(local.custom.nnodes.jupyter, local.default_pod.nnodes.jupyter) - } - nodecpu = { - type = try(local.custom.instances_type_map.juno.cpu, local.default_pod.instances_type_map.juno.cpu), - disk_size = 20 - tags = ["node"], - count = try(local.custom.nnodes.cpu, local.default_pod.nnodes.cpu), - image = try(local.custom.image_cpu, local.default_pod.image_cpu), - } - nodecpupool = { - type = try(local.custom.instances_type_map.juno.cpupool, local.default_pod.instances_type_map.juno.cpupool), - disk_size = 20 - tags = ["node", "pool"], - count = try(local.custom.nnodes.cpupool, local.default_pod.nnodes.cpupool), - image = try(local.custom.image_cpu, local.default_pod.image_cpu), - } - nodegpu = { - type = try(local.custom.instances_type_map.juno.gpu, local.default_pod.instances_type_map.juno.gpu), - tags = ["node"], - count = try(local.custom.nnodes.gpu, local.default_pod.nnodes.gpu), - mig = try(local.custom.mig.gpu, local.default_pod.mig.gpu) - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpu, local.default_pod.shard.gpu), - disk_size = "50" - } - nodegpupool = { - type = try(local.custom.instances_type_map.juno.gpupool, local.default_pod.instances_type_map.juno.gpupool), - tags = ["node", "pool"], - count = try(local.custom.nnodes.gpupool, 0), - mig = try(local.custom.mig.gpupool, local.default_pod.mig.gpupool) - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpupool, local.default_pod.shard.gpupool), - disk_size = "50" - } - nodegpupool16 = { - type = try(local.custom.instances_type_map.juno.gpupool16, local.default_pod.instances_type_map.juno.gpupool16), - tags = ["node", "pool"], - count = try(local.custom.nnodes.gpupool16, 0), - mig = try(local.custom.mig.gpupool16, local.default_pod.mig.gpupool16) - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpupool16, local.default_pod.shard.gpupool16), - disk_size = "50" - } - nodegpupool16-cq = { - type = try(local.custom.instances_type_map.juno.gpupool16-cq, local.default_pod.instances_type_map.juno.gpupool16-cq), - tags = ["node", "pool"], - count = try(local.custom.nnodes.gpupool16-cq, 0), - mig = try(local.custom.mig.gpupool16-cq, local.default_pod.mig.gpupool16-cq) - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpupool16-cq, local.default_pod.shard.gpupool16-cq), - disk_size = "50" - } - nodegpupool12 = { - type = try(local.custom.instances_type_map.juno.gpupool12, local.default_pod.instances_type_map.juno.gpupool12), - tags = ["node", "pool"], - count = try(local.custom.nnodes.gpupool12, 0), - mig = try(local.custom.mig.gpupool12, local.default_pod.mig.gpupool12) - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpupool12, local.default_pod.shard.gpupool12), - disk_size = "50" - } - nodegpupool12-j = { - type = try(local.custom.instances_type_map.juno.gpupool12-j, local.default_pod.instances_type_map.juno.gpupool12-j), - tags = ["node", "pool"], - count = try(local.custom.nnodes.gpupool12-j, 0), - mig = try(local.custom.mig.gpupool12-j, local.default_pod.mig.gpupool12-j) - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpupool12-j, local.default_pod.shard.gpupool12-j), - disk_size = "50" - } - nodegpupool80 = { - type = try(local.custom.instances_type_map.juno.gpupool80, local.default_pod.instances_type_map.juno.gpupool80), - tags = ["node", "pool"], - count = try(local.custom.nnodes.gpupool80, 0), - mig = try(local.custom.mig.gpupool80, local.default_pod.mig.gpupool80) - image = try(local.custom.image_gpu, local.default_pod.image_gpu), - shard = try(local.custom.shard.gpupool80, local.default_pod.shard.gpupool80), - disk_size = "50" - } + jupyter = { + type = try(local.custom.instances_type_map[var.cloud_name]["jupyter"], local.default_pod.instances_type_map[var.cloud_name]["jupyter"]), + tags = ["public", "proxy"], + disk_size = 20, + count = try(local.custom.nnodes.jupyter, 0) } } + compute_instances = { + for flavor in try(local.custom.node_flavors[var.cloud_name], local.custom.node_flavors, local.default_pod.node_flavors[var.cloud_name]): + flavor => { + type = try(local.custom.instances_type_map[var.cloud_name][flavor], local.custom.instances_type_map[flavor], local.default_pod.instances_type_map[var.cloud_name][flavor]) + tags = try(local.custom.tags[flavor], local.default_pod.tags[flavor], ["node", "pool"]) + disk_size = try(local.custom.disk_size[flavor], local.default_pod.disk_size[flavor], 20) + count = try(local.custom.nnodes[flavor], local.default_pod.nnodes[flavor], 0) + image = try(local.custom.image_map[flavor], local.custom.image_compute, local.default_pod.image_map[flavor], local.default_pod.image_compute) + mig = try(local.custom.mig[var.cloud_name][flavor], local.custom.mig[flavor], local.default_pod.mig[var.cloud_name][flavor], local.default_pod.mig[flavor], null) + shard = try(local.custom.shard[flavor], local.default_pod.shard[flavor], null) + features = try(local.custom.features[flavor], local.default_pod.features[flavor], ["cpu"]) + } + } volumes_map = { arbutus = { nfs = { @@ -385,7 +222,7 @@ locals { } } - instances = try(local.custom.instances, local.default.instances_map[var.cloud_name]) + instances = try(local.custom.instances, merge(local.default.mgmt_instances, local.default.compute_instances)) volumes = try(local.custom.volumes, local.default.volumes_map[var.cloud_name]) cluster_purpose = try(local.custom.cluster_purpose, local.default_pod.cluster_purpose) nb_users = try(local.custom.nb_users, local.default_pod.nb_users) @@ -407,7 +244,7 @@ locals { } module "openstack" { - source = "git::https://github.com/calculquebec/magic_castle_formation.git//openstack?ref=formation" + source = "git::https://github.com/computecanada/magic_castle.git//openstack?ref=15.6.0" config_git_url = try(local.custom.config_git_url, local.default_pod.config_git_url) config_version = try(local.custom.config_version, local.default_pod.config_version) @@ -452,7 +289,7 @@ output "public_ip" { # Uncomment to register your domain name with CloudFlare module "dns" { - source = "git::https://github.com/calculquebec/magic_castle_formation.git//dns/cloudflare?ref=formation" + source = "git::https://github.com/computecanada/magic_castle.git//dns/cloudflare?ref=15.6.0" name = module.openstack.cluster_name domain = module.openstack.domain public_instances = module.openstack.public_instances diff --git a/common/config.yaml b/common/config.yaml index 0a701d3..f60aedd 100644 --- a/common/config.yaml +++ b/common/config.yaml @@ -48,6 +48,9 @@ jupyterhub::jupyterhub_config_hash: lock: true ui: def: 'lab' + feature: + lock: true + SlurmFormSpawner: disable_form: true start_timeout: 900 @@ -87,12 +90,14 @@ profile::users::ldap::users: profile::freeipa::mokey::enable_user_signup: false profile::nfs::server::enable_client_quotas: true -profile::slurm::base::slurm_version: '24.11' profile::slurm::base::suspend_time: 7200 profile::slurm::base::resume_timeout: 7200 profile::slurm::base::suspend_rate: 80 profile::slurm::base::resume_rate: 80 +prometheus::storage_retention: '14d' + + jupyterhub::kernel::venv::pip_environment: PIP_NO_INDEX: 1 diff --git a/ecole/config.yaml b/ecole/config.yaml index 8e65964..5b09413 100644 --- a/ecole/config.yaml +++ b/ecole/config.yaml @@ -1,3 +1,4 @@ +jupyterhub::kernel::venv::python: /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v3/Compiler/gcccore/python/3.13.2/bin/python jupyterhub::jupyterhub_config_hash: SbatchForm: runtime: @@ -23,6 +24,9 @@ jupyterhub::jupyterhub_config_hash: lock: true reservation: lock: true + partition: + def: 'cpubase_bycore_b1' + lock: true SlurmFormSpawner: disable_form: false start_timeout: 900 @@ -38,77 +42,60 @@ jupyterhub::jupyterhub_config_hash: runtime: 4 memory: '2048' ui: 'lab' - partition: 'cpu' + gpus: 'gpu:0' + feature: ['gpu'] IA_GPU: name: 'Séquence IA - GPU' params: nprocs: 2 runtime: 4 - memory: '2048' + memory: '4096' oversubscribe: false ui: 'lab' - partition: 'gpu' gpus: 'gpu:1' + feature: ['gpu'] PYT: name: 'Séquence intro python' params: nprocs: 1 runtime: 4 - memory: '1024' + memory: '2560' oversubscribe: false ui: 'lab' - partition: 'cpu' - -profile::software_stack::lmod_default_modules: ['StdEnv/2023', 'gcc', 'cuda/12.2', 'mpi4py/4.0.3', 'jupyterlab-apps/1.0'] -jupyterhub::kernel::venv::packages: - - numpy>2 - - pandas==2.2.3 - - matplotlib==3.10.0 - - plotnine==0.14.1 - - altair==5.4.1 - - vega_datasets - - vl_convert_python - - dask[array,distributed,diagnostics]==2025.2.0 - - graphviz - - sparse - - scipy==1.15.1 - - numba==0.61.2 - - torch==2.6.0 - - scikit-learn - - pillow - - pycuda==2025.1 - - torchvision + gpus: 'gpu:0' + feature: ['cpu'] profile::freeipa::mokey::enable_user_signup: true -profile::freeipa::mokey::require_verify_admin: false +profile::freeipa::mokey::require_verify_admin: true +profile::slurm::base::suspend_time: 14400 profile::accounts::skel_archives: - - filename: cip101.zip - source: https://github.com/calculquebec/cip101/archive/refs/heads/main.zip - filename: shell-lesson-data.zip source: https://swcarpentry.github.io/shell-novice/data/shell-lesson-data.zip - - filename: dat201.zip - source: https://github.com/calculquebec/dat201/archive/refs/heads/main.zip - - filename: intro-machine-learning.zip - source: https://github.com/calculquebec/intro-machine-learning/archive/refs/heads/master.zip + - filename: cip101.zip + source: https://github.com/calculquebec/cip101/archive/refs/heads/main.zip - filename: pyt101.zip - source: https://github.com/calculquebec/pyt101/archive/refs/heads/main.zip + source: https://github.com/calculquebec/pyt101/archive/refs/heads/ecole.zip - filename: pyt102.zip source: https://github.com/calculquebec/pyt102/archive/refs/heads/main.zip + - filename: dat201.zip + source: https://github.com/calculquebec/dat201/archive/refs/heads/main.zip - filename: dat203.zip source: https://github.com/calculquebec/dat203/archive/refs/heads/main.zip - - filename: ia101.zip - source: https://github.com/calculquebec/ia102/archive/refs/heads/master.zip + - filename: ia102.zip + source: https://github.com/calculquebec/ia102_ecole2026/archive/refs/heads/main.zip - filename: ia103.zip - source: https://github.com/calculquebec/ia103/archive/refs/heads/master.zip + source: https://github.com/calculquebec/ia103/archive/refs/heads/main.zip + - filename: intro-apprentissage-IA.zip + source: https://github.com/calculquebec/intro-apprentissage-IA/archive/refs/heads/main.zip cron::job: spawn_cpu_nodes: - command: "/opt/software/slurm/bin/scontrol update node=nodecpupool[1-15] state=power_up" + command: "/opt/software/slurm/bin/scontrol update node=cpupool[1-15] state=power_up" minute: '0' hour: '8' - date: '19,20,21' - month: '5' + date: '1,2,3,4,5' + month: '6' weekday: '*' user: 'root' description: 'spawn cpu nodes' @@ -117,8 +104,8 @@ cron::job: command: "/opt/software/slurm/bin/scontrol update node=ALL state=power_up" minute: '0' hour: '8' - date: '22,23' - month: '5' + date: '1,2,3,4,5' + month: '6' weekday: '*' user: 'root' description: 'spawn all nodes' diff --git a/ecole/main.tf b/ecole/main.tf index 8d4a5e0..6d40705 100644 --- a/ecole/main.tf +++ b/ecole/main.tf @@ -3,37 +3,33 @@ locals { custom = { nnodes = { - cpu = 1 - gpu = 1 + cpu = 0 + gpu = 0 compute_node = 0 - cpupool = 15 - gpupool = 15 + cpupool = 10 + gpupool = 6 # instance jupyter séparée jupyter = 1 - # update git config - config_git_url = "https://github.com/computecanada/puppet-magic_castle.git" - config_version = "15.2.1" } - instances_type_map = { - juno = { - login = "ha4-15gb" - } + image_map = { + gpupool = "snapshot-gpunode-2026-A9.7-ecole" + cpupool = "snapshot-cpunode-2026-A9.7-ecole" } - mig = { gpupool = { "1g.5gb" = 7 } } - image_cpu = "AlmaLinux-9" - image_gpu = "AlmaLinux-9" -# image_cpu = "snapshot-cpunode-2025-A9.4-ecole" -# image_gpu = "snapshot-gpunode-2025-A9.4-ecole" - # taille des systèmes de fichiers. Les valeurs par défaut sont celles ci-dessous home_size = 250 project_size = 200 scratch_size = 100 + + user_quotas_sizes = { + home = "5g" + project = "4g" + scratch = "5g" + } } } diff --git a/ecole/prefixes/cpupool/config.yaml b/ecole/prefixes/cpupool/config.yaml new file mode 100644 index 0000000..4365800 --- /dev/null +++ b/ecole/prefixes/cpupool/config.yaml @@ -0,0 +1,20 @@ +profile::software_stack::lmod_default_modules: ['StdEnv/2023', 'gcc', 'jupyterlab-apps/1.0', 'python/3.13', 'ipython-kernel/3.13'] +jupyterhub::kernel::venv::packages: + - numpy>2 + - pandas==3.0.0 + - matplotlib==3.10.8 + - plotnine==0.15.0 + - altair==5.5.0 + - vega_datasets + - vl_convert_python + - graphviz + - sparse + - scipy==1.17.0 + - pillow + - shap + - umap-learn + - tqdm + - optuna + - xgboost + - imblearn + - seaborn diff --git a/ecole/prefixes/gpupool/config.yaml b/ecole/prefixes/gpupool/config.yaml new file mode 100644 index 0000000..3d40841 --- /dev/null +++ b/ecole/prefixes/gpupool/config.yaml @@ -0,0 +1,33 @@ +jupyterhub::kernel::venv::python: /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v3/Compiler/gcccore/python/3.12.4/bin/python +profile::software_stack::lmod_default_modules: ['StdEnv/2023', 'gcc', 'cuda/12.2', 'mpi4py/4.0.3', 'opencv/4.13.0', 'jupyterlab-apps/1.0', 'python/3.12', 'ipython-kernel/3.12'] +jupyterhub::kernel::venv::packages: + - numpy>2 + - pandas==3.0.0 + - matplotlib==3.10.8 + - dask[array,distributed,diagnostics]==2026.1.2 + - graphviz + - sparse + - scipy==1.17.0 + - numba==0.65.0 + - torch==2.11.0 + - scikit-learn + - pillow + - pycuda==2025.1 + - torchvision + - torch + - transformers + - vllm==0.21.0 + - seaborn + - shap + - imblearn + - xgboost + - optuna + - tqdm + - umap-learn + - imageio + - hdbscan + +jupyterhub::kernel::venv::pip_environment: + PIP_NO_INDEX: 1 + PYTHONPATH: /cvmfs/soft.computecanada.ca/easybuild/python/site-packages:/cvmfs/soft.computecanada.ca/custom/python/site-packages + EBPYTHONPREFIXES: /cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v3/Compiler/gcccore/scipy-stack/2026a:/cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v3/Compiler/gcc12/opencv/4.13.0:/cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v3/Compiler/gcc12/opencv/4.13.0:/cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v3/MPI/gcc12/openmpi4/mpi4py/4.0.3:/cvmfs/soft.computecanada.ca/easybuild/software/2023/x86-64-v3/Compiler/gcccore/ipykernel/2026a