From 8e05097c04abaf2e1d16fd35138de19a4f2823de Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Fri, 17 Apr 2026 13:35:42 +0300 Subject: [PATCH 01/21] feat: update instructions using new container --- .../GPT-neo-IMDB-introduction.ipynb | 2 +- 02_Using_the_LUMI_web_interface/README.md | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/02_Using_the_LUMI_web_interface/GPT-neo-IMDB-introduction.ipynb b/02_Using_the_LUMI_web_interface/GPT-neo-IMDB-introduction.ipynb index 229c9c0..eb7e40c 100644 --- a/02_Using_the_LUMI_web_interface/GPT-neo-IMDB-introduction.ipynb +++ b/02_Using_the_LUMI_web_interface/GPT-neo-IMDB-introduction.ipynb @@ -39,7 +39,7 @@ "outputs": [], "source": [ "import os\n", - "os.environ[\"HF_HOME\"] = \"/flash/project_465002178/hf-cache\"" + "os.environ[\"HF_HOME\"] = \"/flash/project_465002757/hf-cache\"" ] }, { diff --git a/02_Using_the_LUMI_web_interface/README.md b/02_Using_the_LUMI_web_interface/README.md index a9bec70..852a2e9 100644 --- a/02_Using_the_LUMI_web_interface/README.md +++ b/02_Using_the_LUMI_web_interface/README.md @@ -7,10 +7,10 @@ In this exercise you will gain first experience with using the LUMI web interface to navigate files and directories on the LUMI supercomputer. You will also set up your own copy of the exercise repository on the system, so that you can work on them without interfering with the other course participants. 1. Log in to the LUMI web interface: https://www.lumi.csc.fi - 2. Create your own subdirectory in `/project/project_465002178/` and `/scratch/project_465002178/`. Use your username for the directory name. You can either + 2. Create your own subdirectory in `/project/project_465002757/` and `/scratch/project_465002757/`. Use your username for the directory name. You can either - Use the built-in file explorer ("Home Directory"), or - Use the login node shell app in the webinterface - 3. Clone the [exercise repository](https://github.com/Lumi-supercomputer/Getting_Started_with_AI_workshop) to your folder in `/project/project_465002178/`. You can either + 3. Clone the [exercise repository](https://github.com/Lumi-supercomputer/Getting_Started_with_AI_workshop) to your folder in `/project/project_465002757/`. You can either - use the login node shell app in the webinterface, or - start a Jupyter lab job and use the Jupyter lab UI for cloning Git repositories, see [Clone_with_JupyterLab.md](./Clone_with_JupyterLab.md) for an illustrated step-by-step guide for this. 4. Get familiar with the exercise repository layout. @@ -20,15 +20,19 @@ In this exercise you will learn how to reserve resources for and start an interactive job to run a Jupyter notebook via the LUMI web interface. The notebook itself introduces you to our running example of finetuning a language model using PyTorch and the training libraries provided by Huggingface. In this exercise you will not do any training, but familiarise yourself a bit with the software and the base model. 1. Start an interactive Jupyter session: Open the Jupyter app (! not "Jupyter for Courses" !) in the LUMI webinterface and set the following settings before pressing `Launch` - - Project: `project_465002178 (LUST Training ...)` + - Project: `project_465002757 (LUST Training ...)` - Reservation: Use the course reservation `AI_workshop_Day1` (there should only be one available option) - Partition: `small-g` - Number of CPU cores: `7` - Memory (GB): `16` - Time: `0:30:00` - Working directory: `/project/$PROJECT` - - Python: `pytorch (Via CSC stack, limited support available)` - - Virtual environment path: leave empty + - Press Advanced + - Custom Python Type: `Container` + - Modules to load: `Local-LAIF lumi-aif-singularity-bindings` + - Path to container with Python: `/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif` + - Container arguments: leave empty + - Init script for container: leave empty 2. Wait for the session to start, then press `Connect to Jupyter` > **Note** From c34045b9a4bf4dead758d98a60e2a18109d38fa4 Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:41:34 +0300 Subject: [PATCH 02/21] feat: update exercise 03 with the new LUMI AIF containers --- .../resume_from_checkpoint/run.sh | 14 +++++++------- .../reference_solution/run.sh | 14 +++++++------- 03_Your_first_AI_training_job_on_LUMI/run.sh | 12 ++++++------ 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh index b23c7b8..529b0d1 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh @@ -1,5 +1,5 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=small-g #SBATCH --gpus-per-node=1 @@ -10,14 +10,14 @@ # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" @@ -35,7 +35,7 @@ export OUTPUT_DIR=$SCRATCH/$USER/data/ export LOGGING_DIR=$SCRATCH/$USER/runs/ set -xv # print the command so that we can verify setting arguments correctly from the logs -srun singularity exec $CONTAINER \ +srun singularity run $CONTAINER \ python GPT-neo-IMDB-finetuning.py \ --model-name gpt-imdb-model \ --output-path $OUTPUT_DIR \ diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh index 92c5a13..e0530f4 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh @@ -1,5 +1,5 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=small-g #SBATCH --gpus-per-node=1 @@ -10,14 +10,14 @@ # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" @@ -35,7 +35,7 @@ export OUTPUT_DIR=$SCRATCH/$USER/data/ export LOGGING_DIR=$SCRATCH/$USER/runs/ set -xv # print the command so that we can verify setting arguments correctly from the logs -srun singularity exec $CONTAINER \ +srun singularity run $CONTAINER \ python GPT-neo-IMDB-finetuning.py \ --model-name gpt-imdb-model \ --output-path $OUTPUT_DIR \ diff --git a/03_Your_first_AI_training_job_on_LUMI/run.sh b/03_Your_first_AI_training_job_on_LUMI/run.sh index fab3d08..a79c78f 100644 --- a/03_Your_first_AI_training_job_on_LUMI/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/run.sh @@ -1,19 +1,19 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=... ## # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" From ae989bab1b15081f4b291a1c8f2fb6a879d7732c Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Fri, 17 Apr 2026 16:06:11 +0300 Subject: [PATCH 03/21] feat: update exercise 08 with new containers --- .../run_no_torchrun.sh | 14 +++++++------- .../run_torchrun.sh | 14 +++++++------- .../reference_solution/run_no_torchrun.sh | 14 +++++++------- .../reference_solution/run_torchrun.sh | 14 +++++++------- .../with_cpu_bindings/run_no_torchrun.sh | 14 +++++++------- .../with_cpu_bindings/run_torchrun.sh | 14 +++++++------- 08_Scaling_to_multiple_GPUs/run.sh | 12 ++++++------ 7 files changed, 48 insertions(+), 48 deletions(-) diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh index 67581e1..d566eda 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh @@ -1,5 +1,5 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 @@ -11,14 +11,14 @@ # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" @@ -46,7 +46,7 @@ export LOCAL_WORLD_SIZE=$SLURM_GPUS_PER_NODE # As opposed to the example in `run_torchrun.sh`, we can set the CPU binds directly via the slurm command, since we have # one task per GPU. In this case we do NOT need to set them from within the Python code itself. -srun singularity exec $CONTAINER \ +srun singularity run $CONTAINER \ bash -c "RANK=\$SLURM_PROCID \ LOCAL_RANK=\$SLURM_LOCALID \ python GPT-neo-IMDB-finetuning.py \ diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh index 5bc4378..ddeb771 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh @@ -1,5 +1,5 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 @@ -11,14 +11,14 @@ # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" @@ -41,7 +41,7 @@ set -xv # print the command so that we can verify setting arguments correctly fr # Since we start only one task with slurm which then starts subprocesses, we cannot use slurm to configure CPU binds. # Therefore we need to set them up in the Python code itself. -srun singularity exec $CONTAINER \ +srun singularity run $CONTAINER \ torchrun --standalone \ --nnodes=1 \ --nproc-per-node=${SLURM_GPUS_PER_NODE} \ diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh index 67581e1..d566eda 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh @@ -1,5 +1,5 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 @@ -11,14 +11,14 @@ # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" @@ -46,7 +46,7 @@ export LOCAL_WORLD_SIZE=$SLURM_GPUS_PER_NODE # As opposed to the example in `run_torchrun.sh`, we can set the CPU binds directly via the slurm command, since we have # one task per GPU. In this case we do NOT need to set them from within the Python code itself. -srun singularity exec $CONTAINER \ +srun singularity run $CONTAINER \ bash -c "RANK=\$SLURM_PROCID \ LOCAL_RANK=\$SLURM_LOCALID \ python GPT-neo-IMDB-finetuning.py \ diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh index 5bc4378..ddeb771 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh @@ -1,5 +1,5 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 @@ -11,14 +11,14 @@ # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" @@ -41,7 +41,7 @@ set -xv # print the command so that we can verify setting arguments correctly fr # Since we start only one task with slurm which then starts subprocesses, we cannot use slurm to configure CPU binds. # Therefore we need to set them up in the Python code itself. -srun singularity exec $CONTAINER \ +srun singularity run $CONTAINER \ torchrun --standalone \ --nnodes=1 \ --nproc-per-node=${SLURM_GPUS_PER_NODE} \ diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh index 4b3e62a..8cc11ed 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh @@ -1,5 +1,5 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 @@ -11,14 +11,14 @@ # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" @@ -52,7 +52,7 @@ CPU_BIND_MASKS="0x00fe000000000000,0xfe00000000000000,0x0000000000fe0000,0x00000 # tell slurm to configure the cpu binds specified by the mask, additional option v prints to configuration to the logs srun --cpu-bind=v,mask_cpu=$CPU_BIND_MASKS \ - singularity exec $CONTAINER \ + singularity run $CONTAINER \ bash -c "RANK=\$SLURM_PROCID \ LOCAL_RANK=\$SLURM_LOCALID \ python GPT-neo-IMDB-finetuning.py \ diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index 8bc4509..a4a067b 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -1,5 +1,5 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 @@ -11,14 +11,14 @@ # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" @@ -41,7 +41,7 @@ set -xv # print the command so that we can verify setting arguments correctly fr # Since we start only one task with slurm which then starts subprocesses, we cannot use slurm to configure CPU binds. # Therefore we need to set them up in the Python code itself. -srun singularity exec $CONTAINER \ +srun singularity run $CONTAINER \ torchrun --standalone \ --nnodes=1 \ --nproc-per-node=${SLURM_GPUS_PER_NODE} \ diff --git a/08_Scaling_to_multiple_GPUs/run.sh b/08_Scaling_to_multiple_GPUs/run.sh index 050d7c7..153d321 100644 --- a/08_Scaling_to_multiple_GPUs/run.sh +++ b/08_Scaling_to_multiple_GPUs/run.sh @@ -1,19 +1,19 @@ #!/bin/bash -#SBATCH --account=project_465002178 +#SBATCH --account=project_465002757 #SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=... ## # Set up the software environment # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container -# (/scratch, /project, etc) as well as mounts some important system libraries that are optimized for LUMI +# (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/containers/ai-modules/singularity-AI-bindings/24.03.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua module purge -module use /appl/local/containers/ai-modules -module load singularity-AI-bindings +module use /appl/local/laifs/modules +module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/containers/sif-images/lumi-pytorch-rocm-6.2.4-python-3.12-pytorch-v2.6.0.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" From 16b49fb4d2cfc2f094da17deda044db86e5e8ea3 Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Fri, 17 Apr 2026 16:25:49 +0300 Subject: [PATCH 04/21] fix: remove instructions for cloning via Jupyter --- .../Clone_with_JupyterLab.md | 20 ------------------ 02_Using_the_LUMI_web_interface/README.md | 4 +--- .../images/step0.png | Bin 72511 -> 0 bytes .../images/step1.png | Bin 73971 -> 0 bytes .../images/step2.png | Bin 97848 -> 0 bytes 5 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 02_Using_the_LUMI_web_interface/Clone_with_JupyterLab.md delete mode 100644 02_Using_the_LUMI_web_interface/images/step0.png delete mode 100644 02_Using_the_LUMI_web_interface/images/step1.png delete mode 100644 02_Using_the_LUMI_web_interface/images/step2.png diff --git a/02_Using_the_LUMI_web_interface/Clone_with_JupyterLab.md b/02_Using_the_LUMI_web_interface/Clone_with_JupyterLab.md deleted file mode 100644 index 50af268..0000000 --- a/02_Using_the_LUMI_web_interface/Clone_with_JupyterLab.md +++ /dev/null @@ -1,20 +0,0 @@ -# Cloning the course git repository using JupyterLab UI - -1. Open a JupyterLab session using the Jupyter app on the LUMI web interface [www.lumi.csc.fi](https://www.lumi.csc.fi) - - Follow the instructions in the second part of the exercise for this session. You can then keep using the session - for the rest of the exercise. - -2. Once you have opened JupyterLab and opened your own folder in the navigation panel to the left, your browser should present a view like this (in this case for user `lukaspre`): - - ![After starting JupyterLab and opening your own folder, the navigation panel shows an empty list and the main screen a selection of apps to use in JupyterLab.](images/step0.png) - -4. Use the highlighted button to open the UI popup for cloning a git repository: - - ![The button for cloning a git repository is in the top-left corner, just above the file search input.](images/step1.png) - -5. Enter the repository URL ( [https://github.com/Lumi-supercomputer/Getting_Started_with_AI_workshop](https://github.com/Lumi-supercomputer/Getting_Started_with_AI_workshop) ) and press the "Clone" button. - - ![The repository URL should be entered in the opening popup.](images/step2.png) - - This will clone the respository in a new folder "Getting_Started_with_AI_workshop" in your directory on the course project scratch filesystem. diff --git a/02_Using_the_LUMI_web_interface/README.md b/02_Using_the_LUMI_web_interface/README.md index 852a2e9..179538d 100644 --- a/02_Using_the_LUMI_web_interface/README.md +++ b/02_Using_the_LUMI_web_interface/README.md @@ -10,9 +10,7 @@ 2. Create your own subdirectory in `/project/project_465002757/` and `/scratch/project_465002757/`. Use your username for the directory name. You can either - Use the built-in file explorer ("Home Directory"), or - Use the login node shell app in the webinterface - 3. Clone the [exercise repository](https://github.com/Lumi-supercomputer/Getting_Started_with_AI_workshop) to your folder in `/project/project_465002757/`. You can either - - use the login node shell app in the webinterface, or - - start a Jupyter lab job and use the Jupyter lab UI for cloning Git repositories, see [Clone_with_JupyterLab.md](./Clone_with_JupyterLab.md) for an illustrated step-by-step guide for this. + 3. Clone the [exercise repository](https://github.com/Lumi-supercomputer/Getting_Started_with_AI_workshop) to your folder in `/project/project_465002757/`. You can either use the login node shell app in the webinterface for that. 4. Get familiar with the exercise repository layout. 2. Start an interactive Jupyter lab job and run inference with GPT-neo. diff --git a/02_Using_the_LUMI_web_interface/images/step0.png b/02_Using_the_LUMI_web_interface/images/step0.png deleted file mode 100644 index ac4c4ff393b2bc45be0e468a26986056e0e27d40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72511 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%0Dg}^Pwb>s?T|AF)fXhLBr^i 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 z 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
  • fE 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≧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 <|^*uO4aF* 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

    ~x1c`GBcwgt~VptFFmAXc~#sH`QNEOs& zpX74#?5pAPtbg^WeX1w~2CV8!N=ne(g5u)E*4#4VYpNXbU^rs(tQH6}{8Q7@H4Gj0a~Gb zwuzim;_9K@(1&-_WDB-EsayB5%f2ftM|%5zx4-LJwNGqxlN5+Mi)bz zn_f5l^l6*&F2v)ZnEsKGqK6OnIyyOh)v$)3 z0N5x&K~b>)d}vWh5EhF?01S$^BA*wb?3J+yH}{xpPqrpN;s`-@`|zHV*WvJV-m_;D zGc$3(t=_P>6HNH0);6j^hX-uIag;!in%(B0h>jfaFPfj9FHd1XzMJv}Q&RCsT)Lxm z5e^5v!qeXzb^6|;QLr22URYQ$6zA&iuUHn0Qse`)zRFr6k?YU_pKl+YSSe-CdV%%? zfHdE@PwM2z9&vSb?H?KvezL1a1C9WYkVZRTjeyY_3@9xsO0^`8kK1ZqIB`zN`&LRy zimWN^2mc|qqmHFp*X>F(7_wjpYi>Kve)MRE-kJ2=TnH9?1rc67k&~B?A;97AYf>92 z85w0OD?T7l1`z9@bL*MT`Ioh`lMLk~3Q9{8?Rl2yLE(R9fY-x5b#)~TQO@~=ig220 zYe#}*6Ic)WY;6V*NDE)SWVTN|Ek&fo#YqbV6Ik_**{c!LmNXVc{>bV9V}bL~fhyayZP||Od~ES2$P;B|hD1+|g$;U$|(`^YKl+Js_uPO&|H&3F4|YF25F;;fZAvIi5E(Mc$LQ9)-=0%XLcc)$plI z%Tuy{56-Yp?p`IE2m4`WSbom~mDBWmT~xku^(OW{dNK~H=e6SUvn>+Kdb%y{WeJ36 z5MeJSs$|{jb&O4dy@qdSNIt6i{?H|^FZ503;dGaxtnc?h!II(1*LoBbv) QcxsQXrs1u!8-IoU8xyuyRR910 From f4c5148f7a5b1ffcf3d299c5aeaefee75346685c Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Fri, 17 Apr 2026 16:26:50 +0300 Subject: [PATCH 05/21] fix: remove word from sentence --- 02_Using_the_LUMI_web_interface/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_Using_the_LUMI_web_interface/README.md b/02_Using_the_LUMI_web_interface/README.md index 179538d..0d08b22 100644 --- a/02_Using_the_LUMI_web_interface/README.md +++ b/02_Using_the_LUMI_web_interface/README.md @@ -10,7 +10,7 @@ 2. Create your own subdirectory in `/project/project_465002757/` and `/scratch/project_465002757/`. Use your username for the directory name. You can either - Use the built-in file explorer ("Home Directory"), or - Use the login node shell app in the webinterface - 3. Clone the [exercise repository](https://github.com/Lumi-supercomputer/Getting_Started_with_AI_workshop) to your folder in `/project/project_465002757/`. You can either use the login node shell app in the webinterface for that. + 3. Clone the [exercise repository](https://github.com/Lumi-supercomputer/Getting_Started_with_AI_workshop) to your folder in `/project/project_465002757/`. You can use the login node shell app in the webinterface for that. 4. Get familiar with the exercise repository layout. 2. Start an interactive Jupyter lab job and run inference with GPT-neo. From f91302ca79dfe5d5571f9aefd79464c12c91adb1 Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Wed, 20 May 2026 08:32:27 +0300 Subject: [PATCH 06/21] fix: update to newer transformers version and prevent warnings --- .../GPT-neo-IMDB-finetuning.py | 7 +++++-- .../reference_solution/GPT-neo-IMDB-finetuning.py | 7 +++++-- .../resume_from_checkpoint/GPT-neo-IMDB-finetuning.py | 7 +++++-- 08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py | 7 +++++-- .../reference_solution/GPT-neo-IMDB-finetuning.py | 7 +++++-- .../GPT-neo-IMDB-finetuning.py | 7 +++++-- .../with_cpu_bindings/GPT-neo-IMDB-finetuning.py | 7 +++++-- 7 files changed, 35 insertions(+), 14 deletions(-) diff --git a/03_Your_first_AI_training_job_on_LUMI/GPT-neo-IMDB-finetuning.py b/03_Your_first_AI_training_job_on_LUMI/GPT-neo-IMDB-finetuning.py index b5f42d9..fcef236 100644 --- a/03_Your_first_AI_training_job_on_LUMI/GPT-neo-IMDB-finetuning.py +++ b/03_Your_first_AI_training_job_on_LUMI/GPT-neo-IMDB-finetuning.py @@ -73,10 +73,13 @@ print("Loading model and tokenizer") start = time.time() tokenizer = AutoTokenizer.from_pretrained(pretrained_model, use_fast=True) - tokenizer.pad_token = tokenizer.eos_token + tokenizer.pad_token_id = 50256 # adjusting tokenizer and model # Load the actual base model from Hugging Face model = AutoModelForCausalLM.from_pretrained(pretrained_model) + # adjusting tokenizer and model + model.config.pad_token_id = 50256 + model.generation_config.pad_token_id = 50256 model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") @@ -156,7 +159,7 @@ trainer = Trainer( model=model, args=training_args, - tokenizer=tokenizer, + processing_class=tokenizer, data_collator=collator, train_dataset=train_dataset_tokenized, eval_dataset=validate_dataset_tokenized, diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/GPT-neo-IMDB-finetuning.py b/03_Your_first_AI_training_job_on_LUMI/reference_solution/GPT-neo-IMDB-finetuning.py index b5f42d9..fcef236 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/GPT-neo-IMDB-finetuning.py +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/GPT-neo-IMDB-finetuning.py @@ -73,10 +73,13 @@ print("Loading model and tokenizer") start = time.time() tokenizer = AutoTokenizer.from_pretrained(pretrained_model, use_fast=True) - tokenizer.pad_token = tokenizer.eos_token + tokenizer.pad_token_id = 50256 # adjusting tokenizer and model # Load the actual base model from Hugging Face model = AutoModelForCausalLM.from_pretrained(pretrained_model) + # adjusting tokenizer and model + model.config.pad_token_id = 50256 + model.generation_config.pad_token_id = 50256 model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") @@ -156,7 +159,7 @@ trainer = Trainer( model=model, args=training_args, - tokenizer=tokenizer, + processing_class=tokenizer, data_collator=collator, train_dataset=train_dataset_tokenized, eval_dataset=validate_dataset_tokenized, diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/GPT-neo-IMDB-finetuning.py b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/GPT-neo-IMDB-finetuning.py index 04dbee2..1df749d 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/GPT-neo-IMDB-finetuning.py +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/GPT-neo-IMDB-finetuning.py @@ -79,10 +79,13 @@ print("Loading model and tokenizer") start = time.time() tokenizer = AutoTokenizer.from_pretrained(pretrained_model, use_fast=True) - tokenizer.pad_token = tokenizer.eos_token + tokenizer.pad_token_id = 50256 # adjusting tokenizer and model # Load the actual base model from Hugging Face model = AutoModelForCausalLM.from_pretrained(pretrained_model) + # adjusting tokenizer and model + model.config.pad_token_id = 50256 + model.generation_config.pad_token_id = 50256 model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") @@ -163,7 +166,7 @@ trainer = Trainer( model=model, args=training_args, - tokenizer=tokenizer, + processing_class=tokenizer, data_collator=collator, train_dataset=train_dataset_tokenized, eval_dataset=validate_dataset_tokenized, diff --git a/08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py index ffa2817..dafb3c5 100644 --- a/08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py @@ -75,10 +75,13 @@ print("Loading model and tokenizer") start = time.time() tokenizer = AutoTokenizer.from_pretrained(pretrained_model, use_fast=True) - tokenizer.pad_token = tokenizer.eos_token + tokenizer.pad_token_id = 50256 # adjusting tokenizer and model # Load the actual base model from Hugging Face model = AutoModelForCausalLM.from_pretrained(pretrained_model) + # adjusting tokenizer and model + model.config.pad_token_id = 50256 + model.generation_config.pad_token_id = 50256 model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") @@ -155,7 +158,7 @@ trainer = Trainer( model=model, args=training_args, - tokenizer=tokenizer, + processing_class=tokenizer, data_collator=collator, train_dataset=train_dataset_tokenized, eval_dataset=validate_dataset_tokenized, diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/reference_solution/GPT-neo-IMDB-finetuning.py index 3c2ef17..dcab248 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/reference_solution/GPT-neo-IMDB-finetuning.py @@ -84,10 +84,13 @@ print("Loading model and tokenizer") start = time.time() tokenizer = AutoTokenizer.from_pretrained(pretrained_model, use_fast=True) - tokenizer.pad_token = tokenizer.eos_token + tokenizer.pad_token_id = 50256 # adjusting tokenizer and model # Load the actual base model from Hugging Face model = AutoModelForCausalLM.from_pretrained(pretrained_model) + # adjusting tokenizer and model + model.config.pad_token_id = 50256 + model.generation_config.pad_token_id = 50256 model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") @@ -165,7 +168,7 @@ trainer = Trainer( model=model, args=training_args, - tokenizer=tokenizer, + processing_class=tokenizer, data_collator=collator, train_dataset=train_dataset_tokenized, eval_dataset=validate_dataset_tokenized, diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/GPT-neo-IMDB-finetuning.py index dd8fa66..f69658a 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/GPT-neo-IMDB-finetuning.py @@ -85,10 +85,13 @@ print("Loading model and tokenizer") start = time.time() tokenizer = AutoTokenizer.from_pretrained(pretrained_model, use_fast=True) - tokenizer.pad_token = tokenizer.eos_token + tokenizer.pad_token_id = 50256 # adjusting tokenizer and model # Load the actual base model from Hugging Face model = AutoModelForCausalLM.from_pretrained(pretrained_model) + # adjusting tokenizer and model + model.config.pad_token_id = 50256 + model.generation_config.pad_token_id = 50256 model.to(device) stop = time.time() if rank == 0: @@ -169,7 +172,7 @@ trainer = Trainer( model=model, args=training_args, - tokenizer=tokenizer, + processing_class=tokenizer, data_collator=collator, train_dataset=train_dataset_tokenized, eval_dataset=validate_dataset_tokenized, diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py index 487cd20..973a05a 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py @@ -115,10 +115,13 @@ def set_cpu_affinity(local_rank): print("Loading model and tokenizer") start = time.time() tokenizer = AutoTokenizer.from_pretrained(pretrained_model, use_fast=True) - tokenizer.pad_token = tokenizer.eos_token + tokenizer.pad_token_id = 50256 # adjusting tokenizer and model # Load the actual base model from Hugging Face model = AutoModelForCausalLM.from_pretrained(pretrained_model) + # adjusting tokenizer and model + model.config.pad_token_id = 50256 + model.generation_config.pad_token_id = 50256 model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") @@ -196,7 +199,7 @@ def set_cpu_affinity(local_rank): trainer = Trainer( model=model, args=training_args, - tokenizer=tokenizer, + processing_class=tokenizer, data_collator=collator, train_dataset=train_dataset_tokenized, eval_dataset=validate_dataset_tokenized, From ce5d3c072c0dbe1b403172fed784cffd6206734a Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Wed, 20 May 2026 09:19:08 +0300 Subject: [PATCH 07/21] fix: add more lines between prints --- .../GPT-neo-IMDB-finetuning.py | 4 ++++ .../reference_solution/GPT-neo-IMDB-finetuning.py | 4 ++++ .../resume_from_checkpoint/GPT-neo-IMDB-finetuning.py | 4 ++++ 08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py | 4 ++++ .../reference_solution/GPT-neo-IMDB-finetuning.py | 4 ++++ .../GPT-neo-IMDB-finetuning.py | 4 ++++ .../with_cpu_bindings/GPT-neo-IMDB-finetuning.py | 6 +++++- 7 files changed, 29 insertions(+), 1 deletion(-) diff --git a/03_Your_first_AI_training_job_on_LUMI/GPT-neo-IMDB-finetuning.py b/03_Your_first_AI_training_job_on_LUMI/GPT-neo-IMDB-finetuning.py index fcef236..2a66437 100644 --- a/03_Your_first_AI_training_job_on_LUMI/GPT-neo-IMDB-finetuning.py +++ b/03_Your_first_AI_training_job_on_LUMI/GPT-neo-IMDB-finetuning.py @@ -83,6 +83,7 @@ model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") + print ("\n" * 4) # #### Loading the IMDb data set # @@ -102,6 +103,7 @@ # Let's print one sample from the dataset. print("Sample from dataset") pprint(train_dataset[200]) + print ("\n" * 4) # #### Setting up the training configuration train_batch_size = 32 # This just about fits into the VRAM of a single MI250x GCD with 16-bit floats @@ -143,6 +145,7 @@ print("Length of input_ids:", len(b["input_ids"])) break print("Length of dataset (tokenized)", len(train_dataset_tokenized)) + print ("\n" * 4) # #### Training # We use the Hugging Face trainer instead of a manual training loop. @@ -170,6 +173,7 @@ print() print("Training done, you can find all the model checkpoints in", output_dir) + print ("\n" * 4) # #### Evaluating the finetuned model with torch.no_grad(): diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/GPT-neo-IMDB-finetuning.py b/03_Your_first_AI_training_job_on_LUMI/reference_solution/GPT-neo-IMDB-finetuning.py index fcef236..2a66437 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/GPT-neo-IMDB-finetuning.py +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/GPT-neo-IMDB-finetuning.py @@ -83,6 +83,7 @@ model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") + print ("\n" * 4) # #### Loading the IMDb data set # @@ -102,6 +103,7 @@ # Let's print one sample from the dataset. print("Sample from dataset") pprint(train_dataset[200]) + print ("\n" * 4) # #### Setting up the training configuration train_batch_size = 32 # This just about fits into the VRAM of a single MI250x GCD with 16-bit floats @@ -143,6 +145,7 @@ print("Length of input_ids:", len(b["input_ids"])) break print("Length of dataset (tokenized)", len(train_dataset_tokenized)) + print ("\n" * 4) # #### Training # We use the Hugging Face trainer instead of a manual training loop. @@ -170,6 +173,7 @@ print() print("Training done, you can find all the model checkpoints in", output_dir) + print ("\n" * 4) # #### Evaluating the finetuned model with torch.no_grad(): diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/GPT-neo-IMDB-finetuning.py b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/GPT-neo-IMDB-finetuning.py index 1df749d..5db36cc 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/GPT-neo-IMDB-finetuning.py +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/GPT-neo-IMDB-finetuning.py @@ -89,6 +89,7 @@ model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") + print ("\n" * 4) # #### Loading the IMDb data set # @@ -108,6 +109,7 @@ # Let's print one sample from the dataset. print("Sample from dataset") pprint(train_dataset[200]) + print ("\n" * 4) # #### Setting up the training configuration train_batch_size = 32 # This just about fits into the VRAM of a single MI250x GCD with 16-bit floats @@ -150,6 +152,7 @@ print("Length of input_ids:", len(b["input_ids"])) break print("Length of dataset (tokenized)", len(train_dataset_tokenized)) + print ("\n" * 4) # #### Training # We use the Hugging Face trainer instead of a manual training loop. @@ -177,6 +180,7 @@ print() print("Training done, you can find all the model checkpoints in", output_dir) + print ("\n" * 4) # #### Evaluating the finetuned model with torch.no_grad(): diff --git a/08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py index dafb3c5..295a3b2 100644 --- a/08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py @@ -85,6 +85,7 @@ model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") + print ("\n" * 4) # #### Loading the IMDb data set # @@ -104,6 +105,7 @@ # Let's print one sample from the dataset. print("Sample from dataset") pprint(train_dataset[200]) + print ("\n" * 4) # #### Setting up the training configuration # @@ -146,6 +148,7 @@ print("Length of input_ids:", len(b["input_ids"])) break print("Length of dataset (tokenized)", len(train_dataset_tokenized)) + print ("\n" * 4) # #### Training # We use the Hugging Face trainer instead of a manual training loop. @@ -169,6 +172,7 @@ print() print("Training done, you can find all the model checkpoints in", output_dir) + print ("\n" * 4) # #### Evaluating the finetuned model with torch.no_grad(): diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/reference_solution/GPT-neo-IMDB-finetuning.py index dcab248..ae67574 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/reference_solution/GPT-neo-IMDB-finetuning.py @@ -94,6 +94,7 @@ model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") + print ("\n" * 4) # #### Loading the IMDb data set # @@ -113,6 +114,7 @@ # Let's print one sample from the dataset. print("Sample from dataset") pprint(train_dataset[200]) + print ("\n" * 4) # #### Setting up the training configuration global_train_batch_size = 32 # We keep the overall batch size (across all GPUs) the same as before ... @@ -156,6 +158,7 @@ print("Length of input_ids:", len(b["input_ids"])) break print("Length of dataset (tokenized)", len(train_dataset_tokenized)) + print ("\n" * 4) # #### Training # We use the Hugging Face trainer instead of a manual training loop. @@ -179,6 +182,7 @@ print() print("Training done, you can find all the model checkpoints in", output_dir) + print ("\n" * 4) # #### Evaluating the finetuned model with torch.no_grad(): diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/GPT-neo-IMDB-finetuning.py index f69658a..0b88e9a 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/GPT-neo-IMDB-finetuning.py @@ -96,6 +96,7 @@ stop = time.time() if rank == 0: print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") + print ("\n" * 4) # #### Loading the IMDb data set # @@ -116,6 +117,7 @@ if rank == 0: print("Sample from dataset") pprint(train_dataset[200]) + print ("\n" * 4) # #### Setting up the training configuration global_train_batch_size = 32 # We keep the overall batch size (across all GPUs) the same as before ... @@ -159,6 +161,7 @@ pprint(b, compact=True) print("Length of input_ids:", len(b["input_ids"])) break + print ("\n" * 4) print("Length of dataset (tokenized)", len(train_dataset_tokenized)) # #### Training @@ -184,6 +187,7 @@ if rank == 0: print() print("Training done, you can find all the model checkpoints in", output_dir) + print ("\n" * 4) # #### Evaluating the finetuned model with torch.no_grad(): diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py index 973a05a..a346f12 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py @@ -125,6 +125,7 @@ def set_cpu_affinity(local_rank): model.to(device) stop = time.time() print(f"Loading model and tokenizer took: {stop-start:.2f} seconds") + print ("\n" * 4) # #### Loading the IMDb data set # @@ -144,8 +145,9 @@ def set_cpu_affinity(local_rank): # Let's print one sample from the dataset. print("Sample from dataset") pprint(train_dataset[200]) + print ("\n" * 4) - # #### Setting up the training configuration + # #### Setting up the training configurationt global_train_batch_size = 32 # We keep the overall batch size (across all GPUs) the same as before ... per_device_train_batch_size = global_train_batch_size // world_size # ... which means we divide by the number of processes for the batch size of each GPU eval_batch_size = 128 # No optimizer state during evaluation, so can use bigger batches for increased throughput @@ -187,6 +189,7 @@ def set_cpu_affinity(local_rank): print("Length of input_ids:", len(b["input_ids"])) break print("Length of dataset (tokenized)", len(train_dataset_tokenized)) + print ("\n" * 4) # #### Training # We use the Hugging Face trainer instead of a manual training loop. @@ -210,6 +213,7 @@ def set_cpu_affinity(local_rank): print() print("Training done, you can find all the model checkpoints in", output_dir) + print ("\n" * 4) # #### Evaluating the finetuned model with torch.no_grad(): From 7333fc1d375c8adbb6ce99a0c9a28883866bde7f Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Thu, 21 May 2026 07:46:57 +0300 Subject: [PATCH 08/21] feat: update to ROCm 7.0 container --- 02_Using_the_LUMI_web_interface/README.md | 2 +- .../reference_solution/resume_from_checkpoint/run.sh | 2 +- 03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh | 2 +- 03_Your_first_AI_training_job_on_LUMI/run.sh | 2 +- .../prints_only_from_single_process/run_no_torchrun.sh | 2 +- .../prints_only_from_single_process/run_torchrun.sh | 2 +- .../reference_solution/run_no_torchrun.sh | 2 +- 08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh | 2 +- .../reference_solution/with_cpu_bindings/run_no_torchrun.sh | 2 +- .../reference_solution/with_cpu_bindings/run_torchrun.sh | 2 +- 08_Scaling_to_multiple_GPUs/run.sh | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/02_Using_the_LUMI_web_interface/README.md b/02_Using_the_LUMI_web_interface/README.md index 0d08b22..ab7fca6 100644 --- a/02_Using_the_LUMI_web_interface/README.md +++ b/02_Using_the_LUMI_web_interface/README.md @@ -28,7 +28,7 @@ - Press Advanced - Custom Python Type: `Container` - Modules to load: `Local-LAIF lumi-aif-singularity-bindings` - - Path to container with Python: `/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif` + - Path to container with Python: `/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif` - Container arguments: leave empty - Init script for container: leave empty 2. Wait for the session to start, then press `Connect to Jupyter` diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh index 529b0d1..7a71b88 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh @@ -17,7 +17,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh index e0530f4..bcb359f 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh @@ -17,7 +17,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/03_Your_first_AI_training_job_on_LUMI/run.sh b/03_Your_first_AI_training_job_on_LUMI/run.sh index a79c78f..7eefffa 100644 --- a/03_Your_first_AI_training_job_on_LUMI/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/run.sh @@ -13,7 +13,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh index d566eda..9a511e2 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh @@ -18,7 +18,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh index ddeb771..31ae199 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh @@ -18,7 +18,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh index d566eda..9a511e2 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh @@ -18,7 +18,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh index ddeb771..31ae199 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh @@ -18,7 +18,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh index 8cc11ed..9b97226 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh @@ -18,7 +18,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index a4a067b..d288986 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -18,7 +18,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" diff --git a/08_Scaling_to_multiple_GPUs/run.sh b/08_Scaling_to_multiple_GPUs/run.sh index 153d321..81beb93 100644 --- a/08_Scaling_to_multiple_GPUs/run.sh +++ b/08_Scaling_to_multiple_GPUs/run.sh @@ -13,7 +13,7 @@ module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings -CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r64f21m43t29-20260319_153422/lumi-multitorch-full-u24r64f21m43t29-20260319_153422.sif +CONTAINER=/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif # Some environment variables to set up cache directories SCRATCH="/scratch/${SLURM_JOB_ACCOUNT}" From 4787fca1057e030c6ea1a3214129fccba9be9c4e Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Thu, 21 May 2026 08:13:31 +0300 Subject: [PATCH 09/21] feat: update to --numa-binding=exclusive for GPU/CPU bindings --- 08_Scaling_to_multiple_GPUs/README.md | 15 +++------ .../GPT-neo-IMDB-finetuning.py | 31 ------------------- .../with_cpu_bindings/run_torchrun.sh | 2 +- 3 files changed, 6 insertions(+), 42 deletions(-) diff --git a/08_Scaling_to_multiple_GPUs/README.md b/08_Scaling_to_multiple_GPUs/README.md index 0d8fa9b..1e88c0d 100644 --- a/08_Scaling_to_multiple_GPUs/README.md +++ b/08_Scaling_to_multiple_GPUs/README.md @@ -63,16 +63,11 @@ 3. (Optional/Bonus): Set up CPU bindings. - In order to achieve optimal CPU-GPU data transfer performance we can ensure that each script runs on the CPU cores closest to the respective GPU. - As we are using torchrun to manage the worker processes, we cannot handle these CPU bindings via slurm but must set them up in our Python training script. + In order to achieve optimal CPU-GPU data transfer performance we can ensure that each script runs on the CPU cores closest to the respective GPU. You can find a [figure showing which cores ae closest to which GCD](https://docs.lumi-supercomputer.eu/assets/images/lumig-cpu-gpu-links.svg) on the [LUMI Docs LUMI-G page](https://docs.lumi-supercomputer.eu/hardware/lumig/). - 1. Edit [08_Scaling_to_multiple_GPUs/GPT-neo-IMDB-finetuning.py](GPT-neo-IMDB-finetuning.py) to set up the correct CPU-GPU bindings based on the processes rank. + 1. Edit [08_Scaling_to_multiple_GPUs/run.sh](run.sh) to set up the correct CPU-GPU bindings based on the processes rank. - You can find a [figure showing which cores are closest to which GCD](https://docs.lumi-supercomputer.eu/assets/images/lumig-cpu-gpu-links.svg) on the [LUMI Docs LUMI-G page](https://docs.lumi-supercomputer.eu/hardware/lumig/). - - > **Tip** - > - > Use the `psutil.Process().cpu_affinity(...)` function to set the binding from inside the Python script. + When torchrun is used, we can rely on [NUMA binding](https://docs.pytorch.org/docs/2.11/elastic/numa.html#module-torch.numa) with `--numa-binding=exclusive` to set this automatically for us. 4. (Optional/Bonus): Running without torchrun. @@ -90,8 +85,8 @@ > hostname > ``` - In this setting you could then also do the CPU bindings from the slurm batch file instead of Python, to keep the training script free of system specific setup. + In this setting you need to set the CPU-GPU bindings a bit differently. This is tricky, but you can check out the reference solution if you struggle with this part of the exercise. ## Solutions -The folder `reference_solution/` contains an example solution for this exercise parts 1, 2 and 4. `reference_solution/prints_only_from_single_process` extends this to ensure that `print` statements in the code are run only by a single process. `reference_solution/with_cpu_bindings` shows how CPU bindings can be used both from within Python (when using torchrun) and directly via SLURM (exercise part 3). +The folder `reference_solution/` contains an example solution for this exercise parts 1, 2 and 4. `reference_solution/prints_only_from_single_process` extends this to ensure that `print` statements in the code are run only by a single process. `reference_solution/with_cpu_bindings` shows how CPU bindings can be used both when using torchrun and directly via SLURM (exercise part 3). diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py index a346f12..a575dde 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py @@ -16,7 +16,6 @@ import time from pprint import pprint -import psutil import torch from datasets import load_dataset from util import preprocess_data, get_output_paths @@ -25,26 +24,6 @@ TrainingArguments) -def set_cpu_affinity(local_rank): - LUMI_GPU_CPU_map = { - # A mapping from GCD to the closest CPU cores in a LUMI-G node - # Note that CPU cores 0, 8, 16, 24, 32, 40, 48, 56 are reserved for the - # system and not available for the user - # See https://docs.lumi-supercomputer.eu/hardware/lumig/ - 0: [49, 50, 51, 52, 53, 54, 55], - 1: [57, 58, 59, 60, 61, 62, 63], - 2: [17, 18, 19, 20, 21, 22, 23], - 3: [25, 26, 27, 28, 29, 30, 31], - 4: [1, 2, 3, 4, 5, 6, 7], - 5: [9, 10, 11, 12, 13, 14, 15], - 6: [33, 34, 35, 36, 37, 38, 39], - 7: [41, 42, 43, 44, 45, 46, 47], - } - cpu_list = LUMI_GPU_CPU_map[local_rank] - print(f"Rank {rank} (local {local_rank}) binding to cpus: {cpu_list}") - psutil.Process().cpu_affinity(cpu_list) - - if __name__ == "__main__": # First we set up some command line arguments to allow us to specify data/output paths @@ -72,12 +51,6 @@ def set_cpu_affinity(local_rank): default=1, help="The number of CPU worker processes to use.", ) - parser.add_argument( - "--set-cpu-binds", - default=False, - action="store_true", - help="Bind the process to the CPU cores closest to the GPU used by the process (identified by the LOCAL_RANK environment variable).", - ) args, _ = parser.parse_known_args() # Read the environment variables provided by torchrun @@ -86,10 +59,6 @@ def set_cpu_affinity(local_rank): world_size = int(os.environ["WORLD_SIZE"]) local_world_size = int(os.environ["LOCAL_WORLD_SIZE"]) - # Set up CPU binding if --set-cpu-binds is given - if args.set_cpu_binds: - set_cpu_affinity(local_rank) - # Then we determine the device on which to train the model. print("Using PyTorch version:", torch.__version__) if torch.cuda.is_available(): diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index d288986..f330b0e 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -50,4 +50,4 @@ srun singularity run $CONTAINER \ --output-path $OUTPUT_DIR \ --logging-path $LOGGING_DIR \ --num-workers $(( SLURM_CPUS_PER_TASK / SLURM_GPUS_PER_NODE )) \ - --set-cpu-binds # enable setting of the CPU binds in the training script (can only be used with full node runs (standard-g or small-g with slurm argument `--exclusive`)) + --numa-binding=exclusive # for CPU-GPU bindings \ No newline at end of file From 5a17ceba5009d2bef90262efcba2d4593349ca8a Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Thu, 21 May 2026 08:15:42 +0300 Subject: [PATCH 10/21] docs: add clarification about exlusive node use --- .../reference_solution/with_cpu_bindings/run_torchrun.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index f330b0e..050f2a5 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -50,4 +50,4 @@ srun singularity run $CONTAINER \ --output-path $OUTPUT_DIR \ --logging-path $LOGGING_DIR \ --num-workers $(( SLURM_CPUS_PER_TASK / SLURM_GPUS_PER_NODE )) \ - --numa-binding=exclusive # for CPU-GPU bindings \ No newline at end of file + --numa-binding=exclusive # for CPU-GPU bindings (can only be used with full node runs (standard-g or small-g with slurm argument `--exclusive`) \ No newline at end of file From abab65c3cf6b532ea972463a5fb4e27dab30acfa Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Thu, 21 May 2026 08:24:36 +0300 Subject: [PATCH 11/21] fix: rename reservation --- 02_Using_the_LUMI_web_interface/README.md | 2 +- .../reference_solution/resume_from_checkpoint/run.sh | 2 +- 03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh | 2 +- 03_Your_first_AI_training_job_on_LUMI/run.sh | 2 +- .../prints_only_from_single_process/run_no_torchrun.sh | 2 +- .../prints_only_from_single_process/run_torchrun.sh | 2 +- .../reference_solution/run_no_torchrun.sh | 2 +- 08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh | 2 +- .../reference_solution/with_cpu_bindings/run_no_torchrun.sh | 2 +- .../reference_solution/with_cpu_bindings/run_torchrun.sh | 2 +- 08_Scaling_to_multiple_GPUs/run.sh | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/02_Using_the_LUMI_web_interface/README.md b/02_Using_the_LUMI_web_interface/README.md index ab7fca6..2a74c59 100644 --- a/02_Using_the_LUMI_web_interface/README.md +++ b/02_Using_the_LUMI_web_interface/README.md @@ -19,7 +19,7 @@ 1. Start an interactive Jupyter session: Open the Jupyter app (! not "Jupyter for Courses" !) in the LUMI webinterface and set the following settings before pressing `Launch` - Project: `project_465002757 (LUST Training ...)` - - Reservation: Use the course reservation `AI_workshop_Day1` (there should only be one available option) + - Reservation: Use the course reservation `LUST_AI_Day1` (there should only be one available option) - Partition: `small-g` - Number of CPU cores: `7` - Memory (GB): `16` diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh index 7a71b88..fe04961 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=small-g #SBATCH --gpus-per-node=1 #SBATCH --ntasks-per-node=1 diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh index bcb359f..abf2a2f 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=small-g #SBATCH --gpus-per-node=1 #SBATCH --ntasks-per-node=1 diff --git a/03_Your_first_AI_training_job_on_LUMI/run.sh b/03_Your_first_AI_training_job_on_LUMI/run.sh index 7eefffa..315bcfc 100644 --- a/03_Your_first_AI_training_job_on_LUMI/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/run.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=... ## diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh index 9a511e2..135532e 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh index 31ae199..03cba08 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh index 9a511e2..135532e 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh index 31ae199..03cba08 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh index 9b97226..1d30edd 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index 050f2a5..d19b9ca 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/run.sh b/08_Scaling_to_multiple_GPUs/run.sh index 81beb93..9407d48 100644 --- a/08_Scaling_to_multiple_GPUs/run.sh +++ b/08_Scaling_to_multiple_GPUs/run.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=... ## From 042b4b9693399f0d2590c9b2b4c1fc3748ebfeb3 Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Thu, 21 May 2026 08:33:11 +0300 Subject: [PATCH 12/21] fix: update lua module path --- .../reference_solution/resume_from_checkpoint/run.sh | 2 +- 03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh | 2 +- 03_Your_first_AI_training_job_on_LUMI/run.sh | 2 +- .../prints_only_from_single_process/run_no_torchrun.sh | 2 +- .../prints_only_from_single_process/run_torchrun.sh | 2 +- .../reference_solution/run_no_torchrun.sh | 2 +- 08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh | 2 +- .../reference_solution/with_cpu_bindings/run_no_torchrun.sh | 2 +- .../reference_solution/with_cpu_bindings/run_torchrun.sh | 2 +- 08_Scaling_to_multiple_GPUs/run.sh | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh index fe04961..8e6e916 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh @@ -12,7 +12,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh index abf2a2f..0dd1b69 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh @@ -12,7 +12,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/03_Your_first_AI_training_job_on_LUMI/run.sh b/03_Your_first_AI_training_job_on_LUMI/run.sh index 315bcfc..b20088c 100644 --- a/03_Your_first_AI_training_job_on_LUMI/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/run.sh @@ -8,7 +8,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh index 135532e..4b6ef60 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh @@ -13,7 +13,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh index 03cba08..f7671b0 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh @@ -13,7 +13,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh index 135532e..4b6ef60 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh @@ -13,7 +13,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh index 03cba08..f7671b0 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh @@ -13,7 +13,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh index 1d30edd..026dbc0 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh @@ -13,7 +13,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index d19b9ca..4303d99 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -13,7 +13,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings diff --git a/08_Scaling_to_multiple_GPUs/run.sh b/08_Scaling_to_multiple_GPUs/run.sh index 9407d48..3c379f4 100644 --- a/08_Scaling_to_multiple_GPUs/run.sh +++ b/08_Scaling_to_multiple_GPUs/run.sh @@ -8,7 +8,7 @@ # NOTE: the loaded module makes relevant filesystem locations available inside the singularity container # (/scratch, /project, etc) # If you are interested, you can check the exact paths being mounted from -# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.0.lua +# /appl/local/laifs/modules/lumi-aif-singularity-bindings/1.0.1.lua module purge module use /appl/local/laifs/modules module load lumi-aif-singularity-bindings From 4ff16e045a4cb14c3a1e55b8e0bb50ba28e2d82b Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Thu, 21 May 2026 09:08:59 +0300 Subject: [PATCH 13/21] fix: reservation names got reset to old name --- 02_Using_the_LUMI_web_interface/README.md | 2 +- .../reference_solution/resume_from_checkpoint/run.sh | 2 +- 03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh | 2 +- 03_Your_first_AI_training_job_on_LUMI/run.sh | 2 +- .../prints_only_from_single_process/run_no_torchrun.sh | 2 +- .../prints_only_from_single_process/run_torchrun.sh | 2 +- .../reference_solution/run_no_torchrun.sh | 2 +- 08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh | 2 +- .../reference_solution/with_cpu_bindings/run_no_torchrun.sh | 2 +- .../reference_solution/with_cpu_bindings/run_torchrun.sh | 2 +- 08_Scaling_to_multiple_GPUs/run.sh | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/02_Using_the_LUMI_web_interface/README.md b/02_Using_the_LUMI_web_interface/README.md index 2a74c59..ab7fca6 100644 --- a/02_Using_the_LUMI_web_interface/README.md +++ b/02_Using_the_LUMI_web_interface/README.md @@ -19,7 +19,7 @@ 1. Start an interactive Jupyter session: Open the Jupyter app (! not "Jupyter for Courses" !) in the LUMI webinterface and set the following settings before pressing `Launch` - Project: `project_465002757 (LUST Training ...)` - - Reservation: Use the course reservation `LUST_AI_Day1` (there should only be one available option) + - Reservation: Use the course reservation `AI_workshop_Day1` (there should only be one available option) - Partition: `small-g` - Number of CPU cores: `7` - Memory (GB): `16` diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh index 8e6e916..0c2a8f2 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/resume_from_checkpoint/run.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day1 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=small-g #SBATCH --gpus-per-node=1 #SBATCH --ntasks-per-node=1 diff --git a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh index 0dd1b69..8d7120e 100644 --- a/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/reference_solution/run.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day1 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=small-g #SBATCH --gpus-per-node=1 #SBATCH --ntasks-per-node=1 diff --git a/03_Your_first_AI_training_job_on_LUMI/run.sh b/03_Your_first_AI_training_job_on_LUMI/run.sh index b20088c..9a69772 100644 --- a/03_Your_first_AI_training_job_on_LUMI/run.sh +++ b/03_Your_first_AI_training_job_on_LUMI/run.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day1 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day1 # comment this out if the reservation is no longer available #SBATCH --partition=... ## diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh index 4b6ef60..99a40ae 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_no_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh index f7671b0..f4df77e 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/run_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh index 4b6ef60..99a40ae 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_no_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh index f7671b0..f4df77e 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/run_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh index 026dbc0..a1ce381 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_no_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index 4303d99..20245a1 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=standard-g #SBATCH --nodes=1 #SBATCH --gpus-per-node=8 diff --git a/08_Scaling_to_multiple_GPUs/run.sh b/08_Scaling_to_multiple_GPUs/run.sh index 3c379f4..f6db0dc 100644 --- a/08_Scaling_to_multiple_GPUs/run.sh +++ b/08_Scaling_to_multiple_GPUs/run.sh @@ -1,6 +1,6 @@ #!/bin/bash #SBATCH --account=project_465002757 -#SBATCH --reservation=LUST_AI_Day2 # comment this out if the reservation is no longer available +#SBATCH --reservation=AI_workshop_Day2 # comment this out if the reservation is no longer available #SBATCH --partition=... ## From 61bea614d7c01569959b8b742215409cf37d45a2 Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Tue, 26 May 2026 08:11:06 +0300 Subject: [PATCH 14/21] fix: rename scratch folder --- 03_Your_first_AI_training_job_on_LUMI/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03_Your_first_AI_training_job_on_LUMI/README.md b/03_Your_first_AI_training_job_on_LUMI/README.md index bf736a2..62b4457 100644 --- a/03_Your_first_AI_training_job_on_LUMI/README.md +++ b/03_Your_first_AI_training_job_on_LUMI/README.md @@ -39,7 +39,7 @@ - `--model-name` (a name under which the model produced by the run will be stored; optional) - `--num-workers` (optional, is used to set the number of PyTorch dataloader processes) - Please set the paths to some destination of your choice within your `/scratch/project_465002178/` directory. + Please set the paths to some destination of your choice within your `/scratch/project_465002757/` directory. > **Tip** > From b969f6d0cba9184eade70f24e6599180a40d8bc3 Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Tue, 26 May 2026 08:12:15 +0300 Subject: [PATCH 15/21] fix: move GPU binding to torchrun and not python --- .../reference_solution/with_cpu_bindings/run_torchrun.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index 20245a1..33df6e9 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -45,9 +45,10 @@ srun singularity run $CONTAINER \ torchrun --standalone \ --nnodes=1 \ --nproc-per-node=${SLURM_GPUS_PER_NODE} \ + # for CPU-GPU bindings (can only be used with full node runs (standard-g or small-g with slurm argument `--exclusive`) + --numa-binding=exclusive \ GPT-neo-IMDB-finetuning.py \ --model-name $MODEL_NAME \ --output-path $OUTPUT_DIR \ --logging-path $LOGGING_DIR \ - --num-workers $(( SLURM_CPUS_PER_TASK / SLURM_GPUS_PER_NODE )) \ - --numa-binding=exclusive # for CPU-GPU bindings (can only be used with full node runs (standard-g or small-g with slurm argument `--exclusive`) \ No newline at end of file + --num-workers $(( SLURM_CPUS_PER_TASK / SLURM_GPUS_PER_NODE )) \ No newline at end of file From f947c6d3fc86e48a09ebe32d680e2e7befc25cca Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Tue, 26 May 2026 08:15:08 +0300 Subject: [PATCH 16/21] feat: update now that OOD soon supports PyTorch --- 02_Using_the_LUMI_web_interface/README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/02_Using_the_LUMI_web_interface/README.md b/02_Using_the_LUMI_web_interface/README.md index ab7fca6..c65bd67 100644 --- a/02_Using_the_LUMI_web_interface/README.md +++ b/02_Using_the_LUMI_web_interface/README.md @@ -25,12 +25,9 @@ - Memory (GB): `16` - Time: `0:30:00` - Working directory: `/project/$PROJECT` - - Press Advanced - - Custom Python Type: `Container` - - Modules to load: `Local-LAIF lumi-aif-singularity-bindings` - - Path to container with Python: `/appl/local/laifs/containers/lumi-multitorch-u24r70f21m50t210-20260513_121430/lumi-multitorch-full-u24r70f21m50t210-20260513_121430.sif` - - Container arguments: leave empty - - Init script for container: leave empty + - Python: `lumi-multitorch (PyTorch, LUMI AI Factory)` + - Module version: You can use the default here. + - Virtual environment path: leave empty 2. Wait for the session to start, then press `Connect to Jupyter` > **Note** From 23471a6a0fc9bded54fe03b99c4415d677b5eeb8 Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Tue, 26 May 2026 08:29:27 +0300 Subject: [PATCH 17/21] fix: add comment at correct place --- .../reference_solution/with_cpu_bindings/run_torchrun.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index 33df6e9..2f59d12 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -45,8 +45,7 @@ srun singularity run $CONTAINER \ torchrun --standalone \ --nnodes=1 \ --nproc-per-node=${SLURM_GPUS_PER_NODE} \ - # for CPU-GPU bindings (can only be used with full node runs (standard-g or small-g with slurm argument `--exclusive`) - --numa-binding=exclusive \ + --numa-binding=exclusive \ # for CPU-GPU bindings (can only be used with full node runs (standard-g or small-g with slurm argument `--exclusive`) GPT-neo-IMDB-finetuning.py \ --model-name $MODEL_NAME \ --output-path $OUTPUT_DIR \ From 0fbf734c54cac1c909b0f3a948435245332ce68c Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Tue, 26 May 2026 08:32:55 +0300 Subject: [PATCH 18/21] fix: change comment --- .../reference_solution/with_cpu_bindings/run_torchrun.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh index 2f59d12..b34c1ac 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/run_torchrun.sh @@ -38,14 +38,13 @@ export MODEL_NAME=gpt-imdb-model-multigpu set -xv # print the command so that we can verify setting arguments correctly from the logs -# Since we start only one task with slurm which then starts subprocesses, we cannot use slurm to configure CPU binds. -# Therefore we need to set them up in the Python code itself. +# --numa-binding=exclusive for CPU-GPU bindings (can only be used with full node runs (standard-g or small-g with slurm argument `--exclusive`) srun singularity run $CONTAINER \ torchrun --standalone \ --nnodes=1 \ --nproc-per-node=${SLURM_GPUS_PER_NODE} \ - --numa-binding=exclusive \ # for CPU-GPU bindings (can only be used with full node runs (standard-g or small-g with slurm argument `--exclusive`) + --numa-binding=exclusive \ GPT-neo-IMDB-finetuning.py \ --model-name $MODEL_NAME \ --output-path $OUTPUT_DIR \ From 9463655a0950914ccbdc5a5d54b6bc4bd0726ba4 Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Thu, 28 May 2026 07:56:18 +0300 Subject: [PATCH 19/21] fix: remove old job outputs --- .../slurm-9304946.out | 157 ------------------ .../slurm-9304949.out | 149 ----------------- 2 files changed, 306 deletions(-) delete mode 100644 08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/slurm-9304946.out delete mode 100644 08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/slurm-9304949.out diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/slurm-9304946.out b/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/slurm-9304946.out deleted file mode 100644 index ce48815..0000000 --- a/08_Scaling_to_multiple_GPUs/reference_solution/prints_only_from_single_process/slurm-9304946.out +++ /dev/null @@ -1,157 +0,0 @@ -The following modules were not unloaded: - (Use "module --force purge" to unload all): - - 1) ModuleLabel/label 6) libfabric/1.15.2.0 - 2) lumi-tools/24.05 7) craype-network-ofi - 3) init-lumi/0.2 8) xpmem/2.8.2-1.0_5.1__g84a27a5.shasta - 4) craype-x86-trento 9) CrayEnv - 5) craype-accel-amd-gfx90a - -The following sticky modules could not be reloaded: - - 1) lumi-tools - -# Set up variables to control distributed PyTorch training -export MASTER_ADDR=$(hostname) -++ hostname -+ export MASTER_ADDR=nid005527 -+ MASTER_ADDR=nid005527 -export MASTER_PORT=25900 -+ export MASTER_PORT=25900 -+ MASTER_PORT=25900 -export WORLD_SIZE=$SLURM_NPROCS -+ export WORLD_SIZE=8 -+ WORLD_SIZE=8 -export LOCAL_WORLD_SIZE=$SLURM_GPUS_PER_NODE -+ export LOCAL_WORLD_SIZE=8 -+ LOCAL_WORLD_SIZE=8 - -# As opposed to the example in `run_torchrun.sh`, we can set the CPU binds directly via the slurm command, since we have -# one task per GPU. In this case we do NOT need to set them from within the Python code itself. -srun singularity exec $CONTAINER \ - bash -c "RANK=\$SLURM_PROCID \ - LOCAL_RANK=\$SLURM_LOCALID \ - python GPT-neo-IMDB-finetuning.py \ - --model-name $MODEL_NAME \ - --output-path $OUTPUT_DIR \ - --logging-path $LOGGING_DIR \ - --num-workers ${SLURM_CPUS_PER_TASK}" -+ srun singularity exec /project/project_465001707/containers/pytorch_transformers.sif bash -c 'RANK=$SLURM_PROCID LOCAL_RANK=$SLURM_LOCALID python GPT-neo-IMDB-finetuning.py --model-name gpt-imdb-model-multigpu-no-torchrun --output-path /scratch/project_465001707/lukaspre/data/ --logging-path /scratch/project_465001707/lukaspre/runs/ --num-workers 7' -Using PyTorch version: 2.5.1+rocm6.2 -Rank 6 of 8 (local: 6) sees 8 devices -Using GPU, device name: AMD Instinct MI250X -Using PyTorch version: 2.5.1+rocm6.2 -Rank 1 of 8 (local: 1) sees 8 devices -Using GPU, device name: AMD Instinct MI250X -Using PyTorch version: 2.5.1+rocm6.2 -Rank 4 of 8 (local: 4) sees 8 devices -Using GPU, device name: AMD Instinct MI250X -Using PyTorch version: 2.5.1+rocm6.2 -Rank 7 of 8 (local: 7) sees 8 devices -Using GPU, device name: AMD Instinct MI250X -Using PyTorch version: 2.5.1+rocm6.2 -Rank 3 of 8 (local: 3) sees 8 devices -Using GPU, device name: AMD Instinct MI250X -Using PyTorch version: 2.5.1+rocm6.2 -Rank 5 of 8 (local: 5) sees 8 devices -Using GPU, device name: AMD Instinct MI250X -Using PyTorch version: 2.5.1+rocm6.2 -Rank 2 of 8 (local: 2) sees 8 devices -Using GPU, device name: AMD Instinct MI250X -Using PyTorch version: 2.5.1+rocm6.2 -Rank 0 of 8 (local: 0) sees 8 devices -Using GPU, device name: AMD Instinct MI250X -Loading model and tokenizer -Loading model and tokenizer took: 21.01 seconds -Sample from dataset -{'label': 0, - 'text': 'This is an action Western. James Steart leads an all star cast in ' - 'the scenic Northwest, which is filmed in great splendor. The scenery ' - 'and costumes are great. There is action and adventure. Stewart plays ' - 'a wealthy cattleman who runs afoul of a crooked government in the ' - 'old Nothwest.

    The main drawback is the stereotypical ' - 'cynic that Hollywood has always made into a hero. Even when this ' - 'movie was made, the cynic was the stereotypical hero, and the one ' - 'Stewart portrays really has few saving graces. He is kind to his two ' - 'partners, and that does give him an extra dimension of credibility ' - 'and likability.

    However, he is so piggish to everyone ' - 'else, it is hard to really care for him, or to accept him. He is ' - 'much like the one dimensional spaghetti Western characters (cut not ' - 'that bad).

    Still, the minor characters are quite ' - 'enjoyable. Walter Brennan, Royal Dano, Harry Morgan, and others make ' - 'this worth watching.'} - Map (num_proc=7): 0%| | 0/75000 [00:00
    The main drawback is the stereotypical ' - 'cynic that Hollywood has always made into a hero. Even when this ' - 'movie was made, the cynic was the stereotypical hero, and the one ' - 'Stewart portrays really has few saving graces. He is kind to his two ' - 'partners, and that does give him an extra dimension of credibility ' - 'and likability.

    However, he is so piggish to everyone ' - 'else, it is hard to really care for him, or to accept him. He is ' - 'much like the one dimensional spaghetti Western characters (cut not ' - 'that bad).

    Still, the minor characters are quite ' - 'enjoyable. Walter Brennan, Royal Dano, Harry Morgan, and others make ' - 'this worth watching.'} - Map (num_proc=7): 0%| | 0/75000 [00:00 Date: Thu, 28 May 2026 07:57:29 +0300 Subject: [PATCH 20/21] docs: modify virtual environment selection --- 02_Using_the_LUMI_web_interface/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_Using_the_LUMI_web_interface/README.md b/02_Using_the_LUMI_web_interface/README.md index c65bd67..3107cc8 100644 --- a/02_Using_the_LUMI_web_interface/README.md +++ b/02_Using_the_LUMI_web_interface/README.md @@ -27,7 +27,7 @@ - Working directory: `/project/$PROJECT` - Python: `lumi-multitorch (PyTorch, LUMI AI Factory)` - Module version: You can use the default here. - - Virtual environment path: leave empty + - Enable virtual environment: Do not select this 2. Wait for the session to start, then press `Connect to Jupyter` > **Note** From dcf0053821453b4368cc249e5a943159b82308ee Mon Sep 17 00:00:00 2001 From: Marlon Tobaben <241949331+marlon-tobaben@users.noreply.github.com> Date: Thu, 28 May 2026 08:03:34 +0300 Subject: [PATCH 21/21] fix: remove typo --- .../with_cpu_bindings/GPT-neo-IMDB-finetuning.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py index a575dde..ae67574 100644 --- a/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py +++ b/08_Scaling_to_multiple_GPUs/reference_solution/with_cpu_bindings/GPT-neo-IMDB-finetuning.py @@ -116,7 +116,7 @@ pprint(train_dataset[200]) print ("\n" * 4) - # #### Setting up the training configurationt + # #### Setting up the training configuration global_train_batch_size = 32 # We keep the overall batch size (across all GPUs) the same as before ... per_device_train_batch_size = global_train_batch_size // world_size # ... which means we divide by the number of processes for the batch size of each GPU eval_batch_size = 128 # No optimizer state during evaluation, so can use bigger batches for increased throughput