From c2c42649e5b591a914ac9d9a987be7429ea96630 Mon Sep 17 00:00:00 2001 From: Pranab Das <31024886+pranabdas@users.noreply.github.com> Date: Sat, 7 Feb 2026 15:50:41 +0800 Subject: [PATCH 1/7] SOF-7810: tutorial on building containerized applications --- lang/en/docs/cli/actions/add-software.md | 21 +- .../en/docs/tutorials/apptainer-tutorial.json | 221 ++++++++++++++++++ 2 files changed, 233 insertions(+), 9 deletions(-) create mode 100644 lang/en/docs/tutorials/apptainer-tutorial.json diff --git a/lang/en/docs/cli/actions/add-software.md b/lang/en/docs/cli/actions/add-software.md index 2197c0e8..3df46e9d 100644 --- a/lang/en/docs/cli/actions/add-software.md +++ b/lang/en/docs/cli/actions/add-software.md @@ -4,15 +4,18 @@ Users can compile their own software via the [Command Line Interface](../overview.md) (CLI). This is helpful if users need to run a specific version of an application that is not installed "globally". -The globally installed applications are currently distributed as -Apptainer[^1] (Singularity[^2]) containers, bundled with all required -dependencies. This ensures that each application is isolated and avoids -dependency conflicts. - -When planning to run an application that is not installed in -our cluster, we encourage packaging code and its dependencies as an -Apptainer/Singularity container. Existing Docker images -can be converted into an Apptainer/Singularity images. +The globally installed applications are currently distributed as Apptainer[^1] +(Singularity[^2]) containers, bundled with all required dependencies. This +ensures that each application is isolated and avoids dependency conflicts. + +When planning to run an application that is not installed in our cluster, we +encourage packaging code and its dependencies as an Apptainer/Singularity +container. Existing Docker images can be converted into an +Apptainer/Singularity images. + +
+ +
## Using Sandbox mode Apptainer's sandbox mode is helpful for testing and fine-tuning the build steps diff --git a/lang/en/docs/tutorials/apptainer-tutorial.json b/lang/en/docs/tutorials/apptainer-tutorial.json new file mode 100644 index 00000000..1a88cfa0 --- /dev/null +++ b/lang/en/docs/tutorials/apptainer-tutorial.json @@ -0,0 +1,221 @@ +{ + "descriptionLinks": [ + "Build containerized applications with GPU support: https://docs.mat3ra.com/cli/actions/add-software/" + ], + "description": "How to build containerized applications with GPU support using Apptainer.", + "tags": [ + { + "...": "../metadata/general.json#/tags" + }, + "apptainer", + "container", + "containerization", + "gpu", + "nvidia", + "singularity" + ], + "title": "Mat3ra Tutorial: Build containerized applications with GPU support", + "youTubeCaptions": [ + { + "text": "In this tutorial, we will learn, how we can build containerized applications with Apptainer.", + "startTime": "00:00:00.150", + "endTime": "00:00:06.000" + }, + { + "text": "We will also discuss how you can enable GPU support for such containers.", + "startTime": "00:00:06.500", + "endTime": "00:00:15.000" + }, + { + "text": "The detailed steps of this tutorial are available on our documentation site.", + "startTime": "00:00:16.000", + "endTime": "00:00:21.000" + }, + { + "text": "The documentation link can be found in the description below.", + "startTime": "00:00:21.500", + "endTime": "00:00:25.000" + }, + { + "text": "Now, let's head over to platform dot matera dot com and launch the web terminal.", + "startTime": "00:00:25.500", + "endTime": "00:00:30.000" + }, + { + "text": "Alternatively, you can connect to the login node using SSH.", + "startTime": "00:00:30.500", + "endTime": "00:00:34.000" + }, + { + "text": "Let's verify that the Apptainer is installed, and check its version.", + "startTime": "00:00:34.500", + "endTime": "00:00:39.000" + }, + { + "text": "First, we can use the Apptainer sandbox mode to test and fine tune the build steps interactively.", + "startTime": "00:00:39.500", + "endTime": "00:00:45.000" + }, + { + "text": "Once the build steps are finalized, we can package the sandbox folder into a final image.", + "startTime": "00:00:45.500", + "endTime": "00:00:51.000" + }, + { + "text": "Or, we can create a definition file with finalized build steps and build the container from it.", + "startTime": "00:00:51.500", + "endTime": "00:00:55.000" + }, + { + "text": "Let's call our sandbox folder GCC sandbox.", + "startTime": "00:00:55.500", + "endTime": "00:01:00.000" + }, + { + "text": "And initialize the sandbox with Alma Linux 9 base-image from the Docker registry.", + "startTime": "00:01:00.500", + "endTime": "00:01:06.000" + }, + { + "text": "Notice the warning messages, we first need to set appropriate file permissions for the sandbox folder to be able to delete it later.", + "startTime": "00:01:06.500", + "endTime": "00:01:13.000" + }, + { + "text": "Next, we can enter the sandbox container in the shell mode with write permission and as root user.", + "startTime": "00:01:13.500", + "endTime": "00:01:19.000" + }, + { + "text": "Now, we can install packages in the sandbox container as you would normally do.", + "startTime": "00:01:19.500", + "endTime": "00:01:24.000" + }, + { + "text": "Once the installation is complete, we can exit the sandbox container.", + "startTime": "00:01:24.500", + "endTime": "00:01:28.000" + }, + { + "text": "We can package the sandbox folder into a final image with the build command.", + "startTime": "00:01:28.500", + "endTime": "00:01:33.000" + }, + { + "text": "Now, we can verify that the container is working by running the GCC compiler.", + "startTime": "00:01:33.500", + "endTime": "00:01:38.000" + }, + { + "text": "There is a second way to build the container, by creating a definition file with the build steps.", + "startTime": "00:01:38.500", + "endTime": "00:01:45.000" + }, + { + "text": "An example definition file is available in our documentation site, let's copy it to clipboard.", + "startTime": "00:01:45.500", + "endTime": "00:01:51.000" + }, + { + "text": "To transfer the clipboard content from the host machine to the web terminal, we can open the Remote-connection Sidebar by pressing Control Alt Shift in Windows and Linux or Control Option Shift in Mac.", + "startTime": "00:01:51.500", + "endTime": "00:02:03.000" + }, + { + "text": "We can open vim editor, press i to enter insert mode, and right click to paste the clipboard content.", + "startTime": "00:02:03.500", + "endTime": "00:02:08.000" + }, + { + "text": "Press the escape key, and type colon w q to save and exit the file.", + "startTime": "00:02:08.500", + "endTime": "00:02:14.000" + }, + { + "text": "Now, we can run apptainer build command with the image name followed by the definition file name.", + "startTime": "00:02:14.500", + "endTime": "00:02:19.000" + }, + { + "text": "However note that computationally intensive builds should not be directly run on the login node.", + "startTime": "00:02:19.500", + "endTime": "00:02:25.000" + }, + { + "text": "Instead they should be submitted as a job to the batch system as described in our documentation.", + "startTime": "00:02:25.500", + "endTime": "00:02:30.000" + }, + { + "text": "If you need GPU support, please use the dash dash NV flag with apptainer exec command.", + "startTime": "00:02:30.500", + "endTime": "00:02:37.000" + }, + { + "text": "This will map the necessary drivers from the host to the container and set the necessary environment variables.", + "startTime": "00:02:37.500", + "endTime": "00:02:44.000" + }, + { + "text": "Note that it is not necessary to install all dependencies inside the container.", + "startTime": "00:02:44.500", + "endTime": "00:02:49.000" + }, + { + "text": "Especially large libraries like NVIDIA HPC SDK or Intel OneAPI.", + "startTime": "00:02:49.500", + "endTime": "00:02:55.000" + }, + { + "text": "Instead, you can map such libraries from the host to the container using the bind directive.", + "startTime": "00:02:55.500", + "endTime": "00:03:01.000" + }, + { + "text": "Commonly used libraries are available in our clusters under /export or /cluster-share directories.", + "startTime": "00:03:01.500", + "endTime": "00:03:06.000" + }, + { + "text": "You may visit our open source container registry at GitHub to inspect the definition files.", + "startTime": "00:03:06.500", + "endTime": "00:03:11.000" + }, + { + "text": "You are also welcome to contribute to our container registry by submitting a pull request.", + "startTime": "00:03:11.500", + "endTime": "00:03:16.000" + }, + { + "text": "And build containers automatically via GitHub Actions workflow.", + "startTime": "00:03:16.500", + "endTime": "00:03:22.000" + }, + { + "text": "Once the images are built, they are listed under the packages.", + "startTime": "00:03:022.500", + "endTime": "00:03:27.000" + }, + { + "text": "First select the application name, then select appropriate image tag and copy its URL.", + "startTime": "00:03:27.500", + "endTime": "00:03:32.000" + }, + { + "text": "We can go back to the web terminal and download the image using apptainer pull command.", + "startTime": "00:03:32.500", + "endTime": "00:03:38.000" + }, + { + "text": "Now, visit platform dot matera dot com and try building your own containers.", + "startTime": "00:03:38.500", + "endTime": "00:03:44.000" + }, + { + "text": "Thank you for watching this tutorial and using our platform.", + "startTime": "00:03:44.500", + "endTime": "00:03:46.000" + } + ], + "youTubeId": "HIVZ4EYNDxQ" +} From 2de43c06fcd02d4c9dbfb351881f490812ef9a5f Mon Sep 17 00:00:00 2001 From: Pranab Das <31024886+pranabdas@users.noreply.github.com> Date: Tue, 10 Feb 2026 19:20:04 +0800 Subject: [PATCH 2/7] update youtube link --- lang/en/docs/tutorials/apptainer-tutorial.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/en/docs/tutorials/apptainer-tutorial.json b/lang/en/docs/tutorials/apptainer-tutorial.json index 1a88cfa0..33b14d65 100644 --- a/lang/en/docs/tutorials/apptainer-tutorial.json +++ b/lang/en/docs/tutorials/apptainer-tutorial.json @@ -217,5 +217,5 @@ "endTime": "00:03:46.000" } ], - "youTubeId": "HIVZ4EYNDxQ" + "youTubeId": "G1hfW_kS8oY" } From ec41e190267f2f54995437305552fab451a14069 Mon Sep 17 00:00:00 2001 From: Pranab Das <31024886+pranabdas@users.noreply.github.com> Date: Wed, 11 Feb 2026 09:42:14 +0800 Subject: [PATCH 3/7] update youtube link x2 --- lang/en/docs/cli/actions/add-software.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/en/docs/cli/actions/add-software.md b/lang/en/docs/cli/actions/add-software.md index 3df46e9d..3a2f0a7b 100644 --- a/lang/en/docs/cli/actions/add-software.md +++ b/lang/en/docs/cli/actions/add-software.md @@ -14,7 +14,7 @@ container. Existing Docker images can be converted into an Apptainer/Singularity images.
- +
## Using Sandbox mode From fdbd5877a018f462c75cb22f75dcba8aa6a0e61a Mon Sep 17 00:00:00 2001 From: Pranab Das <31024886+pranabdas@users.noreply.github.com> Date: Thu, 12 Feb 2026 13:07:49 +0800 Subject: [PATCH 4/7] try hiding watch on youtube overlay button --- lang/en/docs/cli/actions/add-software.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/en/docs/cli/actions/add-software.md b/lang/en/docs/cli/actions/add-software.md index 3a2f0a7b..82c44b8c 100644 --- a/lang/en/docs/cli/actions/add-software.md +++ b/lang/en/docs/cli/actions/add-software.md @@ -14,7 +14,7 @@ container. Existing Docker images can be converted into an Apptainer/Singularity images.
- +
## Using Sandbox mode From b4ff99a815c2e3ea7c71e5e7de0a637e96708615 Mon Sep 17 00:00:00 2001 From: Pranab Das <31024886+pranabdas@users.noreply.github.com> Date: Fri, 13 Feb 2026 17:10:20 +0800 Subject: [PATCH 5/7] remove youtube overlay button from other videos --- .../run-first-simulation/web-interface.md | 2 +- lang/en/docs/jobs/overview.md | 2 +- lang/en/docs/jupyterlite/accessing-jupyterlite.md | 2 +- lang/en/docs/tutorials/dft/electronic/hubbard.md | 2 +- .../docs/tutorials/dft/electronic/spin-magnetic-qe.md | 2 +- .../tutorials/dft/electronic/spin-orbit-coupling-qe.md | 2 +- .../tutorials/dft/optical/epsilon-optimal-basis.md | 2 +- lang/en/docs/tutorials/jobs-cli/qe-gpu.md | 2 +- .../ml/deepmd-mlff-with-espresso-cp-and-lammps.md | 2 +- lang/en/docs/tutorials/platform-access.md | 10 +++++----- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lang/en/docs/getting-started/run-first-simulation/web-interface.md b/lang/en/docs/getting-started/run-first-simulation/web-interface.md index bc3eb7f6..f9fc1c11 100644 --- a/lang/en/docs/getting-started/run-first-simulation/web-interface.md +++ b/lang/en/docs/getting-started/run-first-simulation/web-interface.md @@ -13,7 +13,7 @@ various UI components of Mat3ra web platform. + diff --git a/lang/en/docs/jupyterlite/accessing-jupyterlite.md b/lang/en/docs/jupyterlite/accessing-jupyterlite.md index 39c66802..631cb511 100644 --- a/lang/en/docs/jupyterlite/accessing-jupyterlite.md +++ b/lang/en/docs/jupyterlite/accessing-jupyterlite.md @@ -33,5 +33,5 @@ In the below tutorial, we present how we can use JupyterLite session in Mat3ra platform to postprocess or analyze data.
- +
diff --git a/lang/en/docs/tutorials/dft/electronic/hubbard.md b/lang/en/docs/tutorials/dft/electronic/hubbard.md index bb6763c1..c0ad017f 100644 --- a/lang/en/docs/tutorials/dft/electronic/hubbard.md +++ b/lang/en/docs/tutorials/dft/electronic/hubbard.md @@ -99,7 +99,7 @@ Once the job is finished, the Hubbard U values are shown in the **Results** tab. In the below animation, we go through an example calculation.
- +
diff --git a/lang/en/docs/tutorials/dft/electronic/spin-magnetic-qe.md b/lang/en/docs/tutorials/dft/electronic/spin-magnetic-qe.md index 9cc9c5db..e688960b 100644 --- a/lang/en/docs/tutorials/dft/electronic/spin-magnetic-qe.md +++ b/lang/en/docs/tutorials/dft/electronic/spin-magnetic-qe.md @@ -104,5 +104,5 @@ down spin components, respectively. In the below video, we go through an example calculation.
- +
diff --git a/lang/en/docs/tutorials/dft/electronic/spin-orbit-coupling-qe.md b/lang/en/docs/tutorials/dft/electronic/spin-orbit-coupling-qe.md index e6a069d1..80a9b8a8 100644 --- a/lang/en/docs/tutorials/dft/electronic/spin-orbit-coupling-qe.md +++ b/lang/en/docs/tutorials/dft/electronic/spin-orbit-coupling-qe.md @@ -102,5 +102,5 @@ topological Dirac states clearly. In the below video, we go through an example calculation.
- +
diff --git a/lang/en/docs/tutorials/dft/optical/epsilon-optimal-basis.md b/lang/en/docs/tutorials/dft/optical/epsilon-optimal-basis.md index b3fbe961..72319724 100644 --- a/lang/en/docs/tutorials/dft/optical/epsilon-optimal-basis.md +++ b/lang/en/docs/tutorials/dft/optical/epsilon-optimal-basis.md @@ -127,5 +127,5 @@ plotting program for visualization. In the below tutorial, we go through the whole process.
- +
diff --git a/lang/en/docs/tutorials/jobs-cli/qe-gpu.md b/lang/en/docs/tutorials/jobs-cli/qe-gpu.md index cc270531..9c01cab4 100644 --- a/lang/en/docs/tutorials/jobs-cli/qe-gpu.md +++ b/lang/en/docs/tutorials/jobs-cli/qe-gpu.md @@ -86,5 +86,5 @@ and find what gives you the best performance. ## Step-by-step screenshare video
- +
diff --git a/lang/en/docs/tutorials/ml/deepmd-mlff-with-espresso-cp-and-lammps.md b/lang/en/docs/tutorials/ml/deepmd-mlff-with-espresso-cp-and-lammps.md index 36ac80a6..0b319690 100644 --- a/lang/en/docs/tutorials/ml/deepmd-mlff-with-espresso-cp-and-lammps.md +++ b/lang/en/docs/tutorials/ml/deepmd-mlff-with-espresso-cp-and-lammps.md @@ -126,5 +126,5 @@ Jupyter Notebook session in our platform to further analyze output files. In the below animation, we walk you through the whole workflow process.
- +
diff --git a/lang/en/docs/tutorials/platform-access.md b/lang/en/docs/tutorials/platform-access.md index ec6a5dda..d032d714 100644 --- a/lang/en/docs/tutorials/platform-access.md +++ b/lang/en/docs/tutorials/platform-access.md @@ -1,16 +1,16 @@ # Accessing the Platform -There are three main modes of accessing the Mat3ra platform: +There are three main modes of accessing the Mat3ra platform: -- (1) Web/browser interface -- (2) [Command line interface](../cli/overview.md) (CLI), and +- (1) Web/browser interface +- (2) [Command line interface](../cli/overview.md) (CLI), and - (3) [REST API](../rest-api). - Below we present a short video demonstrating various ways of accessing the Mat3ra platform. It covers: - 00:54 Web platform overview - 01:42 Materials designer -- 02:26 Command Line Interface +- 02:26 Command Line Interface - 02:57 SSH to login node - 04:01 Web terminal - 04:13 API access @@ -20,5 +20,5 @@ There are three main modes of accessing the Mat3ra platform: ## The Video
- +
From e3cd27c89e1b9292d752d42e3f23d3e4727aadfa Mon Sep 17 00:00:00 2001 From: Pranab Das <31024886+pranabdas@users.noreply.github.com> Date: Sat, 14 Feb 2026 18:11:23 +0800 Subject: [PATCH 6/7] chore: move metadata file --- lang/en/docs/{tutorials => cli/actions}/apptainer-tutorial.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename lang/en/docs/{tutorials => cli/actions}/apptainer-tutorial.json (99%) diff --git a/lang/en/docs/tutorials/apptainer-tutorial.json b/lang/en/docs/cli/actions/apptainer-tutorial.json similarity index 99% rename from lang/en/docs/tutorials/apptainer-tutorial.json rename to lang/en/docs/cli/actions/apptainer-tutorial.json index 33b14d65..68935ace 100644 --- a/lang/en/docs/tutorials/apptainer-tutorial.json +++ b/lang/en/docs/cli/actions/apptainer-tutorial.json @@ -5,7 +5,7 @@ "description": "How to build containerized applications with GPU support using Apptainer.", "tags": [ { - "...": "../metadata/general.json#/tags" + "...": "../../metadata/general.json#/tags" }, "apptainer", "container", From b11e70f028818405610649cc5916f506c84114b1 Mon Sep 17 00:00:00 2001 From: Pranab Das <31024886+pranabdas@users.noreply.github.com> Date: Mon, 16 Feb 2026 09:58:56 +0800 Subject: [PATCH 7/7] update platform version --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index 4aecd90d..0755c198 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -30,7 +30,7 @@ extra_javascript: copyright: Exabyte Inc. All rights reserved. | Back to platform extra: - version: "2025.12.25" + version: "2026.1.22" preload_javascript: - /extra/js/preload_hotjar.js - /extra/js/preload.js