From baafd5f00e0d3ce8e777f8d5c1085998d04efd58 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 26 Jun 2023 12:14:43 -0400 Subject: [PATCH 01/67] make a directory for groq --- docs/ai-testbed/groq/README.md | 17 +++++++++++++++++ docs/ai-testbed/groq/README.md~ | 15 +++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 docs/ai-testbed/groq/README.md create mode 100644 docs/ai-testbed/groq/README.md~ diff --git a/docs/ai-testbed/groq/README.md b/docs/ai-testbed/groq/README.md new file mode 100644 index 000000000..3774e8816 --- /dev/null +++ b/docs/ai-testbed/groq/README.md @@ -0,0 +1,17 @@ +# Groq + + \ No newline at end of file diff --git a/docs/ai-testbed/groq/README.md~ b/docs/ai-testbed/groq/README.md~ new file mode 100644 index 000000000..c6ab3eea7 --- /dev/null +++ b/docs/ai-testbed/groq/README.md~ @@ -0,0 +1,15 @@ +# Groq + +#[System Overview](./system-overview.md) + +#[Getting Started](./getting-started.md) + +#[Customizing Environment](./customizing-environment.md) + +#[Running a Model/Program](./running-a-model-or-program.md) + +#[Job Queuing and Submission](./job-queuing-and-submission.md) + +#[Example Programs](./example-programs.md) + +#[Miscellaneous](./miscellaneous.md) From 591b4ddcb4a5775e3cbea4b758758a22e43641ec Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Tue, 27 Jun 2023 18:01:04 -0400 Subject: [PATCH 02/67] Initial page about accessing cels systems --- docs/ai-testbed/groq/README.md | 14 +++---- docs/ai-testbed/groq/getting-started.md | 51 +++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 docs/ai-testbed/groq/getting-started.md diff --git a/docs/ai-testbed/groq/README.md b/docs/ai-testbed/groq/README.md index 3774e8816..0eea1cd6e 100644 --- a/docs/ai-testbed/groq/README.md +++ b/docs/ai-testbed/groq/README.md @@ -1,17 +1,15 @@ # Groq - [Getting Started](./getting-started.md) -[Customizing Environment](./customizing-environment.md) + -[Running a Model/Program](./running-a-model-or-program.md) + -[Job Queuing and Submission](./job-queuing-and-submission.md) + -[Example Programs](./example-programs.md) + -[Miscellaneous](./miscellaneous.md) ----> \ No newline at end of file + diff --git a/docs/ai-testbed/groq/getting-started.md b/docs/ai-testbed/groq/getting-started.md new file mode 100644 index 000000000..804a0acf9 --- /dev/null +++ b/docs/ai-testbed/groq/getting-started.md @@ -0,0 +1,51 @@ +# Getting Started + + +The first step is to ssh from a local machine to the login node. +## Accounts + +Get an account on the Groqrack system. Contact TODO for access. + +## Setup + +Connection to a Groq node is a two-step process. + +### Log in to a homes node + +Follow the instructions here to access GCE login nodes: [https://help.cels.anl.gov/docs/linux/ssh/](https://help.cels.anl.gov/docs/linux/ssh/) +If you have not already done so, you will need to create a ssh key pair and add ONLY the public key to your cels account at [https://accounts.cels.anl.gov](https://accounts.cels.anl.gov). + +Verify that this full ssh command works: +```bash +ssh -J @logins.cels.anl.gov @homes.cels.anl.gov +``` +You can shorten it by editing your ssh config. +Add the following to ~/.ssh/config +```console +Host *.cels.anl.gov !logins.cels.anl.gov +ProxyJump yourargonneusername@logins.cels.anl.gov +``` + +#Then this should work. +```bash +ssh @homes.cels.anl.gov +``` + +You will automatically be logged in if you have done this before. Use +the ssh "-v" switch to debug ssh problems. + +TODO diagram here. + + +### Log in to a Graphcore Node + +Once you are on a homes node, ssh to one of the Groqrack nodes, which are numbered 1-9. + +```bash +ssh groq-r01-gn-01.ai.alcf.anl.gov +# or +ssh groq-r01-gn-09.ai.alcf.anl.gov +# or any node with hostname in groq-r0[1-9]-gn-09.ai.alcf.anl.gov +``` + + From 3bff7a59c1b99585ddb76a71490b910002fd1ca7 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Tue, 27 Jun 2023 18:43:43 -0400 Subject: [PATCH 03/67] more edits to getting started --- docs/ai-testbed/groq/getting-started.md | 16 ++++++++-------- mkdocs.yml | 3 +++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/ai-testbed/groq/getting-started.md b/docs/ai-testbed/groq/getting-started.md index 804a0acf9..1a0b49f9e 100644 --- a/docs/ai-testbed/groq/getting-started.md +++ b/docs/ai-testbed/groq/getting-started.md @@ -4,6 +4,7 @@ The first step is to ssh from a local machine to the login node. ## Accounts +TODO what procedure exactly is required for gaining password-based login access? Get an account on the Groqrack system. Contact TODO for access. ## Setup @@ -13,22 +14,21 @@ Connection to a Groq node is a two-step process. ### Log in to a homes node Follow the instructions here to access GCE login nodes: [https://help.cels.anl.gov/docs/linux/ssh/](https://help.cels.anl.gov/docs/linux/ssh/) -If you have not already done so, you will need to create a ssh key pair and add ONLY the public key to your cels account at [https://accounts.cels.anl.gov](https://accounts.cels.anl.gov). +If you have not already done so, you will need to create a ssh key pair and add ONLY the public key to your cels account at [https://accounts.cels.anl.gov](https://accounts.cels.anl.gov). Key type ed25519 is preferred, but not required. -Verify that this full ssh command works: +Verify that this full ssh command works, after editing it to use your argonne username: ```bash -ssh -J @logins.cels.anl.gov @homes.cels.anl.gov +ssh -J yourargonneusername@logins.cels.anl.gov yourargonneusername@homes.cels.anl.gov ``` -You can shorten it by editing your ssh config. -Add the following to ~/.ssh/config +You can shorten the command line by adding the following to your `~/.ssh/config`, edited to use your argonne username. ```console Host *.cels.anl.gov !logins.cels.anl.gov ProxyJump yourargonneusername@logins.cels.anl.gov ``` -#Then this should work. +Then this should work. ```bash -ssh @homes.cels.anl.gov +ssh yourargonneusername@homes.cels.anl.gov ``` You will automatically be logged in if you have done this before. Use @@ -45,7 +45,7 @@ Once you are on a homes node, ssh to one of the Groqrack nodes, which are number ssh groq-r01-gn-01.ai.alcf.anl.gov # or ssh groq-r01-gn-09.ai.alcf.anl.gov -# or any node with hostname in groq-r0[1-9]-gn-09.ai.alcf.anl.gov +# or any node with hostname of form groq-r01-gn-0[1-9].ai.alcf.anl.gov ``` diff --git a/mkdocs.yml b/mkdocs.yml index a847aafdb..87ff01773 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -241,6 +241,9 @@ nav: - Miscellaneous: ai-testbed/sambanova_gen2/miscellaneous.md - SambaNova Documentation: ai-testbed/sambanova_gen2/documentation.md # - Performance Tools: ai-testbed/sambanova_gen2/performance-tools.md + - Groq: + #- System Overview: ai-testbed/groq/system-overview.md + - Getting Started: ai-testbed/groq/getting-started.md - Data Management: ai-testbed/data-management/data-management-overview.md - Cooley: - Hardware Overview: From b8ae7377e5fc01d423b85c61a650f7265354bf76 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:25:09 -0500 Subject: [PATCH 04/67] Create System Overview --- docs/ai-testbed/groq/System Overview | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/ai-testbed/groq/System Overview diff --git a/docs/ai-testbed/groq/System Overview b/docs/ai-testbed/groq/System Overview new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/ai-testbed/groq/System Overview @@ -0,0 +1 @@ + From 72d6f0669318cc9a17334e04ea57bac889690915 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:25:49 -0500 Subject: [PATCH 05/67] Update README.md --- docs/ai-testbed/groq/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/ai-testbed/groq/README.md b/docs/ai-testbed/groq/README.md index 0eea1cd6e..58157fc4d 100644 --- a/docs/ai-testbed/groq/README.md +++ b/docs/ai-testbed/groq/README.md @@ -1,6 +1,6 @@ # Groq - - + +[System Overview](./system-overview.md) [Getting Started](./getting-started.md) From 2f5ae9678a80510607f0df26213317029ef2125b Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:26:23 -0500 Subject: [PATCH 06/67] Update README.md --- docs/ai-testbed/groq/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/README.md b/docs/ai-testbed/groq/README.md index 58157fc4d..4e30ab504 100644 --- a/docs/ai-testbed/groq/README.md +++ b/docs/ai-testbed/groq/README.md @@ -1,6 +1,6 @@ # Groq -[System Overview](./system-overview.md) +[System Overview](./System-Overview.md) [Getting Started](./getting-started.md) From 056adb1135c78c4eed32566edc05598fcd7dd8d9 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:27:08 -0500 Subject: [PATCH 07/67] Rename System Overview to System Overview.md --- docs/ai-testbed/groq/{System Overview => System Overview.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/ai-testbed/groq/{System Overview => System Overview.md} (100%) diff --git a/docs/ai-testbed/groq/System Overview b/docs/ai-testbed/groq/System Overview.md similarity index 100% rename from docs/ai-testbed/groq/System Overview rename to docs/ai-testbed/groq/System Overview.md From ebabb49a0edf57fb490c140189f6076dce22b909 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:27:48 -0500 Subject: [PATCH 08/67] Rename System Overview.md to system-overview.md --- docs/ai-testbed/groq/{System Overview.md => system-overview.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/ai-testbed/groq/{System Overview.md => system-overview.md} (100%) diff --git a/docs/ai-testbed/groq/System Overview.md b/docs/ai-testbed/groq/system-overview.md similarity index 100% rename from docs/ai-testbed/groq/System Overview.md rename to docs/ai-testbed/groq/system-overview.md From da75d10e53c53cfb97698343baa0bfe66948e29f Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:28:04 -0500 Subject: [PATCH 09/67] Update README.md --- docs/ai-testbed/groq/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/README.md b/docs/ai-testbed/groq/README.md index 4e30ab504..58157fc4d 100644 --- a/docs/ai-testbed/groq/README.md +++ b/docs/ai-testbed/groq/README.md @@ -1,6 +1,6 @@ # Groq -[System Overview](./System-Overview.md) +[System Overview](./system-overview.md) [Getting Started](./getting-started.md) From d18490b42b67330b57f1e58b115f144408153901 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Fri, 7 Jul 2023 18:49:48 -0400 Subject: [PATCH 10/67] A basic page for running groqflow samples --- docs/ai-testbed/groq/README.md | 2 +- .../groq/running-a-model-or-program.md | 123 ++++++++++++++++++ mkdocs.yml | 3 + 3 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 docs/ai-testbed/groq/running-a-model-or-program.md diff --git a/docs/ai-testbed/groq/README.md b/docs/ai-testbed/groq/README.md index 58157fc4d..c24da96e9 100644 --- a/docs/ai-testbed/groq/README.md +++ b/docs/ai-testbed/groq/README.md @@ -6,7 +6,7 @@ - +[Running a Model/Program](./running-a-model-or-program.md) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md new file mode 100644 index 000000000..6da874db3 --- /dev/null +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -0,0 +1,123 @@ +# Running a Model/Program + +## Job submission and queuing + +Groq jobs in the AI Testbed's groqrack are currently not managed by a job scheduler. [PBS](https://en.wikipedia.org/wiki/Portable_Batch_System)-based job scheduling is under development. + +## Login nodes + +Jobs are launched from any groq node.
+If you expect a loss of an internet connection for any reason, for long-running jobs we suggest logging into a specific groq node and using either **screen** or **tmux** to create persistent command line sessions. For details use: + +```bash +man screen +# or +man tmux +``` +or online man pages: [screen](https://manpages.ubuntu.com/manpages/jammy/en/man1/screen.1.html), [tmux](https://manpages.ubuntu.com/manpages/jammy/en/man1/tmux.1.html) + +## Running jobs on Groq nodes + +### Groqflow + +Groqflow is the simplest way to port applications running inference to groq. The groqflow github repo includes many sample applications.
+See [GroqFlow](https://github.com/groq/groqflow/tree/main). + +### Clone the Groqflow github repo + +Clone the groqflow github repo and change current directory to the clone: +```bash +cd ~/ +git clone https://github.com/groq/groqflow.git +cd groqflow +``` + +### Groqflow conda environments + +Create a groqflow conda environment, and activate it.
+Note: Similar install instructions are in `~/groqflow/docs/install.md` or [GroqFlow™ Installation Guide](https://github.com/groq/groqflow/blob/main/docs/install.md)
+The conda enviroment should be reinstalled whenever new groqflow code is pulled from the groqflow github; redo just the pip install steps. + +#### Install conda +If conda is not already installed: +```bash +rm Miniconda3-latest-Linux-x86_64.sh* +wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh +bash Miniconda3-latest-Linux-x86_64.sh +# answer y/yes to all prompts +# exit ssh session, then start a new ssh session +exit +``` +#### Create and activate a groqflow conda environment +Create a groqflow conda environment and activate it +```bash +export PYTHON_VERSION=3.8.13 +conda create -n groqflow python=$PYTHON_VERSION +conda activate groqflow +``` + +#### Install groqflow into the groqflow conda environment +Execute the following commands to install groqflow into the activated groqflow conda environment +```bash +# Alter this if you have cloned groqflow to some other location. +cd ~/groqflow +pip install --upgrade pip +pip install -e . --user +pushd . +cd demo_helpers +pip install -e . --user +popd +``` + +For any new ssh session, to use groqfloq, +```bash +conda activate groqflow +``` +Alternative, the activation command can be put in .bashrc. +Note: Always use a personal conda environment when installing packages on groq nodes; otherwise they can get installed into ~/.local and can cause problems when your shared home directory is used on other systems. + +### Running a groqflow sample +Each groqflow sample directory in the `~/groqflow/proof_points` tree has a README.md describing the sample and how to run it. + +#### Activate your Groqflow conda environment +```console +conda activate groqflow +``` +#### Run a sample +```bash +cd ~/groqflow/proof_points/natural_language_processing/minilm +python minilmv2.py +``` + + + + + + + diff --git a/mkdocs.yml b/mkdocs.yml index 87ff01773..9c58b2ec5 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -244,6 +244,9 @@ nav: - Groq: #- System Overview: ai-testbed/groq/system-overview.md - Getting Started: ai-testbed/groq/getting-started.md + - Running a Model/Program: ai-testbed/groq/running-a-model-or-program.md + #- Example Programs: ai-testbed/groq/example-programs.md + #- Customizing Environments: ai-testbed/groq/customizing-environment.md - Data Management: ai-testbed/data-management/data-management-overview.md - Cooley: - Hardware Overview: From cc14d71ecc2a385120882dbdb63d0a773e560ca6 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Fri, 7 Jul 2023 19:48:22 -0400 Subject: [PATCH 11/67] always install requirements.txt before running sample --- docs/ai-testbed/groq/running-a-model-or-program.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index 6da874db3..6791d05e5 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -86,6 +86,7 @@ conda activate groqflow #### Run a sample ```bash cd ~/groqflow/proof_points/natural_language_processing/minilm +pip install -r requirements.txt python minilmv2.py ``` From 1fbfdfa3d87f420d788b5b59c0018b3def7ab2a1 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 10 Jul 2023 18:20:01 -0400 Subject: [PATCH 12/67] add text/links about allocations and alcf accounts --- docs/ai-testbed/groq/getting-started.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/ai-testbed/groq/getting-started.md b/docs/ai-testbed/groq/getting-started.md index 1a0b49f9e..49be5cf33 100644 --- a/docs/ai-testbed/groq/getting-started.md +++ b/docs/ai-testbed/groq/getting-started.md @@ -1,11 +1,15 @@ # Getting Started +## Allocations + +TODO confirm all this +Available for Director’s Discretionary(DD) allocations. +[https://www.alcf.anl.gov/science/directors-discretionary-allocation-program](Allocation Request Form) +Allocations also available under the [https://www.alcf.anl.gov/science/adsp-allocation-program](INCITE), [https://www.alcf.anl.gov/science/adsp-allocation-program](ALCC), and [https://www.alcf.anl.gov/science/adsp-allocation-program](ALCF DataScience) programs. -The first step is to ssh from a local machine to the login node. ## Accounts -TODO what procedure exactly is required for gaining password-based login access? -Get an account on the Groqrack system. Contact TODO for access. +If you do not have an ALCF account, request one here: [https://accounts.alcf.anl.gov/#/home](ALCF Account and Project Management) ## Setup @@ -13,6 +17,8 @@ Connection to a Groq node is a two-step process. ### Log in to a homes node +The first step is to ssh from a local machine to the login node. + Follow the instructions here to access GCE login nodes: [https://help.cels.anl.gov/docs/linux/ssh/](https://help.cels.anl.gov/docs/linux/ssh/) If you have not already done so, you will need to create a ssh key pair and add ONLY the public key to your cels account at [https://accounts.cels.anl.gov](https://accounts.cels.anl.gov). Key type ed25519 is preferred, but not required. From 691abcd263b425ec52b21acb7bb73f74c9084507 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 11 Jul 2023 12:29:11 -0500 Subject: [PATCH 13/67] Update system-overview.md --- docs/ai-testbed/groq/system-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index 8b1378917..6680ff464 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -1 +1 @@ - +The GroqRack 42U compute cluster has 9 GroqNodes servers (8 compute nodes and 1 redudant node). From 2de024dd734320e5275874287f5cf8f8b8e21018 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 25 Jul 2023 10:24:14 -0500 Subject: [PATCH 14/67] Update system-overview.md --- docs/ai-testbed/groq/system-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index 6680ff464..2a7ba8dbd 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -1 +1 @@ -The GroqRack 42U compute cluster has 9 GroqNodes servers (8 compute nodes and 1 redudant node). +The GroqRack 42U compute cluster has 9 GroqNodes servers, 8 compute nodes named sequentially from groq-r01-gn-01 to groq-r01-gn-08 and 1 redudant node (groq-r01-gn-09). The node is Dual AMD based processor with 32 cores and a total of 64 threads. It includes a total of 1TB of DRAM. From c67aea4c3124fd72189116208fe2a48a4e29f6ba Mon Sep 17 00:00:00 2001 From: Alvaro Vazquez-Mayagoitia <7561555+alvarovm@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:50:07 -0500 Subject: [PATCH 15/67] Update vasp.md update module version --- docs/polaris/applications-and-libraries/applications/vasp.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/polaris/applications-and-libraries/applications/vasp.md b/docs/polaris/applications-and-libraries/applications/vasp.md index 58f68745a..66c8d4700 100644 --- a/docs/polaris/applications-and-libraries/applications/vasp.md +++ b/docs/polaris/applications-and-libraries/applications/vasp.md @@ -111,9 +111,10 @@ The follow modules will update the include and libraries paths used by the Cray ``` module purge +module load nvhpc/23.3 module load PrgEnv-nvhpc module load cray-libsci -module load craype-accel-nvidia8 +module load craype-accel-nvidia80 ``` @@ -159,7 +160,7 @@ chmod +x example-script.sh qsub example-script.sh ``` -### Known issues versions: >= 6.4.0 in Polaris +### Known issues versions: >= 6.4.x in Polaris --- * Undefined `MPIX_Query_cuda_support` function at linking binary: This function is called in `src/openacc.F`. The `MPIX_Query_cuda_support` is not included in`cray-mpich`. One workaround to this From 8b4dba5f0cec54b3d36c7f2484ccbf08795630dc Mon Sep 17 00:00:00 2001 From: Matthew Stone Date: Tue, 29 Aug 2023 12:39:29 -0500 Subject: [PATCH 16/67] removed the js for the custom mobile nav --- docs/javascripts/alcf-extra.js | 62 +++++++++++++++++----------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/docs/javascripts/alcf-extra.js b/docs/javascripts/alcf-extra.js index edad8a0f6..66875b17a 100644 --- a/docs/javascripts/alcf-extra.js +++ b/docs/javascripts/alcf-extra.js @@ -96,48 +96,48 @@ if (dropdowns.length > 0) { -// Include the mobile dropdowns (unlike above, just writing it all here) -// ---------------------------------------------------------------------------- +// // Include the mobile dropdowns (unlike above, just writing it all here) +// // ---------------------------------------------------------------------------- -// open/close the big pane -var mobileOpen = document.getElementById('js-mobileOpen'); -var mobileClose = document.getElementById('js-mobileClose'); -var mobileMenu = document.getElementById('js-mobileMenu'); +// // open/close the big pane +// var mobileOpen = document.getElementById('js-mobileOpen'); +// var mobileClose = document.getElementById('js-mobileClose'); +// var mobileMenu = document.getElementById('js-mobileMenu'); -mobileOpen.addEventListener("click", function(e) { - mobileMenu .classList.replace("menu--closed", "menu--open"); -}); +// mobileOpen.addEventListener("click", function(e) { +// mobileMenu .classList.replace("menu--closed", "menu--open"); +// }); -mobileClose.addEventListener("click", function(e) { - mobileMenu .classList.replace("menu--open", "menu--closed"); -}); +// mobileClose.addEventListener("click", function(e) { +// mobileMenu .classList.replace("menu--open", "menu--closed"); +// }); -// open/close individual menus +// // open/close individual menus -var drawerHeads = document.getElementsByClassName('drawer-head'); +// var drawerHeads = document.getElementsByClassName('drawer-head'); -Array.prototype.forEach.call(drawerHeads, function(head){ +// Array.prototype.forEach.call(drawerHeads, function(head){ - head.addEventListener("click", function(e){ - var mobmenu = head.dataset.mobmenu; - mobmenu = document.getElementById(mobmenu); - var arrow = this.querySelector(".drawer-arrow"); - - if (mobmenu.classList.contains('menu--closed')) { - mobmenu.classList.remove('menu--closed'); - arrow.innerHTML = "▲" - } - else { - mobmenu.classList.add('menu--closed'); - arrow.innerHTML = "▼" - } +// head.addEventListener("click", function(e){ +// var mobmenu = head.dataset.mobmenu; +// mobmenu = document.getElementById(mobmenu); +// var arrow = this.querySelector(".drawer-arrow"); + +// if (mobmenu.classList.contains('menu--closed')) { +// mobmenu.classList.remove('menu--closed'); +// arrow.innerHTML = "▲" +// } +// else { +// mobmenu.classList.add('menu--closed'); +// arrow.innerHTML = "▼" +// } - }); -}); +// }); +// }); -// add listener to each of the links that toggles menus +// // add listener to each of the links that toggles menus From cd3719591c6bff0ce06115c5a290689053a2c5ee Mon Sep 17 00:00:00 2001 From: adam Date: Fri, 15 Sep 2023 14:53:32 -0500 Subject: [PATCH 17/67] polaris compue MIG documentation --- docs/polaris/mig-compute.md | 104 ++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 docs/polaris/mig-compute.md diff --git a/docs/polaris/mig-compute.md b/docs/polaris/mig-compute.md new file mode 100644 index 000000000..32d5a748d --- /dev/null +++ b/docs/polaris/mig-compute.md @@ -0,0 +1,104 @@ +# MIG mode + +MIG mode can be enabled and configured on Polaris by passing a valid configuration file to qsub: +> qsub ... -l mig_config=/home/ME/path/to/mig_config.json ... + +You can find a concise explanation of MIG concepts and terms at https://docs.nvidia.com/datacenter/tesla/mig-user-guide/index.html#concepts + +## Configuration + +Please study the following example of a valid configuration file: +> { +> "group1": { +> "gpus": [0,1], +> "mig_enabled": true, +> "instances": {"7g.40gb": ["4c.7g.40gb", "3c.7g.40gb"] } +> }, +> "group2": { +> "gpus": [2,3], +> "mig_enabled": true, +> "instances": {"3g.20gb": ["2c.3g.20gb", "1c.3g.20gb"], "2g.10gb": ["2g.10gb"], "1g.5gb": ["1g.5gb"], "1g.5gb": ["1g.5gb"]} +> } +> } + +### note: +- group names are arbitrary, but must be unique +- "gpus" must be an array of integers. if only one physical gpu is being configured in a group, it must still be contained within an array(ex. "gpus": [0],) +- only groups with mig_enabled set to true will be configured +- instances denote the MIG gpu instances and the nested compute instances you wish to be configured + - syntax is {"gpu instance 1": ["cpu instance 1", "cpu instance 2"], ...} + - valid gpu instances are 1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, and 7g.40gb. the first number denotes the number of slots used out of 7 total, and the second number denotes memory in GB + - the default cpu instance for any gpu instance has the same identifier as the gpu instance(in which case it will be the only one configurable) + - other cpu instances can be configured with the identifier syntax "Xc.Y", where X is the number of slots available in that gpu instance, and Y is the gpu instance identifier string + - some gpu instances cannot be configured adjacently, despite there being sufficient slots/memory remaining(ex. 3g.20gb and 4g.20gb). please see nvidia MIG documentation for further details +- currently, MIG configuration is only available in the debug, debug-scaling, and preemptable queues. submissions to other queues will result in any MIG config files passed being silently ignored +- files which do not match the above syntax will be silently rejected, and any invalid configurations in properly formatted files will be silently ignored. please test any changes to your configuration in an interactive job session before use +- a basic validator script is available at /soft/pbs/mig_conf_validate.sh. it will check for simple errors in your config, and print the expected configuration. example: +> ascovel@polaris-login-02:~> /soft/pbs/mig_conf_validate.sh -h +> usage: mig_conf_validate.sh -c CONFIG_FILE +> ascovel@polaris-login-02:~> /soft/pbs/mig_conf_validate.sh -c ./polaris-mig/mig_config.json +> expected MIG configuration: +> GPU GPU_INST COMPUTE_INST +> ------------------------------- +> 0 7g.40gb 4c.7g.40gb +> 0 7g.40gb 3c.7g.40gb +> 1 7g.40gb 4c.7g.40gb +> 1 7g.40gb 3c.7g.40gb +> 2 2g.10gb 2g.10gb +> 2 4g.20gb 2c.4g.20gb +> 2 4g.20gb 2c.4g.20gb +> 3 2g.10gb 2g.10gb +> 3 4g.20gb 2c.4g.20gb +> 3 4g.20gb 2c.4g.20gb +> ascovel@polaris-login-02:~> + +## Example use of MIG compute instances + +The following example demonstrates the use of MIG compute instances via the CUDA_VISIBLE_DEVICES environment variable: +> ascovel@polaris-login-02:~/polaris-mig> qsub -l mig_config=/home/ascovel/polaris-mig/mig_config.json -l select=1 -l walltime=60:00 -l filesystems=home:grand:swift -A Operations -q R639752 -k doe -I +> qsub: waiting for job 640002.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov to start +> qsub: job 640002.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov ready +> +> ascovel@x3209c0s19b0n0:~> cat ./polaris-mig/mig_config.json +> { +> "group1": { +> "gpus": [0,1], +> "mig_enabled": true, +> "instances": {"7g.40gb": ["4c.7g.40gb", "3c.7g.40gb"] } +> }, +> "group2": { +> "gpus": [2,3], +> "mig_enabled": true, +> "instances": {"4g.20gb": ["2c.4g.20gb", "2c.4g.20gb"], "2g.10gb": ["2g.10gb"] } +> } +> } +> ascovel@x3209c0s19b0n0:~> nvidia-smi -L | grep -Po -e "MIG[0-9a-f\-]+" +> MIG-63aa1884-acb8-5880-a586-173f6506966c +> MIG-b86283ae-9953-514f-81df-99be7e0553a5 +> MIG-79065f64-bdbb-53ff-89e3-9d35f270b208 +> MIG-6dd56a9d-e362-567e-95b1-108afbcfc674 +> MIG-76459138-79df-5d00-a11f-b0a2a747bd9e +> MIG-4d5c9fb3-b0e3-50e8-a60c-233104222611 +> MIG-bdfeeb2d-7a50-5e39-b3c5-767838a0b7a3 +> MIG-87a2c2f3-d008-51be-b64b-6adb56deb679 +> MIG-3d4cdd8c-fc36-5ce9-9676-a6e46d4a6c86 +> MIG-773e8e18-f62a-5250-af1e-9343c9286ce1 +> ascovel@x3209c0s19b0n0:~> for mig in $( nvidia-smi -L | grep -Po -e "MIG[0-9a-f\-]+" ) ; do CUDA_VISIBLE_DEVICES=${mig} ./saxpy & done 2>/dev/null +> ascovel@x3209c0s19b0n0:~> nvidia-smi | tail -n 16 +> +-----------------------------------------------------------------------------+ +> | Processes: | +> | GPU GI CI PID Type Process name GPU Memory | +> | ID ID Usage | +> |=============================================================================| +> | 0 0 0 17480 C ./saxpy 8413MiB | +> | 0 0 1 17481 C ./saxpy 8363MiB | +> | 1 0 0 17482 C ./saxpy 8413MiB | +> | 1 0 1 17483 C ./saxpy 8363MiB | +> | 2 1 0 17484 C ./saxpy 8313MiB | +> | 2 1 1 17485 C ./saxpy 8313MiB | +> | 2 5 0 17486 C ./saxpy 8313MiB | +> | 3 1 0 17487 C ./saxpy 8313MiB | +> | 3 1 1 17488 C ./saxpy 8313MiB | +> | 3 5 0 17489 C ./saxpy 8313MiB | +> +-----------------------------------------------------------------------------+ +> ascovel@x3209c0s19b0n0:~> From 8a88da5c92b979493e04f4a76a0576e2b8a114a9 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Wed, 27 Sep 2023 18:52:17 -0400 Subject: [PATCH 18/67] Add a section on using the grafana CsJob Dashboard. Reference section from job queing and submission page, as well. --- .../cerebras/job-queuing-and-submission.md | 1 + docs/ai-testbed/cerebras/miscellaneous.md | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/docs/ai-testbed/cerebras/job-queuing-and-submission.md b/docs/ai-testbed/cerebras/job-queuing-and-submission.md index efafe454d..9de47d109 100644 --- a/docs/ai-testbed/cerebras/job-queuing-and-submission.md +++ b/docs/ai-testbed/cerebras/job-queuing-and-submission.md @@ -13,6 +13,7 @@ NAME AGE DURATION PHASE SYSTEMS USER LABEL wsjob-thjj8zticwsylhppkbmjqe 13s 1s RUNNING cer-cs2-01 username name=unet_pt https://grafana.cerebras1.lab.alcf.anl.gov/d/WebHNShVz/wsjob-dashboard?orgId=1&var-wsjob=wsjob-thjj8zticwsylhppkbmjqe&from=1691705374000&to=now (venv_pt) $ ``` +To view the grafana databoard for a job, follow the instructions at [Grafana WsJob Dashboard for Cerebras jobs](./miscellaneous.md#grafana-wsjob-dashboard-for-cerebras-jobs) Jobs can be canceled as shown: diff --git a/docs/ai-testbed/cerebras/miscellaneous.md b/docs/ai-testbed/cerebras/miscellaneous.md index 2a8f323bc..a5590fd1e 100644 --- a/docs/ai-testbed/cerebras/miscellaneous.md +++ b/docs/ai-testbed/cerebras/miscellaneous.md @@ -5,6 +5,38 @@ Cerebras documentation for porting code to run on a Cerebras CS-2 system:
[Ways to port your model](https://docs.cerebras.net/en/latest/wsc/port/index.html) +## Grafana WsJob Dashboard for Cerebras jobs +See the Cerebras documentation for the [Job Information Dashboard](https://docs.cerebras.net/en/latest/wsc/getting-started/grafana.html#wsjob-dashboard) + +Here is a summary (tested to work on Ubuntu)
+ +On your work machine with a web browser, e.g. your laptop,
+edit /etc/hosts, using your editor of choice +```console +sudo nano /etc/hosts +``` +Add this line +```console +127.0.0.1 grafana.cerebras1.lab.alcf.anl.gov +``` +Save, and exit the editor + + +On your work machine with a web browser, e.g. your laptop,
+tunnel the grafana https port on the cerebras grafana host through to localhost +``` +ssh -L 8443:grafana.cerebras1.lab.alcf.anl.gov:443 arnoldw@cer-login-03.ai.alcf.anl.gov +``` + +Point a browser at grafana. (Tested with Firefox and Chrome/Brave)
+Open browser to a job grafana url shown in csctl get jobs, adding :8443 to hostname, e.g.
+```console +https://grafana.cerebras1.lab.alcf.anl.gov:8443/d/WebHNShVz/wsjob-dashboard?orgId=1&var-wsjob=wsjob-49b7uuojdelvtrcxu3cwbw&from=1684859330000&to=noww +``` + +Login to the dashboard with user admin, and password prom-operator + + _uLSO5-7;*I+R4QaDzAMsT1g;A@XifD!lZzV(Dr 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

AF||;0F|Bu%a`O1hz2)4cIfUe*Eeb#jurk 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

~C?yilR{=PRmk6j4>P*Ns-8qbY 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 Date: Mon, 2 Oct 2023 11:29:31 -0500 Subject: [PATCH 22/67] Update miscellaneous.md --- docs/ai-testbed/cerebras/miscellaneous.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/ai-testbed/cerebras/miscellaneous.md b/docs/ai-testbed/cerebras/miscellaneous.md index 9e90c629e..b7ccf7ff8 100644 --- a/docs/ai-testbed/cerebras/miscellaneous.md +++ b/docs/ai-testbed/cerebras/miscellaneous.md @@ -28,6 +28,7 @@ Download the Grafana certificate present on the Cerebras node at /opt/cerebras/c 3. Drag and drop the downloaded certificate. Once it is added, it is visible as "lab.alcf.anl.gov" 4. Select the certificate, and ensure that the "Trust" section is set to "Always Trust" +![Cerebras Wafer-Scale Cluster connection diagram](files/grafana_ctl.png) On your work machine with a web browser, e.g. your laptop,
tunnel the grafana https port on the cerebras grafana host through to localhost From ff065769668fc1ce14c7aa065039657a52334953 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Mon, 2 Oct 2023 11:31:11 -0500 Subject: [PATCH 23/67] Add files via upload --- docs/ai-testbed/cerebras/files/Trust_ctl.png | Bin 0 -> 133700 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/ai-testbed/cerebras/files/Trust_ctl.png diff --git a/docs/ai-testbed/cerebras/files/Trust_ctl.png b/docs/ai-testbed/cerebras/files/Trust_ctl.png new file mode 100644 index 0000000000000000000000000000000000000000..dd551d3c08b6c3a959d067e023ff8b88962a1863 GIT binary patch literal 133700 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 @ z55s0tfr?Q2(LQJz5uSAkk~*AwGotBB>+v8f3}I>_b8pBfjyxrFAnoM_;F<}AC-(Xae?5*!)+qh7Xn_N^XtUr`@S&&y=(iI@#z zus|}y2Ix^ej2&xqO-!retLDKq^MEXOIm7g$=3~cVSS7HXHMOwKz-$B0e#mzzbg`;n%@$vEeSD0!KhYAMlBt=ni zRpCp{8K+6VTc54cP|pZ17!wp8Z#oCk%l?A$tnrkTPg~WI*?t7g*hsUv4oiiYi-5CD zY7!t++oUpmq0>aUg1s%W-3$6{>LKe6JLWFN@ezGj^Sob{GxQzMwmHUm+=O^2O}Eec zBM6`EXC+ESG~>;m+oqdR2^0maa2zBX2OkyE+(1_R1)CvY)?HJ+KnytzC66YsB;mv$ zNxtF-;DZzttoiuL%7I$uA&QJk~n;lHilH~OUcs$RW z%H0SRu=k>dRPA$|&db$~5+H$Awxw!@Lw54p;Y39=eXV7S&}u;2y(^N^qHR=C=(K^( zbJFdn^+eCL^{ti7uYI(ZxdQVPb-=0UG4Vm{Chk9UoxW*^IX-86 zpb_IQ8jJx&Ws*|q_ut01?5QF~bkTPdNWgs6dy9{L7v(xt+-9Ktb?5SUaYyC30IQQ@ zZ*|QppEAoITC3ELizUbxvx-f64(nt4U70|u;}uU?}PaB{eLj!W;u zM-rVDb-@KtX25WFM}OHP>drH;nz~)nB++{sMk-cakXvCY^Q7${l}>D}ZvzU9^=|ZZ zy`D2`ZAoqET=_<~3mQ0)LqkiPYNl^4@W+I-omM0_&}%WzfK9C9W*U)9B(9zqg=}x- zZFyvciS?U-wBn3-8`%XiSwB+oIgB2Bh#SuIGjY3x9#5-8Ip)SYCWG;c5V#{R*!6_T z<)|E^OXH(#DycktnV476ANCp6dR&wGP;m!T`d%t;4acZJcx(j@gFEAkFY+BPUmrdd z2a~*0U*0HoF0z2l3B-hF=hzJ>t8^_Es&MQyJ2oc|bG1P-N?N!C??>268mmSv|FSiMeu%5W#k2@VPQ% zKTdA2_-rXzi==LPuJb0#7JvtnifmaMY#Mr!9Ph*W_hoav7NX?Ilw=Gt5ETZsx9aCY zEJ~GibXDr{4>E3pcvn(K$ar_InW0coiDcA*t>m^C!=F!th%nibul_ENGFc#ws{PrG zyx?-SWEPV2ymod!+QW6*&xn~d)ybvILGRGX*>Zc6Z-aFsJQ8}PO_2gua9K9wX<#2h zo0m4UWN~Ovxtf4VPS(|}5A+z!k)i|qw&W!r(93&d^yONzPeuyz;1#|Vk%|^@t2UR< ztBTYe5BeiSLwvWOePM@)qXcp{`4+IB4chueTQ=`HkYx8PGrD52F`C|E;~w#D|J`v# zw(~n-?AeNfSWK{`leTixJmKMaVZaxe|1$pRu4(4o2hhlahK9Sq8t)~qNemFmx;eil!;eW&Og&A)oN%`s>N@(5X3sckR*UN3<>CY41HG0?v4tEfDic1$WCe`% zOV+!?)pp*3ZWsf?yAv?vACOq)FxMgfR_ar$Vis&Y5?A3#KgU#(wR3E}$-9dc_6^>B zTtkiWmZ9B1zbp|qsZF8msETizpI%Y$2NQ`ClF!hp+_a&q^F^_GF|*7jJa0A^&(+wm zX+MqcV%EZy=6qf%*6}d-NZ=|(^^G7mySg^kUcfghO7`l{Cf%j#f|H=g&wd`!tBnIx zeGNx3?W2um#t7@fJ9o#0!G4NW;9X1q=w>{gIZ@?H3c9MB;f>~?tRqlatGg9TpWs7f zwO!|T`eozRGciWfp`dbY9lR@HCkhcY{J;zrQur)nT`4l#Z!?i}LBEW7KtEq(vLT!E zTULsiV%ExZLB~YSWMqT^nO$I6yFqcVNEho)&T1jJpAqTV$j4A5jHd8?MkUWP`@jw7 z=!r?8Fo88}p1tq2Dk!3uM;iTIDx=452NR6s?83#HcN~oMvbE^mH)jDN<6!!^|pCK9F4xI}?d8fhM%y-GPupeHVQwp8*eI{5GpzzS3D91hthm1$!LPV9q zqghUch1R$%N|Eac>*V+()Ir9vP@QQKJ4;&;pz0FOR6DV_I$ae z_j~?X9Ncmk89fA98(N`<`Sy76GRI5kVeYcv=am$6)8jX9?MDMC)jeC)Z|{3d3cvM@ zj%>9}MK55aTc$;^eG_56G$4poL6_|{Owdpq{xSN6_US<)jMI+QX{WsH+~6K-9c#T+ z9xy$r-fK9-QPXFgQ4D{B+@I-0WXV6U2BSArz1(R<2t{VDY6Y)xNF{iF=TM6si$6xz z#Dd+n)Q3bDTtoe&t-sMP8rGihqco}fPZPCZ6j8!$_G}xx!mwSDj}lZbq)DHf_HZ!W zqFcFDxx`-7c|FGkCBoEEL$7sxMF=G&X3-ubC!OoFR{We_W1LGfi)JOYp(~WQ|F+d^ z1HSEjUL;T6pyFuJfcGGTTEQm9dHxM!!^5^Xel{<^*-UdsWvW9w4QA zIy!Ic;c`|!_PIsOu~up$?WvfX=GUB@lK6=tRH;DTr>5O5I?n@&pUFcq&kJC_IK>_i zM2QdTTo)?;i26QJaCd@W(yRHIC^^Ej!_CR}Ll&y5Yz!UbFbS=u@OL2ki?M4&DW;4} z%<2n*EDR<%lYom9H&T1qCAf8LuoL^m+VGtWnlRIyfmI=dC%Kx)TaDaYBPD4c!n6cb2c=**;yReFD3SJu2@$pOXCp)$^z@!Y%qv(}ibv~&q#4$7zh&vg& zH{QT(H9W4E=AzG4j-_Xdw1;=beUx#F@(i&?@xzlC-df0K$PeMD?evOB(>*U5zWbq6 z#^6t-sC5k&sZyvQvZ=UM0YypHRO`%GhY%I@9jq2xmCZhK9wA-8g_@5EaN z%^MHrzXXDc3{aupb$n7Kk&%4W#T7=2#GgyYJQ5vD^9&;3hKfFJhJQ$_OwVAbl zU1x>s=)X|0WX3!pFecNmB46g^GKlFwW!vAB}eHuBlpd|S{5ahdVVDt^BeRY_aV=Wt6 z;(eT~@4>O^*wf@4;m{oMWLNL>d8|F8o|^^gxvn*!o?~pgKJ!6#Oe8m%b!zpxo}1}_ zCyL9P=xF4SIq+Q2+NEtxiF@%n4sH3_lGl9Wk?8w<2?4qk$Uk@5(xXtnvd@fcwV?}i zcF|gU$+Ks6OI1d8ilw#SLQgIz_pQ<2Pg39hj_v=5|Fk|T;b1q^*3>=5Ug{HIi?8+}*a?gG1B&VCstj6R7z$I^Q0qNn^!U=8!8oQ5{-I-5Y%O zmqpcyi$YpY{nOj7F%=r+Yo!EbM+U#i7UVp^BwakNP2*=k7tJwmrFtu| zM?5{2%AO`c=2zu zU!ckRj~4{xG+}7o4WvZ^4~AN?zB&hw@tma`mLl&aZ!GPwOA>?87IBWeK}f*?Jd$st zq_cICBh{NZU}Vn8>DQXo#&lzS1qlF-q?=Th0K9HD z_yWwl2aiDOD%Cy8r96r_Mjhb9i?0X>ho_Tb=>Pk5gQjuMJ9dG~+fghUMR zF-vk*p4DeZ*Ckj*2J}O_H><4R2c^Ikir+JKpQ+lb{g}$xV z%KYdTN+dz@+`-O}k6rVReO)!0A-F=W)$v5sSFbs&SANFjNbH6k$()CJRxMwcy?fW> zd}l-iJocD@f4D>@t^!Sa#r*K+&WNE%u;BgHhC4+-PllQs|-o$OrPk2IU^oJ}(3Kl zRb{@9aK+Znu?{e2v1Q*tcgd!e)=u2y&F+zyQAJS#t(=SDrr0g4d*k+>JxEZk(}lW2 z#%=quI3ul-bO!|&WxHXC2TaqF4ft_eOfX++W|xtMJFvc?_Ov45(6fe z0NMdra#D$pVXOT%F|>m+_59wvDN;<^=Z5@RXL7{JOV+SU#c@Y(g)%iG5)k{RKl;7F zQcSmr^xf!R=7jBH;}WxS?tr}m^MGWx=}%J%+0(x+ZZe>!VP`2fk~_};w@f5q3PQ#5 zQlJU(<*z!ENI5pLpcsXilhBm8B(?A(1>A-1o?R5tt&QGVlgJ%)q5S-7?NvEi29u0k z7<#?cYCf&LnTwJIqS>#8*Sch=>uer!%fS$nm7c+=pKH2&p3pYk7#m-D+OWp|hmOj8 zs-$v!gf!9~@nDbvr1_p{2Ng_LZf3xrmE_!`(h-=S{z?;EAuP)ML|bLfDLyGrhCt8Z zwAa_T_f_H}@`XMrHB^(|k-*=|yZPGdW98NxG{_08{(=b=3}__^?W6uI4j%I$mbY|PEE zk6$x}4=aPEyO}MJd*KFV4s7%(CBnty3h! zFWlA}yoElYzIebj!Hi{R%k}X5NO*1Pxw9>Bk6G#+Dtt9~8)z@qZ#;H(c*^nLVU(0L ztQ%o(i(R3K0%)qI@HXAkXfX6~48e%1<84S42`aE=FS|KP81aKtKalqw3_*aF^Sry8 zF{+3q?e;BxpYk>yDNHKR%YE)%EJq_>^KH6sD{0)(%0zwNc3|?}!6G^0hw5*5_;&q% z+`yrW4kA1JIrBZv_Fd~P#nEBLiO+npfkks9S{ssqKqX^)Ox)uTT0xrf zj?vI%V%+7SH}o{d29wq!H25_NpjQ_KS~{sE1~CV#gs4uZwFpN3e)haj1FLz2Q!Bh~ zS`_(KiAe)XVPDk1I#z_i8}sFL5J!3U`I&P}Q()yVZ_SxOS1^d9)NW56JYv*w(RsS~ z_HgN5yNZHkYV=kM%j$`q_)U z$Sw=mbZ?u8y7Qk%%2_jrgZcX)^bmA!U;r5m@ComjWFtUE$q}*2jmVbNCggPU&W?s? zJosS<@Dz&m7+YG@kg}ID+by3xX9^3wt0RCxFaW z>6zEY&Dr_Sn{%g17{NjH1EebE)37;1ozs}3aa#7H{HyA?fz4uLkFM$s3$D7`t|D%1 zjQT8uo^*9`p`E-nF!bRo_)PYwrI<*19WG&M+6BjH_qau&5MZ+eGY>=17w`Wn-h{q5 znB*nK(&VK9D%O4M=iZx{d}UI79i2qK3Qz6G?~Vvkn)syDQ%msv3ccUW`+zj-X{a2^sA;aC^}S>9T(H{y@}oAiKKA7U zNOzK1+1NcXA>NagPJBF;?6w+kzS|==<$Ji1Q8J)u2{I|go+@7*CMR^5eR9Pa|I}wk zjn}6|x3pU$S9W^Wa^|D{tqvdzm7@h^V|bghaTaNxV_5+ zJV9t?bE5m?%186DtKtOjp7Pe_ln#eipD{*Cp(G}q<%TXqB0cR@n*Oej{B*u(7;>wf8aM&S0phzD z$g)Ff({7Pj;xj@G8@%bld>dk4O@O;E2>z=bwj&QRDc9E4EKIj&+uCGNQagUyV*~h@ zFmWuw)$$Lc4fwMk+!tkEZ@%*ro75fsZhq^}EYozBaf!KoU7t|)G|9)~`h&8ZYTvg* z<}KeFz>2e^!Oy-YWcG=5dB;jJ!Xp(Zgf-PAvhn|t4PX+Hnz@mqm7V| zbyOML2?v5>6j!C}P>^<-60hsO`LP}o8?X8XD|n}@JOdeqQy>KK(FpUW6%s8`FLE`q z-23;uplTGxVjvlx#?hY-zLxZydi7MSGNZTgz%P$$lP%&=z1j7WKC^93b6s6pX%`h0 zTKm{K-|8z`ECn0%GRp$@pXS54g>fSJE`io-8pt`;MG-+D{w&BBXvwgi0;P4m6o62S ziRDcMT-pXxD;X9VI!UDJwPa7&(Rwr9tJzM4sd`UqM7x2djY3l#kp-d#OQ)c~N^|~V zf42zx(gUy%HN;o_MWIx(jmiIy&Jpn0G=c=bLBVp!F1n=r|I5b!tPT$gWELhi{eG9p zP!Mi&2Sx?OV*Y^A=C*>cNqSYSGARlnkY@`xj|g?kfZBM={O_s0o8BFLQ|q2Mclhjo z(J`m2(YyBg_q;-Vb7l>rd-2MlJ6=?6K$3)30Pd}qegwU5IIEOrhX zmC2aN$-92nQ5N~&FlHXuBF#bCHiFU*^^n_o4qxuJ<&KN9<8ajDM5BNWie=v?7DlKue;Z)83M*Q!p+S z*u{2h?dlR1L(jqwZ22Ap!9sEtD}xy%A9-ztZGeW$4GOcXprP1~J`>R6OP;;h^4tRH z0o9#&lfS91r1gXYp zxB|u?4-ZeLKe|7kMzHVEDxfx}pnOo1WXLGrfFl3!;RAy$oHxF@tKik?hS}u8ePT<6 z#9-r_C<%%b@vs=-<=BdEb}%V-QC%A9k_~#N`ZpjPc6Ex%_}M(9A&dD@%V}9u&X@Z6 zbp@75Xy(nq&Hn;U#9m1?tlfLlW#Yu&H^xkMxT4Tl?-Nro<^|;@CP*Xw(Y2=2nr^+P z*idfbZm+Vd@x*qH;(zBRO8r#^mXmtH@223Uspf+QU(szj{5bt|m{Y|71$k9KO8=}P z_^jv7r6Bd!ylb{(NtKZMkyv&-%0J?J8{j{pbm>?dyXhQ|uNHuaNy0mPQ;u_3a=k>G z`V5AIS7}}}SdCY5FZOF%N%l%&87@n(zh^r!lAX_h;(A$8c0`G zz(Hhj!_)zb!&(PK2oshn=m4`SZB$*W2g`jvhB!wIm@kFvU18P4(;$qAiaAY=bwr zb9X-5%8B-hD4C|U&myCIv}9MYuP5O~q?8oqkf4ZlMU<>SO0BTdjQHpZ0KoKD3?P^ZoM||&L+3zOBci5S=e#RN0#GF(AlLDd ziqZ&r4F#!*`gjDC-umhu;JG#TJM;mbb7GGU+n!{0A$xoMxD^v&aq!C}drLn9@Sq2!tpp znyrH8IJYe{S>*lVyC_0?0Tx3e$m)kQ7KZ2_sZRov614_zK%@qG={tCQQum5;U4nCM z0w2NBkT%mXF@!HOYDp1Ek0!NBrIPJE=8pKo^1Hyzzz%UE7X-GRjy}JJ*|_%M;}i(m zeZAY5jlK`F6m<}z^04|tq>4<7uCV3<@uk>|NOrzIv8T{N5&tsl1{47e<{Q@Mjv=LA zn#~~*$41zwa&`<6!PGA`qxLA=%Sn50_G42riF%R(F=$WIlmVcJl63;tz88~# z&_ufbgeIESZE|KlBcFKbiiOJ*B195~f1HPbzCJ5$2=d;UyD4p9Rgf>!7I&K`WQ1@S zHwCv=QlUOC(C8WnllU%GO(3VAs2_6PUXxv}Kiea2`I`R9;6bcrew zhyO5PErK~fT-8eX9MMC?7Hzu;CXLj$7TK~$-Aqbdl;T0;B?3<`JpKaYSGVsb1_IcG z6B$y|QVCx*ZX|jT(e({S2$@P6y$eQ9R3-TtqXfgi&Up*|lwu;XNmTDH@27hU^*LZ~ zWHycS1g1;$^cO^smjX)|xko?M17;o^3qITI7ZjtfdkUFL7Ip~A>OhRvwf5_P3bC7F z34_Z^^8sSl$swTX^WAZPbr5(0SaZ-Fpdk{-IS*1n5qbF_tDtjy-fjCOrgYPixssb0 zf<;@&TCx&T9-YKuIPoMTfDcMcidsrqW-2FqsGyzG5Q}=&9)ua^qy1RkLI?SVcd-F7 z3*IZo+8XAJMQnVR&umZdMmJgYS9X(oNF%iC-;68Vz``uzGg#csnfEJUNm28wC3}{= z54?DN#^Vt&LyVoRBX6^(q;f|ihzgBgt-nrf@ip)qn=}SFmc(R^(4FN8yAbj}?Jn{xkL`_X1WNnczk#d@>m8Kh2e@G%XdV}c3-4PpE zPDmB$I{ECA26xXLgCm3^%w-BayYCV|=W(r}m!p11@z`33A)Sje=hb7_-R2=5epFmx zYGEf_fL7Q}-KwUiDpGfxy<2({6{p0&`f^=(DaN*Ukk4yAjGCnE;QK>v%Ujj5DcHM> zM+QQb?^q4OT*mluiOxWD8D-UCK08Vn2Qe5dfoGO51GqrWthzuUGLKVa2%Zul`&7z( zZY7o^FC~GxomcG>8q)@uE{0roOiI-IFaUsvGhPPUW*t9I!K&|OW9LC;B{>HjVJt)o zlzZ_zT9v($lAgf^s@w=D+8N~)fpWV9ys|yY|4;DAD9w{=mcs=mbB3`s6^pb%KNu|~ zP~y9DAWfEP&oD1Y@qe-)Vy_neUn~e2cn8B+S^-ZDlFxRtR&R(l@dZD_ud{P{c>D!S zbGpIPMH&~AkSMZy&z*btB&c|s?`c}2;#^rgLS+CFwJ@n*($rN=N-KoU29J5-GJ8pj zC!z}uhz|*s>I%}bXrz}7JH2HOF`X7>$wwIa2*{2}&kjk^lPQE?`Sz#_opCpiTNGY$ z`Hqr1rGnasxonb6IquqU$IF-c827O$q&av$iLXxdqcl};ZA4lQC42tvx{O*-4_}{n z9aZ5r!@FX0zXvz#Ztx)UKln%5rFAoee@HU}{Noi7w`Ij~DD6JOm=A@?JYulYxY_WG zKuQi_8N!j>plJ+={Jw~~(bfrdJ)>6~|71Js%xhVcea=7EhZ(+PBd2P4KU)0)!V>PU zXRA>hnwAYYS~@=+*pe{;`Rp`n0buxgp9q>Dq$91l2TQq*#r^^%8Hv`LRFDi7`3B=% zMocFp8L+6-rcjRh^%9Iell`J0WQaP6$?gN;c) zJZ|aTQIScCt;n~Dq?k#hAswM6Lf|0DSwP8DS7EmVf(3GbQ*$0p{kXG68)f#`zn(jj zM|{*l#fEo@s(r*^gbJCRK(s%~qQheC81f)O)VihHipl=zFqp?(8GnZ zgjdq^jO%D+Nm4)K=4gJC+eiMHzLr0hcAnlJ|Fp8*1->7sX8;pafJ%sWd2|aYm&p=T zL*h_CFskTAQ0w-rGQ4Xko#v73hsqS%8y$|+1J=AQG15mnE?TB8db{d(nT2eeh6F9S zelp^GW#8O8|EkQ4yDoe;dCA-6h+pqLkt<_UU~;g3-Y_~Rwqj9IjazlJ2L zUK{U~Jz(Fc#KIVmbc|KKWhPT}lF>u0CR3v5v6j}T^5(;NJ(@2+r;n{-n@*!P zR9BhAA0TBy9yLM3VQkRdPIj<-AX3OHg$KQ`m>2C35s#~^-8aChyvdp%mR5#hWp46R zq_Z0HfWeTI>ntJkB6|06>a5kw?oBlq#x->NC;0Z_kOPBK5+A*&+8z0_VQA|yQ%{XZ(;MW6)dNxv!^tl` zBau(w`cQ#G@kuqM6(e!AqHnm52+sZl9fRV=ZdDNPV%gBK5e#dXC7f}Y%8Yc7B94Go z4pMv@T*i5SKBM50vhlvt%qEoh)Zr>fko!Y#p9KM~;xg@}JObxQTL)L3a2M48_FFlJ z7(ne6ZF}7;z-8#OW44ddN=HbCv-|zYgfpI64lq8@L(0S&tTWMD+A|(9+mALdmiKCo zA59lTOFjK|nsqJV&{9l4qC0M;E~mupd6%%r){4tdg0u1b#-mI*4QCyZQTF+5#C7=FpoG4k zyxZ)L7xO2RRJtm^q%2!cnasN!aa_{OOBj3~T#KW3eMTEkAeB*Qz4yvvKU`%&^xAK8 zm#*t>oY`zr0nIt$NdM!V`8OKpiVp;>@(>lUi_il3(JI678|j?Y33sN_5TQ%3igCaG zG*(M|>#5TYcn4O@q{JejCC7;&Zx^}8)I^{3tU<>?)=89{UZq_T?nvwrj0tO4_N;^r zAJYmaLn7RYgK9-+KcXO*{fy1H>Bg&9xxBM>V=SBR+CyR%l1R*+M9UuRGc?}@55k<# zr0A0lzfRq(lI_tu4$PK32IEnV_DtQVvw>HF+ZC5$_g;hD-`}l>eWl$Dl-dKt9`}Ge zEegs<8}yc|GINZ1em>_X7kSJkY@Q*i>f;c6HM&&mFi|TF+`C-Ar##Yaxi+d-3bGp; z-+Ub7xnch5_JIFsi+Pj((C(`-hv^g2;|+I-rTIIf#^a8R9%P3M7Qd6gB%3X?Hez@! zneGP8ed^#BdLBj-fX0_oIIdW+mY}loH|!_0ym3RNtRcwy!0y5=O(2xpFy>|fp_MZ_ zD*kAkPRq2O!8+Fd^QwUrYUo6qNUE~jpadaQFVGX!DAe$)=b(z&xKo0YLfYx8T}RBB zX04ZT86UM}MC4nT%2DVknMwgiA&(MDlioU>FwQz^a`?mwCUu-5Zb? zq=pbsa%f}#0qF*51Vp97AypcrOJL}3ky1fX>Fyf36_5^TmF|Y`8lUHR_xpVB-h1t@ z{`l6~f3jH0%za(=73X;zzk^%i;l$#a#WXt{E0~mT2s)>Zbt)JsdXoeGQ<(>4k5)z8 z_Fv5h0etkW8Pzr($o5|PB;^J!iBOxQ93qe6H-XIL2DgkzwVl`ivo)FYDcUrg2_+WdUCf-C2;3J6x}x#kY8u-jPnhTLa(a# zM)NI?a+#@9BH0CNxjBNq)JIWfs6XGUM1WR*P;6t`L_4keLn5xbnsVJOVvEbGJL3Iy zzRMHz2)d&;CFEwP2&R4-{fTn9JOVK5lQ_UFoK@`J%M>UF6*eQgMVZy@FGhie!dp$y zRXs+Qne2xr-%!aCcKFe$$jI%EzyYz56hhvI6X5~u%#xF{<@kMy3s$!6Y=)u<-3w-# znYG9o*KV;*IcHM0B6+hCRexY-pk)g@mwqs4)T@?UGV+Y#ZaZ~X+CG($W9zerlB;jb z6Qpj*PryEN2=&u2e}NAX=f;$F1iuwc9ZZAH54tLwZJ1<6mdM|P#Ws)}kOPVSO_~%s z`5j_}NxB}EXv`zG$qUvzOkWF86u3O?dAP;VV1|=_3nq8Df~mk(N*2w174=(bSqg5z zRdB7h&UbxJkJ5um1lTC|hxVT{_$u}U1QM@M0ICUR5FTb08I+g8HEE4n6I1y%g1Tm+ zD{wrtP+1mB`QOzIr=zscqfMSd=gRUwl8(-j_B*LgAk%i`BbjGlJ3HN_Tj=H5SbLg)lY&oE`@4*Ea&0a4iXzG9Nk) zDVE;g%!RX%46Bn#LWFMjj0DOBYvEV@X1$@G5basBQPzh$et6Irr@mO^bgKBA#{N)m z4uALcsFk+u!dR>`UaLzBN)Z+Qi=h+K0kiBN2o^Z}x>P2>%#-Yc;ojCFj#)c3)vHx+ z1KU&4hT9%g0{B^298Dgf{odFaEpfLPx^+ptF|=^U{hhVnltmriBB7En*U`63uB8w1 zmfV(zpg1Ezblox?-UH6I#d4)M&h(vFl4?W*2$|07$)3Sh}mrx!uH%rygyf*jJSeGVuIJS3w3I-_UUk#l^i_ zf6d?j;SKqlh{u7ANfwKcygv!7x`8XSOiFIPF6%2|7IvUqUG;&rG#H9_s!;n{hNX1T zjIY!1^$hkW$9J^5Tfq^42|{%!FEX+_6+HHXz84XVXGo!;m!khsmI+&x6tlc6k@M>O zwyS+jb(!Wx-90Yv_m}$r9Wg`mEshw42?B-3U}&KK<|h}Ez^aKSUyEIL7Fx(57yiW@ zE5UCVFC-b8iqRLp;2QTZOtNV)g6odne0g%^KGf~%GnMemNUG{}I?G6^n>`}{Q?!R= zBjL0W9OCqfB4c!DSQdoh+5RIGPuO*9luvK~zz^2fh&NX$vzs3~hO)b5HWxR2J#Ipw zWef%DWhJSD4O-})JO?3I4^WQUoZ!NOl*xx-;4|B&c{s!WDEc^^v&Lke7#emK{kZd^ z8;?|=KLP{T;oQhlqiOgbWInLxpm7X$D4+(nxVH}++DqLlNF4V_pqiQ{*eOWn{?`xO z$FmqSH$bzufIC9 zDHb1}%`V^A5n0?ne~~4kII$#F!Hez#a^Rs01Bj$iMet!k7e3B?@m08J4EcC6Ib(Zz z&Z{ti9I9zQh0e(qJx5kXGqUg}*31SlD>#XShDF zE#({3b~8J=&O67mBqOozL%#5P_v6w(l69xcpAd%G&tuNQP1oEL=jmKR#}n)snbD2F z|M1rS?dH)@V7f$xR+N9hDBbw@My4=`IJS-(dyfg4cx0gY&Dt|$Q1q(*W_CWA(QKo& zH{%L)pXchqcu8S%qzlJ>_pZzqp@er-fjbDxGZOiW^;iMi2Jh3TWP`t%v`{R1Ol9%i zb-l^()3v3HSZA`C-$6!?A3&0%uv#Oex}vh?s>kH#%mZ@MWu{06JI*s3?6OvHPmNp3 zVssM{27Z`-^heiJOwo_dePh)5?>L7lFuFyvXJsDNl-3+?&5ED?PnaIgAO6Ag(209p z0KD51XRg^`y#aRxAU$wcC;f(I?xKI@z;=vODgil!L{6a<`(1qFr)_s)W%gLndp$2! zDIU>H(QXm{WtZ2V%lnxPV_@r$arEy1;^N;)6OP!7OICKF8HpA*v4+NqoQy3RgET2z zn~h-@PSw)Po6uJYT2p-EE0!ZgA;y`cSag(N1`~@P{Hgi-F?@k5T$oF2TK$1Bve7rH z(hG)d##JBh#=NHZZL)I(i6*DWz593Fgxot!EX6UJjL`t_%T0Pr=FQEfoImft4|M2r zIqnw^M(W4p1z7tQQIPT~!Zn zqI>cIZlSN^Urig}jdZ!0{DWCg3j=)~d*)9^|Lpt+zK-AXu(98Di$U%BIhVVk=eioU z8ULV^ztc>eakZVkn>HHO0Wd-UcVYZk_8%?kUNTJP1zS6O;XbHCUu}n_Z8KavUlHgi z;#d*{nCu^9_U~APRlAOh#`HnN{*L>h!FkD4)vw%+{lg|VtKYUZ(wdNw&y}$F|gR$mdCfb8|!)Y5d zL&|u>g9jF~WB;|8M$x1E>=TD?7zz=ysD&VhPT{-d2Y?N8B_FloN+D_ zws}>oX5D*i)+pM~2!CD$@oW@2_8jWzJ>)?~4~y@i3MD04>4vXWUD4q#bA=)QF$` z%K4jUx3&2%eF2_U&Rv@&6k4soK@a9F-7zrR29LqZx|!@jp~n$aQ1hn2b!@sOxbXUf zMCzo42p~N?cm9F&P*_-^arcnG0&g2l^@LfZpqhZD*PjHffQWR^Qx6KPQcLA2{JPBbuIKJwflxP^ zA!QQw1eBK;us^A%EtbRxD^`J$y^IzR8pO*S!5*UP_w@(EYBY}@rl)iSpZyEdG3NHn zGa!zTL8?JE4e(aF=^R@yduqSuDAl9;uA=rN;!w9R@d#@82FE?sM+Si<`x>@@wV~pU zPAMsf_#C4?fggMuU^W6D!^Ddl_EaH;9J#h?DW~8M%)&xx$r57F{F7F}I@avGIvOSr ztlL9dy8g7%)&AG7ySj!LrVOPIb*tM{r4lnz@#ep{GBXS~ByX>VpBaa`9pnG<3%3O7 zI1zd=GO&+a08JThGvDLLV4!8ZA6&BkttXM)`xy1Y9{4V}>xk@}mVke8od>)h%ip0R z0XOi(jPiez>vuimX})l-J{&WgevfX_&I0kuTUyY<+_WDM99NH-ZX>=K4Web{3TqZ4 zTFIV%^^L$6rzcZ`mp({L_X0;)A;>o4C^P-_2_{`yiGUJFr#z&N*)e=ZFWz9jOc7=Y zNHKTu0X~DCgFYU_?+EA_EV;dGwj@R8v;7gPUjO{HfdpBwUE?gNUyU-K=ZUJAcL4%` zu0dx9mh5y1&jiC~0XP;2Va7@zC3?4k{+ji$$3ej|yO5s%FKh#ceggx@E$Rw#5OLI! zGM`1S<4_rWd;0WgE$E^kM_9Ih&(>Gpa+>$Q_DyI_-#5AjDg?A*VAT)s4Qhcts43tF zS%Ny2_{?{-f}nxn5c+av;)@H=+qeU%f@+p=_u#hQvG_4)UL!vMHb+H}(T?phFmMy_ zTm&X{mO6j%;OIyf5%={cDxE%3*g zAnB0ATtn#4)@eL#E9Xmcasp}?9jF3rkj8|erqA4O1YYdA(7O?GKkM3W#)414w zSD+%|IbgvT2lNwpMdv|gs7h8dFx!o1hg}6vEcIRi=m}2QAZrq4O)k(!wc^ws%PWSr zg<`I)lTAA}nYRqm?Q8{G3#Y7V!{2f;x$jEovW7NvMgz@+{%L6fGR$OTh*5 zO;gU77_O<|`8rwsdozh_Lq9c6K{HE;LyE&ePXe^zh&!Nx)tx{iLVL7-X^x~T)7+~D zJdL~a+@i%xe`O6g#aMEfen1`&LUIPW*3IZ_u~ks2@wmn(XR85Oo2&&{&yJzy&EUNY zmPc`T;Hi7?xGaKLs!BkGSVz6+47+5{_8ImC+dHD^!_Fj#7e!?V2BNikbpnGTZL(5V zK&CLD;Pc4p-MbG`bD2PyCOA6eIaiK;-0%HXMGq6}TRW$xbbnPr0lg!#^laVq`VYO& zj_h&v^#wae+||XJbiMEKtnk4CX!YOR-s9_{6&TL}F-q4v8oTv!-VXtA0Oz>6`I4I> zs0qx=d)2!>Fg~{Zev7qCcQ>^BQmfZ7MpXU;4SykjNfLEbT((epf9c4S6WnNL0vTdqE-8$?Td}YD4bjTyWsWy6d7s`=?BkX zMQHZbNYwZy%b0}nd;M3XCFZO{sU-z`NIK!O{Nko5`ZOnR(7429>gc#%Yfs!i>?)@| zJV!Bhulr-XN|+H0Nk@kL9p;2E(0T`SMr@+d9sB6y&$zD@JFSFAnZjh@< zrzedX3wgS!QdG#53C2VU&hiVZ3`)$b42IHc+|7;#?(|>kG4E2m^WTtv$H-bh5F>N9 zn~}IQSWoX7))7a{@~}vB{7FCm4}4Kfo2igBq~~p!#pg7>pp`qK2w}#K_=X*32S+~L zfwL60JiBld#Um)_Q+&XQwln*UusOEX2cEW^$Y4K`nE@}y{o()%rVSvcd9b6WJb&Z1 zg*{Wvti1X|E$C~8{Yciss2Ov?uA74|ar(LbbTZ@A0+JDylQlyJ;QgxqD=16Wb1scs zQ-Y79|8uB26f4q_rWl%aelVhGeQ@{ZmF+M!N`tNfpYT!tF7eyp!oR2s3Qvw;tq7Tx z7X)J-4bCE({tuVQ8~{y0h;2jKli)n=d#(9|u0chj_u7b8?B`dJF2?0$?j-A5Ufu-t zkb2mMLiEir2AqRxW8Y2jV!sVT55&xpQ%+|>#7DZ+C*)yR4@e`=NTe^IVT8*h0X{!b zkx+){zSu zgd-S|pi#vgr{=e;rS5I@>o*W-C20vq5E+eyr*)AHULc>F-3mGB3M3;~p+pcOT^K#S z$Y}IX1w@LsQz77ER2)Z(?Qu*Sm_xwGA5w<Z~F1u2$Y0Q%7zAz_7VPzZBx z-0FlKbtH`icDOl8pG(qBH<+*!t5o=dv_*FulA_CU_#AGiNDH?|tpROLOcxPEMh(JJL6u=Z0T#qHSy2G7ChV>rP6{RGFXtux)oA%ylT z5QcFllz{R`jnfjU@=b|(a)<>5Q@ei`&-&?BYlLbBFXgkc2^y!0bH-7qO(Iw!caPec zTo?|m0b`<3^d3-5sAu8*)SM@kz;`_7Nh&e7qZfCx4Jvv+QF0~M3# z$EZG@Fw>Yt`o}TGS?@JHV->c9jDwIO(YAUTG_%4wYJx1)9yQbA&0>;56pQztH4D2( zGVzHip!??AerryS%keh=+YZ}t1pP%;ycjh+7I`?~-gH+OVd_4qu{F@+TEzdfK*@bg z$G9QU`*&Oa*4|h?8d)I>N6YZv`GR7`oK)wdMktm7vsMIBa!^B~Yq+Qft!igprFFMT zv1TT4FO@TfDyNtUz-%sLvhf*ulqO)@HG%0=n8!cQ2w#+(xDLX=`LeV>0aKDv`9rP$ z5>Iq+buGU5)_lzgm{^Rl99CxUjZE|j7wTfvB(_%j5pwJh`IcMs&h~uQHEuaO&*0EiLHs*u@)n~?fM~MV9^T5;F|!Ce z=Fr-){Yk$EZ`U?9rb`m!s4m&df!7>tqnH?^8 z@8QJK^2?-H^R{rBu00ig0g9V7I!l4J!*7w2baye{GwV~a5XkntPJadF@}C&vxkrRD z8js8vn7PsA96A1Zrp;@wo;`^A}E zwCxbw%Z&5fJ&X5kfR$x;Ym#VcvB#ihwMQ#xe~wk6wkwp4W!y(-f4O1PqtD5CmRH;= zZ{0_(ep%x3NHtPyyAs;jYpw3!IMC(Ke!Mb`u;({9_>oxR(;;ATeDjT1bC&ywd6p$v zGo@F}R*zYxJG*AY$>BhoXR(&*;A9M%4$)vO59knfsedlK7Kn;ETxJd1Z_rotaJ@?K zwnft+ywlcS>_)`>7dpgtK=s!l*8z4z!egLMG8*5@+)oC_$J+meZ+OKn7pYEuq4*eARn z-E@p+)vwFX{@2(LlUM#~^#81x;xjQ4c*jQ&&$3}p5nz3Mj=-B184=<8s%NS4DLCIL zLyN1C*65Q{ICql~yC2Q5W%>OxlDcJ~vW_mBuSXtI~ewPgBy{0t6Eh|3u>_E$A;Ygv<-%&1bO7R#Vl?q<31=0n# z);&A7O*Dw&Wa1KjuDBsRv~XwT`3+CVKbQ{XMhu(nvve>%#yO6kG?BXZkteRJrMmRk zT+HLU{6Ftd+M<{}*zYh8ApU9?)Z|pp!da7cJIq_S?#LzfqXxwliZI|G8@xRz7(J+e zvIc#e<-$kR9WDf3hq_OYsq7J=$XE(PWo*$RA3NSJ{pUMC#^55aTYTJGiuxzn!8}yI zI+k{txu9*XQ0-D|LvI3~Z^2!Y@~EKXH=44|ie{7Jlf=Ab!#21Ppv}4gKgWf!)q4ve zJlSUgP9c4)P)nnYF9NC1YGQrs(^@@7K}Fh)2G*W*(0*k!WjRtMz~6BEF8Bg)H+?EP z!l(D`2skZXNaV6Y#1G}#m46+9nxx|!$WU<9l(t6))D3c1HNZoqco|dFjnTFLw$bPC zUG_1FbVs@b>VJ|Mx|uC}TXCo|)bxXx!YsR>Wh3&8>hJ*CF5j~Q{CyJshf)}4-Ta|x z5b+iKUB)#mGWK@_?5h{@fzrL6IkI|g#FjWq8Z{8T1j50Y2U(xHi?mmYnJLPVelT|S<*mSRKF2|7lxaIro4aD{$vxbFm zPO1m#QA1oldLd&)Gw;KRqu#P&8xUZURU!BuoM0UB{Jd>`fv&N!bW+IK=-3xjI~}b7 zHT+De&l~*R2E{2xqP9?yYBiY4(TJurT}=39a7{ZFCv%QaS~-lHt-Z1wNsY{kEs;YC zJqySwIw-S`L&^r>;zY8sz_|7D!i$5cW&0VW+GWdmM6s;$GMrVlcw{C@;?Uq@n91$o zmw|_gRn^#5zu~*j@ZZb9mS$z;(@Wl&{l*a{htN2o4)75f177N@-jSh4_5)kMhF3j} z5;7?pN^!N(YGIIR*b!<`3tZD8Sr1QqPV}DGTTvu_iD3%Tnlk_>yL#KS)vT#{uP_K&1KijqAgpZI*VBnBMD$H_mk435sS3Oq=rg;n_JaTA+j2!hKT=> zfp7e%9GpEc0*KMy7e$+oZsBaxm+1>v&xaTr2cr{Atj|S3f(g~aH6cXYJZqbd^8|4h zcxZvn6-}Qv#D6XcdN#oSn*gz3-rzp%w{l}rfQdwE@ zQbe$xxx3{wxHdWzoAUoN#bn2@^$+2HpTZ#bP8nM@ykzNx%&^Q%aXCK2V2v{aDCbW` z^t;ld1{qAqY95(~vzavHgb#VqlU2mCW1yo;P=Ys!NPa)}_|j|_`@aZWVEhftbf!BI zs5%}3@981DN_3;R6SPg|L>itLpr49X0wnHTl zF%Yq9dpzmxI%iDZb&C4c8@YrKd7*Z%#I?^%nWuB7%SnNPBMM82N#I)_a#2>2lQCR}5YE?MZrN(e{Q&>F)VU8y%Nq6B~w`VxX}dwkt3%wj&4go1v694)nb$fd{gjqcNj))=80>;Mtk4B)1Z=Q z+VG)l7Ab!w1r}?tOv#5KzMQ<{!uN5;@prfyMF8r>DINfepDp|OW$)WTn_bq zo1$NFbmZqAop`0u-x-e}4KrQ}x3-qFhi?H`w1(7ZrLAsgCjB3eG)8FRp;@|wjZR_y z!Q{`<&)1-aBkMU1y0;~P*cP(|>m6go=YJ2qc4*jyVeIRyzv2;a2!_2jlnDG^fGn5@ z!S}oWH)Y{}Qx^U=W#Rv?lm!lQY^kdg^J8#it^r{MpXGg)5taX0lAvmz^#6e%;Tsl2 zW)Q6*2vu`3S0S-6{;MwlM{wJKlw`$ZG;~3H0ZA@rUN!ZS%e~{4Zjxf#+ldI!juwXd zKM(|_qaZ`j$(4_eL&Qjf<{Wez*hk&#l64HeglpQ&O%Kq`t_BwAl}K znlZCzi1F$vngSFF(v9X8q3f7*IGFsy^nND`2=3=+{h{D98{JF&m_QN+l6RzhP7G^7 zgQ-LL=^0fbN*h;4%2b)llz=45#Nazq-N}D7DDv5ADaH0MECp9I11E9U|z4krK1Pi zSSqUNW{RuGjyTK>s;3<&jzY$SJ2V{KoC)9>>X_c zAA>Dc&n%pE=B-W9?Lk2*StIYwO8GJ&dgorwyc*C#V@lxPzW>&1UtyluhlC2PV$! zBPF^YpNovakVWg@3jM*nYeWfRYzFE~B>QSf=jyIn?>oHYmBB5ZWKF8O7W6mAESq^f zXutgJrtX4+0M~h5wuTcxCNwk0H2x3u6BIEmA5%^KC`R8&o_XEjyxbk%!zXUu8RZ1U zCWnx>e}UFs?Dfq8y+~&DFLd%`64viPFlVyrL3+hVUZOeV9MsJv$MFVqO?_`cBy)KZ zWy-)jY-wl8{G#qd{Gkb;J390DxAp^EK})Ufppf1-U9}|K_@WaHiOQ=M*RS-N`)Gv&Uw>xpk(fP~9mZc{JVf$;&DaK9vO z%rv`+}%ouC|xTr4WkJXyj0Ew05}r0(gPLiO_tCpmFS_ zM=ybyDoNRc@&3~y@UU=pZz&~|6f3q8zS-X3-UM$=a?0(}Tr87ta8dMk@H?S$J zP4XwY`}`wFB}WTwb}IfM`!M|d-75<1dKdV*K2wzQb#D<%f8J@utIR&QtI3%9Me|z8 z7Az)nWlmX2*mIAix&@1%8)Yx^5(vs>w~V1{g!*;Lx^w=YdBgca`JgJPo2XN6XL?-ujKQ zD|4%|X`li@?Fk#PjBNvYifR%BScz;)iVQ8G{b(~XZJ7nJ?@ADLYjWn1Ww};}+*S5{ zL^Hs@po_dzJeqIsbJol)eXw;#s|$ptoEm~_;%SNHO2J&aMWGwJw}1{q@x{5p56Qz( z=s>57y-2vVP?fDhZCx<@tWS?z_b&zUI0(np>^G~`8Q?4s+y5L54_pDSPrsgIFXK$* zZD|z68;3L&Dg;n8Y$tlE`Tuq|xcQqmf@@4!7?FAK%6rlJeF?xgfh`-e(MNh&XH{{hXFXNclmlTGLm%oB1RW>;UAxf*wfC!wOWxD+3|TvahI z846k^p(Ws90MY!FCU9Bz#a3s5Be~2zdO^Q<^HmY{lkp8O3o8X;cLBDAtfOd%9urzf zCJw?a68VES+LvSW+`4sPfgSU3^(4(Mc6qW#7;nBEft)FBT9a4budCgwORJu&(6t=n z@KD)IYZ;iwhb)FRVaqdqx&Iwo&>-<`MV0LRPw##_4_4*gd#|efQ2qYH${#|cQMr#I zD;|));2`^r$D-x);yI1!9a2?oOxVQKl%hdxOYq2H`no`o_?GY7R)F`>>^1wO^--2! zxmDq{fq?bZ(Dd0zn%)!Vy&iTF3%`@yOX-=~%KY|S_}+St7jo9Kn-)vqyUc3si79%k zjKNS1GSLwGor~#jztQ+vO{BF;>Znw{n?;+2>&$!pd@fDzDgiuU1gGlP3ozDMfR5+- zAVtl{)H@hrt9ZuuvEm+OqtUDH3guvVu$&2gQl}Wc#EAs^ND(RT%`mWB*o1ZY4Z37K z4keyeK+@q$?e`0GnddFlBwxLiUiArg4D^#&miL(3&l0Y3pF0_=y{v+qqdWYx&`XcQ zF1sV~RJ-20bJ%hiCVL5~guDmY=QC@#9bFY!p2*q8gONc<{x=2SQpGTJU7%9G+-;Hr6%#t{J zMy$4>3=_R|9O`W}hq1}MJ9FBtB*lL|HQpq2KIq;g;9=N(%=pN{-+#yBgT!4Dm`li> z@*5(}-0s9!8O@1n_iNeI69wJN!Zil*`khlemtdp$vFE(bG40I_g_Rmb7bx>`o2C+x zPnS~!#{+%`NXc@hjro(#W}*nAh*s#4LbtU)6oOTMI{-28?P^N| zJ3J~3#-!Tt*(EsJdXkPef7vLIx=ioGQGARw(dw!7I@PXT5wDYu^xe?Cw+6 z#gAN=nN;??rw_v^7woo#p1nN`NyKA1SSJ^Yivyr97A^<8UIN&4)& z>*Hwie)W~&k7n!O6&Yvfx3%LRI3TYqG%78A911fB^Qh3e{h zru&>|+|vbk*269Dy-&i8zeDAohXfK`*@l$#eI7bTdN&}GS%dj#e+J03ncYQi>)&+R zo3b7?IB-b(G_U2Mm!Fa=@It6dnunii=(m2=T<+L`Qyx9emm$PC-Oq(-Auqpw%D-w> z8gmbC{?*YnIC%ZBQNZF-(_Z59Oi{>XYaemKQS;SWmlZ>kCm&*s?E1jh+p0_0ZwN(? zGJ#mpUvq6&=qx4^PJ)0%8z zs4tJN9aIw!-uHO2B_9CQA?YfeD539D+L;{kb1N|+#@QtK*jt``xp5}yUQdeH-qpp# zihZr=q=c#n%CA{>R%164zEphKt%HB=cFwg_S1b1^>vouPu*CD@hr+Y>X{*0yXR>T4 zXNbo3GtCr~uM#kIbIEd`o~)9(+2!TF%?cvi!-CCh4J?q|#5!)lliCT8E!ADl`jK&K zro2@`*L^m0OSU~zi*V=b8zpDUTI(JjR^(DKIF!NsI|Q;%`xi{CEES(|x)fL})OFtM znUAmyF3HzTf5vf)!6l5-?gkOpgd8*QQmT>;;o3RzKH{02Ut14TyUyc33yw%&&*%^TI=?*bUm5BPjDV9NZ<|eh9%g67q>4)26A2&`)sN?pY&PB zuGt&`)qrP8?$sNGd3{))_A=|OfV7)f;Sgne-C@I2DpD3o*R7A(@rXv&?(&sCs!$uG zT7%fJEizC^79T4bqmcbEs_B>BR&O^xt31A0%xfq$<9xvqHYVq|pGZv%KRr%C7%RL1 zq?t|aJkDnQz*OLp%;!Uj$ma3yG_Ku|O^843y>*XBlA4GAw45HXX7A9`pe@JvWM%U; zlxZ88Oe$J%a*9r$>Mk-({d4PqA?wEU=Ju!nMmR-~rU!&VvD32gHV}J zLi~{#5(@5Ii5oNKQ{u+jj`YAz>!w+9^w!}cwQSLV=6)Pg1c9(kb)9}XXY7o0=M#|| zAA0Ue5Fy?@Sag!(d{#snjyXW%iQ6CQoSKJpG`9Ny%tyG6A2JIJ%* z*5pk@cAk-AVIi4Y7G}X#ds(FKVk;iK$1}7{hVYmVM_mOxaVLu^g$afixGp@q=_+FG zBHWhXrE2D-JZcNzTf+@tEQy3d5c3K_@t3LMUwL zt?I2n)I6G>=rQ08)P)qN2dfq3T4KMKIfIn7@~-k#Hz<2d^jlb|@vB*$Zi_{+z{bjsAK&XY9P%bbSbG*)o5jRN zQ!+GX9Uy0&rh?ySGf{jg+&`~f67glHkiXOpI0_HtHvqc1se4lG77kaH^hA>1*4N`HDXipNIlYW>#8TK7m^8|e;Z|JcVC_%7dp>(GuX zb@!`-_;exIey7n$eXAqQGBd;Gad^)^875}dj1J{DJ)&l6nyDu=r)@! zKS4s(mcalPtt~l5q_2Cll7R~aj8Sy7K}64Zd2q%sL}<88zC7~A9$1`U7x!AOy^h={f(fR<7W{=u~J zXg>DpT!YkYKTl5ELy7vDEDJM?cfHb6mGf~~SPAo=ZU5_Yr34b2{c*hbTs^Li*X^N6 zHjN!dmy3OcGe6&MVcrzGLlxH^GVF9c*swAdWOj1GSJtSR z-h19Cr3#2l>*if2=Jl8LqV$FEZD{jF(~4R((!Mp1ilv_0He$GVS_^Ij*9+V5^V{7P zN0u4{hDIllWfkA0(? zM6TV;wx_~#xY)EgtmK$)WwFfxPyjuj+Ih`;A&uD_bRP5)+Hr9)tq?Utd~@=&s@z;j zF7{dZ^@n$rijN7bI-w);QWV3~Yh(@=HRJniaTzgO4Yl2g!H%0LiGem^3zE!pGZ~-4m>;A3zz#+T zQ0J5+G^(`pM1x;;!WNc~x-Qketm?OPWXZj=FmT_Tf9{9!w-h#o*Od8v8k?pJMRFmZ|$XgZgxq{l{BqF{nFI+}0 z$o*kWz2S(kC%z+_RuFH8a91fVwiTJ??8>x{kNPF$x~B$Ks&m;lDu;Av8``}gAN5w8 zr&rx#Ex-nz=}J<2_d8YYm-YlBqeW5<)o3YsZ@Li&Z&b|ZWTsHdR5^@=bar^S!V_rG zTz+dMXRw}5&)@sLhwuDdgmlK0wo&P#vnktZuBTxZxv$Z=V+*doTSUp@Ps!Dgi#)TK z_!s@hOsFlr_PNGDxQi}T?;`}OVCO1(EJXxWM6p5o+@*YYdt_kQ#^__srz?ySv^66` z%s+n6Q~Dk^dQUXUz)G`fbmNbjZNoS2`pq|_-yImsm!AZypRaqYCQi(%S~jbnSJWE$ z_U%hIhjpb{r5GYaHq+7Q6#zic9c@cB2%T4w@UU$Zi>^&f8k&^2KW7~FTlj&OXl-)( zHps%b74Q10bn-_vH`|7AgXR22SN2hm*FRs+__?fBUJcpP zxrIF7HrSqpq@%kMt`01#p;c!UdI!|w_Z0@U=DHW(@^QcD!zMmY|M1=|+HmRp9HontEloIm-;~!vXi{YcmU-GK zuEUxT&PYvj(|zIX_XV65FUM=_bk5%QSEe&roXjP8nS1)a*gCSw;(GW+x4zTv@gJf! z!Tf_7hjLScgz5z&JBL%U)vU23+cv(3viGWIT>4K}E!EoHyZIifh>p!mP=@divH7M6 zUkxlujs4Ial?d$gk}zb_Rm#Erw%_v5*YNA>`tDafCa7m|wEVtiV7hha%Hw{i z`c2R^+4@C_e!69YQQ>++S&3%q1o`^iNGV}N&HY883~i?|KX_RQSK{wxcm;f6%AVG! z_)l5(p>xi%iKXvT-oAG`uLr^`YnI{Q4+G@k@Xr87c*~oVJe>SS(UXHbXT^*iM_g#Vkc$zva}Zz36A?``dD???l~AKr7cy+(&JCg_DB%a z=LSx_peH}&teM_#`TddePRNOC&*a;^X9rXFLX%6M)i>81I4HQGP$mo5MK%hM%L7}! zCJ9`LX=VM1*(C>`C7Mtv56T@5#?^XS2Kc6g)3O@JZq(Ndk|G!!wl@m8+%bF%%)mZYsx{fqrq|($o7p<)5tXIRg zly~pz80v@X>GNgy%86N;^v>^u2uJlI#hT`snq~rQUVOcqh*ay`aHcE1yc{DawcR3< zv10*;|G8bV#78faxctgbh%NHK7VKhaxkhHFjhyXk@VGK)D(pSyP6%qygm~ueC$u`hCTs&$ox3#;_c1{a7b;%Y}MA7@PHeyb^z2M`2zzLX)1L%D7g2 zi@x8}!T^*O?+<}HT35PxGPG1vCa(Z{EG8)1JH0G$xNRRhW%a>z#+QAesV!`TFx##D zZLg`kp(NTQ^(;{-g$X+O02UR7#TCyrkLKVHjFzb&o%vnVE88A5)3afxr#M6S$Hv)j zieviR)<`)}R~{qWOdGuC`$|>=XN?QNaYy@uV#-s}hbsf|hvY|FX})L2$3)1>33Fny zBcQ}{cMK;%%tQBRq2PeZqW})5sl@7UD}5l0aVEVsoP{GA;&yuM^<=?MW8odFLRDny zrBM+dt)4Q$M-#L>YfC5+&AoRM;PPdub~-g=yw%DAk?&HkJQq83-CTR#_TF6+(Qz4% z_iT#o+FFl$z6ElJ&r2+lsjkU%Bz43}d!`z0F9ej(>&toQv2%wjw(>n?4C@)!u|YB` z!xIXw7K3aazS?|89l*Q5`BTA!K49-z3Bw~Q_GzOSlF|u-z9zGmYnB2^O%~@VPR%J! zBg9KQ%p%&Qw>@XqO@uoKXr#yH3&R?43u^ga>!Mmgq1clVk%U`$55Xy}$HI-T z)Q=}JI`PNfK|w0xs_dn%QH{+bLSxYVX|h-GLTQA5>+*8=#AK7wmYy8VpSRlC;Npqf zg3Af-AQ`r8Ahk8Q^BA4}jQcUJ(7T#Sl#AtU;>c@3zq_lSYHXZ#9!$?XhHq0Kwo*-Q z>#glCein7u0s;qezWppBXESHC4C|rBW6=^Bv&OJx-mm6)M`{&$Bw<}v@N-w=F|7w-W;cF| z8&Roj)x(>@E=TEVi%u;Z;-RXya$hhDU$oiv>6}Nt`cdXz6y0L@*e^e@+XW>V|b^}t=f$q{Pc{6 ztA3jpU#i8w5z(1rw{>ti^KhQj?XC&sky3ih>5{3)z4J&zVK=*Z4FiLCF*KTOZ;WQo2-LKx z39apKI$U?j413x^F3pT%gMCHUv<&F5bwIIoba^HV0|Vz!<$>&zqo?$j2a@37Fz&Fx zzLC4xpDm7cI61JFd(XEsZOpt27TS2AEN^PndMK}8XZM)WbEa}i@-Dl;`UV+G@}blPzvhK=G@Ethf2?}$#?5O-z! zg`5ABXZ$5~;A`jfp=vbM4(ofq%;dN^4{k*@H`k>@c zutbm}(f*S1gxBD3XgaV>;DMNb#I2(x%I`dO_uoHN8}XQPk~}9cNmmNKu+7kTGNDlZ zr%c67g_qmvlwZ44s(?({a0VEg`k!AceGB%ls5^tCeztXy-boRr{OHtE&ey_g7A^S= zjO32$+O93iFD35uo7@McDgIix_?Fc26@@! zxp6Fw_fEwv*?Xc=u;li?9Sg)jsv^>WAw0eE%cXC?*aPWeX;gaM{^m?SsBc=u(zQkY ztE?}3Gf<%=P+@r9iOUZm3OSe{Q3BQ#!3HuVamuA**d#}F0)uZfgoa=m`X~Q3@# Date: Mon, 2 Oct 2023 11:33:08 -0500 Subject: [PATCH 24/67] Update miscellaneous.md --- docs/ai-testbed/cerebras/miscellaneous.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/ai-testbed/cerebras/miscellaneous.md b/docs/ai-testbed/cerebras/miscellaneous.md index b7ccf7ff8..66becfcd1 100644 --- a/docs/ai-testbed/cerebras/miscellaneous.md +++ b/docs/ai-testbed/cerebras/miscellaneous.md @@ -26,9 +26,10 @@ Download the Grafana certificate present on the Cerebras node at /opt/cerebras/c 1. On chrome, go to Settings->Privacy and security->Security->Manage device certificates 2. Select System under "System Keychains" on the left hand side of your screen. Also select the "Certificate" tab. 3. Drag and drop the downloaded certificate. Once it is added, it is visible as "lab.alcf.anl.gov" + ![Cerebras Wafer-Scale Cluster connection diagram](files/grafana_ctl.png) 4. Select the certificate, and ensure that the "Trust" section is set to "Always Trust" + ![Cerebras Wafer-Scale Cluster connection diagram](files/Trust_ctl.png) -![Cerebras Wafer-Scale Cluster connection diagram](files/grafana_ctl.png) On your work machine with a web browser, e.g. your laptop,
tunnel the grafana https port on the cerebras grafana host through to localhost From b9c009bb0e75980d2596f2ddefc2db002a8e14f6 Mon Sep 17 00:00:00 2001 From: jfrancis-anl Date: Tue, 3 Oct 2023 14:25:26 -0500 Subject: [PATCH 25/67] Updated Polaris docs to include Slingshot upgrade info --- docs/polaris/running-jobs.md | 59 ++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/docs/polaris/running-jobs.md b/docs/polaris/running-jobs.md index c23d38677..b0e6a2d9f 100644 --- a/docs/polaris/running-jobs.md +++ b/docs/polaris/running-jobs.md @@ -2,15 +2,42 @@ # Running Jobs on Polaris ## Queues + +***SLINGSHOT 11 Upgrade: The upgrade will take place in three phases, with each phase taking place during one of the normally scheduled maintenance periods. During this time, there will be an additional queue, `ss11`. This queue will contain compute nodes that have been upgraded to Slingshot 11. The compute nodes in the `prod` queue will contain the Slingshot 10 nodes. The number of nodes in the `prod` queue will dwindle with each maintenance until all computes nodes have been upgraded to Slingshot 11. Once all compute nodes have been upgraded, the `prod` queue will once again have 496 nodes and the `ss11` queue will be removed.*** + +***ATTENTION: From October 16th through November 13th, the Polaris nodes will be upgraded in 'chunks' to Slingshot 11. This will affect the prod queue sizes. Please read about the changes to the queues below.*** + +******* + There are five production queues you can target in your qsub (`-q `): -| Queue Name | Node Min | Node Max | Time Min | Time Max | Notes | -|---------------|----------|----------|----------|----------|-----------------------------------------------------------------------------| -| debug | 1 | 2 | 5 min | 1 hr | max 8 nodes in use by this queue ay any given time | -| debug-scaling | 1 | 10 | 5 min | 1 hr | max 1 job running/accruing/queued **per-user** | -| prod | 10 | 496 | 5 min | 24 hrs | Routing queue; See below | -| preemptable | 1 | 10 | 5 min | 72 hrs | max 20 jobs running/accruing/queued **per-project**; see note below | -| demand | 1 | 56 | 5 min | 1 hr | ***By request only***; max 100 jobs running/accruing/queued **per-project** | +| Queue Name | Node Min | Node Max | Time Min | Time Max | Notes | +|--------------------------------|----------|----------------------------|----------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| debug | 1 | 2 | 5 min | 1 hr | max 8 nodes in use by this queue ay any given time | +| debug-scaling | 1 | 10 | 5 min | 1 hr | max 1 job running/accruing/queued **per-user** | +| prod | 10 | 216-496 **see table below* | 5 min | 24 hrs | Routing queue; See below | +| ss11 (available Oct 16-Nov 13) | 1 | 112-280 **see table below* | 5 min | 24 hrs | Temporary Slingshot 11 queue for newly upgraded compute nodes; max 1 job running, and 1 job queued **per user**; ***This queue will no longer be available after Nov 13th, at which time all nodes will be upgraded and returned to the prod queue*** | +| preemptable | 1 | 10 | 5 min | 72 hrs | max 20 jobs running/accruing/queued **per-project**; see note below | +| demand | 1 | 56 | 5 min | 1 hr | ***By request only***; max 100 jobs running/accruing/queued **per-project** | + +******* + +***The `demand` and `preemtable` queues will be upgraded to Slingshot 11 on October 16th.*** + +***The `debug` and `debug-scaling` queues will remain at Slingshot 10 until Nov. 13th, at which time they will be upgraded to Slingshot 11.*** + +***The prod queue and Slingshot 11 (`ss11`) queue sizes will have the following max node counts during the upgrade period:*** + +| Number of nodes in: | prod queue (Slingshot 10) | prod queue (Slingshot 11) | ss11 queue (Slightshot 11) | +|----------------------|---------------------------|---------------------------|----------------------------| +| Now through Oct 16th | 496 | 0 | 0 | +| Oct 16th - Oct 30th | 384 | 0 | 112 | +| Oct 30th - Nov 13th | 216 | 0 | 280 | +| Nov 13th and onward | 0 | 496 | N/A | + +***PBS "`insufficient resource`" ERROR: If you do not account for this change in maximum job size in your job submissions you could have jobs that sit in the queue for four weeks with a comment of “`insufficient resources`”. Once we come out of the maintenance on Nov 13th they would run.*** + +****** **Note:** Jobs in the demand queue take priority over jobs in the preemptable queue. This means jobs in the preemptable queue may be preempted (killed without any warning) if there are jobs in the demand queue. @@ -18,16 +45,16 @@ Please use the following command to view details of a queue: ```qstat -Qf Date: Mon, 9 Oct 2023 14:57:38 -0500 Subject: [PATCH 26/67] Update miscellaneous.md --- docs/ai-testbed/cerebras/miscellaneous.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/ai-testbed/cerebras/miscellaneous.md b/docs/ai-testbed/cerebras/miscellaneous.md index 66becfcd1..d7a0751d3 100644 --- a/docs/ai-testbed/cerebras/miscellaneous.md +++ b/docs/ai-testbed/cerebras/miscellaneous.md @@ -6,6 +6,7 @@ Cerebras documentation for porting code to run on a Cerebras CS-2 system:
[Ways to port your model](https://docs.cerebras.net/en/latest/wsc/port/index.html) ## Grafana WsJob Dashboard for Cerebras jobs +A Grafana dashboard provides support for visualizing, querying, and exploring the CS2 system’s metrics and enables to access system logs and traces. See the Cerebras documentation for the [Job Information Dashboard](https://docs.cerebras.net/en/latest/wsc/getting-started/grafana.html#wsjob-dashboard) Here is a summary (tested to work on Ubuntu and MacOS)
From 4c3a15aa334570bd83c344af5c86d6278a2872fc Mon Sep 17 00:00:00 2001 From: Abhishek Bagusetty <59661409+abagusetty@users.noreply.github.com> Date: Wed, 11 Oct 2023 11:38:10 -0500 Subject: [PATCH 27/67] [Math-libs] Update documentation for Math Libraries (#272) * [Math-libs] Update documentation for Math Libraries * Update math-libraries.md Address PR comments --- .../applications-and-libraries/libraries/math-libraries.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/polaris/applications-and-libraries/libraries/math-libraries.md b/docs/polaris/applications-and-libraries/libraries/math-libraries.md index b9cff78d9..ab263d021 100644 --- a/docs/polaris/applications-and-libraries/libraries/math-libraries.md +++ b/docs/polaris/applications-and-libraries/libraries/math-libraries.md @@ -6,9 +6,10 @@ Some math libraries targeting CPUs are made available as part of the `nvhpc` mod - BLAS & LAPACK can be found in the `$NVIDIA_PATH/compilers/lib` directory. - ScaLAPACK can be found in the `$NVIDIA_PATH/comm_libs` directory. - +- GNU Scientific Library, [GSL-2.7](https://www.gnu.org/software/gsl/) available as `module help gsl` +- AMD Optiming CPU Libraries, [AOCL v4.0](https://www.amd.com/en/developer/aocl.html) available as `module help aocl` +- Other Cray-based math libs such as Libsci, FFTW were made available by `module load cray-libsci` & `module load cray-fftw` [//]: # (ToDo: Need to test if these libraries are usable by gfortran, otherwise we need something compatible; AOCL might be solution) -[//]: # (ToDo: Add some pointers for AOCL when Abhishek gets it installed) ## NVIDIA Math Libraries for GPUs From 9d7844edc18b9cc2a07583b3818e61215c39d97c Mon Sep 17 00:00:00 2001 From: Jini Ramprakash Date: Wed, 11 Oct 2023 11:46:09 -0500 Subject: [PATCH 28/67] Update alcf-acknowledgement-policy.md Updating per ANL librarian guidelines. --- docs/policies/alcf-acknowledgement-policy.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/policies/alcf-acknowledgement-policy.md b/docs/policies/alcf-acknowledgement-policy.md index ab7d94cf9..69e2e5732 100644 --- a/docs/policies/alcf-acknowledgement-policy.md +++ b/docs/policies/alcf-acknowledgement-policy.md @@ -8,11 +8,17 @@ To publish technical reports and research papers using the ALCF AI testbeds, we For guidance on acknowledgements, please see the following sample policies: -## ALCF Only Acknowledgement -This research used resources of the Argonne Leadership Computing Facility, which is a U.S. Department of Energy Office of Science User Facility supported under Contract DE-AC02-06CH11357. +## ALCF Only Acknowledgement. +Users, and ALCF staff scientists without direct project funding, should acknowledge the ALCF in all publications and presentations that speak to work performed on ALCF resources. -## INCITE/ALCF Acknowledgement -An award of computer time was provided by the Innovative and Novel Computational Impact on Theory and Experiment (INCITE) program. This research used resources of the Argonne Leadership Computing Facility, which is a U.S. Department of Energy Office of Science User Facility supported under Contract DE-AC02-06CH11357. +This research used resources of the Argonne Leadership Computing Facility, a U.S. Department of Energy (DOE) Office of Science user facility at Argonne National Laboratory and is based on research supported by the U.S. DOE Office of Science-Advanced Scientific Computing Research Program, under Contract No. DE-AC02-06CH11357. -## INCITE/ALCF/OLCF Acknowledgement -An award of computer time was provided by the Innovative and Novel Computational Impact on Theory and Experiment (INCITE) program. This research used resources of the Argonne Leadership Computing Facility, which is a U.S. Department of Energy Office of Science User Facility supported under contract DE-AC02-06CH11357. This research also used resources of the Oak Ridge Leadership Computing Facility, which is a U.S. Department of Energy Office of Science User Facility supported under Contract DE-AC05-00OR22725. +## INCITE/ALCF Acknowledgement. +Users should acknowledge the ALCF in all publications and presentations that speak to INCITE work performed on ALCF resources. + +An award for computer time was provided by the U.S. Department of Energy’s (DOE) Innovative and Novel Computational Impact on Theory and Experiment (INCITE) Program. This research used resources from the Argonne Leadership Computing Facility, a U.S. DOE Office of Science user facility at Argonne National Laboratory, which is supported by the Office of Science of the U.S. DOE under Contract No. DE-AC02-06CH11357. + +## INCITE/ALCF/OLCF Acknowledgement. +Users should acknowledge the ALCF and OLCF in all publications and presentations that speak to INCITE work performed on ALCF and OLCF resources. + +An award for computer time was provided by the U.S. Department of Energy’s (DOE) Innovative and Novel Computational Impact on Theory and Experiment (INCITE) Program. This research used supporting resources at the Argonne and the Oak Ridge Leadership Computing Facilities. The Argonne Leadership Computing Facility at Argonne National Laboratory is supported by the Office of Science of the U.S. DOE under Contract No. DE-AC02-06CH11357. The Oak Ridge Leadership Computing Facility at the Oak Ridge National Laboratory is supported by the Office of Science of the U.S. DOE under Contract No. DE-AC05-00OR22725. From 9b21920554bcacd58010fff7b03cb05db47eb135 Mon Sep 17 00:00:00 2001 From: Avanthi Madduri <84808772+mantrala-ops@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:48:44 -0500 Subject: [PATCH 29/67] Updated theta-decommissioning.md replacing grand with "eagle" Updated theta-decommissioning.md page replacing grand filesystem with "eagle" filesystem --- docs/theta/theta-decommissioning.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/theta/theta-decommissioning.md b/docs/theta/theta-decommissioning.md index a37687a16..b2a751abd 100644 --- a/docs/theta/theta-decommissioning.md +++ b/docs/theta/theta-decommissioning.md @@ -8,7 +8,7 @@ Theta and Theta-fs0 will be retired at the end of calendar year 2023. ThetaGPU ## For Theta-fs0: -**Step 1:** Update your scripts/workflows to switch all uses of theta-fs0 to the Grand filesystem as soon as possible. Data allocations on Grand will be provided. +**Step 1:** Update your scripts/workflows to switch all uses of theta-fs0 to the eagle filesystem as soon as possible. Data allocations on eagle will be provided. **NOTE:** theta-fs0 will be mounted read-only on 10/30/2023 and will no longer be available starting 01/01/2024. Any jobs attempting to write to theta-fs0 on 10/30/2023 or later will fail. From 4dccedbd61e7994c7099252b30f0734e0685fdd1 Mon Sep 17 00:00:00 2001 From: Avanthi Madduri <84808772+mantrala-ops@users.noreply.github.com> Date: Thu, 12 Oct 2023 13:58:31 -0500 Subject: [PATCH 30/67] Updated the docs to reflect the changed SS11 upgrade dates Updated the docs to reflect the changed SS11 upgrade dates --- docs/polaris/running-jobs.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/polaris/running-jobs.md b/docs/polaris/running-jobs.md index b0e6a2d9f..a78cdc6a4 100644 --- a/docs/polaris/running-jobs.md +++ b/docs/polaris/running-jobs.md @@ -5,7 +5,7 @@ ***SLINGSHOT 11 Upgrade: The upgrade will take place in three phases, with each phase taking place during one of the normally scheduled maintenance periods. During this time, there will be an additional queue, `ss11`. This queue will contain compute nodes that have been upgraded to Slingshot 11. The compute nodes in the `prod` queue will contain the Slingshot 10 nodes. The number of nodes in the `prod` queue will dwindle with each maintenance until all computes nodes have been upgraded to Slingshot 11. Once all compute nodes have been upgraded, the `prod` queue will once again have 496 nodes and the `ss11` queue will be removed.*** -***ATTENTION: From October 16th through November 13th, the Polaris nodes will be upgraded in 'chunks' to Slingshot 11. This will affect the prod queue sizes. Please read about the changes to the queues below.*** +***ATTENTION: From October 30th through November 13th, the Polaris nodes will be upgraded in ‘chunks’ to Slingshot 11. This will affect the prod queue sizes. Please read about the changes to the queues below.*** ******* @@ -30,9 +30,9 @@ There are five production queues you can target in your qsub (`-q `) | Number of nodes in: | prod queue (Slingshot 10) | prod queue (Slingshot 11) | ss11 queue (Slightshot 11) | |----------------------|---------------------------|---------------------------|----------------------------| -| Now through Oct 16th | 496 | 0 | 0 | -| Oct 16th - Oct 30th | 384 | 0 | 112 | -| Oct 30th - Nov 13th | 216 | 0 | 280 | +| Now through Oct 30th | 496 | 0 | 0 | +| Oct 30th - Nov 6th | 384 | 0 | 112 | +| Nov 6th - Nov 13th | 216 | 0 | 280 | | Nov 13th and onward | 0 | 496 | N/A | ***PBS "`insufficient resource`" ERROR: If you do not account for this change in maximum job size in your job submissions you could have jobs that sit in the queue for four weeks with a comment of “`insufficient resources`”. Once we come out of the maintenance on Nov 13th they would run.*** From 6471844ea6bc38a9d4e675115448bd9ddc2b1773 Mon Sep 17 00:00:00 2001 From: Avanthi Madduri <84808772+mantrala-ops@users.noreply.github.com> Date: Thu, 12 Oct 2023 14:50:11 -0500 Subject: [PATCH 31/67] made a change to the SS11 info made a change to the SS11 info --- docs/polaris/running-jobs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/polaris/running-jobs.md b/docs/polaris/running-jobs.md index a78cdc6a4..6309da9a6 100644 --- a/docs/polaris/running-jobs.md +++ b/docs/polaris/running-jobs.md @@ -22,7 +22,7 @@ There are five production queues you can target in your qsub (`-q `) ******* -***The `demand` and `preemtable` queues will be upgraded to Slingshot 11 on October 16th.*** +***The `demand` and `preemtable` queues will be upgraded to Slingshot 11 on October 30th.*** ***The `debug` and `debug-scaling` queues will remain at Slingshot 10 until Nov. 13th, at which time they will be upgraded to Slingshot 11.*** From 7bc798df32189a815e805ebdbf3739f2cfa7e79e Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Fri, 13 Oct 2023 16:57:35 -0400 Subject: [PATCH 32/67] remove --user from pip install command lines --- docs/ai-testbed/groq/running-a-model-or-program.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index 6791d05e5..42c2dd492 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -36,7 +36,7 @@ cd groqflow Create a groqflow conda environment, and activate it.
Note: Similar install instructions are in `~/groqflow/docs/install.md` or [GroqFlow™ Installation Guide](https://github.com/groq/groqflow/blob/main/docs/install.md)
-The conda enviroment should be reinstalled whenever new groqflow code is pulled from the groqflow github; redo just the pip install steps. +The conda enviroment should be reinstalled whenever new groqflow code is pulled from the groqflow github; with a groqflow conda environment activated, redo just the pip install steps. #### Install conda If conda is not already installed: @@ -51,7 +51,7 @@ exit #### Create and activate a groqflow conda environment Create a groqflow conda environment and activate it ```bash -export PYTHON_VERSION=3.8.13 +export PYTHON_VERSION=3.10.12 conda create -n groqflow python=$PYTHON_VERSION conda activate groqflow ``` @@ -62,10 +62,10 @@ Execute the following commands to install groqflow into the activated groqflow c # Alter this if you have cloned groqflow to some other location. cd ~/groqflow pip install --upgrade pip -pip install -e . --user +pip install -e . pushd . cd demo_helpers -pip install -e . --user +pip install -e . popd ``` @@ -84,6 +84,7 @@ Each groqflow sample directory in the `~/groqflow/proof_points` tree has a READM conda activate groqflow ``` #### Run a sample +This shows execution of the ```bash cd ~/groqflow/proof_points/natural_language_processing/minilm pip install -r requirements.txt @@ -113,10 +114,10 @@ python minilmv2.py (4) install groqflow - pip install --upgrade pip - pip install tqdm #[NOT SURE THIS IS NEEDED] ETA NOT NEEDED! Already installed. -- pip install -e . --user +- pip install -e . - pushd . - cd demo_helpers -- pip install -e . --user +- pip install -e . - popd ---> From ac9657eb6ff330c8df0f27a7b50b77c293abcede Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Mon, 16 Oct 2023 14:16:35 -0500 Subject: [PATCH 33/67] Update getting-started.md --- docs/ai-testbed/groq/getting-started.md | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/docs/ai-testbed/groq/getting-started.md b/docs/ai-testbed/groq/getting-started.md index 49be5cf33..bd58764e6 100644 --- a/docs/ai-testbed/groq/getting-started.md +++ b/docs/ai-testbed/groq/getting-started.md @@ -1,11 +1,11 @@ # Getting Started -## Allocations + ## Accounts @@ -15,27 +15,15 @@ If you do not have an ALCF account, request one here: [https://accounts.alcf.anl Connection to a Groq node is a two-step process. -### Log in to a homes node +### Log in to a login node The first step is to ssh from a local machine to the login node. -Follow the instructions here to access GCE login nodes: [https://help.cels.anl.gov/docs/linux/ssh/](https://help.cels.anl.gov/docs/linux/ssh/) -If you have not already done so, you will need to create a ssh key pair and add ONLY the public key to your cels account at [https://accounts.cels.anl.gov](https://accounts.cels.anl.gov). Key type ed25519 is preferred, but not required. - Verify that this full ssh command works, after editing it to use your argonne username: ```bash -ssh -J yourargonneusername@logins.cels.anl.gov yourargonneusername@homes.cels.anl.gov -``` -You can shorten the command line by adding the following to your `~/.ssh/config`, edited to use your argonne username. -```console -Host *.cels.anl.gov !logins.cels.anl.gov -ProxyJump yourargonneusername@logins.cels.anl.gov +ssh yourargonneusername@groq.ai.alcf.anl.gov ``` -Then this should work. -```bash -ssh yourargonneusername@homes.cels.anl.gov -``` You will automatically be logged in if you have done this before. Use the ssh "-v" switch to debug ssh problems. @@ -43,9 +31,9 @@ the ssh "-v" switch to debug ssh problems. TODO diagram here. -### Log in to a Graphcore Node +### Log in to a Groq compute node -Once you are on a homes node, ssh to one of the Groqrack nodes, which are numbered 1-9. +Once you are on a login node, ssh to one of the Groqrack nodes, which are numbered 1-9. ```bash ssh groq-r01-gn-01.ai.alcf.anl.gov From a783225f38f2b9494a64c6d94869c1986edc5c4e Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Mon, 16 Oct 2023 14:18:54 -0500 Subject: [PATCH 34/67] Update getting-started.md --- docs/ai-testbed/groq/getting-started.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/ai-testbed/groq/getting-started.md b/docs/ai-testbed/groq/getting-started.md index bd58764e6..ea8160a7e 100644 --- a/docs/ai-testbed/groq/getting-started.md +++ b/docs/ai-testbed/groq/getting-started.md @@ -23,10 +23,7 @@ Verify that this full ssh command works, after editing it to use your argonne us ```bash ssh yourargonneusername@groq.ai.alcf.anl.gov ``` - - -You will automatically be logged in if you have done this before. Use -the ssh "-v" switch to debug ssh problems. +This randomly selects one of the login nodes, namely `groq-login-01.ai.alcf.anl.gov` or `groq-login-02.ai.alcf.anl.gov`. You can alternatively ssh to the specific login nodes directly. TODO diagram here. From 9f0c2fb6afed1888552b84bfcc30642de1b78b4f Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 16 Oct 2023 15:45:57 -0400 Subject: [PATCH 35/67] add instructions for running a job script using PBS. --- .../groq/running-a-model-or-program.md | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index 42c2dd492..e12f60aba 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -84,14 +84,40 @@ Each groqflow sample directory in the `~/groqflow/proof_points` tree has a READM conda activate groqflow ``` #### Run a sample -This shows execution of the +Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was alloed to add it. ```bash +#!/bin/bash +# >>> conda initialize >>> +# !! Contents within this block are managed by 'conda init' !! +__conda_setup="$(${HOME}'/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" +if [ $? -eq 0 ]; then + eval "$__conda_setup" +else + if [ -f "${HOME}/miniconda3/etc/profile.d/conda.sh" ]; then + . "${HOME}/miniconda3/etc/profile.d/conda.sh" + else + export PATH="${HOME}/miniconda3/bin:$PATH" + fi +fi +unset __conda_setup +# <<< conda initialize <<< +conda activate groqflow cd ~/groqflow/proof_points/natural_language_processing/minilm pip install -r requirements.txt python minilmv2.py ``` +Then run the script as a batch job with PBS: +```bash +qsub run_minilmv2.sh +``` +Output will by default go to two files with names like the following, where the suffix is the job id. One standard output for the job. The other is the standard error for the job. +```console +$ ls run_minilmv2.sh.* +-rw------- 1 user users 448 Oct 16 18:40 run_minilmv2.sh.e3082 +-rw------- 1 user users 50473 Oct 16 18:42 run_minilmv2.sh.o3082 +``` +If you do not already have an allocation, you will need to request one here: +[https://accounts.alcf.anl.gov/#/allocationRequests](https://accounts.alcf.anl.gov/#/allocationRequests) ## Accounts -If you do not have an ALCF account, request one here: [https://accounts.alcf.anl.gov/#/home](ALCF Account and Project Management) +If you do not have an ALCF account (but have an allocation), request one here: [https://accounts.alcf.anl.gov/#/home](ALCF Account and Project Management) ## Setup @@ -25,8 +23,10 @@ ssh yourargonneusername@groq.ai.alcf.anl.gov ``` This randomly selects one of the login nodes, namely `groq-login-01.ai.alcf.anl.gov` or `groq-login-02.ai.alcf.anl.gov`. You can alternatively ssh to the specific login nodes directly. + + +![Graphcore System View](files/graphcore_login.png "Graphcore System View") ---> ### Log in to a Groq compute node From c96b8c5be8e05b27cbf218013c0137b13fd82063 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Mon, 16 Oct 2023 16:01:25 -0500 Subject: [PATCH 38/67] Update running-a-model-or-program.md --- docs/ai-testbed/groq/running-a-model-or-program.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index b5d6854a0..9138ad13e 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -84,7 +84,7 @@ Each groqflow sample directory in the `~/groqflow/proof_points` tree has a READM conda activate groqflow ``` #### Run a sample -Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was alloed to add it. +Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was allwoed to add it. ```bash #!/bin/bash # >>> conda initialize >>> From 274d934590fa3588855be6c956573afe73251b57 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 16 Oct 2023 17:04:51 -0400 Subject: [PATCH 39/67] add alternative of commenting out part of .bashrc that makes it do nothing if not interactive --- .../groq/running-a-model-or-program.md | 52 ++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index b5d6854a0..493af0b90 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -1,9 +1,5 @@ # Running a Model/Program -## Job submission and queuing - -Groq jobs in the AI Testbed's groqrack are currently not managed by a job scheduler. [PBS](https://en.wikipedia.org/wiki/Portable_Batch_System)-based job scheduling is under development. - ## Login nodes Jobs are launched from any groq node.
@@ -76,6 +72,24 @@ conda activate groqflow Alternative, the activation command can be put in .bashrc. Note: Always use a personal conda environment when installing packages on groq nodes; otherwise they can get installed into ~/.local and can cause problems when your shared home directory is used on other systems. +### Job submission and queuing + +Groq jobs in the AI Testbed's groqrack are managed by the PBS job scheduler.
+Overview: [PBS](https://en.wikipedia.org/wiki/Portable_Batch_System) +For additional information, see +[https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/](https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/) +Man pages are available: +```console +# qsub - to submit a batch job to the specified queue using a script +man qsub +# qstat - to display queue information +man qstat +# qdel - to delete (cancel) a job: +man qdel +# qhold - to hold a job +man qhold +``` + ### Running a groqflow sample Each groqflow sample directory in the `~/groqflow/proof_points` tree has a README.md describing the sample and how to run it. @@ -83,8 +97,9 @@ Each groqflow sample directory in the `~/groqflow/proof_points` tree has a READM ```console conda activate groqflow ``` -#### Run a sample -Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was alloed to add it. + +#### Run a sample using PBS +Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was allowed to add it. ```bash #!/bin/bash # >>> conda initialize >>> @@ -112,6 +127,31 @@ Then run the script as a batch job with PBS: qsub run_minilmv2.sh ``` +If your `~/.bashrc` initializes conda, an alternative to copying the conda initilization script into your execution scripts is to comment out this section in your "~/.bashrc": +```bash +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac +``` +to +```bash +## If not running interactively, don't do anything +#case $- in +# *i*) ;; +# *) return;; +#esac +``` +Then the execution script becomes: +```bash +#!/bin/bash +conda activate groqflow +cd ~/groqflow/proof_points/natural_language_processing/minilm +pip install -r requirements.txt +python minilmv2.py +``` + Job status can be tracked with qstat: ```console $ qstat From 2b0c34cc34ca360371c49289292018bce780e1a1 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Mon, 16 Oct 2023 16:05:21 -0500 Subject: [PATCH 40/67] Update running-a-model-or-program.md --- docs/ai-testbed/groq/running-a-model-or-program.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index 9138ad13e..295823402 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -84,7 +84,7 @@ Each groqflow sample directory in the `~/groqflow/proof_points` tree has a READM conda activate groqflow ``` #### Run a sample -Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was allwoed to add it. +Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was allowed to add it. ```bash #!/bin/bash # >>> conda initialize >>> From f67006eb4e822e60059b3041cacdfa6561f98e09 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 16 Oct 2023 17:13:47 -0400 Subject: [PATCH 41/67] add a line break --- docs/ai-testbed/groq/running-a-model-or-program.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index ba450e1c3..c3f1e0b39 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -77,7 +77,7 @@ Note: Always use a personal conda environment when installing packages on groq n Groq jobs in the AI Testbed's groqrack are managed by the PBS job scheduler.
Overview: [PBS](https://en.wikipedia.org/wiki/Portable_Batch_System) For additional information, see -[https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/](https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/) +[https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/](https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/)
Man pages are available: ```console # qsub - to submit a batch job to the specified queue using a script From 77593e7d8b6f947f7ace10d2c56ca87b52465fea Mon Sep 17 00:00:00 2001 From: Jini Ramprakash Date: Mon, 16 Oct 2023 20:48:28 -0500 Subject: [PATCH 42/67] Update alcf-acknowledgement-policy.md --- docs/policies/alcf-acknowledgement-policy.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/policies/alcf-acknowledgement-policy.md b/docs/policies/alcf-acknowledgement-policy.md index 69e2e5732..a0eeae8b2 100644 --- a/docs/policies/alcf-acknowledgement-policy.md +++ b/docs/policies/alcf-acknowledgement-policy.md @@ -8,17 +8,17 @@ To publish technical reports and research papers using the ALCF AI testbeds, we For guidance on acknowledgements, please see the following sample policies: -## ALCF Only Acknowledgement. +## ALCF Only Acknowledgement Users, and ALCF staff scientists without direct project funding, should acknowledge the ALCF in all publications and presentations that speak to work performed on ALCF resources. This research used resources of the Argonne Leadership Computing Facility, a U.S. Department of Energy (DOE) Office of Science user facility at Argonne National Laboratory and is based on research supported by the U.S. DOE Office of Science-Advanced Scientific Computing Research Program, under Contract No. DE-AC02-06CH11357. -## INCITE/ALCF Acknowledgement. +## INCITE/ALCF Acknowledgement Users should acknowledge the ALCF in all publications and presentations that speak to INCITE work performed on ALCF resources. An award for computer time was provided by the U.S. Department of Energy’s (DOE) Innovative and Novel Computational Impact on Theory and Experiment (INCITE) Program. This research used resources from the Argonne Leadership Computing Facility, a U.S. DOE Office of Science user facility at Argonne National Laboratory, which is supported by the Office of Science of the U.S. DOE under Contract No. DE-AC02-06CH11357. -## INCITE/ALCF/OLCF Acknowledgement. +## INCITE/ALCF/OLCF Acknowledgement Users should acknowledge the ALCF and OLCF in all publications and presentations that speak to INCITE work performed on ALCF and OLCF resources. An award for computer time was provided by the U.S. Department of Energy’s (DOE) Innovative and Novel Computational Impact on Theory and Experiment (INCITE) Program. This research used supporting resources at the Argonne and the Oak Ridge Leadership Computing Facilities. The Argonne Leadership Computing Facility at Argonne National Laboratory is supported by the Office of Science of the U.S. DOE under Contract No. DE-AC02-06CH11357. The Oak Ridge Leadership Computing Facility at the Oak Ridge National Laboratory is supported by the Office of Science of the U.S. DOE under Contract No. DE-AC05-00OR22725. From 1d22d32dbaa2f3a52b805857b7be92b7b3030223 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 16 Oct 2023 23:44:03 -0400 Subject: [PATCH 43/67] cleanup, put some links to spec sheets in the system overview page. --- docs/ai-testbed/groq/getting-started.md | 21 ++++---- .../groq/running-a-model-or-program.md | 52 ++++--------------- docs/ai-testbed/groq/system-overview.md | 7 ++- mkdocs.yml | 2 +- 4 files changed, 27 insertions(+), 55 deletions(-) diff --git a/docs/ai-testbed/groq/getting-started.md b/docs/ai-testbed/groq/getting-started.md index 367c18a8d..a61121e06 100644 --- a/docs/ai-testbed/groq/getting-started.md +++ b/docs/ai-testbed/groq/getting-started.md @@ -11,26 +11,25 @@ If you do not have an ALCF account (but have an allocation), request one here: [ ## Setup -Connection to a Groq node is a two-step process. +Connection to a GroqRack node is a two-step process. -### Log in to a login node +The first step is to ssh from a local machine to a login node. +The second, optional step is to ssh from a login node to a GroqRack node. Jobs may also be started and tracked from login nodes. + +![GroqRack System View](files/groqrack_system_diagram.png "GroqRack System View") -The first step is to ssh from a local machine to the login node. +### Log in to a login node -Verify that this full ssh command works, after editing it to use your argonne username: +Connect to a groq login node, editing this command line to use your ALCF user id. You will be prompted for a password; use the 8-digit code provided by MobilePASS+. ```bash -ssh yourargonneusername@groq.ai.alcf.anl.gov +ssh ALCFUserID@groq.ai.alcf.anl.gov ``` This randomly selects one of the login nodes, namely `groq-login-01.ai.alcf.anl.gov` or `groq-login-02.ai.alcf.anl.gov`. You can alternatively ssh to the specific login nodes directly. - - -### Log in to a Groq compute node +### Log in to a GroqRack node -Once you are on a login node, ssh to one of the Groqrack nodes, which are numbered 1-9. +Once you are on a login node, optionally ssh to one of the GroqRack nodes, which are numbered 1-9. ```bash ssh groq-r01-gn-01.ai.alcf.anl.gov diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index c3f1e0b39..366a51b9f 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -1,9 +1,7 @@ # Running a Model/Program -## Login nodes - -Jobs are launched from any groq node.
-If you expect a loss of an internet connection for any reason, for long-running jobs we suggest logging into a specific groq node and using either **screen** or **tmux** to create persistent command line sessions. For details use: +Jobs are launched from any GroqRack node, or from login nodes.
+If you expect a loss of an internet connection for any reason, for long-running jobs we suggest logging into a specific node and using either **screen** or **tmux** to create persistent command line sessions. For details use: ```bash man screen @@ -14,12 +12,12 @@ or online man pages: [screen](https://manpages.ubuntu.com/manpages/jammy/en/man1 ## Running jobs on Groq nodes -### Groqflow +### GroqFlow -Groqflow is the simplest way to port applications running inference to groq. The groqflow github repo includes many sample applications.
+GroqFlow is the simplest way to port applications running inference to groq. The groqflow github repo includes many sample applications.
See [GroqFlow](https://github.com/groq/groqflow/tree/main). -### Clone the Groqflow github repo +### Clone the GroqFlow github repo Clone the groqflow github repo and change current directory to the clone: ```bash @@ -28,7 +26,7 @@ git clone https://github.com/groq/groqflow.git cd groqflow ``` -### Groqflow conda environments +### GroqFlow conda environments Create a groqflow conda environment, and activate it.
Note: Similar install instructions are in `~/groqflow/docs/install.md` or [GroqFlow™ Installation Guide](https://github.com/groq/groqflow/blob/main/docs/install.md)
@@ -65,12 +63,11 @@ pip install -e . popd ``` -For any new ssh session, to use groqfloq, +To use groqfloq, ```bash conda activate groqflow ``` -Alternative, the activation command can be put in .bashrc. -Note: Always use a personal conda environment when installing packages on groq nodes; otherwise they can get installed into ~/.local and can cause problems when your shared home directory is used on other systems. +Note: Always use a personal conda environment when installing packages on groq nodes; otherwise they can get installed into ~/.local and can cause problems when your shared home directory is used on other systems. If you encounter mysterious package dependency/version issues, check your `~/.local/lib` and `~/.local/bin` for mistakenly installed packages. ### Job submission and queuing @@ -93,10 +90,11 @@ man qhold ### Running a groqflow sample Each groqflow sample directory in the `~/groqflow/proof_points` tree has a README.md describing the sample and how to run it. -#### Activate your Groqflow conda environment +#### Optionally activate your GroqFlow conda environment ```console conda activate groqflow ``` + #### Run a sample using PBS Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was allowed to add it. ```bash @@ -168,33 +166,3 @@ $ ls run_minilmv2.sh.* -rw------- 1 user users 50473 Oct 16 18:42 run_minilmv2.sh.o3082 ``` - - - - diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index 2a7ba8dbd..d21b33e03 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -1 +1,6 @@ -The GroqRack 42U compute cluster has 9 GroqNodes servers, 8 compute nodes named sequentially from groq-r01-gn-01 to groq-r01-gn-08 and 1 redudant node (groq-r01-gn-09). The node is Dual AMD based processor with 32 cores and a total of 64 threads. It includes a total of 1TB of DRAM. +The GroqRack 42U compute cluster has 9 GroqNode servers, 8 compute nodes named sequentially from groq-r01-gn-01 to groq-r01-gn-08 and 1 redudant node (groq-r01-gn-09). Each node has 2 AMD EPYCTM 7313 processors, a total of 1TB of DRAM, and 8 GroqCard accelerators, with integrated chip-to-chip connections. + +[GroqRack spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqRack%E2%84%A2-Compute-Cluster-Product-Brief-v1.0.pdf)
+[GroqNode spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqNode%E2%84%A2-Server-GN1-B8C-Product-Brief-v1.5.pdf)
+[GroqCard spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqCard%E2%84%A2-Accelerator-Product-Brief-v1.5-.pdf)
+([via](https://groq.com/docs/)) diff --git a/mkdocs.yml b/mkdocs.yml index 299d9e029..9cd1a1e5e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -246,7 +246,7 @@ nav: - SambaNova Documentation: ai-testbed/sambanova_gen2/documentation.md # - Performance Tools: ai-testbed/sambanova_gen2/performance-tools.md - Groq: - #- System Overview: ai-testbed/groq/system-overview.md + - System Overview: ai-testbed/groq/system-overview.md - Getting Started: ai-testbed/groq/getting-started.md - Running a Model/Program: ai-testbed/groq/running-a-model-or-program.md #- Example Programs: ai-testbed/groq/example-programs.md From 5dc30f0d0d8c2a3f8feacfc902aea901521bf826 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 16 Oct 2023 23:48:05 -0400 Subject: [PATCH 44/67] add system diagram --- .../groq/files/groqrack_system_diagram.png | Bin 0 -> 35502 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/ai-testbed/groq/files/groqrack_system_diagram.png diff --git a/docs/ai-testbed/groq/files/groqrack_system_diagram.png b/docs/ai-testbed/groq/files/groqrack_system_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..368828a703fd363e1b45b711a704408cc0a485ed GIT binary patch literal 35502 zcmce;V|=7tyDyk#)UoZPz4uuQ51iRD=@b01a94_)8x^WBkWSSkO>}9P9`hc=LJdK7mGx zFF81%L6*F(#S%0!Dx&8mbYwfMLS;S5=lXS;dAvXSo?!jS2+jL!s(Zgx1}|Fx_wOs< zfuO-#+~X1&8Q{!rl@?&(_)Zyal|+P_#lHk6)uG4k6eU!F2)jCGQDWkDpXQY8leA?Anp z8KPPSA4Yr+zI^UM*y~VaOr$ zhsVUZ-0z81seXjpVK>godY?;7_Dh4EKmgu?$E*5@TFNm5fnZhYjYBOU{#o|#;y#d>CIhKQp+@3qfy9PLGTb*OBTa*=Ev!77cf7mTY3;BP%Kz8FpC1Al8uwTR zuY6t~Qb*^o(36AU#}>9N7W8dbMlE`lQ?6W4`Q#SS3DTTc^a6F|^X=;|%6S@m^1 z1*}gU(s(-R@$nWGkbdmQ2#6IquV{V9*C2n>ULDL@-3m)oerROegEaRW7w2BAs>8U5 zk{Q99857Q|w3_C&9-U2ta`5y>MBoqg8mED?wa_D;U~;-mcH8PLbb_${x%7(hX^EMB z=L*JL{b`K-Qt^7UGyD;(0<=D}e0m-R(N0B^wVrP8#phcIJv4aFOjzunWYp2k`)S;r z-2n&om2NJDh=%O+2;|YCp_L=Hou)@@l-E@Tr-LNZ^RRek?$n0FY6?& z7#yUmbTi>NY!E*K1PO;jQrXY_L&n1$a`hK9Bj8uH_okf|!}|RER7R@ghFe^WSNm*m zqyFqiMbs52FXbTabjsyEhO-ajU3XGToXl#cYcm+xzIhcV!hT7XgHH${shM{Zfy-vb zYQZ0A3O2bn(f)gxNR0LUIE#(6^NW^B*pcLBeCv|l^7NNxL8jJlVyA?sw}vgHSntDQ zO(vZ`mMK5B>J>vq#KRJJVDL`38OjHXzPQb)#zy5Pyq>{TYR>JBo<4t_{^SeV!ZQ$J zdf;dEpv@VM0+-M*JK2yLO;!4Q)7>POu+-OqU=^Pa9cSg_hE**Uggs0|hl-0aGEaZd zaN;O87*>;Nht1}m8ElRS2scnEVA@T3wh@=tPPvq7!cqx4zTVGwuhEBm;O_3{ZM`UJ zN}Kwkdh4uYl+gf;8%7MTeqQTV#(w=RAcPK};^G-h0kFN6Ap@vdxm&-8G~N}Ug-+RW zpIkA_nAD$Vw3$;C76NCh z`IRv)gIDawW*0ATdw_78$>Pa`B}2bldWk#XXxycUVW;J1^^jvhm^Huz0UT&gVJi>B zqss+XYAOt!=|~RAnVn6~7oE^@_fC{oGPG|f4*`S*KbFY#XWXWcycMb~smjK)EjBB` zgcfqZ;H>hs*70AAhLIC$JFQ!;)SymStgNQW(_3nKsr4q=?GEqks35yFY8&RO+zRhxnO;O*E&c#;Mq4k|BGIOF79(+qqh>#@DIl(5VuuMcbWI5ZJ*5q9ICZSEj zO2f@XJ=B7>16Qd%oZaYnM(}+Vt3-{`NT4_O$pF0cgEy=T7?|_?#Z zc!0IGG;RW^w0RDmd_!=lq)p$p8RP~3xEAH3ttXWTLg4>h5;e9@{%wIt%76}ok+hch7(y$v8G0;Iy8$p|oB&*C=j#a0 zs#X2g5~H+P!QJHq7qMzpqbs!&deIvC9lI8l%Md4nAzMR?hoeik+Srte^b3JM1QTlP zkbeA(uo>s=h8QqkqMId1&=7)L-4%6o*)80pLd?BGiKN5)YkF@U!_18M>Agzx@aMw$ znxY>|GfJgFt^@YwtuTx5Jj@0C&SHlRN9C`fY}u{GhZRcO4Mt+dOM%Rh72HS`n6lc4 z=qzbIpsFgHsT;2T7+4?-KJOslO<}fqwR%R^H2?pFmHyY^%MDzz8{pWPMZ``Ery`>n zkQuUUweN9xqA1iCeoxjCH_Lts zZ9zcyY(WSDf9R>(uXo1V^+)0jiUiRE8#afTX1r0YAh35X@q4jf#ea3~dfkh7BwYf3 zXL>w&uK22?3drJ@P?sG`OH@GZIicsd#n-cn^A)@JxNlD6@6rY%SS(ct^J}TEqo4Sh zxXC)wK_eoH$kP4i`+@FJwwPA=7fqz7b0cwo*^70N{V$FtmKFWmSW8XL(%)nTNr#~o z+Bh2ZM9DOWd@7p5)_tcBZMMrsf-=8X)akigesdFu8YM5>Yhjt)KWfyl*C3FLl%d$V zyFBireqm=9W`JYC+LE%plpx_puHBq;8ZX1y8pwYI@6YG+Eq#Znp-*O>(CQBz1{+B( z+f25Wf|hL8GmO@!jGe-a{yT^vg3cbBzlT>U2+V>e^-0b7qdTax?&`2wUdX7wH2~1K zIXmd=Tjtx_6d)OJk|D%S%g*uYp5rZkUprK&)5-)z*)B_rA~c|qQ6m$olj;j;32?P{+ zqR_k)Dc|T$UGwEAJH6=0MatV{baHDTve8>^9174@#9hjGL$6bvE=_1~+hN4DN$S!$ zTa)8&(qrkPtD5{}sfdP;o$zpU)wFR)>G;vT5Vt=E@WU6eLlsxmIcLkNyU=!3g8iit z@wxpfu`8-8v*D%X%L^U=<^6|LUk&Ah`FvUKzAwqC@qYF84zoNRlEzmq_L_>a!3clP zCQk0w82r9u1kZx6fh6BXJ`zcg)ghpSiTDQ=u=@lA^rF;gDQglF)H&3Zexr7|G$+fQ z+JXsR9_uW=@5s%f{|ll$T|(bZX;q0jD`6YOPUL-Zdy z4czuE!)6Ph-B5tft|*Swe`w|ppW&wU+qlz+U7*tNLEsOToi-aG`1KriSsZBC$0)QE zHV>sQr|z@WJB%!CA(si*F?eccrH+pzUj`N{mcFk5}k{ z|A?V>0FP`MueEN^fhH2Msv<+I{|Gxl0?#k{K+3!q$Zy4Kq=A{UxUg8WGe52~27SJT z2(j6A9JKu=N2uTrpL3wf-lD2Jjmcjq)xTF~XQWqw>~K^P0M8%OI!Trx58QX8D{3iC zHkg=M+*o$fFnB-1f73>tK0o=x1{J{7awuLhWcOK3IUKabGptG;>QqP_+@>;8m8}O3 zas$>QZLG?oQ(c|47D$vUZwS(75ct_Gd)&jf?xY|m#&Op|FBsXWILV=vyi(gfmfURU zo}Fi{0z3gy7*l~d&SvW+5#ytNurSrxAV!n?@`L;){TtJsjW- z{*?G{8_=}qWNc+Z+uZF^_noSr8g=oiCS-b=&WwH^}eh{`sg#*~>f(p5`0Zv&zO26~W*R`f|e!R75)J`L@al zhz3q1n=%HbV5X5itNbPLKSo?-*4NxzfymMp*tP_ed5%M0<9!I;+5Ufni2tsH@CrVs zo48xLi3A-h|FG%KXUqn6k`OEtLTjyuq82Odei!m=zh(8q3;WUK(RQi|L!gzM4BPTXWuWiDdE4f)qgl zSueUS#gP28JhKU3dkt`ru}Ue@bnexcYh(K4JwxNH4+BykI718RDA9x+t8kWPRm&@u zFR3AzGF);C1_WD~E68kK+goX6rw_Y&I8%Njox%T=Ib@$8eENq3qtq#|!~6*)jjNeD zk5d6k81@4oP+Lw^tH2!P2JXHG=9MCDZhj)!uwP@b%6YXMfj3>#( zSX^4~ZMKE*Dj5Rb?czjacwgVhgmC_uv;p{Hc+#qKPwg?XWkiPh+1}KYaN}5w)#dY9 zOR7#w{N>qf`nM(O4rh~iF9|@#Z|3{5Ja;0^=beSE=+km6ENJJC(*^0D5;NU&91}Hd zkKh>ErAsMV%_6T(Pg9X*rU#dPjZZT;9k977h@Yw~72V&hlx%XHjM_hZohxr6J?n_2 z?PQt{F=E+H(eyM>SAb2OwjGlKA?40B;`d{@r(?5tzPta<@dpBgB+jE`gm|K&`k9e_ zr8G6{(cIJ!Z;)2t_K&9)Yy$r{yb8;dgThL+t7JAqHsz8MoA6q8^&e zSOIUm3Z8|tG9_4I=P&OIH7h|(UIq3%1%vFE(c&d?^y)c$ntxv~j}qa5+tuFc4Q0Nb zYu`L{q1{oQ!)5Cu&v-JLxO`lkC~%tss3^eW z9ywyHmM}Lr3ink(d&z;JEwu`gxTSri-$PGdIZTeyQP@2B%<5Uc zpEb%GI9@V{c)4CA=Mm`NY0PXQA$j7{d&=r)`xfn{6Ac1Z26`bUH*1puj^vNj5E|?) zxj$X@X~(#jId+V*dnQO)bD~bt4k_4b^^L7}f?~cC^%6!)5|`~%G+!>Bn!Ity9R9Ez z?Z}l&C1o6D<)k#0=ATR)?f#Nz=<-M{Hg}%V>SDBD&vG+-h1$2X3=0dx~{RyVB9$4G3j$qo=ZK|7=?rS$a`Thnkm1cbEPpcL>UL0 zyI-!(43LG!32o{5MFRbTISD_;!IK*`e=;3Pqc8_tthFgFk2DtW*=PKuzS{TH!wvqRd&Z_OV!Ri?9+4B zuxF*V7|K>nR9^4E)zB`d7akz;^{W0`3w5iO;$_Ln9<~VVIvHW=A9TQCyonSWsaIM| zoC*;qeNtuqs_ z7h+#j^#n5x4lT76ZokVK&O;)&s9KUr)^}PWqjfMX>0vgOolL8I_x4$V#O?Eal%I<& zIdErJap-{E;Rvo~&Bk+t|v!=5d3ifT^Bb_l^oImBOo~!q9QJ0VAP~^~uD3 zhxOYEeFm4Mm~?I@wUzNKa!H)i(Ye!(ho8Rmbu(;R)WJN%#XWx= zylZWvoD#-`G@C0AgRWJx*BN#hD|K zMQ(L5w-w>x`mtOye1_xxmI+ylJL8uhLO0%46d7g8({*LMkJpcI5Y;k8NluInVrpj3 zjL;{mWv~+!ht}c?u+Fi2Sn@Bc;`N2Uy3&JyiWkSvuNm6NmgPeqAp|{6_z=%n z%1S09Y~3^);4+#jC|j(UM_g(_`=8L3N;MQdz+#)*%g$N?lYc0!%si%hep|(uFo1GH z-dfI+K=`8}R%Qn&#~rTB0Pb}v{i}1$lubjTRQb2Vp!btgU8u;ci0G$h$2S7u-d=Tc zDc_ONF_LIuHRJ)inyczS@3-AAHW5b#X7Umg-$nKecYh&gc*KOWuR= zJ^ZrsEy*_UXEOKDL$D`REKRa2ro=%&moq z5?fO}VLlZn8Pzi>Qn2Rp?7EZOt^65Vk|)Yhb)0aMM+up0PrrsTbx#_|9v<^az__L! zf}V^cQLw-OJZWTbguukHMe`#;-rm;gxchPBHe|9Ea(}E?qRR`FY2h*UI|a#7o=jn5 zRzcDU>r`a+gbL9v$VZbcPfxc;F0LliiFb(HKKTPc3#;d_cQkY_FN4aTI#iWc)SN}q zozZAon5-GkY?4=P5WKy2J|Qv(9+}Gbu6vd=D@brZjMqw5=4IuQ zE;?-0lT}uWNii;To6?Itd)AxNbzT%0liIbUNmT@!DqF%n&~RP`o!K0yZokEJZZ7wuN+r;`!s)pw^)jB78t>;crxei8XlpT>*W24z=J-1c}{Oq4Tc`eVUgVQ{tw~iLHRx0bu?4dJ9 z1uQt+>98wK_oTP7QE=F^b=K)Zfkbi}jLb?6(A1UdB?tc{A2~%o9UnDm5=(nFA*eK- zXjxy>BjHzF1V!O)d+Ix3(pp~*ikpfeV%vi(z2==~bUy6m|CFe`J6u-F9C4$aiC?Y<8m5a4k>iQ+A&KT^9g)w-4Gy~`$jLd&SmHP`;4K1 z=LdG%=FFzpsD$N^!e2sBp^ST_h#JcWpf~vpg7_`mc4*ERJj-+@*C)YG0ZlPC2!!{i z+0{>PC!!f@blg9zPhwbYg4BX!D(%qVAqaf?^yv?%3DX_uG zc-G4^^d>Ff)g86gd=zSws7QSY^BYVBY%FiE-udzpu!~x!{K~>$-SfOTtW@hngg2tkR?3WEM5uaggd87MoRf5)TV89j8h;Bz-Qv{{aKq{!1eUd%H_d$|_PR58rL3hbTwppt-1y$FGhF-mOY+E1~*FfQG;I&x6g*kMo9* zVx;{G4dp7vCw1OS$$iQUfAzQDjew+^jE?rZ>lRC4C0+D)8}onB>-=BW@BVF*c07Ox zifJ%DJbzJuj4|kad&|J1Z?{;!o2X!(nD6rSf7f#T-?@$daBKe$y>#NJ1@w7L;Q!Q| zrv~c;^DP=we!sFT5{M=rw?OjVH2|M}@S`t`gd z>E^R~U3&ReH5A7d={j0K@)D%<+W41}WXHBiEpby86~;z{(8%cO8=M_6SngJfd}(4n ziXoF~+^&{5fRIe7yGW^`BNvdn`dBSUr5r32qizCJDT#v&px^XT-}MSpo(HW1u=7s? za7KHu*d4DlH9#)wofE^an4!;!ceI%+tlh^t>EPMv7(DGAZ6oFZ(v29UL5%sR)L<9? zWC4bt)>k4H8$1f`%G0LN_ShM`9JR6n|K8=MJoh^H*4+&pOb{MxOHP#BgU&T%?LJr2 zb-0R#*Cr&>)oq4$IywXakC)L@{&)hQf7+0(l{aSw>0jdpL2hVA3BqqX4Pa4$dWGxktXYlSU{LaOQWSZ)dr+w zsw1qX=V^P5yOz!4g-fSH9n;=bM2bB+>;3@Jxvw8Rjvaj{$KIX}VLsDy7!3dE7*l?9 z_o*&7`@MBP5A#gJ`7WX`Dqgl;7%_Z@{RF;P3Mzht26{hjAhSi45hGPW8oBLO0j%b0 z!FISqseo%rDFW-+b2ztltqf(0q*|lVcwh1wxJ#qe^t8I3OwEQO$HIIUhJ5P`-Cq*+Aq z(BGF-8B8V-@FU{U^@s1q)9bs#X*sl-&dOhQEX$bCMr5$)busB(mFwW(9<*Be;<(W; z%2$wCh?F4yXUnbB{VOn`g_a$@-JwqC@wU2$A1}_|p2^MLvS9q|_{`dUuN*FYPN~W1 zAkR+?PXg{Non3zoH+^>*zL&nRaO{6{Ol(4xTndOp z3V~DLP?Cm%&c`Op;i1EnYFf!IhM~|=7R=0YAR?q{>t2*GC$faf^~#x~tj$P1GMpIC zB8$$`$G>cE-v%;>Wi+OggO+W2dukE~yYDapi2J6lV$0YPw#VH?Q>Nu~=1EvVi>4+$ z{+$8tHA}YsQdp|kKW?#cV6XHjDe{cE1zlPrDtwfBm45qLu>X>akl_~g#|C4neMObM z#9#zlB)jm3AUiS5dDCZHzjxEXxJXn!WTHRJWK=tB8wm*!5mB1vpdus;Dr`t6=dTBx z`u*XV3w~z8 ztY-V%9Z%ZD!g1|6W0M7mmHiVe@bEc$2qExeEg8?q%hxBfMJERQ5;`)aWn!0P%YmQG z2d-97YfGYDRs2G7R$Ej!EKOR&%gSeLEDd4RUT{~NC@1ZK%Swgz673b-=|gv-j%4IQ zdBCN@cICs5^?T(SHU3ejJSsU~p}%s0ayy@dj4{xwASY`Jt>Qe&iXjlpq5GLpAqY%5 zyoKFcD0TtbF>Gp!!~vE4mGIff72XnELJt9|a=%pkS>17QJaD=utmay@$b?%XshQ}P zqSPKbKXr(Bv1H?egj~1%-z^bAW2=u(7Ll?Pv7vEs!stYTd;2@l$goigCYDIZftY^y zwbOV8qFgYulp4Fk7Db8_@-g>VccQ;5-J=AXT?pxE>3^RXKlF(gL!?FzedT0={TuJd z&f#zX4#*V<3l)f!>NI0#56%$|temVs5zP*yjbO+0P46NqI!KYyj0`^&m??*5-~Hj+ z%Ngdl3=X-c-Vxh0|0*U3A;!1z)PP~N*cYeJR?Z3O=CI$ez? z+Rqq&IhA|~AOe^&0ac;Zq{i;5m27i+o_{g~ zKmd^;PHSGI=ktj!4SN5$N?PJP@-$)E)Tz#P4}ck^oz_jw*r(8+(BK|vo_ix#HC=~8 zX+dzWFU}wNCa+YR9m;NwfdJpA=cm~t(+&}qih_iW;47<)W^GT@-^QmWyyI?{@bbr>7h;_* z5%Ig8q*vWG`qT{iSbRf%OIz+RoNw*hX8D?=08f91F=uy^lnw~2c>~pDPbaT~jO8zJ zl{(;4DKO`DshlERVj_NKXvGseT`>l}EcL$J>kk3Y*&X`Gol!Y(t+r zPDZvA<#@>EJpHf=zMVXC_<_0Ez%~ZU8JCUG(8Y#u+9kr})IFUcXOP-Fcch<6$I70` z9}7ATp}=bTtIMOT$cS%EnlHjYFAZn&V^Qc>1OuY`c(uXfw}Z)*xbfZ81qYlOR%R`K zx&)GO<1sUK>f$`!ULH4amQ4&-ORt+n)(07t9&`y>kW|X?a#rxXd~3WtKqD1#@4jug z`l{-5_-d)s(?@`oZ(z{L*7_Lru1Ra+WccI@pmqMTV7WZ<^mZRz2Yl{>an1vwj+uB= z?(E{pE{E07H{X-XoxPVx$0*m9Y7xKFd`su|`sW5hXa86MvM9b?`tr$=O?pG& z`FLG$-hUPUV!c<7gaC?jqWcej!Nz}N3Ge@0c?I-teSI$10edIEzsXLyDbedT`Wj+s zufjSXs!zaX$lhV&IV6-1F+KfJcjt#NOAGE-8Eu5m&t738?bQx#skzM+uqxv#)#HDF zjaS^wFqH#MHJ(Lb2=lg@Ib{_~s^fnhF0$`&Q^_jwY%bTAtzBW3maLD2h4At_odjZ9 zT)&UUW2bJr%o?rK=w}{*UF2&$jve2d1$_S>wz=+()~>EUXdk)zia+Sf*K7Jj>3HBJ z#!R-xuUV~1ea3dC(4g-AZ`O!5XLb;li zQP9F}$}{oXRrvO3W{9mcO4H+-UP6`K{g)mc!RFl7+)xt&v)6#~pXNfz3=e#zCD*}# z?cDO>UN1bYdS?&&sa&UC#fpI1<#RQ=H{%{!;3s8}`EI!9t7U|@J2A@f)}dQHJ-D__ zY=(DoKJ#4jZoreRg99QXJvyzA=FFNCVz+6)->@%nA4KyVuta6TRnJ-VIY~aOOw=-!XUd0NQr`z=A+L+NYww!moI)vgezge5ATt zW{0rBCLf*s@v$UrQ~af>5AuH`&|Ix*A{wSJ&OSG310x>QN_WNa zRjT(6=L^awoJ-JF>d})8*qY)2va5$Leu(HWyK)-?`He;AX(Hr8eIC2NWFzyYlSzQS~Kv9X6OxsE`4nBmE|L!JfjX?4JYF z4dz)^$9m-ece6;4$sM2UL1K~ozjAF@6N?Ff#>|clR1Y^-iB})nnm+Tho;_~fd&LbP zztg#dNScJ%y1)sO>1sCMN^%mVPx*}+(+%z?G>{-Zt|{|98*zIIx$K z&2n^^+@9{(nhB?unBqA{Y@aZIY1vlGIE`gkO;GP1O6 zbKJsKFL^N@(DZbP3UH#ntJTG)8kXUyH{DA?m@bni0*C%rG_7)>wPMz@>%zFpch`+Y zGIEHhJ{+joFEo;TWFjpD`Ut1Z)Mi|dW|W?cBA0p^o$!#VORWpWTPkOzeyCAV#NLSQ za}k_>i&*T=tbd$XiB8?Y40O~gz|o{{b{k}LN^^Vk^4v!3%|9lk#!K@5r5=RhBpu1@ z6AeJ&t(!Nyxq`z3;}L?+eB0VlA|)%;IaF}Bs8{edWIN zLn47yy^XzzoP>cPQ}AQKQv-`yrWHTa0diaO^!zKc$(Wt)7y}-OrMgSNqHDIuY|k8T``33U+(}b1i?>YZ4=n)qhSJ0=Axh8I*I?1k4=DVy z@EoU4b|A@wDIf(Sjr6MV_b8|QM|@i%Pg`Q$;a3&~#=&&JetmBZ_;*vm-y^XnYxZ=$ z2TbBGtSIGXAe`Zm*GcPGElHIiA-H8a*6;@{Aza5z%ItSaFb?!r zrqYw)^-e7EznO(=6&HrzL}no3)hjBm0(Y+d+$N@bzO*PDQ`d9MEPdfAr5TKCDJBGg zmIr)V|HJmAJyDkjRV=8STL*xoN?p(+idaet&2mq7r45^N?W^nZu>V;iF#29`y~Vr! zdmuv%MREAI#lGpWnR=D#_ilek4J6z4zQ5_Gqc6Kbc@uK&=~x&Sb&Ccg!s#*i#4;H_ ztrl1~Z`AMa*I-FM`VXo-;+cFoIf@vZO0F4K9kFC8M>WbsP+cpCEYA(Kuu@ zVOji?^9f|gYvftsaZp|J+TV-;h$x~x#&<~+aQkhek3^mfOe@Ea)c7T~<(SjSc z3Y1cf9Xe)k0PIxznfZQuTVt{r2u-C2X+O5rqJ$_RyYc3vT#fc8kt(R3c8%EFElxH% zb2nAdxjoaJ*qwnqf5Oi=?5EcY_#_&Es$ALa#D+_uSNg{rpX4Y#!pX0hW8sAHxN3&R z>$WgNm89fFiEB=hE<9e_3>auQA2(t$hW>o0pm7JL+5#A3<#jd_`L^XgKB{7cEL}JGKzxM^=TyO( zFzaqOb!sAY2$Aji%14kaDy31X)wsog`B|vZB@uUZwzE=9HB#dl#Z9*f<`cn;ZyU;) z7d^MoQYTz($t?vgna(&1#6r89Pbnt9@vp^J;hwjjEp;rpxj71@iCT)cs$S+ISqNVU zcGen8wfT-iHh*3K9B+=dm(>{PUKf-=-Caiz+;jLU-Bjq|;tfcT&*3unUDJEmupmOwc%b2bRQf_6_%bK@bEeeg|oZ zpdVDId~tvHf5$4_?`Db9M~h`UJF;;DkfDTTrAhS@cG>wMWf%h68#s5bMJ5IO?YG>t;T$l>jSff>24cs?OX2to|m zxZ_dngM(O;T)7{T)yV9GB3V^c6*>{08q`o|7_omthOe#KTJQ>6% zv)dLYAweV3$4>{dL2J&6+s6GjKht<$ZeNTBz(AR&!=IKF!}TgFAyCg4c!+6Uwvwek zLvR|_mL@YbR5}ruL6n@>jv1hp3nTzACa>pJ~W6=o&W$Q*yOlJ5Q04apPUb8PX-`l;F+MFNx`RdK})qn%dP}Xx7Htm6= zm@pbu_UdMKI7}{Eit}n`rR&jNj$dz6Qs&&dbL#EXF{@3IqrIHV9&DNTwFLa|p)a8Z z&JMULKvur;uc~e9?EZ$Js6vJtuM`Bn$x7C}d1f8iISq-}^OMRphpdUobH zIl%$;cAu2Rs7v_cW%Q>vu4HV6BM)#ARFtr|FNY?T$kNJt=Du0(#~cZN!>O?(>=x|I zh3OnfcKJmLD%Ae)F)I<=7jdRMjbVKC1SM2M&XiM(lhb+li@^KZWcCcKMA+kO5OsQ3 z(s@H3yn6Mh+(|iC`%EJ$-6XHi=DE4T7s==kFE&|Xukt;R8vFWUjKL`5ZLy6G2K2eH z!Qn}yEMRyzKKcl$SzTfT1}-sPYe_xMt^SeEmL(mMbR#@5v@+y_kBjOLw%p$;s(v~O z@t0ixK*DemZ>0yY{C@q_z9Aokrwz$;Sh}(mL>v#fJc<@QY@^s)-S7EF*U#X!l#Dk& z6>{JB3kP-T(at&$ffb?FPiBSSatKS>(53jo^9So5sMcR)R-1O{5Y6488gQ{LaBv#m zC9SI}1lDb$tt~a0ZrfdD2?&S>u0$`w#mcV_R&Bj}|a5xD^@J*YoO=?F8cPtzL zFXvxqu%=q2aa~z*rgs{Y+5}6iOqS;~8!W7yjj0xrZvI@|^I& zR`Ls3`vXnce8^7*83zzUYxP64hqnq$bUnTKfM6u0XQY{%*2(=F{PF~CjgtncA8VJ78qP3#LV#%@q) zDyeHj4c*R_{b-64WSSSD*7HSur8Gnb^DtlK!*!`GXnp*N_(2C1>S}9wb57F`_>l`5 zZQZ4CU76XZ=#i~PCmE>De{r_B%U2;4{<&pujN4A8?U%bPxWx0xA75{2DXGuyT+n1u z8(L0Rn_toJ*Gc-d$7?Y`;eg&SG+J#=tX2=-(b{rAzokckVDR7Qumo^hh~Tejei*Mq zg7|TKB8fUT)q|DMNq=IXS;RK20Ee@>&25m0WQ^;DhsO#J5AW?ED;P~Ck(ePUQd__TepLw)b61H4t-vw8DGXCnMNmfNUl9V=XdN3C zn>ApQgw@STVxMM{^Tk%L-Nn9(fMp6GK5LJjy0!iN6=gZOl;8S@HDK4ip8ej z`&FO4T`uU6hF4E!QSlU4xTBmKg*6Bs$O;5dFCx?OIogFne6Hi`QXepocBzTWy*Dpo4ja@e zR|=QkrlR+MX)gSmG+Z=PR!-33Z|K)y^U@V|LTcb!2W7Ez7zG|kS0egrtLUvx=#17E zDML8=8s=sj&|MjWKv6_0ua^4E1{?bc`P{?BDQenB$9Tn7~c*pVU&PMLy;-@h7Q}Vn%PbKR47kW?v@k8TN%RU~D z?-b>9ify<^pV(2AT0TgoExlvO0^@}spLU{MdFVD@IV1{ODkAd#71a7EACP&j)LM9( zIw`3=>c1hQoBS{kOE-7K@BXfCQTBj`qsx8{YcjCumHJ@T3dS^C_vpwrPAo{-supu)C_Dm6M~kQG zgf}o`+}knysIj6E#6K9pSoe?e8K;JNmYdyCLtAP^oQN(DZ#0^lmLR(_voIY_Omx`6 zBMeOdd`f%z`^wy0duDd}rD?#>e}t=lw@!+4oX63|#_GtOthy%0M|AD7HP#5zP7P%w zKze?4?QzqGAwY+BwT=eA+KSoq;Bc~bfKKzsE82br^c%J+J~W}6_sq1?hH9ee#x;0q zzFFe1-(IJ-T^ZE=@~ftFwLTh6YQpqB{yYKp>mQr!96Yrf#hSe7dnY{6>zyP-MR1mE z@n?C8&Q0ic%CYEj*9OXeIw*%;e{6t2i2SSVPmUgv-7sXtFG5+0uW95Tz_PzS4q%pO z2VG#XhgTjOKD$ChZvTpx6HuOW;P9jfcANl%Pcf(V9T^-Wkvo+eAowQ>@SuP__-=q1 z77mk`vJ*7zjTYNBP`-Dk>&R{+iu8mot%G@W&tSyH^SXVUc=ELHr5=h&^MP zc<(oC%nM99*)#W!OJ};vzJ8JKC8rBHLyt^fHbufC`)r1hl!`TLUvS)*yWGrb8eEwn z`u#1maB8svhkbbpezb2afuz%pB){ldXmYzYQ34M&uxL-3`eBD>oW40hd6#O`foU@q z0_@%dWD3j(>;!4_-9TCo0w74{fLmXB+buX=d9U=v9pp$*JvwTX?I>U@wN7t3+ zJJ^?kcx4uxt<`c^34A~&!A|3zLyfW;bw+I0>xwq2tC@x=I9?F5h#Jc{74-u>@i? z9V6Q<`rd#7OiTEN=jCZ!3F-G{`dHM8Kl#sFq8&kqJyb_$jn!;&p;|Z+GPaB-8D8>d zO%h|mW51^@Mc80gyma$R9fmz>7@vx#L8SShxyt`67^%@O$8TJ#qoN3>wwT_?!X-yq zG!kHK_4i$)(~>VH%sHQQ#V$!C`dh(X;5!ji1IKNo&1#TM(Sk2wdFXtE+?_j-I9G#ayvUm z0iPaU8KQc#IWsr%s92Jz{KB1`)i8U{^;HF!mF)-F_3o>Hme&M=?}u#gTC|FVM*aIp zI3cK(2A>GK@rQoHNPp0iyx%(vjqi2&e}Ga-U<#ICU?qW*=NZD_zsEo0ftFH<35ddc z+SvC2wOId?qoR;5@OA-i%wLuYx4t(lI7kKdhaR;MfO#*G28qmh>qvTF5ztDY&$Iq` zXhdQ`ojPj(&zv5x9Rk+{OfK2lXuYm$~& zW9dHdSSu5z8X+Q*rm^wZ12+_}lX|#=ag1u`gJqXVse??2~&1Xd*I5#~sR5@Ns~ zT}K)<@W~-OE|>)BBI@OGpwaD_L(+|N<2*e+9euX)^^4~9`9@ABf38Bt?svur99P)P zR%74N*M0^V`a8=%D;qB08TG4ij=K1FZkea*J$pZ!RjFbrdoN2=6jn5NZ1^}28{MM{ z9SdUK7{;Qi{)T`M?|ElGIwRv0H6Cfy`RQP1_c2(_ASWBoA1Fs(K2#8##wuKU_$I!X z2)W?4dak}bXAB}DzS-;I`wJfSCw_TrCRZ9Hh?fshe8^;}#AJP2TSY56yx#bUE0wkU z2~5@wW?!3QtQCu{r?R~~#GC9#wZ$0=VEv^#Dv=QMO$z0hYdvd{iB`I+LuQw!91rLO zyFokD3NIWSss~rjUzNu^1a7&%SM+d!t$V{emr1rcJL`p|q}fB!`qS`Ko^(*TE@uk3 zdweWB3r|^&Y-=^yUexo4AL8LQ8dA#*p(6+PlQezoc+1{X0{>SF&1R||7#L4MwqWbQ ztu5YNNVFQYaQOm8wLwScMJ&!X=f?&f1yJJ`O%vnrw3S#*;QY!cM^8a(u}((g4^piE zH&LXfWi5V*)Xl-vMz%3Q`78SgJ$BII{4RvpmT(gK7o7ilHx0$>(?Q#Bn$gi4XLkWC zG?0f&zKAD+|9vf8gDx+&JeqfYrPr$K@Vd!Hd9O#teH&6hQd=@9i zr;DyFr09U#hoZwW&6m89@LSjGp0p;%O|W0Dk8+UqS65lcKnb#Xg3LmY{cLw#5VtbL z&SSD>)bXNtIm{sUP~I%f*@`j0bNPPcFQg^dSyFV=i~ZMM*AY5&^s=Jj1q}ge!Tl3Y zgyHng9${EH_%Fj z9)T&urkEgXnp|E1mMi`^{8Bfjn|7uiI5 zO-Fd(?ct1$V}qKLg@ovPJ9V#nVW8I9KYbBjEtMUj{zPR-5V?_wwhQaUY_Oc`CJe4;X7{PfsoX#-JOj^_D9 z*`eGM{yReIBJ<2*~To@}NQPOvEP;~S51 z_btU}7Ny@tjXI)8JU+ug$+stom3b)5@3fCu!!LqNWtt09sNPAfKg-b0jD|kYsm=|4 z@_ZvD<(2CeF&@+Hd7TCUB|dn6#k6o~fwliSO*Qc3@Am`m@^894Wu@t-gQL}MZG$;w zbEJTnHO|`&xxiIg$b1&^G{qI2npKaFSJ8utyj57(DK92^P5p0k%NGk~k8<>PtGHt& ze(?hE{Z0B?^$)7F#OrNlgIdXK?OL{kNW_gtTHv<>jq%beiIH_Off9UV$7-m2bMfd7 z?N8ASeGsX-bh8r;Bj?S~-qnGa+eKkKew>x8n%;5QbFzY*5}DCBZYFVV|7Oab`oos< zjZYL61I49A1|9{!e#jA1F{QVxUvK`ZJW@-Jb34$=-4P5{kUjxnce$4yZd)HMQtK+m zk~Ar_cRcHEw8911*oa2jH4EP8n`EQh-ZbbWo*RBMG88cN*N^HYZoqO~!3Rk*v->pp zz$zlnvF%5u^ZZ`q?dM$6;t5{vss&z>Q+lYV7;9hm`S&zE{VspO42qVCii%gck~9Lp z+Sq!v<(yKNKoBewp_HH|=q)Jb5V2?8IhF&-f)ehR4=C(E2IO5dw}Q7ufn#MWCOux> zS2JxAbhOu=>m#$%odbP){W{6Ehr}~u{JW8rjjkKMtyNIR-8~|^UmUihbBWo$`$%y* z711boY^SU3)%Ds}cOB>?vNDybOBIt6{T8fk0*T zSHf~2*Yd* z+jSDlr=DkJ=CNuKQY9(?WQA)fy+_tRlI6cI1eHAulyU;DJ=CO*j7f>mi&Z$p5 z(btv`7UzsN(3yo%2;MzPpz;4$r)Hx|sxP>l?n;=6OQz&{f`!GOpluM<@rHrUA53p* z(($ELkiFS{$$coPgJIZ!pQp`OC9CkN-^o1^E3l@lmQ-)onoOWxpK#u3u3fy$Un6J5 z3BKnlNX?ry%FU^IjpQh>|2}M~8m~qIVxW7&_1N!8g}zH{*z8zu-vmp1iTjVCPRGhr zq!H)KEwbGse45}%?&(R6iUo7NqK@2xwtdLTr~F2Jwj2#^>QX7WG+m3t9~0#_f6xUA zpgD>h)=bt$gh8?S`JBG?nV>UyHDDq=>|h)98T%E33KfF(Q91rQaepn@=#HE4SPN-X z$k~!<-f9FS(|8@A3bN5>ZIF<>f@ny>vjTYOlw^`#(v+^x&vD)YLq*=~eJK z%re;-piZ&oY|;F`m@I>C z$FnxF26A8XyL$T3d*M6Aai*(;ZbB-;#oS?`IC^N<* z71~w~(yqB#C{$3gRr0T@%|zZZl+1MYNz{%!qnU>HT>VCqNqr<$qR0P&KcOH<&~LZP zmZ>DxD*;zRzj+r63hZG$$b8>B4_4!Y3!zlyuf z_B+!7Lb;BnWJ^7AddcN*%Z>JWe?m&?&Jx@2(>p)@7(&dPHg|Nx_(0QkGS@~Ev4znd zt(n9g`_UeD$fR|CJP?a7G^ore z`-}^^-~qFdWzxG4{}ho>G$lJn?Kubx+|C9mh+{~@Ke$#e&qHwkC{Yt z@$%k+)s8tTlYA`lbkJf0Mm&-J6sxp1ENv>MXOGob3ddfLe8%A~JTk4Lr>=MBcVF4c z{1DUX$(Nwbl4c6Mbs`(48zJ{w zOc>fxLvG-@bN7OZeOFYln^3N5+VGqo1(C@0ZCWtFB${2ubg$-n60foGyca#J2SR;! zQ$x^T@>uOo{4&4AW~dI>Tf2Dq#7j>L8<8n(tIO~6)IOEFCJHMV7sN%tB*nJC zdyqYdrlE`GFq^_T1lGx7-VE)e$&${{(HV5?9lL%RtJHN0m@w^_|DvlCKDZmwSuH$O zt@QLsBtG8--Fc$Y-KZKH9~-wR}QAgK~`|>0b-{v-*DVtD$`SVp{FN2jH<;nFF}na zv7Z_6ju=7cbOaHNG|p4gm!}pREyNR4~3aeM0y7Im}S$VXu(8x|}Gu zLr0fVLc8H>NoTN!J;jrD3Yqo>5*<%}TZ3eo(eMm#0?x+dIFD63UG!ZS-Y+F)RG;PZ zOi7On&s~8V&``UclK;^+)QkRv23?^WJlWyjpOf7-=_v!-H+4c znlgfR_;+nXBgE{R&hGVKA3068v%((9nb6fq_vC`?vkO8b-I=p2;~C-7zwyz7+8f^) zMybqCb8y`)axXYaf&^8@VIEL~ZAZ=WzSHm-&M!lhPwe4LW3SmJeUn$7VI9W~pVuBP zgiIQ=AnrH`mgS10PAmLB<;~Sac`g`j$i=9B+ zF!_4AmBFM?zQKjav?fvw_Yt;jmq$0&GzwoiY!B`O2u1uDm^=Y)i0DIIa@Fsxl;2w< zK3u0~lor4Rvd#P`{j`tuN7(C94?b%%!db&U}S0_O?|B<@#L>v+>Pf*$l+S-2<9eChR!xOLD&zoY)yg z^xWe03bTdu7kC=oIdk53tSbXQ_2hYGI3hMxZJI=?VrO-DHq8-9yzZH&cYl%|B~*zK z>@!I{wtZ?Bp;k8Hx*yxMgoZFE8>c$E8~6Qjpp}1>z{Ma%z>#XL(=4CLHu$@~L+sX} z)~HPdN9drb`uk6#zsHU{G!EZm7E_u==?ri`Bc$2n_U9&Q^5q`=0Qqki3dP@D`q9{1 zy@52l_nr|W5VD#}i&dYD(z3$d-(8xjNOs?0Bq$>a^}C)Y&G~;oeEDpVbg$rc3`!RK zoV#*-_odzKGh!3x?vYdZ+~xG9(Y@om!8+fe+>rgu*+7FUYz}dc)Zoa))ME`5uC;Wk zk865lY*}d7rO3Q#WEekLk`HtLVhd(3LvW;FwUn&n@x&8v}qdVlT$Qj`;lciC(og&#x%_D!0J=_eWZcaw){qeog_zorSKlabChyQg^X z8JuYZ?rq(dN0G7ket*EEyf8jyG2xr#pVoKo!D=90$jrz#ScL;TWd<7-?K zAZ_y5FC_J^U`4eHM8r%0$C+T)Rou45MtkRjYp#0h$^- zFxc)WbiS9g%>1zpOTWIVjH=`^`}u46bjwxl3UlT}ur?@LFaS!2=G3;Te?gkng9uzOKkPO(%U2iWi}G5Os4JZ=7@1yWixxk=9p1+wcFn zsFmp+f|WN#5W6#qG<p-! z4`n7=(_^Ve39SAN0cm4aBZJd6*M+Rc*>flF3eZ&+W}BIG^VXAiyEBR_3s>jP7kyl- zqBSjQ-EMbkmS3rT+Y#)bVwtvc3+L??*$( zL~bk(H@sDD+gmUoH$#SYBxDGdspSt0#`67y0scLQ-{I|kI_rBw?6_+?4V z?!ThxILflg$I>WBA3O`*Zkigr-LXV%ssgRM2y6K2gAV*BT3w<<_G=Fwh3@s~IOjVb z;RWM%-4@Fo`JN{!V3q8dPr31^i8dZ9r|!Ch7nhW&{0-e{thnn}uguL|!sQw!nuPl! zKh#3v(;jy%+QQ6%0wD3EEC@KqsPZe?ZBj+*_&jTJKcMzXx>zM7Hl%B3gGMmi!}dK! z2+C;5usbzLM%t1>za65vsQ_TmS?4dD3zh|uPq6sSm0$M=5J3uZh{kSc?`{)$DuA4u zgu{y=7F$-~{mZI>h1MYSc#`bjW)j$Jj+`vlrn*_sG3Ao*%8!r)e}M%xcKVYZFqIWF zDDe_UOFAJqH5HpKCPvOYl$1Jfi99E*ol{OfzMPa0PuHnm`jD8<{nc4c)1waX zI;MHvWSxKI^H&V?ZWo9fg%+@V#<|jXvnaD8A;Ql|wsQT?y~a%y6x>s7i<2SjzdSIS z$;@!_HxoiRES)T?FO+N}IFRnT38%sc3yTnT`AF?id3Z&PDTdx9|C!qMyWO?8KZ<@% z$}n-*g$@UF^m|KtytICaPbJ!HOn?d~Hk5$~V3Y$*=gfPrawd(~ca>{p7oq)G)9E6k za%wDi%0RI@RKWT0tUBs~I5`HBT-a|qJzRV$%JI$XKw7*APnzo2o3a7Sc+Wj)j4fK8 zO1&XE>a+m?c|-^o=bg2E(!q-lvW|H&;BeteU@DIIg@_(I*Y%+8v%g!YzlIIW z5T_4~zVj#^wHt$0cla{fSRgEk!@BfiwL?jTQ4$`7dVG2m?QnYF>fxRpzxnjWJ0iQE z=>8|(2kS2n1j$bdCX`PCsFHbKIsYk~{sH86fsC2vgFFeP>iL5{|FZ^A_xywRF(svI zASV`3U2XR@z#=EI1IV+Xpp*eJ@6YQGedh`FxWH1!*_cot-)}b39YbaEBOnf*kFXEP zQX}BbIT@OxJV??7RYTPfe$F2+3qlSPmNRL39@yL0bIW|6*0#5wr*hvWD;9?z)ApC_ z^6K4|hRUh5igCbf?S(`*jJ{jzHg)~AKOe6VixXZFD+7=B5eb^)1UsV+`)eA>FuHkg z$~^NC3V_GPWWDzk)WlJP{hkxs`_?>!Qv`KNH!E#?(=>_CY?S3IG!n6qG2Li?P zx4893>l6WvQZsuRHd#wc`pc6oiwaG;X^gaHXafW^aplGA?deBkcwhOIqo7p)CZ7B$ z3k>^V?N?G1GF7g}H*%f%XCp^cGpK2-;G$WRFoPMe-i1h6+I3}a={=9g>IioK%NVWw z>@z1|qFz8)dG%LZD}>nI@T#ku$u?^SQ_$5@#efGSUDQChHpI$1fZ#7#oI&cRN0+hV zl&NXN0KPB*tS2_j!@^Cgzl)XvEP`aLPtnGeB#0|KQPrdiTmVM+#jw+(_scmSvbs|8 zxBlD>mg???HIcu?m&#l3CJ8R49B>{l=UrbbnYHiRM(@%Lc*zM0-5GB(zXx;`<9Ha8 zC;JORiZkbLZu@_!9@>#^=`2Ybl$#qA9qurXMhKrQSS)JXs>>ktYIep`QAJ4Axu=OB zOa+h_an4-tcd(>pLs+>_M@^MO^Bix0A)p)kw=)7V8^j_r#wQnL<;oq@OV%$s9233l zE;oTz5w82TG?tmSjc^-Fu5+o?YmXIy-HTH}(5OH-`fmiui)HH;g^i;PU}**LW| zT$D5d6ju$!Q#Ni}wUOm91jLg3#q;al(-|^8jh3?SSN~ZF+QZEjJ+ES^kQaqpGsWw- zq{)1$#3f{cJbP^ydzS0RUG71;250>V=N9UlYWlZ^QtM(``Q?k=2Ui<8hJ=`topV$5 zJ{9m-Bo`kha^VH=7(4R*T{SgX;noE#TaDAH4&FssWAq$Ex!oI0aHiL8zv4F|QazP& zDqKx8$IT}Rz`ZkNvT}yjK-zd3m3iOU#k_%S>%hF03d?A8F{3pIe}{BSy_pQo%A9&D zG@#ew=_Kw-8Sm+6m@NMKfod}sNW#y#@VNz*1ZD1>nb=rG4HoHsdVhaPudms`RK3p$aqaP zOxPgK-7zJp*UY*|iu-`FaGd$#Z_XbF!Q>71?KZY^vZFproNPuVk0hl`8a4aXY)@thu5T6bcl)h& zJj5KmN2VtAqkg+)=Wli1v+l{;W(Cn~8V;nJPWLen#E{EqGQH+_2Fk=^+JLq5?#S*c zhWSoY)F(hX&$7JuRr9cAL%s|Qo54jQ(s=#+U7UBzh{?hwAi*; zQe_`!78E|tKFN4RId_w znr;k4>fs+(9jZQcf0-FA<(f`;VKixe9qwz-rxUX#%}xt7 z9HxDR82-qxcQ(FC3dV>UUJ8v&!Et^LTrpuUN|SY*pWfu#?nNx)>>9@vW4mZSJU>tw zAHBGs`_)oxB{#zuelOZ?V3y?*aEH56(ObXuGD%J1@^+RdNWUzg$UJhVEA9$pc)6GN zdi6$GC@Tw*)w$py;{ZWeug$h_4=)qD+}UIM-==FmRTf;HORD!=x0xD=ZudRe(_^ZT zg^+k`c{ise)-NZEu-V~p7kg{ohKC7(cX;==R<*cVP}7T>uDM~~sSH~2hQHO3X&sCw z4bC^4D-6LLrlA&!8gVN5a$}q_`L7U@;V-l~5lw{=Tl-D4TB4Tk!W+}Ce^HHGO=*%g zAxt)Od6Ce<*m|!s#WQ^keR*L8^qlpv47~h)YY<7W1<6Lb4QEI{bzm-Bhcn*Id+d9? z(XR{w*fgNkPo*;&l&OBy(2b=76weLgp#=EojIIQ-NT1{*z=7j)Nlon^S zBgjsT80J4RaZ^8z7Yv||xW$AE?z`{{2q^V*b&ipX$5+N>JDo(G2*}H-J{Nznil0dC zM|-PZ`PAH4Bx>GKX>fq(!+sDBTV&N8()v!0J~)lOd*>u*eQu8ifyAU1q7_Ih#J;2%NXwE@kTGSXFxY2b|Ls`^ z^_fnjTCmL0zMyM@cjPZ2TFgd+J5<0%-TA-QkZ!0)jEzo#(d`Z9%W?NKP+?E}9X}sZ?y}TY-&FCDn|SQs!xp>Y+3$fCbk`>0==YC*<4YY?7lc#dd@ zS7OF5+~^=B%NUg>*nvwKDz$TyBVQe{bgzAE2yJXp{_ruH)FGZz=(etZHc9q<dBm37u9H%C_~hjG=F zhJE^M5z1@wb0?LDrT#Lz0gXFV&nbWaX2Iw9j&{fud4u&LQ-Oy+CaK=KT@?1E%(ghb zu2VvQ`b+lW3=I*}z4=BHF{8V^0viPt*}XU&c z^9(^+zrP@TOZ?(k=+kdfM%$6s!BrX{S5AwTmO+-ro zkZCDiqC&SDz5Z-*zxaU5?;SG3JHeHv{iRy}0t*be8mZwzXQ)2q(d`M$KT$F=rjm#+^=o@bHP zP(QF?OM|KAp(sg%pS5ztP#HptgugABH3Zl2l=8leu9XModM==M?qI|_GH%*gQkN~P zx6xweaCt!MH}UK1TN{iEU(uLh;%y-wike%M0KeuJx+Ok;iVJnY#BMv>Ubk7dLYkP? zY#!*ZhgJR6&H59~hKdOpCGgPU67l}JfLh5e;Jb^$)9L@1&5 zb!CjbpwsSYOONIB*&+Y24Q0%{Ir)pyPquol3m;Lb^=YM~3?|!d$!I8B{ao37o!`eK zD!JO@Z>D&V&rNcA__QYlyx?^}G~0ll!AS4Y{Zkr3KlV*e_YXL-J5hK?@0%Ps7`*Qf z=x+$2SZMQhOXsaUNO?9uuFhI35IE*I+mzaUd^*kxuSV|cOC{XfJo*y@ly%s3y^##b z^tB!HkokS#-AtfT;NOTRY;p3P4Q=vp*tO`X35OCRk)PlFeBt@f_=+_?@jf}iRHpgI z$mpVF@6q;?9UD9l`f?&w4Kug>pRGSSemJ3fq^J4>vkY~Lh!(GkoAmWfnAz3s;*L(S9Ul0$ z%q9$ELCfjaA|{^_P_Gq5oUA$!hIR?Z^4GfGrYp7USU`M!j#ka1 zbpc273<|r!aSVROe#?ez`uTB{g!2wZF}YK>5B34Yr%9dcjs-ziw#R!RQoYAnFT%CL z_JhRE{?3=)vO~thQDhk==5)gG$kMk;hi>?;jY6{O?dxTb{SkVFj(1j*O>(!Y>b1Fb z@{yASo70LfIJUM-pwLKv7n{MgcU}d?nfmWsuBg7Y0T4CRqe1mp7ng`7i>S3&>G)j6 z1sYuKhc(RctPtDLP+p1Rg#-;$`XnM5BO&&F=Sg+Eg+s<1-Gy3dT&4ZS+JOk4ZyySH zq4w5QyOH?fA?wW>etBfA$4F6n$<`$v{KKUE5dA*k+sk*mxG7!H0;4@eMaHw&Jax#6*=LMQTMveVL2rur ze7i0tqO_KZUMSd}k!z+=wm$mDzx>zgJS@Gsz(6MXG4eASa3s%vh43?y|1d2Nh`lQ6 za|jn%g7v?}EAVx7yDJ~m68+stRPPf-wQkjCh)kkk}jFbxggTO#McZ$an+ zE;`Da+nhKzDauShdD8=H5M0jW;pSrEat4!S=w?_UV>5VANGnU<*igFHaUFjhbE(uq z)i@hN#R3cvl%>hj{jo*PTd%jon@93}&87S%@Z^XeOwR}?jfR&BqWyrzy98OWPXfcu zx=n+E^1}#i)X;kocyf<@M7dzbxVWI^WE^+;`V?gbO?>M8s}S9Xi?iOI-o{&Io0*Ke ztPe~$vuZSd@&^RY)T55P7c)8HR_41c>l9hG><ppH_OlHjMHt_FXj^9PE^=r^iW*qy z)^1i^eTiek^?mXnI1lQAIr5pxwZyTZu049_E=u`7e(s+hTt}*Kvm>Gnlsy3T?&qMV zz8MSO_kN86mC65*EuRE1b)J}G0ZfawBGgQ_86Cx+;6G@W{}$$7Y)jCE@V`f32?Q84 zmX803^{-j)?5c0i9KC7+p-L_<(MQ9rzU1-$$BNX8HQf`10> z`9m`?|Mx9>DqNZ$fud~kZ~^F{37q7&|6?e~0jlYr_OKKwbI=(){VewUVf_Bzypy){ zkDgwvJ~ki%5UU35e-SHNKTO5;JLbbJbq#d69<2}eVLAOnN}-@=|8r>Fe+~TNhy%zA z8S`HO)9{cXG6&xM>;LvbfRU8{SENu6M)8N0{9otrKcWU{jiCaI0rCX_xHSPxU%L+> z$^+YH%=R$cBiXNN3ayF^K4+`1^-FOBuKoXwMT0yH%EM_1RoRd8MnCBM=NkEs`2X4J zPt=dH-vakR0?EH3M`3?=`!5Se>|sV8D7qP?=!bRiKRLVq*8VEoEZdM8Oeryxs&AiT z;>i*W{Lq(Kff@7Q8w>>dm|^Z zA1f2u#ID@gJvKaF8VmknVq|0@pP>rto%ty8)@7Z^(UDRc2GPH^J?c?Z@*pHUZ~h+o zFtPsZlgFoiK9!A*QpS`6!R4QpJUXv`IgD-qU% zF%p%#YV+Oi5e?S|{K2@nSLCOMe|UK)1~E^f%9;6|r+ECe_8wYzHQYfDE?xg*185{F zH^*FY?v7zl;SJCMxX??`TbDe%e;wGy7>`jNW=~cYw8RJHz;iUZf*&0#Le$sg)9<+L zY?7}CSuimN`Tv!*3@W| zI)J>r=KKKHd*kErNwr58yD*p@+x_uIw)g!$)>FX)WZKUPgM9@|OxCxaZs~+~8|>{b zVt~m#Gu^dv3r}BW5Opr~IIE<26Nn4yAAcyYRQ1~6<&sU6r}Q^7+w^kWjWKAj(&i$g z?s}6&y1UP{oKiCyYMu@V2BuYktlU8b+TOJUJ}6~PZPm|*wLNE7$bEfmG>VR_r7qQj ziH?W$wm;K4_yN|Bsp2m!igJVZ=6q~;TCO!VUV>5rZ}Efot2$hy6LM-Lwe zxNTYjO52p-XJ`!vmxr`v2d+~=ETrmM9-k&|)Lt1mM(>Evd{fL*v_&n~TU^|^b~E8L z+unu|12xKhRsya*TXS~}O4B%7^(TfF(!^CC8G0_y44uV$z&qgud8Bd;XXG`sXZ#Zzl76a!Q>kVu~LHU?!C8b*y;#&4BhCd3f)O^lat zEXTd^k%@~~)pv8V9d0Tz+fve-BeNB{bA7|%>Y_1l^wQx7>%#O@(yJ#KwHN=)1xW*MX_-%a`c zUThx6@1&D7VTmAB66d=u9)4YL$h+g_tJ#zV2=j~PoqF-jf9lmWwN*EWw~J%wxIzSZ zXXq>=fEEd*?WmKwaMIZ-&Q8j(HE%4Qy%~|0VMcNU15f84i10#wnR^VLvB8MX4y4i+7xb;$nF26=hWqfpFQ=Z`+2Ty*!wQ3qJ z{aIfZL!>EJrOPap8bE5K&3;rBHk{6z@9X5<#b!C-?d3}0pF1#gKdI?6KloJH{id^X z9My4jGMy7EW-7|Pc7xktZ~nDq#2Vj_QId_1=k(-&x48CfTeCLu&yXwOrEShQ;07q10MnL zg4Mg2dfo+&$Q*@nOGz0qOfMAjKhF7_yP73>kucgV&kB=)WP|`;7KDR0YecU|*We$= z0wtI-8*9@~;TfqKuT;C!G;h0Nx^t$mQU1bKrmggiq}*-Khgx2tDrI~f8yU+7SeL*` z!Pg^497o(r2HbOeHG{w5J)amU)V+5n5nabf`B zecQ9X3p>b6+si_9DKI@8CP0Lj5JhdvXmI$`kJ3Krio`i{rha?b3_u^CkbL&wof@x>X*ZJJL@B z#LwaEW|ckJv$K+w+O1{XXhMHkxOUoRsy(d5wk`>^VO>}ii zZJX7eOtKrs-ML`GH0(%Q%HcgeMw}TObkUM+yRtj}Jud7$@@%O0_E~&bw6?^$C_bY8 zu&Pk+8SD0#j;QeWq!Q$M?`Z@d#EG=AG#x7hmkePzNQCNuzE{FC*Pgqw(NK_H$>55F zK105B-&1!#I%%69jsZKGY<;TC6ZEj!#TYgu+zNTN5o2&I|M9H_bfQhk|NNeQXrKHW z(L_V*-|;T{`-9QcqfbTI{5~=Xnu{{KJyLwxyerv%-d>~e6Vm7dbA(n-!8zbz5fdJs zu4gfXb zCw9Bj+))`fCVS2`^vh)tG?Xzb46o1_DEZd3Dy5Xtei~OEcRw+hgTH%(K}}%9LiD$5 zr7}HPVCoTB4D>}g9t=Duw&;ziM?~kqbN(mCI#r~X-{P*!W6;6Tliky^J*PjHHRRB6 zx$K;dnK4JZQ%$XZn_sFC8@{+>-I*oir}d#ucVJGq$@$7(WLL9d)?v;(M271Ivy)z5re|P3nMA7da5*uK94GI5+qtmf$ zrh&snZ~}LwY95L-Y&!ht8{XO&fu?+OHz$Mv;C1}uEH> zPD0KVGaYVNBaO0vMtmbi=Ho98V7!U1drqGd6 zS=+rXZC|EqpW2&uuD$;e?&6OT^l;OjwVd&9&#mU0=zr>*Br%A1dkhu^s>a3^zOO+B zxVcbWYrgrh=SVwM0%l%}j3A13qH))uQ)V1Ix#Fj@m&vI?EIt_RC;$jxS+gr!*BIXd zR~AIqE?tdIE;8@j9T2V`?B1A?G_(a8J@|GKjcIPCZb!Vxf)+3I?b1U$-&JU#+OB4k z{U!f{^9#UfpBRQogA?tzUu3c20F`x)QNGu!*BTUc*PeP>Ra3&Gl$S3Go?JvdKomvE zW)Q7`ajd0Mk}o0;o*QK`yfHONQSV=&Z=SLswQHFaW(j>pL|WW!Zx3l(Q#cD>WZ9?$Y#& z@S#wOnO|Mq(ptka-CaI^uXe)(VAX_<+%F#+I%Mf zdnlJ!0h6eTFx?oUDWEbCC~XX)X{j&H8!q2me-g}=`iZTj#d5av(k$q|DkD(+w7*ranfoQ;o@ji&$3H-Nq5M8a_q4bWCJEMhhzsztws z`E>gTFuWd1xWQhR6|fsFNRBUeIM!fp5VI8;IND4vZSr`utB7_3MHb2BW15!~1n9GK zK7gpTU!$N~oXzH)`@G3ix6GTAVqsd`Q;k&E)_s50?D;8Eosdvo6 zt$I?A%Nyd3;UZE`cbnYg#HcT_6}tSYj_iiM1*)R(bLo<0-6HQZMj@Ky4TXU%9~G@Q zf4eeGKX{`>zEMYM1O3%i;Tg0d#J(*#=@R4EOYWI#tp}Od+EiWE(OZ|^A0F<^I%L~q zDMFLm{7idZl5FuWL1Wp$3j3<n8TS2H5~a{)w|rQ9%lr6e`X%J#5U#VX zlhdwiYWYg(^XZ9Hly`ssaNi3?)1%QxyFVe4>bjSIAsp`}VkSL5M_7T`?t4T}(a;ST zaK)WjAtpXcCfY}yVhxZl&S7H1$))f?apF%{FiWFFlkWzpw&xTTs z*lxG!AG(z-i9pzv=LBZ`UOh{;+_maaYx6nP{D=|wI4<_vx1@M6eJ(jy=+1G-uvmT_ zjrZmEF4#$%6m+i1zh~vZB8C_HfJ00-yc`NbL3z$ABk@5UfJc!u25=nZ% zCc2mXyfrdScwDQHU>pPQp5Qyy)X*C@vEIt(nMCsYxM<|HvibIHqFDP1OWXLBPryLdZeGiuEWy ziQf3aofJ3^+uLosbDxl*p^lio-4C~3=%y)dG*;R_^gSesgTc{i$81rlaue5Q$$qXY z!qJ-V+IKhbSNCzH(fHJm9g&rC&!4Umi?TduA*RQ~E&XxAIo|++O3!QIQX%gx5`)_Q zwizda8e~5xs4x~?rbeFE7nSA>LBzm6({Ma5oa+>yzvh3APCdD0y9^2GV7IJ09sRm?w(gdQ%a;q=^5? zxZ+49d=xrWTX!+06qUDsputcUmTCI$8}dM0^I(a%q=y%MtXVNSHRd4hFJGZ5vaV%i zKnpbH$Ok@spPauKfW@q>Gp7MXxQ}Xtea@9I8I4I)fF})U?ecMOZH(ZB)&0osAvE6< z1kN|8wY)y)3kYj-Il@?-87LzcYYBb82dI;tFBtJE^-Yzo0hwN`fdF$fH=CjA`})jH z<-9aaklR`iSXDRi=Hhp?-nI=<5*j&(01RYoiKkBO?XxlyfD@oA3@&@8*~HXUn-zq( zN5iA|oeV)WaR$nj;>^cmFH4K-pP(c>CRZ?}<+&QOq3W?#4OTWOlcb%Jw~6anMGz$S z)4ffjmT-0kVI597a&|=RzT-yjn7L!|gadLpj?Q;NsO#1xoU(da>Eh@;~4&IWf7AHYLp6qEbSUv+LXIK1I1!NDolt>(Ew z-fC5symIks{xWfEOe4qy6jyF-?GkW4_lHXpBzF{`D-e4!(sZ*lRMtvDBEbuD_k0gw&t^FDVNB{NG3*VpwN)y5wTMQ8_o z6tcPc7A3WcL&>)}?o5A@Azj2jPycR7d^V`hS<>7@#BQ;9ugeM)(#!q}plpNcD2c13 zFXf`qXXD3g7HQ#r<<7{Ef|>bP)%CI##PQs4rwS8{iR7~ka|l17yWh1Uvz42DXwXSsaF90WttuQoCr>X<6DwzWAezKoVq!0+lEIF6iI^Sy=%+UE zGc*O8f-Ad9t4+l1Pw7~rX~%OQ*r?S=PS7$m&xemxtf_KYptZ!%TE^qya2!U|#`T+L zFgz-%WeaF!QBhG@neC_jF^iJ}hHcd0tBzdqW^8*$q=VY0xcz5?-eJRY!6Sdt#&z&*>cu3K5_EZ@gL6RUteNIGDI>PODVEV6%aQzD&<=CCH#9 zAc*?szHyG+k|Q>C((UvN>aYZP_Q7)H*-KE*)q{OUY5!t3~MJ19!LnY}T|Rtf_5 z$-X=ILgp&;Ox~#7^?a&8TyM&O_ZTz>R^z}B^3igJ?$xf8gcB4>UtU>oG3D`oeauoh zY-43w{7-N491j*)7}qQ~#ToM&#JvRyD98_lKJ}h;NOd#}9E>{r(y5*fG{&l#+nU^Q zx3Z3NavEv}*R=|Ak1~ODAovd(Gg->p<&_-furmWKw%yHg$xzPy!6uDWOKg%)2Y4Kv z0sjU;E(%l`@i4q-UW%RT(wNU!YzOe5trG92EgTvJHK)4fsR&u%oKNJTQzs-9-psYD z@wUpShGXs9a#OT}<-Zqcc=*)5*V8ljUQjg15a^Wo_^Xy5xqxFF4AB4XrrAH)#5N7i z8qjCxB91`yP2{hAK@Q|4@xl_Wbb-9&55IwKR2kD`Y@1dUsJYRw zgcqnf6sSfNF8XetGZDySE8hK4w#!0;^jx2-I*J#l2PqBn${i?Sgcde5zc*0Qk{~RV z2K0`^5f_hhzR3an=z~@*toH4tkt2P)=k4!Va5w8_IjN3b2+iBsB3tTs`l!7;qxBs( zzQN}44iHw+@O-n&#eszG_^(-7tN#30dpj3hB8mE2K>-K7v$4{2|GeCL0+pjYk{eMr zl=sUT#|GZaZdM$ukq~&f&S2^lbM^sp7FhPHreVQ*k-zD z&b>xAsfEbP`@sWzq<}{6G_SjxJ+J+JBgEkn8}_(ee$aJe$b6-Vn)%C|pLConPo!NL z4{3wx!jD41fxPQj@+>cfL1H(U6#xfrjC7_^BU;ZEc C#hLE_ literal 0 HcmV?d00001 From 62265439e80f1dbc5136e089117344b8b36c43dd Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 16 Oct 2023 23:53:04 -0400 Subject: [PATCH 45/67] fix bad link --- docs/ai-testbed/groq/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/getting-started.md b/docs/ai-testbed/groq/getting-started.md index a61121e06..0426a9f9a 100644 --- a/docs/ai-testbed/groq/getting-started.md +++ b/docs/ai-testbed/groq/getting-started.md @@ -7,7 +7,7 @@ If you do not already have an allocation, you will need to request one here: ## Accounts -If you do not have an ALCF account (but have an allocation), request one here: [https://accounts.alcf.anl.gov/#/home](ALCF Account and Project Management) +If you do not have an ALCF account (but have an allocation), request one here: [ALCF Account and Project Management](https://accounts.alcf.anl.gov/#/home) ## Setup From 375112cfe623ebcea768177d61ad43a3aa3605d5 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Mon, 16 Oct 2023 23:56:39 -0400 Subject: [PATCH 46/67] fix another broken link --- docs/ai-testbed/groq/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/getting-started.md b/docs/ai-testbed/groq/getting-started.md index 0426a9f9a..39de4d71a 100644 --- a/docs/ai-testbed/groq/getting-started.md +++ b/docs/ai-testbed/groq/getting-started.md @@ -3,7 +3,7 @@ ## Allocations If you do not already have an allocation, you will need to request one here: -[https://accounts.alcf.anl.gov/#/allocationRequests](https://accounts.alcf.anl.gov/#/allocationRequests) +[Discretionary Allocation Request (New & Renewal)](https://accounts.alcf.anl.gov/#/allocationRequests) ## Accounts From e5ce203b12d6638ee3a1d43429fa4fc696e9a6b2 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Tue, 17 Oct 2023 00:01:07 -0400 Subject: [PATCH 47/67] delete README.md that build is complaining about --- docs/ai-testbed/groq/README.md | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 docs/ai-testbed/groq/README.md diff --git a/docs/ai-testbed/groq/README.md b/docs/ai-testbed/groq/README.md deleted file mode 100644 index c24da96e9..000000000 --- a/docs/ai-testbed/groq/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Groq - -[System Overview](./system-overview.md) - -[Getting Started](./getting-started.md) - - - -[Running a Model/Program](./running-a-model-or-program.md) - - - - - - From 16ed3f2cc53e1755cf18be1d02f5097b32de7776 Mon Sep 17 00:00:00 2001 From: Venkat Vishwanath Date: Tue, 17 Oct 2023 09:26:32 -0500 Subject: [PATCH 48/67] Update getting-started.md Add info for Groq --- docs/ai-testbed/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/getting-started.md b/docs/ai-testbed/getting-started.md index ac6f74815..9bd2ac4e1 100644 --- a/docs/ai-testbed/getting-started.md +++ b/docs/ai-testbed/getting-started.md @@ -13,7 +13,7 @@ The AI accelerators complement the ALCF's current and next-generation supercompu The platforms are equipped with architectural features that support AI and data-centric workloads, making them well suited for research tasks involving the growing deluge of scientific data produced by powerful tools, such as supercomputers, light sources, telescopes, particle accelerators, and sensors. In addition, the testbed will allow researchers to explore novel workflows that combine AI methods with simulation and experimental science to accelerate the pace of discovery. ## How to Get Access -Researchers interested in using the AI Testbed’s `Cerebras CS-2`, `SambaNova DataScale SN30` and `Graphcore Bow Pod64` platforms can now submit project proposals via the [ALCF’s Director’s Discretionary program](https://www.alcf.anl.gov/science/directors-discretionary-allocation-program). Access to additional testbed resources, including `Groq`, and `Habana` accelerators, will be announced at a later date. +Researchers interested in using the AI Testbed’s `Cerebras CS-2`, `SambaNova DataScale SN30`, `Graphcore Bow Pod64` and `GroqRack` platforms can now submit project proposals via the [ALCF’s Director’s Discretionary program](https://www.alcf.anl.gov/science/directors-discretionary-allocation-program). Access to additional testbed resources, including `Habana` accelerators, will be announced at a later date. Submit your proposal requests at: [Allocation Request Page](https://accounts.alcf.anl.gov/allocationRequests){:target="_blank"} From a9610aa5a08b3275c3696a1d97ce7890a368fd2e Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Tue, 17 Oct 2023 10:31:10 -0400 Subject: [PATCH 49/67] delete spurious emacs backup --- docs/ai-testbed/groq/README.md~ | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 docs/ai-testbed/groq/README.md~ diff --git a/docs/ai-testbed/groq/README.md~ b/docs/ai-testbed/groq/README.md~ deleted file mode 100644 index c6ab3eea7..000000000 --- a/docs/ai-testbed/groq/README.md~ +++ /dev/null @@ -1,15 +0,0 @@ -# Groq - -#[System Overview](./system-overview.md) - -#[Getting Started](./getting-started.md) - -#[Customizing Environment](./customizing-environment.md) - -#[Running a Model/Program](./running-a-model-or-program.md) - -#[Job Queuing and Submission](./job-queuing-and-submission.md) - -#[Example Programs](./example-programs.md) - -#[Miscellaneous](./miscellaneous.md) From fa14a29095f66bd1530d4d51c80ba5e2b5418612 Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Tue, 17 Oct 2023 10:37:17 -0400 Subject: [PATCH 50/67] add link to GroqChip spec sheet --- docs/ai-testbed/groq/system-overview.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index d21b33e03..985aa7157 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -3,4 +3,5 @@ The GroqRack 42U compute cluster has 9 GroqNode servers, 8 compute nodes named s [GroqRack spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqRack%E2%84%A2-Compute-Cluster-Product-Brief-v1.0.pdf)
[GroqNode spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqNode%E2%84%A2-Server-GN1-B8C-Product-Brief-v1.5.pdf)
[GroqCard spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqCard%E2%84%A2-Accelerator-Product-Brief-v1.5-.pdf)
+[GroqChip spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqChip%E2%84%A2-Processor-Product-Brief-v1.5.pdf)
([via](https://groq.com/docs/)) From e2736323b22599b63cd5d9699590cef589c60fc5 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 09:37:21 -0500 Subject: [PATCH 51/67] Add Groq to getting-started.md --- docs/ai-testbed/getting-started.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/ai-testbed/getting-started.md b/docs/ai-testbed/getting-started.md index ac6f74815..ce255cbf6 100644 --- a/docs/ai-testbed/getting-started.md +++ b/docs/ai-testbed/getting-started.md @@ -13,14 +13,14 @@ The AI accelerators complement the ALCF's current and next-generation supercompu The platforms are equipped with architectural features that support AI and data-centric workloads, making them well suited for research tasks involving the growing deluge of scientific data produced by powerful tools, such as supercomputers, light sources, telescopes, particle accelerators, and sensors. In addition, the testbed will allow researchers to explore novel workflows that combine AI methods with simulation and experimental science to accelerate the pace of discovery. ## How to Get Access -Researchers interested in using the AI Testbed’s `Cerebras CS-2`, `SambaNova DataScale SN30` and `Graphcore Bow Pod64` platforms can now submit project proposals via the [ALCF’s Director’s Discretionary program](https://www.alcf.anl.gov/science/directors-discretionary-allocation-program). Access to additional testbed resources, including `Groq`, and `Habana` accelerators, will be announced at a later date. +Researchers interested in using the AI Testbed’s `Cerebras CS-2`, `SambaNova DataScale SN30`, `Graphcore Bow Pod64` and `GroqRack` platforms can now submit project proposals via the [ALCF’s Director’s Discretionary program](https://www.alcf.anl.gov/science/directors-discretionary-allocation-program). Access to additional testbed resources, including `Habana`, will be announced at a later date. Submit your proposal requests at: [Allocation Request Page](https://accounts.alcf.anl.gov/allocationRequests){:target="_blank"} ## Getting Started -1. Request a Director's Discretionary project on SambaNova/Cerebras/Graphcore. +1. Request a Director's Discretionary project on SambaNova/Cerebras/Graphcore/Groq. -2. Apply for an ALCF account after the project request is approved. Choose the SambaNova/Cerebras/Graphcore project that your PI has created at ALCF. If you have an active ALCF account, request to [join the project](https://accounts.alcf.anl.gov/joinProject){:target="_blank"} after your project is approved. +2. Apply for an ALCF account after the project request is approved. Choose the SambaNova/Cerebras/Graphcore/Groq project that your PI has created at ALCF. If you have an active ALCF account, request to [join the project](https://accounts.alcf.anl.gov/joinProject){:target="_blank"} after your project is approved. 3. Transfer data to ALCF using Globus after your account has been created. @@ -28,7 +28,7 @@ Submit your proposal requests at: [Allocation Request Page](https://accounts.alc b. The endpoint for your home directory on the AI Testbeds in ALCF is ``` alcf#ai_testbed_home ```. -4. Add/invite team members to your ALCF project on SambaNova/Cerebras/Graphcore. +4. Add/invite team members to your ALCF project on SambaNova/Cerebras/Graphcore/Groq. ## How to Contribute to Documentation The documentation is based on [MkDocs](https://www.mkdocs.org/){:target="_blank"} and source files are From f2da75fa490e29f212f21f493b4ee9bfa00e2cc7 Mon Sep 17 00:00:00 2001 From: Murali Emani <15612272+memani1@users.noreply.github.com> Date: Tue, 17 Oct 2023 10:03:34 -0500 Subject: [PATCH 52/67] Update system-overview.md --- docs/ai-testbed/groq/system-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index 985aa7157..6bb8ed323 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -1,4 +1,4 @@ -The GroqRack 42U compute cluster has 9 GroqNode servers, 8 compute nodes named sequentially from groq-r01-gn-01 to groq-r01-gn-08 and 1 redudant node (groq-r01-gn-09). Each node has 2 AMD EPYCTM 7313 processors, a total of 1TB of DRAM, and 8 GroqCard accelerators, with integrated chip-to-chip connections. +The GroqRack 42U compute cluster has 9 compute nodes (GroqNodes) named sequentially from groq-r01-gn-01 to groq-r01-gn-09. Each GroqNode has 2 AMD EPYCTM 7313 processors, a total of 1TB of DRAM, and 8 GroqCard accelerators, with integrated chip-to-chip connections. [GroqRack spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqRack%E2%84%A2-Compute-Cluster-Product-Brief-v1.0.pdf)
[GroqNode spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqNode%E2%84%A2-Server-GN1-B8C-Product-Brief-v1.5.pdf)
From d0c63e4caaccc715ce6dc6a6598c93eabc22841b Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 10:55:15 -0500 Subject: [PATCH 53/67] Update system-overview.md --- docs/ai-testbed/groq/system-overview.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index 6bb8ed323..06858589e 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -1,5 +1,15 @@ -The GroqRack 42U compute cluster has 9 compute nodes (GroqNodes) named sequentially from groq-r01-gn-01 to groq-r01-gn-09. Each GroqNode has 2 AMD EPYCTM 7313 processors, a total of 1TB of DRAM, and 8 GroqCard accelerators, with integrated chip-to-chip connections. +ALCF consists of a single `GroqRackTM compute cluster` that provides an extensible accelerator network consisting of 9 `GroqNodeTM` [ groq-r01-gn-01 through groq-r01-gn-09 ] nodes. Each of these GroqNodes consists of 8 GroqCardTM accelerators in them with integrated chip-to-chip connections. + +`GroqCardTM accelerator` is a dual-width, full-height, three-quarter length PCI-Express Gen4 x16 adapter that includes a single `GroqChipTM processor` with 230 MB of on-chip memory. Based on the proprietary Tensor Streaming Processor (TSP) architecture, the GroqChip processor is a low latency and high throughput single core SIMD compute engine capable of 750 TOPS (INT8) and 188 TFLOPS (FP16) @ 900 MHz that includes advanced vector and matrix mathematical acceleration units. The GroqChip processor is deterministic, providing predictable and repeatable performance. + +The `GroqWare suite SDK` uses a API based programming model and enables users to develop, compile, and run models on the GroqCard accelerator in a host server system. The SDK uses a ONNX/MLIR enabled DAG compiler and it consists of Groq Compiler, Groq API, and utility tools like GroqView™ profiler and groq-runtime. + + + 9 compute nodes (GroqNodes) named sequentially from groq-r01-gn-01 to groq-r01-gn-09. Each GroqNode has 2 AMD EPYCTM 7313 processors, a total of 1TB of DRAM, and 8 GroqCard accelerators, with integrated chip-to-chip connections. ---> + + +For more information refer to the following links: [GroqRack spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqRack%E2%84%A2-Compute-Cluster-Product-Brief-v1.0.pdf)
[GroqNode spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqNode%E2%84%A2-Server-GN1-B8C-Product-Brief-v1.5.pdf)
[GroqCard spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqCard%E2%84%A2-Accelerator-Product-Brief-v1.5-.pdf)
From aaed1eefa1562ddf2eb585ef67ae67141339acf3 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 10:56:26 -0500 Subject: [PATCH 54/67] Update system-overview.md --- docs/ai-testbed/groq/system-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index 06858589e..01b1a0347 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -6,7 +6,7 @@ ALCF consists of a single `GroqRackTM compute cluster` that provides an extensib The `GroqWare suite SDK` uses a API based programming model and enables users to develop, compile, and run models on the GroqCard accelerator in a host server system. The SDK uses a ONNX/MLIR enabled DAG compiler and it consists of Groq Compiler, Groq API, and utility tools like GroqView™ profiler and groq-runtime. - 9 compute nodes (GroqNodes) named sequentially from groq-r01-gn-01 to groq-r01-gn-09. Each GroqNode has 2 AMD EPYCTM 7313 processors, a total of 1TB of DRAM, and 8 GroqCard accelerators, with integrated chip-to-chip connections. ---> + For more information refer to the following links: From 148a315eb9838a8db03f7b1ca946f587657a7951 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 10:56:41 -0500 Subject: [PATCH 55/67] Update system-overview.md --- docs/ai-testbed/groq/system-overview.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index 01b1a0347..2218c497b 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -10,6 +10,7 @@ The `GroqWare suite SDK` uses a API based programming model and enables users to For more information refer to the following links: + [GroqRack spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqRack%E2%84%A2-Compute-Cluster-Product-Brief-v1.0.pdf)
[GroqNode spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqNode%E2%84%A2-Server-GN1-B8C-Product-Brief-v1.5.pdf)
[GroqCard spec sheet](https://groq.com/wp-content/uploads/2022/10/GroqCard%E2%84%A2-Accelerator-Product-Brief-v1.5-.pdf)
From d7bb759bdb214fce002da5c2a476e0303a6796f9 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 11:23:00 -0500 Subject: [PATCH 56/67] Update system-overview.md --- docs/ai-testbed/groq/system-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index 2218c497b..e7f0550ec 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -1,5 +1,5 @@ -ALCF consists of a single `GroqRackTM compute cluster` that provides an extensible accelerator network consisting of 9 `GroqNodeTM` [ groq-r01-gn-01 through groq-r01-gn-09 ] nodes. Each of these GroqNodes consists of 8 GroqCardTM accelerators in them with integrated chip-to-chip connections. +ALCF consists of a single `GroqRackTM compute cluster` that provides an extensible accelerator network consisting of 9 `GroqNodeTM` [ groq-r01-gn-01 through groq-r01-gn-09 ] nodes with a rotational network topology. Each of these GroqNodes consists of 8 GroqCardTM accelerators in them with integrated chip-to-chip connections. `GroqCardTM accelerator` is a dual-width, full-height, three-quarter length PCI-Express Gen4 x16 adapter that includes a single `GroqChipTM processor` with 230 MB of on-chip memory. Based on the proprietary Tensor Streaming Processor (TSP) architecture, the GroqChip processor is a low latency and high throughput single core SIMD compute engine capable of 750 TOPS (INT8) and 188 TFLOPS (FP16) @ 900 MHz that includes advanced vector and matrix mathematical acceleration units. The GroqChip processor is deterministic, providing predictable and repeatable performance. From d3e1f9bf8368a99fb381fee01fb4f3188c7425dc Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Tue, 17 Oct 2023 12:35:16 -0400 Subject: [PATCH 57/67] spit out environment creation into separate page. --- .../groq/running-a-model-or-program.md | 40 +------------------ mkdocs.yml | 2 +- 2 files changed, 3 insertions(+), 39 deletions(-) diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index 366a51b9f..cb962ca87 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -28,47 +28,11 @@ cd groqflow ### GroqFlow conda environments -Create a groqflow conda environment, and activate it.
+Create a groqflow conda environment, and activate it. +Follow the instructions in the [Virtual Environments](virtual-environments.md)
section. Note: Similar install instructions are in `~/groqflow/docs/install.md` or [GroqFlow™ Installation Guide](https://github.com/groq/groqflow/blob/main/docs/install.md)
The conda enviroment should be reinstalled whenever new groqflow code is pulled from the groqflow github; with a groqflow conda environment activated, redo just the pip install steps. -#### Install conda -If conda is not already installed: -```bash -rm Miniconda3-latest-Linux-x86_64.sh* -wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -bash Miniconda3-latest-Linux-x86_64.sh -# answer y/yes to all prompts -# exit ssh session, then start a new ssh session -exit -``` -#### Create and activate a groqflow conda environment -Create a groqflow conda environment and activate it -```bash -export PYTHON_VERSION=3.10.12 -conda create -n groqflow python=$PYTHON_VERSION -conda activate groqflow -``` - -#### Install groqflow into the groqflow conda environment -Execute the following commands to install groqflow into the activated groqflow conda environment -```bash -# Alter this if you have cloned groqflow to some other location. -cd ~/groqflow -pip install --upgrade pip -pip install -e . -pushd . -cd demo_helpers -pip install -e . -popd -``` - -To use groqfloq, -```bash -conda activate groqflow -``` -Note: Always use a personal conda environment when installing packages on groq nodes; otherwise they can get installed into ~/.local and can cause problems when your shared home directory is used on other systems. If you encounter mysterious package dependency/version issues, check your `~/.local/lib` and `~/.local/bin` for mistakenly installed packages. - ### Job submission and queuing Groq jobs in the AI Testbed's groqrack are managed by the PBS job scheduler.
diff --git a/mkdocs.yml b/mkdocs.yml index 9cd1a1e5e..b0b6c5a04 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -250,7 +250,7 @@ nav: - Getting Started: ai-testbed/groq/getting-started.md - Running a Model/Program: ai-testbed/groq/running-a-model-or-program.md #- Example Programs: ai-testbed/groq/example-programs.md - #- Customizing Environments: ai-testbed/groq/customizing-environment.md + - Virtual Environments: ai-testbed/groq/virtual-environments.md - Data Management: ai-testbed/data-management/data-management-overview.md - Cooley: - Hardware Overview: From 3f82e9cbfff7f0cfb71887967b83b91fc947334a Mon Sep 17 00:00:00 2001 From: Bill Arnold Date: Tue, 17 Oct 2023 13:00:24 -0400 Subject: [PATCH 58/67] split out job queuing and submission. also add virtual environments markdown to repo --- .../groq/job-queuing-and-submission.md | 18 ++++++++ .../groq/running-a-model-or-program.md | 20 +-------- docs/ai-testbed/groq/virtual-environments.md | 41 +++++++++++++++++++ mkdocs.yml | 1 + 4 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 docs/ai-testbed/groq/job-queuing-and-submission.md create mode 100644 docs/ai-testbed/groq/virtual-environments.md diff --git a/docs/ai-testbed/groq/job-queuing-and-submission.md b/docs/ai-testbed/groq/job-queuing-and-submission.md new file mode 100644 index 000000000..37f624317 --- /dev/null +++ b/docs/ai-testbed/groq/job-queuing-and-submission.md @@ -0,0 +1,18 @@ +# Job Queueing and Submission + +Groq jobs in the AI Testbed's groqrack are managed by the PBS job scheduler.
+Overview: [PBS](https://en.wikipedia.org/wiki/Portable_Batch_System)
+For additional information, see +[https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/](https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/)
+Man pages are available. These are the key commands: +```console +# qsub - to submit a batch job using a script +man qsub +# qstat - to display queue information +man qstat +# qdel - to delete (cancel) a job: +man qdel +# qhold - to hold a job +man qhold +``` + diff --git a/docs/ai-testbed/groq/running-a-model-or-program.md b/docs/ai-testbed/groq/running-a-model-or-program.md index cb962ca87..d1a5ce4c0 100644 --- a/docs/ai-testbed/groq/running-a-model-or-program.md +++ b/docs/ai-testbed/groq/running-a-model-or-program.md @@ -33,24 +33,6 @@ Follow the instructions in the [Virtual Environments](virtual-environments.md) < Note: Similar install instructions are in `~/groqflow/docs/install.md` or [GroqFlow™ Installation Guide](https://github.com/groq/groqflow/blob/main/docs/install.md)
The conda enviroment should be reinstalled whenever new groqflow code is pulled from the groqflow github; with a groqflow conda environment activated, redo just the pip install steps. -### Job submission and queuing - -Groq jobs in the AI Testbed's groqrack are managed by the PBS job scheduler.
-Overview: [PBS](https://en.wikipedia.org/wiki/Portable_Batch_System) -For additional information, see -[https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/](https://docs.alcf.anl.gov/running-jobs/job-and-queue-scheduling/)
-Man pages are available: -```console -# qsub - to submit a batch job to the specified queue using a script -man qsub -# qstat - to display queue information -man qstat -# qdel - to delete (cancel) a job: -man qdel -# qhold - to hold a job -man qhold -``` - ### Running a groqflow sample Each groqflow sample directory in the `~/groqflow/proof_points` tree has a README.md describing the sample and how to run it. @@ -60,6 +42,8 @@ conda activate groqflow ``` #### Run a sample using PBS +See [Job Queueing and Submission](job-queuing-and-submission.md) for more information about the PBS job scheduler. + Create a script `run_minilmv2.sh` with the following contents. It assumes that conda was installed in the default location. The conda initialize section can also be copied from your .bashrc if the conda installer was allowed to add it. ```bash #!/bin/bash diff --git a/docs/ai-testbed/groq/virtual-environments.md b/docs/ai-testbed/groq/virtual-environments.md new file mode 100644 index 000000000..b67a49345 --- /dev/null +++ b/docs/ai-testbed/groq/virtual-environments.md @@ -0,0 +1,41 @@ +# Virtual Environments + +## Install conda +If conda is not already installed: +```bash +rm Miniconda3-latest-Linux-x86_64.sh* +wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh +bash Miniconda3-latest-Linux-x86_64.sh +# answer y/yes to all prompts +# exit ssh session, then start a new ssh session +exit +``` +## GroqFlow conda environment setup +### Create and activate a groqflow conda environment +Create a groqflow conda environment and activate it +```bash +export PYTHON_VERSION=3.10.12 +conda create -n groqflow python=$PYTHON_VERSION +conda activate groqflow +``` + +### Install groqflow into the groqflow conda environment +Execute the following commands to install groqflow into the activated groqflow conda environment +```bash +# Alter this if you have cloned groqflow to some other location. +cd ~/groqflow +pip install --upgrade pip +pip install -e . +pushd . +cd demo_helpers +pip install -e . +popd +``` + +To use groqfloq, +```bash +conda activate groqflow +``` +Note: Always use a personal conda environment when installing packages on groq nodes; otherwise they can get installed into `~/.local` and can cause problems when your shared home directory is used on other systems. If you encounter mysterious package dependency/version issues, check your `~/.local/lib` and `~/.local/bin` for mistakenly installed packages. + +Note: The conda enviroment should be reinstalled whenever new groqflow code is pulled from the groqflow github; with a groqflow conda environment activated, redo just the pip install steps. diff --git a/mkdocs.yml b/mkdocs.yml index b0b6c5a04..0303aba0c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -251,6 +251,7 @@ nav: - Running a Model/Program: ai-testbed/groq/running-a-model-or-program.md #- Example Programs: ai-testbed/groq/example-programs.md - Virtual Environments: ai-testbed/groq/virtual-environments.md + - Job Queueing and Submission: ai-testbed/groq/job-queuing-and-submission.md - Data Management: ai-testbed/data-management/data-management-overview.md - Cooley: - Hardware Overview: From 89324a996aa9c09196affa488301efa29b7a6c49 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:42:44 -0500 Subject: [PATCH 59/67] Remove SN GEN1 --- mkdocs.yml | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 0303aba0c..7233facda 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -209,30 +209,16 @@ nav: - Running a Model/Program: ai-testbed/graphcore/running-a-model-or-program.md - Job Queuing and Submission: ai-testbed/graphcore/job-queuing-and-submission.md - Example Programs: ai-testbed/graphcore/example-programs.md - #- Tunneling and Forwarding Ports: ai-testbed/graphcore/Tunneling-and-forwarding-ports.md - #- CosmicTagger Conversion: ai-testbed/graphcore/cosmictagger-conversion.md - #- CosmicTagger Distributed Data Parallel: ai-testbed/graphcore/cosmictagger-ddp.md - #- DataParallel: ai-testbed/graphcore/DataParallel.md - #- Multi-node: ai-testbed/graphcore/multi-node-setup.md - #- Profiling: ai-testbed/graphcore/profiling.md - #- Profiling MNIST: ai-testbed/graphcore/profiling-mnist.md - #- Profiling ResNet50: ai-testbed/graphcore/profiling-resnet50.md - Miscellaneous: ai-testbed/graphcore/miscellaneous.md - Documentation: ai-testbed/graphcore/documentation.md - - SambaNova Gen1: - - System Overview: ai-testbed/sambanova_gen1/system-overview.md - - Getting Started: ai-testbed/sambanova_gen1/getting-started.md - - Virtual Environment: ai-testbed/sambanova_gen1/virtual-environment.md - - Steps to Run a Model/Program: ai-testbed/sambanova_gen1/running-a-model-or-program.md - - Job Queuing and Submission: ai-testbed/sambanova_gen1/job-queuing-and-submission.md - - Example Programs: ai-testbed/sambanova_gen1/example-programs.md - - Example Multi-Node Programs: ai-testbed/sambanova_gen1/example-multi-node-programs.md - #- Steps to Run BERT Large on Sambanova DataScale SN10-8R: ai-testbed/sambanova_gen1/running-bert-large-on-sn10-8r.md - - Tunneling and Forwarding Ports: ai-testbed/sambanova_gen1/tunneling-and-forwarding-ports.md - #- DataParallel: ai-testbed/sambanova_gen1/DataParallel.md - - Miscellaneous: ai-testbed/sambanova_gen1/miscellaneous.md - - SambaNova Documentation: ai-testbed/sambanova_gen1/documentation.md - - SambaNova Gen2: + - Groq: + - System Overview: ai-testbed/groq/system-overview.md + - Getting Started: ai-testbed/groq/getting-started.md + - Running a Model/Program: ai-testbed/groq/running-a-model-or-program.md + #- Example Programs: ai-testbed/groq/example-programs.md + - Virtual Environments: ai-testbed/groq/virtual-environments.md + - Job Queueing and Submission: ai-testbed/groq/job-queuing-and-submission.md + - SambaNova: - System Overview: ai-testbed/sambanova_gen2/system-overview.md - Getting Started: ai-testbed/sambanova_gen2/getting-started.md - Virtual Environment: ai-testbed/sambanova_gen2/virtual-environment.md @@ -245,13 +231,6 @@ nav: - Miscellaneous: ai-testbed/sambanova_gen2/miscellaneous.md - SambaNova Documentation: ai-testbed/sambanova_gen2/documentation.md # - Performance Tools: ai-testbed/sambanova_gen2/performance-tools.md - - Groq: - - System Overview: ai-testbed/groq/system-overview.md - - Getting Started: ai-testbed/groq/getting-started.md - - Running a Model/Program: ai-testbed/groq/running-a-model-or-program.md - #- Example Programs: ai-testbed/groq/example-programs.md - - Virtual Environments: ai-testbed/groq/virtual-environments.md - - Job Queueing and Submission: ai-testbed/groq/job-queuing-and-submission.md - Data Management: ai-testbed/data-management/data-management-overview.md - Cooley: - Hardware Overview: From c31c1ff510a02dfd05a6dfc9056f045f1ff0ed2f Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:43:53 -0500 Subject: [PATCH 60/67] Delete docs/ai-testbed/sambanova_gen1 directory --- docs/ai-testbed/sambanova_gen1/TODO.md | 237 -------- .../sambanova_gen1/documentation.md | 41 -- .../example-multi-node-programs.md | 211 ------- .../sambanova_gen1/example-programs.md | 317 ---------- .../files/2022-09-21T19-21-05.html | 23 - .../sambanova_gen1/files/Log_in.png | Bin 33639 -> 0 bytes .../ai-testbed/sambanova_gen1/files/ST_UI.jpg | Bin 20781 -> 0 bytes .../sambanova_gen1/files/ST_console.jpg | Bin 95863 -> 0 bytes .../files/bw_unet_compile_run_all.sh | 79 --- .../files/ccle_09_19_22_11_50.log | 375 ------------ .../files/sambanova_login-2.jpg | Bin 141951 -> 0 bytes .../sambanova_gen1/files/sambanova_login.jpg | Bin 141951 -> 0 bytes .../sambanova_gen1/files/tmpeo5ehksn.html | 23 - .../sambanova_gen1/files/unet_all.sh | 34 -- .../sambanova_gen1/files/unet_batch.sh | 28 - .../files/unet_compile_run_all.sh | 80 --- .../files/unet_compile_run_inf_rl.sh | 42 -- .../files/unet_compile_run_parallel_all.sh | 44 -- docs/ai-testbed/sambanova_gen1/files/uno.yaml | 11 - .../sambanova_gen1/files/uno_bruce_tmp.yaml | 11 - .../sambanova_gen1/files/uno_brw_CCLE.yaml | 11 - .../sambanova_gen1/files/uno_rick_tmp.yaml | 11 - .../sambanova_gen1/getting-started.md | 72 --- .../job-queuing-and-submission.md | 87 --- .../sambanova_gen1/miscellaneous.md | 206 ------- .../running-a-model-or-program.md | 66 --- .../sambanova_gen1/system-overview.md | 7 - .../tunneling-and-forwarding-ports.md | 96 --- .../unused/performance-tools.md | 38 -- .../unused/running-bert-large-on-sn10-8r.md | 178 ------ .../sambanova_gen1/unused/sambanova.md | 110 ---- .../unused/sambatune-user-guide.md | 553 ------------------ .../sambanova_gen1/virtual-environment.md | 47 -- 33 files changed, 3038 deletions(-) delete mode 100644 docs/ai-testbed/sambanova_gen1/TODO.md delete mode 100644 docs/ai-testbed/sambanova_gen1/documentation.md delete mode 100644 docs/ai-testbed/sambanova_gen1/example-multi-node-programs.md delete mode 100644 docs/ai-testbed/sambanova_gen1/example-programs.md delete mode 100644 docs/ai-testbed/sambanova_gen1/files/2022-09-21T19-21-05.html delete mode 100644 docs/ai-testbed/sambanova_gen1/files/Log_in.png delete mode 100644 docs/ai-testbed/sambanova_gen1/files/ST_UI.jpg delete mode 100644 docs/ai-testbed/sambanova_gen1/files/ST_console.jpg delete mode 100644 docs/ai-testbed/sambanova_gen1/files/bw_unet_compile_run_all.sh delete mode 100644 docs/ai-testbed/sambanova_gen1/files/ccle_09_19_22_11_50.log delete mode 100644 docs/ai-testbed/sambanova_gen1/files/sambanova_login-2.jpg delete mode 100644 docs/ai-testbed/sambanova_gen1/files/sambanova_login.jpg delete mode 100644 docs/ai-testbed/sambanova_gen1/files/tmpeo5ehksn.html delete mode 100644 docs/ai-testbed/sambanova_gen1/files/unet_all.sh delete mode 100644 docs/ai-testbed/sambanova_gen1/files/unet_batch.sh delete mode 100644 docs/ai-testbed/sambanova_gen1/files/unet_compile_run_all.sh delete mode 100644 docs/ai-testbed/sambanova_gen1/files/unet_compile_run_inf_rl.sh delete mode 100644 docs/ai-testbed/sambanova_gen1/files/unet_compile_run_parallel_all.sh delete mode 100644 docs/ai-testbed/sambanova_gen1/files/uno.yaml delete mode 100644 docs/ai-testbed/sambanova_gen1/files/uno_bruce_tmp.yaml delete mode 100644 docs/ai-testbed/sambanova_gen1/files/uno_brw_CCLE.yaml delete mode 100644 docs/ai-testbed/sambanova_gen1/files/uno_rick_tmp.yaml delete mode 100644 docs/ai-testbed/sambanova_gen1/getting-started.md delete mode 100644 docs/ai-testbed/sambanova_gen1/job-queuing-and-submission.md delete mode 100644 docs/ai-testbed/sambanova_gen1/miscellaneous.md delete mode 100644 docs/ai-testbed/sambanova_gen1/running-a-model-or-program.md delete mode 100644 docs/ai-testbed/sambanova_gen1/system-overview.md delete mode 100644 docs/ai-testbed/sambanova_gen1/tunneling-and-forwarding-ports.md delete mode 100644 docs/ai-testbed/sambanova_gen1/unused/performance-tools.md delete mode 100644 docs/ai-testbed/sambanova_gen1/unused/running-bert-large-on-sn10-8r.md delete mode 100644 docs/ai-testbed/sambanova_gen1/unused/sambanova.md delete mode 100644 docs/ai-testbed/sambanova_gen1/unused/sambatune-user-guide.md delete mode 100644 docs/ai-testbed/sambanova_gen1/virtual-environment.md diff --git a/docs/ai-testbed/sambanova_gen1/TODO.md b/docs/ai-testbed/sambanova_gen1/TODO.md deleted file mode 100644 index 392168983..000000000 --- a/docs/ai-testbed/sambanova_gen1/TODO.md +++ /dev/null @@ -1,237 +0,0 @@ -# TODO - -- [ ] Simple how to run data parallel on SN. -- [X] On first glance, It would be good to include information of what model is being run here. -- [X] Can users just take an existing compiled model and run? No, they need to recompile here for this, right? Users coming from the GPU land would falter here otherwise. -- [X] How is data parallel implemented in a single sentence would be good. -- [ ] What does intelligently split data mean? Is there a special or particular way it is done or can be done that is different from what is done, say, on a GPU or other systems today? -- [ ] What happens if I set ws = 3 -- [X] Why are we setting OMP_NUM_THREADS=8? What happens if we set it lower. If this is important, we should highlight it -- [X] Mention that MPI is used to do data-parallel training. Number of MPI ranks should be equal to RDUs requested -- [X] What does reduce on rdu imply. Please provide more details here. -- [ ] How does someone who has worked with Horovod or DDP move to use data parallel on SN? -- [ ] Does bs=1 mean local batch. - -- [ ] docs/sambanova/Best-Practices-and-FAQs.md ## MPI -- TODO -- this needs to be redone - may be part of data parallel page. -- [ ] Edit Anatomy... to be a technical doc -- [ ] Edit DataParallel.md to be a technical doc -- [...] SN provide indexing for their docs. From training -- [X] We need to include in the documentation where the SN docs are located, -- [X] what the contents are, -- [X] and how to view them. -- [X] As part of what the contents are, we need some readme.md with the PDFs listed -- [X] SN PDF docs copy them locally. and then view them. VV has a tar file also. - -- [X] Move snconfig from overview to Miscellaneous -- [X] Ask SN for a diagram. -- [X] Use SN diagram. - -```text -## [SambaNova](https://github.com/argonne-lcf/ai-testbed-userdocs/tree/main/docs/sambanova) -**DONE**1. [System Overview](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/System-Overview.md) - - **DONE** "half-rack system" ? **Yes** - - **DONE**Configuration section says - > SambaNova node can be accessed as sm-01.ai.alcf.anl.gov. **This is the actual SN node.** - - but page on [How to setup your base environment](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/How-to-setup-your-base-environment.md)says - ```bash - ssh ALCFUserID@sambanova.alcf.anl.gov - ``` - **This is the log in node.** - -2. [How to setup your base environment](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/System-Overview.md) - **DONE**1. Page title reads like an instruction, whereas most of the others read like section titles **docs/sambanova/Logging-into-a-SambaNova-Node.md** - **SKIPPED**2. Could combine this page with [Using virtual environments to customize environment](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/Using-virtual-environments-to-customize-environment.md) into a single **Environment Setup** page?? - -3. [Using virtual environments to customize environment](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/Using-virtual-environments-to-customize-environment.md) - **DONE** **As script**1. Might be worth mentioning what packages are included in `--system-site-packages` - 2. What commonly used packages are missing / might need to be installed manually? -4. [Steps to run a model / program](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/Steps-to-run-a-model-or-program.md) - - Might be worth mentioning that the [Example Programs](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/Example-Programs.md) page has instructions for making a local copy of the examples used in the documentation - - "The SambaNova workflow includes the following main steps to run a model" - - Maybe list steps explicitly and then expand on them in their respective sections? e .g. - - The SambaNova workflow includes the following main steps to run a model: - 1. Compile - 2. Run - 3. Test (optional) - - Seems a bit unnecessary to list them as steps if the Test step is optional? - - **DONE**Where is the `pef` directory coming from in the `srun python lenet.py run --pef="pef/lenet/lenet.pef `command? - - -11. [Miscellaneous](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/Miscellaneous.md) - **VV seems fine with the original**1. Might be a good idea to include the links under Resources somewhere on the main page? -12. - -- [ ] [Anatomy of SambaNova PyTorch Models](https://github.com/argonne-lcf/ai-testbed-userdocs/blob/main/docs/sambanova/Anatomy-of-SambaNova-PyTorch-Models.md) - 1. Updates section references https://git.cels.anl.gov/ai-testbed-apps/sambanova/sambanova_starter.git but that link requires special permission to view - - -- [X] **There is already a link to the Example Programs.**Page Steps to Run a Model/Program : Add “ cd ~/apps/starters/“ before the example -- [X] **I would have to set up a new repo from SC22 paper.** Page Performance Tools : Measure TFLOPs : Conv2D forward pass example file location can be provided -- [X] Page Example Programs : section UNet : Remove question mark here --batch-size=1? python unet.py run --do-train --in-channels=3 --in-width=32 --in-height=32 --init-features 32 --batch-size=1? --data-dir $DATADIR --log-dir ${OUTDIR}/log_dir_unet32_train --epochs 5 --pef=${OUTDIR}/unet_train/unet_train.pef - -Page Best Practices and FAQs : Section Data Parallel : Add unet_main.py file location -- [X] Page Best Practices and FAQs : Section Data Parallel : Remove “- —“ near python unet_main.py compile - --batch-size=48 -- [X] Page Best Practices and FAQs : Section Data Parallel : Remove “- —“ unet_main.py run - -p . -- [Doc'd elsewhere] Also set export - [ SOFTWARE_HOME before compile and add to —pef-name -- [X] Argonne SambaNova-Training-June2021 and Human Decisions Files notes link is broken - -Typos : Page :Anatomy of SambaNova PyTorch Model typo at -- [X] “Then once every 10,000 epics, print the status” -- [X] “Contains the train and test methods and a littile more.” -- [X] “instantiated instantiate” -- [X] “the the bigger systems “ -- [X] “t the the various “ - -Page Best Practices and FAQs: -- [UTL] “t and environment variable” -- [X] “where the loss is calculating across - calculated“ - -- [X] Page Steps to Run a Model/Program: “Test (Optional) This commands - command“ -- [X] Page How to Setup Your Base Environment - “ request an acccount a” “generted - generated” - - -- [X] ModelZoo to /software/sambanova/apps/ and also use symbolic link for latest. - -- [X] How to do DataParallel. add page. See Confluence and maybe video and its .pptx - -- [X] How to spec 2 or more RDUs on SN? Queue and Sub also. -- [model parallel] can do in compile phase v. run can be different. - -- [X] Move SN starter code to /software/sambanova/tutorials - -- [OK] just fyi, here's how to serve html from the bastion node (e.g. cerebras.alcf.anl.gov): - -```bash -ssh -t -L localhost:8089:localhost:8089 arnoldw@cerebras.alcf.anl.gov "cd /software/cerebras/docs/V1.1/;python3 -m http.server 8089" -``` - -## System Overview - -- [ ] First draft -- [ ] First draft reviewed -- [ ] Second draft -- [ ] Second draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## How to setup your base environment - -- [X] First draft -- [X] First draft reviewed -- [X] Second draft 4/18 -- [X] Second draft reviewed -- [X] Third draft 4/20 -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Using Virtual Environments to Customize Environment - -- [X] First draft -- [X] First draft reviewed -- [X] Second draft 4/18 -- [X] Second draft reviewed -- [X] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Steps to Run a Model/Program - -- [X] First draft -- [X] First draft reviewed -- [X] Second draft 4/19 -- [X] Second draft reviewed -- [X] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Job Queueing and Submission - -- [X] First draft -- [X] First draft reviewed -- [X] Second draft 4/18 -- [X] Second draft reviewed -- [X] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Example Programs - -- [X] First draft -- [X] First draft reviewed -- [X] Second draft 4/19 -- [X] Second draft reviewed -- [X] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Performance Tools - -- [X] First draft 4/19 -- [X] First draft reviewed -- [ ] Second draft -- [ ] Second draft reviewed -- [ ] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Best Practices and FAQs - -- [X] First draft 4/19 -- [X] First draft reviewed -- [ ] Second draft -- [ ] Second draft reviewed -- [ ] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Tunneling and Forwarding Ports - -- [X] First draft 4/19 -- [X] First draft reviewed -- [ ] Second draft -- [ ] Second draft reviewed -- [ ] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## System and Storage Policies - -- [ ] First draft -- [ ] First draft reviewed -- [ ] Second draft -- [ ] Second draft reviewed -- [ ] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Miscellaneous - -- [X] First draft 4/19 -- [X] First draft reviewed -- [ ] Second draft -- [ ] Second draft reviewed -- [ ] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed - -## Anatomy of SambaNova PyTorch Models - -- [X] First draft -- [X] First draft reviewed -- [ ] Second draft -- [ ] Second draft reviewed -- [ ] Third draft -- [ ] Third draft reviewed -- [ ] Final draft -- [ ] Final draft reviewed diff --git a/docs/ai-testbed/sambanova_gen1/documentation.md b/docs/ai-testbed/sambanova_gen1/documentation.md deleted file mode 100644 index 19ab2c608..000000000 --- a/docs/ai-testbed/sambanova_gen1/documentation.md +++ /dev/null @@ -1,41 +0,0 @@ -# Documentation - -The SambaNova documentation is housed at `/software/sambanova/docs/latest/` accessible via login node. - -```text -getting-started.pdf # Getting Started with SambaFlow -accuracy-debugging-tools.pdf # Introduction to the model accuracy debugging tools. -compiler-options.pdf # Provides advanced compiler options for the compile command. -conversion-to-sambaflow.pdf # Converting existing models to SambaFlow -intermediate-tutorial.pdf # SambaFlow intermediate model -intro-tutorial-pytorch.pdf # A peek into the code of the above example program. -release-notes.pdf # Provide new feature and bug fixes updates for each release version. -run-examples-language.pdf # Run BERT on RDU -run-examples-pytorch.pdf # Run Power PCA and micro models like GEMM on RDU -run-examples-vision.pdf # Run UNET on RDU. -using-layernorm.pdf # Example to use LayerNorm instead of BatchNorm -using-venvs.pdf # Python Virtual Environment. - -latest\ - accuracy-debugging-tools.pdf - compiler-options.pdf - conversion-to-sambaflow.pdf - getting-started.pdf - intermediate-tutorial.pdf - intro-tutorial-pytorch.pdf - release-notes.pdf - run-examples-language.pdf - run-examples-pytorch.pdf - run-examples-vision.pdf - using-layernorm.pdf - using-venvs.pdf -``` - -The documentation can be viewed on your local system by copying the files from the login node. - -```bash -cd -scp -r ALCFUserID@sambanova.alcf.anl.gov:/software/sambanova/docs/latest/* . -``` - -View the PDFs in your favorite viewer or web browser on your local machine. diff --git a/docs/ai-testbed/sambanova_gen1/example-multi-node-programs.md b/docs/ai-testbed/sambanova_gen1/example-multi-node-programs.md deleted file mode 100644 index 14ee59655..000000000 --- a/docs/ai-testbed/sambanova_gen1/example-multi-node-programs.md +++ /dev/null @@ -1,211 +0,0 @@ -# Example Multi-Node Programs - -SambaNova provides examples of some well-known AI applications under the path: `/opt/sambaflow/apps/starters`, on both SambaNova compute nodes. Make a copy of this to your home directory: - -Copy starters to your personal directory structure if you have not already done so. - -```bash -cd ~/ -mkdir apps -cp -r /opt/sambaflow/apps/starters apps/starters -``` - -## UNet - -### Set-up - -Copy files and change directory if you have not already done so. - -```bash -cp -r /opt/sambaflow/apps/image ~/apps/image -cd ~/apps/image -cp /software/sambanova/apps/image/pytorch/unet/*.sh . -``` - -You just copied two **bash** scripts. They are: - -1. **unet_all.sh** - - - Compiles UNet and then submits a batch job to run the model. - -2. **unet_batch.sh** - - - Runs Unet. - -### Unet All - -Here is a breakdown of **unet_all.sh**. - -The argument **-x** is used to specify that each executed line is to be displayed. - -The second line is to stop on error. - -Lastly, set total time, **SECONDS**, to zero. - -```bash -#! /bin/bash -x -set -e -# -# Usage: ./unet_all.sh 256 256 -# -SECONDS=0 -``` - -Set variables. - -```bash -# IMage size. -IM=${1} -# Batch Size -BS=${2} -NUM_WORKERS=1 -export OMP_NUM_THREADS=16 -``` - -Activate the virtual environment. And, establish the UNet directory. - -```bash -source /opt/sambaflow/venv/bin/activate -UNET=$(pwd)/unet -``` - -Display model name and time. - -```bash -echo "Model: UNET" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) - -echo "COMPILE" -``` - -This section will compile the model for multiple RDUs if it does not exist. - -A log file will be created at **compile_${BS}_${IM}_NN.log**. - -```bash -# Compile for parallel RDUs -if [ ! -e out/unet_train_${BS}_${IM}_NN/unet_train_${BS}_${IM}_NN.pef ] ; then - python ${UNET}/unet.py compile -b ${BS} --in-channels=3 --in-width=${IM} --in-height=${IM} --enable-conv-tiling --mac-v2 --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${IM}_NN" --data-parallel -ws 2 > compile_${BS}_${IM}_NN.log 2>&1 -fi -``` - -Here, a batch job is submitted for the multi-node run. - -Sbatch argument definitions: - - - **--gres=rdu:1** - - This indicates that the model fits on a single RDU. - - - **--tasks-per-node 8** - - All eight RDUs per node are to be used. Valid options are 1 through 8. - - - **--nodes 2** - - The number of nodes to use. Currently there are two nodes. - - - **--nodelist sm-02,sm-01** - - The node names to use. - - - **--cpus-per-task=16** - - CPUs per model. - - - **unet_batch.sh** - - The **bash** script to be batched. - -**Unet_batch.sh** argument definitions: - - - **NN** - - Number of nodes. - -```bash -# Run Multi-Node, Data Parallel -NN=2 -echo "RUN" -echo "NN=${NN}" -sbatch --gres=rdu:1 --tasks-per-node 8 --nodes 2 --nodelist sm-02,sm-01 --cpus-per-task=16 ./unet_batch.sh ${NN} ${NUM_WORKERS} -echo "Duration: " $SECONDS -``` - -### Unet Batch - -Here is a description of **unet_batch.sh**. This script is automatically run by **unet_all.sh**. - -This block is the same as above. - -```bash -#! /bin/bash -x -set -e -# -# Usage: ./unet_batch.sh 2 1 -# -SECONDS=0 -``` - -Establish variables. - -```bash -# Batch Size -BS=256 - -# IMage size -IM=256 -NN=${1} -NUM_WORKERS=${2} -export OMP_NUM_THREADS=16 -DATADIR=/software/sambanova/dataset/kaggle_3m -UNET=$(pwd)/unet -export SAMBA_CCL_USE_PCIE_TRANSPORT=0 -``` - -Activate virtual environment. - -```bash -source /opt/sambaflow/venv/bin/activate -``` - -Display an informative banner. - -```bash -echo "Model: UNET_TRAIN" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) -``` - -Run Unet - -```bash -srun --mpi=pmi2 python ${UNET}/unet_hook.py run --do-train --in-channels=3 --in-width=${IM} --in-height=${IM} --init-features 32 --batch-size=${BS} --epochs 2 --data-dir ${DATADIR} --log-dir log_dir_unet_${NN}_train_kaggle --pef=$(pwd)/out/unet_train_${BS}_${IM}_NN/unet_train_${BS}_${IM}_NN.pef --data-parallel --reduce-on-rdu --num-workers=${NUM_WORKERS} -``` - -Display total execution time. - -```bash -echo "Duration: " $SECONDS -``` - -### Compile and Run - -Change directory: - -```bash -cd ~/apps/image/ -``` - -Compile and run UNet: - -```bash -./unet_all.sh 256 256 -``` - -Squeue will give you the queue status. - -```bash -squeue -``` diff --git a/docs/ai-testbed/sambanova_gen1/example-programs.md b/docs/ai-testbed/sambanova_gen1/example-programs.md deleted file mode 100644 index 0a7434190..000000000 --- a/docs/ai-testbed/sambanova_gen1/example-programs.md +++ /dev/null @@ -1,317 +0,0 @@ -# Example Programs - -SambaNova provides examples of some well-known AI applications under the path: `/opt/sambaflow/apps/starters`, on both SambaNova compute nodes. Make a copy of this to your home directory: - -Copy starters to your personal directory structure: - -```bash -cd ~/ -mkdir apps -cp -r /opt/sambaflow/apps/starters apps/starters -``` - -## LeNet - -Change directory - -```bash -cd ~/apps/starters/lenet -``` - -### Common Arguments - -Below are some of the common arguments used across most of the models in the example code. - -| Argument | Default | Help | -|------------------------|-----------|--------------------------------| -| -b | 1 | Batch size for training | -| | | | -| -n, | 100 | Number of iterations to run | -| --num-iterations | | the pef for | -| | | | -| -e, | 1 | Number epochs for training | -| --num-epochs | | | -| | | | -| --log-path | 'check | Log path | -| | points' | | -| | | | -| --num-workers | 0 | Number of workers | -| | | | -| --measure-train- | None | Measure training performance | -| performance | | | -| | | | - -### LeNet Arguments - -| Argument | Default | Help | -|------------------------|-----------|--------------------------------| -| --lr | 0.01 | Learning rate for training | -| | | | -| --momentum | 0.0 | Momentum value for training | -| | | | -| --weight-decay | 0.01 | Weight decay for training | -| | | | -| --data-path | './data' | Data path | -| | | | -| --data-folder | 'mnist_ | Folder containing mnist data | -| | data' | | -| | | | - -**NOTE: If you receive an \"HTTP error\" message on any of the -following commands, run the command again. Such errors (e.g 503) are -commonly an intermittent failure to download a dataset.** - -Run these commands: - -```bash -srun python lenet.py compile -b=1 --pef-name="lenet" --output-folder="pef" -srun python lenet.py run --pef="pef/lenet/lenet.pef" -``` - -To use Slurm sbatch, create submit-lenet-job.sh with the following -contents: - -```bash -#!/bin/sh - -python lenet.py compile -b=1 --pef-name="lenet" --output-folder="pef" -python lenet.py run --pef="pef/lenet/lenet.pef" -``` - -Then - -```bash -sbatch --output=pef/lenet/output.log submit-lenet-job.sh -``` - -Squeue will give you the queue status. - -```bash -squeue -# One may also... -watch squeue -``` - -The output file will look something like this: - -```text -[Info][SAMBA][Default] # Placing log files in -pef/lenet/lenet.samba.log - -[Info][MAC][Default] # Placing log files in -pef/lenet/lenet.mac.log - -[Warning][SAMBA][Default] # - --------------------------------------------------- - -Using patched version of torch.cat and torch.stack - --------------------------------------------------- - -[Warning][SAMBA][Default] # The dtype of "targets" to -CrossEntropyLoss is torch.int64, however only int16 is currently -supported, implicit conversion will happen - -[Warning][MAC][GraphLoweringPass] # lenet__reshape skip -set_loop_to_air - -[Warning][MAC][GraphLoweringPass] # lenet__reshape_bwd skip -set_loop_to_air - -... - -Epoch [1/1], Step [59994/60000], Loss: 0.1712 - -Epoch [1/1], Step [59995/60000], Loss: 0.1712 - -Epoch [1/1], Step [59996/60000], Loss: 0.1712 - -Epoch [1/1], Step [59997/60000], Loss: 0.1712 - -Epoch [1/1], Step [59998/60000], Loss: 0.1712 - -Epoch [1/1], Step [59999/60000], Loss: 0.1712 - -Epoch [1/1], Step [60000/60000], Loss: 0.1712 - -Test Accuracy: 98.06 Loss: 0.0628 - -2021-6-10 10:52:28 : [INFO][SC][53607]: SambaConnector: PEF File: -pef/lenet/lenet.pef - -Log ID initialized to: [ALCFUserID][python][53607] at -/var/log/sambaflow/runtime/sn.log -``` - -## MNIST - Feed Forward Network - -Change directory - -```bash -cd ~/apps/starters/ffn_mnist/ -``` - -Commands to run MNIST example: - -```bash -srun python ffn_mnist.py compile --pef-name="ffn_mnist" --output-folder="pef" -srun python ffn_mnist.py run --pef="pef/ffn_mnist/ffn_mnist.pef" --data-path mnist_data -``` - -To run the same using Slurm sbatch, create and run the submit-ffn_mnist-job.sh with the following contents. - -```bash -#!/bin/sh -python ffn_mnist.py compile --pef-name="ffn_mnist" --output-folder="pef" -python ffn_mnist.py run --pef="pef/ffn_mnist/ffn_mnist.pef" --data-path mnist_data -``` - -```bash -sbatch --output=pef/ffn_mnist/output.log submit-ffn_mnist-job.sh -``` - -## Logistic Regression - -Change directory - -```bash -cd ~/apps/starters/logreg -``` - -### Logistic Regression Arguments - -This is not an exhaustive list of arguments. - -Arguments - -| Argument | Default | Help | Step | -|---------------------|-------------|------------------------------|----------| -| --lr | 0.001 | Learning rate for training | Compile | -| | | | | -| --momentum | 0.0 | Momentum value for training | Compile | -| | | | | -| --weight-decay | 1e-4 | Weight decay for training | Compile | -| | | | | -| --num-features | 784 | Number features for training | Compile | -| | | | | -| --num-classes | 10 | Number classes for training | Compile | -| | | | | -| --weight-norm | na | Enable weight normalization | Compile | -| | | | | - -Run these commands: - -```bash -srun python logreg.py compile --pef-name="logreg" --output-folder="pef" -srun python logreg.py test --pef="pef/logreg/logreg.pef" -srun python logreg.py run --pef="pef/logreg/logreg.pef" -``` - -To use Slurm, create submit-logreg-job.sh with the following contents: - -```bash -#!/bin/sh -python logreg.py compile --pef-name="logreg" --output-folder="pef" -python logreg.py test --pef="pef/logreg/logreg.pef" -python logreg.py run --pef="pef/logreg/logreg.pef" -``` - -Then - -```bash -sbatch --output=pef/logreg/output.log submit-logreg-job.sh -``` - -The output, pef/logreg/output.log, will look something like this: - -```text -[Info][SAMBA][Default] # Placing log files in -pef/logreg/logreg.samba.log -[Info][MAC][Default] # Placing log files in -pef/logreg/logreg.mac.log -[Warning][SAMBA][Default] # --------------------------------------------------- -Using patched version of torch.cat and torch.stack --------------------------------------------------- - -[Warning][SAMBA][Default] # The dtype of "targets" to -CrossEntropyLoss is torch.int64, however only int16 is currently -supported, implicit conversion will happen -[Warning][MAC][MemoryOpTransformPass] # Backward graph is trimmed -according to requires_grad to save computation. -[Warning][MAC][WeightShareNodeMergePass] # Backward graph is -trimmed according to requires_grad to save computation. -[Warning][MAC][ReduceCatFaninPass] # Backward graph is trimmed -according to requires_grad to save computation. -[info ] [PLASMA] Launching plasma compilation! See log file: -/home/ALCFUserID/apps/starters/pytorch/pef/logreg//logreg.plasma_compile.log -... - -[Warning][SAMBA][Default] # The dtype of "targets" to -CrossEntropyLoss is torch.int64, however only int16 is currently -supported, implicit conversion will happen -Epoch [1/1], Step [10000/60000], Loss: 0.4763 -Epoch [1/1], Step [20000/60000], Loss: 0.4185 -Epoch [1/1], Step [30000/60000], Loss: 0.3888 -Epoch [1/1], Step [40000/60000], Loss: 0.3721 -Epoch [1/1], Step [50000/60000], Loss: 0.3590 -Epoch [1/1], Step [60000/60000], Loss: 0.3524 -Test Accuracy: 90.07 Loss: 0.3361 -2021-6-11 8:38:49 : [INFO][SC][99185]: SambaConnector: PEF File: -pef/logreg/logreg.pef -Log ID initialized to: [ALCFUserID][python][99185] at -/var/log/sambaflow/runtime/sn.log -``` - -## UNet - -Change directory and copy files. - -```bash -cp -r /opt/sambaflow/apps/image ~/apps/image -cd ~/apps/image/unet -``` - -Using the contents of [unet_compile_run_inf_rl.sh](files/unet_compile_run_inf_rl.sh), create a file in the current directory with the same name. - -Export the path to the dataset which is required for the training. - -```bash -export OUTDIR=~/apps/image/unet -export DATADIR=/software/sambanova/dataset/kaggle_3m -``` - -Run these commands for training (compile + train): - -```bash -sbatch unet_compile_run_inf_rl.sh compile 32 1 # Takes over 15 minutes. -sbatch unet_compile_run_inf_rl.sh test 32 1 # Very fast. -sbatch unet_compile_run_inf_rl.sh run 32 1 # -``` - -The output files are named **slurm-\.out**. - -Using SLURM: To use Slurm, create submit-unet-job.sh with the following -contents: - -```bash -#!/bin/sh -export OUTDIR=~/apps/image/unet -export DATADIR=/software/sambanova/dataset/kaggle_3m -./unet_compile_run_inf_rl.sh compile 32 1 -./unet_compile_run_inf_rl.sh test 32 1 -./unet_compile_run_inf_rl.sh run 32 1 -``` - -Then - -```bash -sbatch submit-unet-job.sh -``` - -Squeue will give you the queue status. - -```bash -squeue -``` diff --git a/docs/ai-testbed/sambanova_gen1/files/2022-09-21T19-21-05.html b/docs/ai-testbed/sambanova_gen1/files/2022-09-21T19-21-05.html deleted file mode 100644 index 3287e2759..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/2022-09-21T19-21-05.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - -

- - - - diff --git a/docs/ai-testbed/sambanova_gen1/files/Log_in.png b/docs/ai-testbed/sambanova_gen1/files/Log_in.png deleted file mode 100644 index 95d83fb66a8c0d14c9deed8bf9e49a48f41eef25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33639 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 diff --git a/docs/ai-testbed/sambanova_gen1/files/ST_UI.jpg b/docs/ai-testbed/sambanova_gen1/files/ST_UI.jpg deleted file mode 100644 index 1d48d82039f10da062aaa1c1887e991696501aba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20781 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%0DsqeWzJzyI8qQYvX89^2B*8>BRxd!+eHMmHs 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 diff --git a/docs/ai-testbed/sambanova_gen1/files/ST_console.jpg b/docs/ai-testbed/sambanova_gen1/files/ST_console.jpg deleted file mode 100644 index 6c910ee9691b5fc089bb885d106426860f1398fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95863 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 I9@roF55vEf^Z)<= diff --git a/docs/ai-testbed/sambanova_gen1/files/bw_unet_compile_run_all.sh b/docs/ai-testbed/sambanova_gen1/files/bw_unet_compile_run_all.sh deleted file mode 100644 index 73afdc3e7..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/bw_unet_compile_run_all.sh +++ /dev/null @@ -1,79 +0,0 @@ -#! /bin/bash -x -#set -e -# -# Usage: ./unet_compile_run_all.sh 256 256 -# -SECONDS=0 - -# IMage size. -IM=${1} -# Batch Size -BS=${2} -NUM_WORKERS=1 -export OMP_NUM_THREADS=16 - -source /opt/sambaflow/venv/bin/activate -UNET=$(pwd)/unet - -echo "Model: UNET" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) - -echo "COMPILE" -# Compile for a single RDU -i=single -if [ ! -e out/unet_train_${BS}_${IM}_${i}/unet_train_${BS}_${IM}_${i}.pef ] ; then - python ${UNET}/unet.py compile --log-level error -b ${BS} --in-channels=3 --in-width=${IM} --in-height=${IM} --enable-conv-tiling --mac-v2 --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${IM}_${i}" > compile_${BS}_${IM}_${i}.log 2>&1 -fi - -# Compile for parallel RDUs -if [ ! -e out/unet_train_${BS}_${IM}_NP/unet_train_${BS}_${IM}_NP.pef ] ; then - python ${UNET}/unet.py compile -b ${BS} --in-channels=3 --in-width=${IM} --in-height=${IM} --enable-conv-tiling --mac-v2 --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${IM}_NP" --data-parallel -ws 2 > compile_${BS}_${IM}_NP.log 2>&1 -fi - - -#run - -#single -#run single -#srun --cpus-per-task=16 --gres=rdu:1 python ${UNET}/unet_hook.py run --num-workers=${NUM_WORKERS} --do-train --in-channels=3 --in-width=${IM} --in-height=${IM} --init-features 32 --batch-size=${BS} --epochs 10 --data-dir /usr/local/share/data/unet32 --log-dir log_dir_unet_train_kaggle --pef=$(pwd)/out/unet_train_${BS}_${IM}_single/unet_train_${BS}_${IM}_single.pef --use-sambaloader > run_unet_${BS}_${IM}_single.log 2>&1 - -#Parallel -NP=2 -echo "RUN" -echo "NP=${NP}" -sbatch --gres=rdu:1 --tasks-per-node 8 --nodes 2 --nodelist sm-02,sm-01 --cpus-per-task=16 ./unet_batch.sh ${NP} ${NUM_WORKERS} -echo "Duration: " $SECONDS - - - - - - - -#! /bin/bash -x -#set -e -# -# Usage: ./unet_batch.sh 2 1 -# -SECONDS=0 -# Batch Size -BS=256 - -# IMage size -IM=256 -NP=${1} -NUM_WORKERS=${2} -export OMP_NUM_THREADS=16 -DATADIR=/software/sambanova/dataset/kaggle_3m - -source /opt/sambaflow/venv/bin/activate -UNET=$(pwd)/unet - -echo "Model: UNET_TRAIN" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) - -export SAMBA_CCL_USE_PCIE_TRANSPORT=0 -srun --mpi=pmi2 python ${UNET}/unet_hook.py run --do-train --in-channels=3 --in-width=${IM} --in-height=${IM} --init-features 32 --batch-size=${BS} --epochs 2 --data-dir ${DATADIR} --log-dir log_dir_unet_${NP}_train_kaggle --pef=$(pwd)/out/unet_train_${BS}_${IM}_NP/unet_train_${BS}_${IM}_NP.pef --data-parallel --reduce-on-rdu --num-workers=${NUM_WORKERS} -echo "Duration: " $SECONDS diff --git a/docs/ai-testbed/sambanova_gen1/files/ccle_09_19_22_11_50.log b/docs/ai-testbed/sambanova_gen1/files/ccle_09_19_22_11_50.log deleted file mode 100644 index a066dfd79..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/ccle_09_19_22_11_50.log +++ /dev/null @@ -1,375 +0,0 @@ -(venv) wilsonb@sm-01:~/DL/Sambanova/apps_1.12/private/anl$ sambatune uno_brw_CCLE.yaml --artifact-root $(pwd)/artifact_root --modes benchmark instrument run -No plugins available at this time. -/usr/local/lib/python3.7/site-packages/sambatune/userinterface.py:57: UserWarning: It is recommened to set Artifact root with a network drive starting with /import -Retrieving configuration file from: uno_brw_CCLE.yaml -19-Sep 17:39:30 - Info - SUCCESS: Save Configuration File -19-Sep 17:39:33 - Info - SUCCESS: Process User Input -Export environment variable OMP_NUM_THREADS=16, -Export environment variable SF_RNT_NUMA_BIND=2 -Arguments preparation was finished and prepare to compile! - -*** Running command ***: -/opt/sambaflow/venv/bin/python3 /opt/sambaflow/bin/snconfig show Node all -j /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/snconfig - -====================================================== -======= NODE Info ======= -====================================================== -======= Static Info ======= -Output JSON file: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/snconfig/show_node_static_2022-09-19_17-39-33.json - - -======= Dynamic Info ======= -Output JSON file: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/snconfig/show_node_dynamic_2022-09-19_17-39-34.json - - -*** Running command ***: -/opt/sambaflow/venv/bin/python3 /opt/sambaflow/bin/snconfig show Host all - -====================================================== -======= Host Info ======= -====================================================== -Timestamp : 2022-09-19 17:39:35 -cpuinfo_version : [8, 0, 0] -cpuinfo_version_string : 8.0.0 -arch : X86_64 -bits : 64 -count : 128 -arch_string_raw : x86_64 -vendor_id_raw : AuthenticAMD -brand_raw : AMD EPYC 7742 64-Core Processor -hz_advertised_friendly : 1.7487 GHz -hz_actual_friendly : 1.7487 GHz -hz_advertised : [1748667000, 0] -hz_actual : [1748667000, 0] -model : 49 -family : 23 -l3_cache_size : 524288 -l2_cache_size : 64 MiB -l1_data_cache_size : 4 MiB -l1_instruction_cache_size : 4 MiB -l2_cache_line_size : 512 -l2_cache_associativity : 6 -MemTotal : 1054336368 kB -MemFree : 31623660 kB -MemAvailable : 520658504 kB -HugePages_Total : 263 -HugePages_Free : 262 -HugePages_Rsvd : 0 -HugePages_Surp : 0 -Hugepagesize : 1048576 kB - -SambaTune is running on sn10. -19-Sep 17:39:36 - Info - SUCCESS: Execute Snconfig - ---> Compiling PEF ... -/opt/sambaflow/venv/bin/python3 /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_full.py compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 --debug --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial --compiler-configs-file /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/test_lists/compiler_configs_9_19_17_39_uno_full.json --output-folder /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full/compile --pef-name sn10__9_19_17_39_uno_full -19-Sep 17:43:26 - Info - SUCCESS: Copy Compile Gen Folder -19-Sep 17:43:26 - Info - SUCCESS: Execute Compile sn10__9_19_17_39_uno_full -19-Sep 17:43:26 - Info - SUCCESS: uno_full.py PEF (baseline) -19-Sep 17:43:26 - Info - SUCCESS: Compile App Baseline - ---> Compiling PEF ... -/opt/sambaflow/venv/bin/python3 /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_full.py compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 --debug --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial --stage-instrumentation=metapipe_stage_cycles --gen-tensorboard --compiler-configs-file /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/test_lists/compiler_configs_9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles.json --output-folder /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles/compile --pef-name sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles -19-Sep 17:44:09 - Info - SUCCESS: Copy Compile Gen Folder -19-Sep 17:44:09 - Info - SUCCESS: Execute Compile sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles - ---> Compiling PEF ... -/opt/sambaflow/venv/bin/python3 /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_full.py compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 --debug --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial --stage-instrumentation=metapipe_stage_cycles --include-read-stall-cycles --gen-tensorboard --compiler-configs-file /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/test_lists/compiler_configs_9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles.json --output-folder /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles/compile --pef-name sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles -19-Sep 17:44:52 - Info - SUCCESS: Copy Compile Gen Folder -19-Sep 17:44:52 - Info - SUCCESS: Execute Compile sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles - ---> Compiling PEF ... -/opt/sambaflow/venv/bin/python3 /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_full.py compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 --debug --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial --stage-instrumentation=metapipe_buf_cycles --gen-tensorboard --compiler-configs-file /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/test_lists/compiler_configs_9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles.json --output-folder /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles/compile --pef-name sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles -19-Sep 17:45:33 - Info - SUCCESS: Copy Compile Gen Folder -19-Sep 17:45:33 - Info - SUCCESS: Execute Compile sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles -19-Sep 17:45:33 - Info - SUCCESS: uno_full.py PEF -19-Sep 17:45:33 - Info - SUCCESS: Compile App -Compilation was finished and prepare to run! -Export environment variable OMP_NUM_THREADS=16, -Export environment variable SF_RNT_NUMA_BIND=2 -Export environment variable ENABLE_RUNTIME_PERF=SVP -Unset environment variable OMP_NUM_THREADS -Unset environment variable SF_RNT_NUMA_BIND -Unset environment variable ENABLE_RUNTIME_PERF -19-Sep 17:45:36 - Error - FAILURE: Execute Snprof -19-Sep 17:45:36 - Error - Message: Run Cmd Failed: /opt/sambaflow/bin/snprof -c "/opt/sambaflow/venv/bin/python3 /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_full.py measure-performance --multiprocess-pickle --use-pickle-train --measure-spatial --train-samba-spatial --mac-v1 --train_source CCLE --lr 0.001 --data-dir /software/sambanova/dataset/CCLE_16_500 --converted-pickle --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial -b 16 --pef=/home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full/compile/sn10__9_19_17_39_uno_full/sn10__9_19_17_39_uno_full.pef --bench-report-json /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/benchmark/sn10__9_19_17_39_uno_full_measure_performance.json" -bs 16 -i 100 --json /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/snprof/sn10__9_19_17_39_uno_full_measure_performance_snprof.json -p SVP ------------------------------------------------------------- -Traceback (most recent call last): - File "/utils_labhost.py", line 188, in copy_benchmark_data - File "/usr/local/lib/python3.7/shutil.py", line 248, in copy - copyfile(src, dst, follow_symlinks=follow_symlinks) - File "/usr/local/lib/python3.7/shutil.py", line 120, in copyfile - with open(src, 'rb') as fsrc: -FileNotFoundError: [Errno 2] No such file or directory: '/home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/benchmark/sn10__9_19_17_39_uno_full_measure_performance.json' -19-Sep 17:45:36 - Info - SUCCESS: Copy Benchmark Data - - -Error while running snprof jobs -19-Sep 17:45:36 - Error - FAILURE: Run snprof by lists -19-Sep 17:45:36 - Error - Message: Error while running snprof jobs - -*** Running command ***: -/opt/sambaflow/venv/bin/python3 /opt/sambaflow/bin/read_perf_counters -p /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full/compile/sn10__9_19_17_39_uno_full/sn10__9_19_17_39_uno_full.pef --json /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full.json - -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here. -Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations - from sambaflow.samba.utils.read_perf_counters import main -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working - from sambaflow.samba.utils.read_perf_counters import main -Reading performance counters. -Instrumentation, DDR, PCIE counters saved to /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full.json. - -[Info][SAMBA][Default] # Attempting to tear down a valid SambaRuntime context -[Info][SAMBA][Default] # Successfully tore down SambaRuntime context -2022-09-19T17:45:38 : [INFO][LIB][31335]: sn_create_session: PEF File: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full/compile/sn10__9_19_17_39_uno_full/sn10__9_19_17_39_uno_full.pef -Log ID initialized to: [wilsonb][python3][31335] at /var/log/sambaflow/runtime/sn.log - - -*** Running command ***: -/opt/sambaflow/venv/bin/python3 /opt/sambaflow/bin/read_perf_counters -p /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full/compile/sn10__9_19_17_39_uno_full/sn10__9_19_17_39_uno_full.pef --json /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full.json - -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here. -Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations - from sambaflow.samba.utils.read_perf_counters import main -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working - from sambaflow.samba.utils.read_perf_counters import main -Reading performance counters. -Instrumentation, DDR, PCIE counters saved to /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full.json. - -[Info][SAMBA][Default] # Attempting to tear down a valid SambaRuntime context -[Info][SAMBA][Default] # Successfully tore down SambaRuntime context -2022-09-19T17:45:51 : [INFO][LIB][31540]: sn_create_session: PEF File: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full/compile/sn10__9_19_17_39_uno_full/sn10__9_19_17_39_uno_full.pef -Log ID initialized to: [wilsonb][python3][31540] at /var/log/sambaflow/runtime/sn.log - - -*** Running command ***: -/opt/sambaflow/venv/bin/python3 /opt/sambaflow/bin/read_perf_counters -p /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles/compile/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles.pef --json /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles.json - -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here. -Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations - from sambaflow.samba.utils.read_perf_counters import main -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working - from sambaflow.samba.utils.read_perf_counters import main -Reading performance counters. -Instrumentation, DDR, PCIE counters saved to /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles.json. - -[Info][SAMBA][Default] # Attempting to tear down a valid SambaRuntime context -[Info][SAMBA][Default] # Successfully tore down SambaRuntime context -2022-09-19T17:46:04 : [INFO][LIB][31958]: sn_create_session: PEF File: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles/compile/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles.pef -Log ID initialized to: [wilsonb][python3][31958] at /var/log/sambaflow/runtime/sn.log - - -*** Running command ***: -/opt/sambaflow/venv/bin/python3 /opt/sambaflow/bin/read_perf_counters -p /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles/compile/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles.pef --json /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles.json - -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here. -Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations - from sambaflow.samba.utils.read_perf_counters import main -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working - from sambaflow.samba.utils.read_perf_counters import main -Reading performance counters. -Instrumentation, DDR, PCIE counters saved to /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles.json. - -[Info][SAMBA][Default] # Attempting to tear down a valid SambaRuntime context -[Info][SAMBA][Default] # Successfully tore down SambaRuntime context -2022-09-19T17:46:25 : [INFO][LIB][32373]: sn_create_session: PEF File: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles/compile/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles.pef -Log ID initialized to: [wilsonb][python3][32373] at /var/log/sambaflow/runtime/sn.log - - -*** Running command ***: -/opt/sambaflow/venv/bin/python3 /opt/sambaflow/bin/read_perf_counters -p /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles/compile/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles.pef --json /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles.json - -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here. -Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations - from sambaflow.samba.utils.read_perf_counters import main -/opt/sambaflow/bin/read_perf_counters:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working - from sambaflow.samba.utils.read_perf_counters import main -Reading performance counters. -Instrumentation, DDR, PCIE counters saved to /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles.json. - -[Info][SAMBA][Default] # Attempting to tear down a valid SambaRuntime context -[Info][SAMBA][Default] # Successfully tore down SambaRuntime context -2022-09-19T17:46:46 : [INFO][LIB][32578]: sn_create_session: PEF File: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/apps/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles/compile/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles/sn10__9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles.pef -Log ID initialized to: [wilsonb][python3][32578] at /var/log/sambaflow/runtime/sn.log - -19-Sep 17:46:58 - Info - SUCCESS: Copy Instrumentation Data -19-Sep 17:46:58 - Info - SUCCESS: Execute Read Performance Counter -19-Sep 17:47:20 - Info - SUCCESS: Execute Benchmarking sn10__9_19_17_39_uno_full_measure_sections___debug -19-Sep 17:47:42 - Info - SUCCESS: Execute Benchmarking sn10__9_19_17_39_uno_full_measure_performance___run_graph_only ------------------------------------------------------------- -Traceback (most recent call last): - File "/utils_labhost.py", line 188, in copy_benchmark_data - File "/usr/local/lib/python3.7/shutil.py", line 248, in copy - copyfile(src, dst, follow_symlinks=follow_symlinks) - File "/usr/local/lib/python3.7/shutil.py", line 120, in copyfile - with open(src, 'rb') as fsrc: -FileNotFoundError: [Errno 2] No such file or directory: '/home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/benchmark/sn10__9_19_17_39_uno_full_measure_performance.json' -19-Sep 17:47:42 - Info - SUCCESS: Copy Benchmark Data - - -Error while running benchmarking jobs -19-Sep 17:47:42 - Error - FAILURE: Run benchmarking by lists -19-Sep 17:47:42 - Error - Message: Error while running benchmarking jobs -19-Sep 17:47:46 - Info - SUCCESS: Copy Pyinstrument File -19-Sep 17:47:46 - Info - SUCCESS: Execute pyinstrument - -*** Running command ***: -bash /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/run_benchmarks/raw_data/run_with_benchmark.sh - -usage: uno_full.py [-h] {compile,run,test,measure-performance} ... -uno_full.py: error: unrecognized arguments: --multiprocess-pickle --use-pickle-train --converted-pickle - -19-Sep 17:47:49 - Info - SUCCESS: Execute Run Benchmarks -Instrumentation, Benchmarking or snprof have failed! - ---> uno_full.py instrumented and run successfully! - -19-Sep 17:47:49 - Info - SUCCESS: Gather instrumentation output for --stage-instrumentation=metapipe_stage_cycles:9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles found at /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count (None -19-Sep 17:47:49 - Info - SUCCESS: Gather instrumentation output for --stage-instrumentation=metapipe_stage_cycles --include-read-stall-cycles:9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles found at /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count (stage latency -19-Sep 17:47:49 - Info - SUCCESS: Gather stage latencies -19-Sep 17:47:49 - Info - SUCCESS: Gather instrumentation output for --stage-instrumentation=metapipe_buf_cycles:9_19_17_39_uno_full___stage_instrumentation_metapipe_buf_cycles found at /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count (None -19-Sep 17:47:49 - Info - SUCCESS: Gather TLIR -19-Sep 17:47:49 - Info - SUCCESS: Gather instrumentation output for --stage-instrumentation=metapipe_stage_cycles --include-read-stall-cycles:9_19_17_39_uno_full___stage_instrumentation_metapipe_stage_cycles___include_read_stall_cycles found at /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/instr-count (stall cycles -19-Sep 17:47:49 - Info - SUCCESS: Gather stall cycles -19-Sep 17:47:49 - Info - SUCCESS: Gather instrumentation output for measure_sections --debug:9_19_17_39_uno_full_measure_sections___debug found at /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/benchmark (None -19-Sep 17:47:49 - Info - SUCCESS: Gather measure sections -19-Sep 17:47:50 - Info - SUCCESS: Read stage_latency into UnifiedData -19-Sep 17:47:50 - Info - SUCCESS: Read stage_latency_w_stalls into UnifiedData -19-Sep 17:47:50 - Info - SUCCESS: Read pmu_bandwidth into UnifiedData -19-Sep 17:47:50 - Info - SUCCESS: Read tlir into UnifiedData -19-Sep 17:47:50 - Info - SUCCESS: Read stalls into UnifiedData -19-Sep 17:47:50 - Info - SUCCESS: Read prism_stages into UnifiedData -19-Sep 17:47:50 - Info - SUCCESS: Read measure_sections into UnifiedData -19-Sep 17:47:51 - Info - SUCCESS: Verify Stage Latency sub-report -19-Sep 17:47:51 - Info - SUCCESS: Write Stage Latency sub report -19-Sep 17:47:51 - Info - SUCCESS: Verify PMU Bandwidth sub-report -19-Sep 17:47:51 - Info - SUCCESS: Write PMU Bandwidth sub report -19-Sep 17:47:51 - Info - SUCCESS: Verify Stage Latency + Stalls sub-report -19-Sep 17:47:51 - Info - SUCCESS: Write Stage Latency + Stalls sub report -19-Sep 17:47:51 - Info - SUCCESS: Verify Paths sub-report -19-Sep 17:47:51 - Info - SUCCESS: Write Paths sub report -19-Sep 17:47:51 - Info - SUCCESS: Verify Stage Latency + Bandwidth sub-report -19-Sep 17:47:51 - Info - SUCCESS: Write Stage Latency + Bandwidth sub report -19-Sep 17:47:51 - Info - SUCCESS: Verify Bandwidth + Stage Latency sub-report -19-Sep 17:47:51 - Info - SUCCESS: Write Bandwidth + Stage Latency sub report -19-Sep 17:47:52 - Info - SUCCESS: Verify Combined Stage Latency UI Report report -19-Sep 17:47:52 - Info - SUCCESS: Write Combined Stage Latency UI Report Report -19-Sep 17:47:52 - Info - SUCCESS: Verify Stage Latency report -19-Sep 17:47:52 - Info - SUCCESS: Write Stage Latency Report -19-Sep 17:47:52 - Info - SUCCESS: Verify PMU Bandwidth report -19-Sep 17:47:52 - Info - SUCCESS: Write PMU Bandwidth Report -19-Sep 17:47:52 - Info - SUCCESS: Verify Paths report -19-Sep 17:47:52 - Info - SUCCESS: Write Paths Report -19-Sep 17:47:52 - Info - SUCCESS: Verify Stage Latency + Stalls report -19-Sep 17:47:52 - Info - SUCCESS: Write Stage Latency + Stalls Report - ---> Wrote collated report to /srv/home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/collated_report.xlsx - - ---> Wrote unified output to /srv/home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/unified.json - -19-Sep 17:47:52 - Info - SUCCESS: Process Instrumentation Data -19-Sep 17:47:52 - Info - SUCCESS: Post Process - Instrumentation -19-Sep 17:47:52 - Info - SUCCESS: Process Util Reports Helper Function -19-Sep 17:47:52 - Info - SUCCESS: Process Resources Helper Function -19-Sep 17:47:52 - Warning - ddr_report_dir is not provided -19-Sep 17:47:52 - Warning - arc_dram_analysis_report is not provided -19-Sep 17:47:52 - Warning - prism_dram_analysis_report is not provided -19-Sep 17:47:52 - Warning - section_latency_report is not provided -19-Sep 17:47:52 - Info - SUCCESS: Verify DDR Report analysis sub-report -Read file failed. Invalid file. -Read file failed. Invalid file. -19-Sep 17:47:52 - Info - SUCCESS: Write DDR Report analysis sub report -19-Sep 17:47:53 - Info - SUCCESS: Post Process - DDR Counter -19-Sep 17:47:53 - Info - SUCCESS: Post Process - PCIE Counter -19-Sep 17:47:53 - Info - SUCCESS: Create Annotated Graphs Helper Function -Could not find the file containing data of measured e2e latency and throughput. -Retrieving estimated prism latency and throughput -Read file failed. Invalid file. -Traceback (most recent call last): - File "/section_report.py", line 340, in get_measured_pmu_pcu_utilization_chips_sections_from_txt -FileNotFoundError: [Errno 2] No such file or directory: '/home/wilsonb/DL/Sambanova/apps_1.s0.utilization_report.txt' -Could not find PCU/PMU utilization data from utilization_report.txt files. -Read file failed. Invalid file. -Read file failed. Invalid file. -Could not find the data for estimated mac latency and throughput -Read file failed. Invalid file. -19-Sep 17:47:53 - Warning - ddr_report_dir is not provided -19-Sep 17:47:53 - Warning - arc_dram_analysis_report is not provided -19-Sep 17:47:53 - Warning - prism_dram_analysis_report is not provided -19-Sep 17:47:53 - Warning - section_latency_report is not provided -Read file failed. Invalid file. -Read file failed. Invalid file. -19-Sep 17:47:53 - Info - SUCCESS: Create CSV Section Report -Cannot find 9_19_17_39_uno_full_ in /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/perf_data/snprof - -Cannot find snprof data - -19-Sep 17:47:53 - Error - FAILURE: Extract and Process e2e Snprof Data -19-Sep 17:47:53 - Error - Message: Cannot find snprof data. -Cannot find measure-performance data -19-Sep 17:47:53 - Error - FAILURE: Get e2e measure performance json path -19-Sep 17:47:53 - Error - Message: Cannot find measure-performance data. -See per-section measure-performance data in /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/benchmark-data/sn10__9_19_17_39_uno_full_measure_sections___debug.json - -19-Sep 17:47:53 - Info - SUCCESS: Get per-section measure performance json path -See graph measure-performance data in /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/benchmark-data/sn10__9_19_17_39_uno_full_measure_performance___run_graph_only.json - -19-Sep 17:47:53 - Info - SUCCESS: Get graph measure performance json path -See runtime perf info in /srv/home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen/uno_brw_CCLE_9_19_17_39/reports/runtime_perf_info.json - -19-Sep 17:47:53 - Info - SUCCESS: Collating runtime performance -19-Sep 17:47:53 - Info - SUCCESS: Post Process - Runtime Data -19-Sep 17:47:53 - Info - SUCCESS: Post Process - DDR Bandwidth from training/inference run -19-Sep 17:47:54 - Info - SUCCESS: Post Process - PCIE Bandwidth from training/inference run -19-Sep 17:47:54 - Info - SUCCESS: Post Process - Tile Data from training/inference run -19-Sep 17:47:54 - Info - SUCCESS: Post Process -Postprocessing was finished! -Generating Web UI files... -Getting num iterations from measure perf FAILED! list index out of range -Retrieving estimated prism latency and throughput -19-Sep 17:47:54 - Info - SUCCESS: Build Run Info -19-Sep 17:47:54 - Info - SUCCESS: Build Configuration Tab -19-Sep 17:47:54 - Info - SUCCESS: Build Snconfig Tabs -19-Sep 17:47:54 - Info - SUCCESS: Build General -Could not find snprof output. No e2e throughput data available. -Could not find snprof output. No e2e latency data available. -19-Sep 17:47:54 - Info - SUCCESS: Build Runtime Stats -19-Sep 17:47:54 - Info - SUCCESS: Build Runtime Stats Tab -19-Sep 17:47:54 - Info - SUCCESS: Build Pyinstrument Tab -19-Sep 17:47:54 - Info - SUCCESS: Build PNR-Sweep Tab -Could not find snprof output. No host latency data available. -19-Sep 17:47:54 - Info - SUCCESS: Build Host Latency -19-Sep 17:47:54 - Info - SUCCESS: Build Host Timeline Profile Widget -Could not find snprof output. No host latency data available. -19-Sep 17:47:54 - Info - SUCCESS: Build Host Breakdown Layer -19-Sep 17:47:54 - Info - SUCCESS: Build Host Analysis Layer -19-Sep 17:47:54 - Info - SUCCESS: Build Host Section Layer -19-Sep 17:47:54 - Info - SUCCESS: Build Host Tensor Layer -19-Sep 17:47:54 - Info - SUCCESS: Build Host Layer -Could not find snprof output. No rdu latency data available. -19-Sep 17:47:54 - Info - SUCCESS: Build RDU Latency -19-Sep 17:47:54 - Info - SUCCESS: Build Section Report Tab -19-Sep 17:47:54 - Info - SUCCESS: Build Compiler Graphs -19-Sep 17:47:54 - Info - SUCCESS: Build Model Graphs Tab -19-Sep 17:47:54 - Info - SUCCESS: Build Collated Report Tab -19-Sep 17:47:54 - Info - SUCCESS: Build Paths Report Tab -19-Sep 17:47:54 - Info - SUCCESS: Build RDU Run PCIE/DDR/Tile -19-Sep 17:47:54 - Info - SUCCESS: Build RDU Sections Empty -19-Sep 17:47:54 - Info - SUCCESS: Build RDU Section Data -19-Sep 17:47:54 - Info - SUCCESS: Build Filtered Stage Report Tabs -19-Sep 17:47:54 - Info - SUCCESS: Build RDU Section Utilization Data -19-Sep 17:47:54 - Info - SUCCESS: Build Stage Buffer Graphs -19-Sep 17:47:54 - Info - SUCCESS: Build Util Report Tabs -19-Sep 17:47:54 - Info - SUCCESS: Build RDU PCIE Counters -19-Sep 17:47:54 - Info - SUCCESS: Build RDU DDR Counters -19-Sep 17:47:54 - Info - SUCCESS: Build RDU Stage Data -19-Sep 17:47:54 - Info - SUCCESS: Build Section Breakdown Layer -19-Sep 17:47:54 - Info - SUCCESS: Build RDU Layer -19-Sep 17:47:54 - Info - SUCCESS: Build Overview Layer -Web UI files generation complete. -19-Sep 17:47:54 - Info - SUCCESS: Save JSONs -Elapsed time: 504.227s -To launch the Sambatune-UI and view the results, use -$ sambatune_ui --directory /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/artifact_root/sambatune_gen --port 8576 -Point your browser to http://localhost:8576 diff --git a/docs/ai-testbed/sambanova_gen1/files/sambanova_login-2.jpg b/docs/ai-testbed/sambanova_gen1/files/sambanova_login-2.jpg deleted file mode 100644 index 997acc2874918ac888408f1eb26aae975124aaa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141951 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 LkiYW(zxDkeBBET} diff --git a/docs/ai-testbed/sambanova_gen1/files/sambanova_login.jpg b/docs/ai-testbed/sambanova_gen1/files/sambanova_login.jpg deleted file mode 100644 index 997acc2874918ac888408f1eb26aae975124aaa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141951 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 LkiYW(zxDkeBBET} diff --git a/docs/ai-testbed/sambanova_gen1/files/tmpeo5ehksn.html b/docs/ai-testbed/sambanova_gen1/files/tmpeo5ehksn.html deleted file mode 100644 index 38cfcab04..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/tmpeo5ehksn.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - -

- - - - diff --git a/docs/ai-testbed/sambanova_gen1/files/unet_all.sh b/docs/ai-testbed/sambanova_gen1/files/unet_all.sh deleted file mode 100644 index f9dac5de8..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/unet_all.sh +++ /dev/null @@ -1,34 +0,0 @@ -#! /bin/bash -x -set -e -# -# Usage: ./unet_all.sh 256 256 -# -SECONDS=0 - -# IMage size. -IM=${1} -# Batch Size -BS=${2} -NUM_WORKERS=1 -export OMP_NUM_THREADS=16 - -source /opt/sambaflow/venv/bin/activate -UNET=$(pwd)/unet - -echo "Model: UNET" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) - -echo "COMPILE" - -# Compile for parallel RDUs -if [ ! -e out/unet_train_${BS}_${IM}_NP/unet_train_${BS}_${IM}_NP.pef ] ; then - python ${UNET}/unet.py compile -b ${BS} --in-channels=3 --in-width=${IM} --in-height=${IM} --enable-conv-tiling --mac-v2 --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${IM}_NP" --data-parallel -ws 2 > compile_${BS}_${IM}_NP.log 2>&1 -fi - -# Run Multi-Node, Data Parallel -NN=2 -echo "RUN" -echo "NN=${NN}" -sbatch --gres=rdu:1 --tasks-per-node 8 --nodes 2 --nodelist sm-02,sm-01 --cpus-per-task=16 ./unet_run.sh ${NN} ${NUM_WORKERS} -echo "Duration: " $SECONDS diff --git a/docs/ai-testbed/sambanova_gen1/files/unet_batch.sh b/docs/ai-testbed/sambanova_gen1/files/unet_batch.sh deleted file mode 100644 index 9045c5480..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/unet_batch.sh +++ /dev/null @@ -1,28 +0,0 @@ -#! /bin/bash -x -set -e -# -# Usage: ./unet_batch.sh 2 1 -# -SECONDS=0 - -# Batch Size -BS=256 - -# IMage size -IM=256 -NN=${1} -NUM_WORKERS=${2} -export OMP_NUM_THREADS=16 -DATADIR=/software/sambanova/dataset/kaggle_3m -UNET=$(pwd)/unet -export SAMBA_CCL_USE_PCIE_TRANSPORT=0 - -source /opt/sambaflow/venv/bin/activate - -echo "Model: UNET_TRAIN" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) - -srun --mpi=pmi2 python ${UNET}/unet_hook.py run --do-train --in-channels=3 --in-width=${IM} --in-height=${IM} --init-features 32 --batch-size=${BS} --epochs 2 --data-dir ${DATADIR} --log-dir log_dir_unet_${NN}_train_kaggle --pef=$(pwd)/out/unet_train_${BS}_${IM}_NN/unet_train_${BS}_${IM}_NN.pef --data-parallel --reduce-on-rdu --num-workers=${NUM_WORKERS} - -echo "Duration: " $SECONDS diff --git a/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_all.sh b/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_all.sh deleted file mode 100644 index feeb7dd06..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_all.sh +++ /dev/null @@ -1,80 +0,0 @@ -#! /bin/bash -x -#set -e -SECONDS=0 -BS=$3 -NUM_WORKERS=1 -export OMP_NUM_THREADS=16 - -source /opt/sambaflow/venv/bin/activate -UNET=/opt/sambaflow/apps/image/pytorch/unet/unet.py -UNET=/opt/sambaflow/apps/image/unet -UNET=$(pwd)/unet -HD=${2} -if [ ${HD} == "1024" ] ; then - HD=1k -elif [ ${HD} == "2048" ] ; then - HD=2k -elif [ ${HD} == "4096" ] ; then - HD=4k -fi - - -echo "Model: UNET_TRAIN" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) - -#rm -rf log_dir* -#rm run_unet_${BS}_${2}_NP.log -#rm run_unet_${BS}_${2}.log -echo "COMPILE" -#single -#for i in 4 16 32 -#for i in 2 8 64 - -#compile loopx -for BS in $3 -do - i=single -# rm out/unet_train_${BS}_${2}_${i}/unet_train_${BS}_${2}_${i}.pef - if [ ! -e out/unet_train_${BS}_${2}_${i}/unet_train_${BS}_${2}_${i}.pef ] ; then - #python ${UNET}/unet.py compile --log-level error -b ${BS} --in-channels=3 --in-width=${2} --in-height=${2} --enable-conv-tiling --mac-v2 --mac-human-decision ${UNET}/jsons/hd_files/hd_unet_${HD}.json --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${2}_${i}" > compile_${BS}_${2}_${i}.log 2>&1 - python ${UNET}/unet.py compile --log-level error -b ${BS} --in-channels=3 --in-width=${2} --in-height=${2} --enable-conv-tiling --mac-v2 --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${2}_${i}" > compile_${BS}_${2}_${i}.log 2>&1 - exit - fi - #parallel - #rm out/unet_train_${BS}_${2}_NP/unet_train_${BS}_${2}_NP.pef - if [ ! -e out/unet_train_${BS}_${2}_NP/unet_train_${BS}_${2}_NP.pef ] ; then - #python ${UNET}/unet.py compile -b ${BS} --in-channels=3 --in-width=${2} --in-height=${2} --enable-conv-tiling --mac-v2 --mac-human-decision ${UNET}/jsons/hd_files/hd_unet_${HD}.json --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${2}_NP" --data-parallel -ws 2 > compile_${BS}_${2}_NP.log 2>&1 - python ${UNET}/unet.py compile -b ${BS} --in-channels=3 --in-width=${2} --in-height=${2} --enable-conv-tiling --mac-v2 --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${2}_NP" --data-parallel -ws 2 > compile_${BS}_${2}_NP.log 2>&1 - exit - fi -done #end compile loop - -#run loop -#single -for BS in $3 -do - export OMP_NUM_THREADS=16 - #export SF_RNT_NUMA_BIND=2 - #export SF_RNT_FSM_POLL_BUSY_WAIT=1 - #export SF_RNT_DMA_POLL_BUSY_WAIT=1 - #run single - #srun --cpus-per-task=16 --gres=rdu:1 python ${UNET}/unet_hook.py run --num-workers=${NUM_WORKERS} --do-train --in-channels=3 --in-width=${2} --in-height=${2} --init-features 32 --batch-size=${BS} --epochs 10 --data-dir /usr/local/share/data/unet32 --log-dir log_dir_unet_train_kaggle --pef=$(pwd)/out/unet_train_${BS}_${2}_single/unet_train_${BS}_${2}_single.pef --use-sambaloader > run_unet_${BS}_${2}_single.log 2>&1 - #Parallel - for NP in 2 - do - echo "RUN" - echo "NP=${NP}" - #rm -rf log_dir* - #export SAMBA_CCL_USE_PCIE_TRANSPORT=1 - #export SF_RNT_NUMA_BIND=2 - #export SF_RNT_FSM_POLL_BUSY_WAIT=1 - #export SF_RNT_DMA_POLL_BUSY_WAIT=1 - #sbatch --cpus-per-task=4 --gres=rdu:${NP} /opt/mpich-3.4.3/bin/mpirun -hosts=192.168.200.131,192.168.200.130 -np ${NP} python ${UNET}/unet_hook.py run --num-workers=${NUM_WORKERS} --do-train --in-channels=3 --in-width=${2} --in-height=${2} --init-features 32 --batch-size=${BS} --epochs 10 --data-dir /var/tmp/kaggle_3m --log-dir log_dir_unet_${NP}_train_kaggle --pef=$(pwd)/out/unet_train_${BS}_${2}_NP/unet_train_${BS}_${2}_NP.pef --data-parallel --reduce-on-rdu --use-sambaloader > run_unet_${BS}_${2}_${NP}.log 2>&1 - #sbatch --cpus-per-task=16 --gres=rdu:1 --ntasks-per-node 1 --nodes 2 --mpi=pmi2 --CPU-per-job 16 ./unet_batch.sh ${NP} ${NUM_WORKERS} - #sbatch -n 2 --gres=rdu:1 --tasks-per-node 1 --nodes 2 --cpus-per-task=16 ./unet_batch.sh ${NP} ${NUM_WORKERS} - sbatch --gres=rdu:1 --tasks-per-node 8 --nodes 2 --nodelist sm-02,sm-01 --cpus-per-task=16 ./unet_batch.sh ${NP} ${NUM_WORKERS} - done -done -echo "Duration: " $SECONDS -(venv) wilsonb@sm-01:~/apps/image$ diff --git a/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_inf_rl.sh b/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_inf_rl.sh deleted file mode 100644 index b7b062879..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_inf_rl.sh +++ /dev/null @@ -1,42 +0,0 @@ -#! /bin/bash -x -set -e -SECONDS=0 -BS=$3 -export OMP_NUM_THREADS=8 - -source /opt/sambaflow/venv/bin/activate -NP=0 - -#export SAMBA_CCL_USE_PCIE_TRANSPORT=1 -#export ENABLE_RUNTIME_PERF=PER_TENSOR -echo "Model: UNET_TRAIN" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) -#echo "Machine state: " -#/opt/sambaflow/bin/snfadm -l inventory -#echo "Number of PCI devices: " -#lspci |grep 1e0d |wc -l -if [ "${1}" == "compile" ] ; then -echo "COMPILE" - -python unet.py compile -b ${BS} --in-channels=3 --in-width=${2} --in-height=${2} --enable-conv-tiling --mac-v2 --compiler-configs-file jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${2}" --mac-human-decision jsons/hd_files/hd_unet_256.json - -elif [ "${1}" == "test" ] ; then -echo "TEST" -python unet.py test --in-channels=3 --in-width=${2} --in-height=${2} --init-features 32 --batch-size=${BS} --pef="out/unet_train_${BS}_${2}/unet_train_${BS}_${2}.pef" - -elif [ "${1}" == "run" ] ; then -echo "RUN" -python unet_hook.py run --num-workers=3 --do-train --in-channels=3 --in-width=${2} --in-height=${2} --init-features 32 --batch-size=${BS} --epochs 50 --data-dir /var/tmp/kaggle_3m --log-dir log_dir_unet${NP}_train_kaggle --pef=out/unet_train_${BS}_${2}/unet_train_${BS}_${2}.pef > run_${2}_${BS}.log 2>&1 - -elif [ "${1}" == "mp" ] ; then -echo "PERF" -python ${UNET} measure-performance --in-channels=3 --in-width=${2} --in-height=${2} --init-features 32 --batch-size=${BS} --pef="out/unet_train_${BS}_${2}/unet_train_${BS}_${2}.pef" -fi - -#echo "Machine state after: " -#/opt/sambaflow/bin/snfadm -l inventory -#echo "Number of PCI devices: " -#lspci |grep 1e0d |wc -l - -echo "Duration: " $SECONDS diff --git a/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_parallel_all.sh b/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_parallel_all.sh deleted file mode 100644 index 5169c0ad4..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/unet_compile_run_parallel_all.sh +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/bash -x -#set -e -SECONDS=0 -BS=$3 -export OMP_NUM_THREADS=16 -HD=$2 -if [ $HD == 1024 ] ; then -HD=1k -elif [ $HD == 2048 ] ; then -HD=2k -elif [ $HD == 4096 ] ; then -HD=4k -fi - - -source /opt/sambaflow/venv/bin/activate -UNET=/opt/sambaflow/apps/image/unet -UNET=/homes/ac.rick.weisner/tmp/unet_test/unet -UNET=/opt/sambaflow/apps/image/unet -export SAMBA_CCL_USE_PCIE_TRANSPORT=1 -echo "Model: UNET_TRAIN" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) -echo "compile" -python ${UNET}/unet.py compile -b ${BS} --in-channels=3 --in-width=${2} --in-height=${2} --enable-conv-tiling --mac-v2 --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${2}" --mac-human-decision ${UNET}/jsons/hd_files/hd_unet_${HD}.json --use-sambaloader - -python ${UNET}/unet.py compile -b ${BS} --in-channels=3 --in-width=${2} --in-height=${2} --enable-conv-tiling --mac-v2 --compiler-configs-file ${UNET}/jsons/compiler_configs/unet_compiler_configs_no_inst.json --pef-name="unet_train_${BS}_${2}_NP" --mac-human-decision ${UNET}/jsons/hd_files/hd_unet_${HD}.json --data-parallel -ws 2 - -rm run_${2}_${BS}_NP3.log -echo "RUN" -python ${UNET}/unet_hook.py run --num-workers=3 --do-train --in-channels=3 --in-width=${2} --in-height=${2} --init-features 32 --batch-size=${BS} --epochs 50 --data-dir /var/tmp/kaggle_3m --log-dir log_dir_unet${NP}_train_kaggle --pef=out/unet_train_${BS}_${2}/unet_train_${BS}_${2}.pef --enable-tiling --use-sambaloader >> run_${2}_${BS}_NP3.log 2>&1 - -for NP in 2 -do -echo NP -rm -rf log_dir* -export SF_RNT_NUMA_BIND=2 -export SF_RNT_FSM_POLL_BUSY_WAIT=1 -export SF_RNT_DMA_POLL_BUSY_WAIT=1 - -/opt/mpich-3.3.2/bin/mpirun -hosts=sm-02 -np ${NP} python ${UNET}/unet_hook.py run --num-workers=3 --do-train --in-channels=3 --in-width=${2} --in-height=${2} --init-features 32 --batch-size=${BS} --epochs 50 --data-dir /var/tmp/kaggle_3m --log-dir log_dir_unet${NP}_train_kaggle --pef=out/unet_train_${BS}_${2}_NP/unet_train_${BS}_${2}_NP.pef --enable-tiling --data-parallel --reduce-on-rdu --use-sambaloader >> run_${2}_${BS}_NP3.log 2>&1 - -done -echo "Duration: " $SECONDS diff --git a/docs/ai-testbed/sambanova_gen1/files/uno.yaml b/docs/ai-testbed/sambanova_gen1/files/uno.yaml deleted file mode 100644 index bc8bfba3d..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/uno.yaml +++ /dev/null @@ -1,11 +0,0 @@ -app: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_full.py - -model-args: --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial - -compile-args: compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 - -run-args: --multiprocess-pickle --use-pickle-train --measure-spatial --train-samba-spatial --mac-v1 --train_source CCLE --lr 0.001 --data-dir /software/sambanova/dataset/CCLE_16_500 --converted-pickle - -env: - OMP_NUM_THREADS: 16, - SF_RNT_NUMA_BIND: 2 diff --git a/docs/ai-testbed/sambanova_gen1/files/uno_bruce_tmp.yaml b/docs/ai-testbed/sambanova_gen1/files/uno_bruce_tmp.yaml deleted file mode 100644 index 234581263..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/uno_bruce_tmp.yaml +++ /dev/null @@ -1,11 +0,0 @@ -app: /opt/sambaflow/apps/private/anl/uno_full.py - -model-args: --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial - -compile-args: compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 - -run-args: --multiprocess-pickle --use-pickle-train --measure-spatial --train-samba-spatial --mac-v1 --train_source ALL --lr 0.001 --data-dir /software/sambanova/dataset/ALL_16_500 --converted-pickle - -env: - OMP_NUM_THREADS: 16, - SF_RNT_NUMA_BIND: 2 diff --git a/docs/ai-testbed/sambanova_gen1/files/uno_brw_CCLE.yaml b/docs/ai-testbed/sambanova_gen1/files/uno_brw_CCLE.yaml deleted file mode 100644 index 3b73de312..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/uno_brw_CCLE.yaml +++ /dev/null @@ -1,11 +0,0 @@ -app: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_full.py - -model-args: --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial - -compile-args: compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 - -run-args: --measure-spatial --train-samba-spatial --mac-v1 --train_source CCLE --lr 0.001 --data-dir /software/sambanova/dataset/CCLE_16_500 - -env: - OMP_NUM_THREADS: 16, - SF_RNT_NUMA_BIND: 2 diff --git a/docs/ai-testbed/sambanova_gen1/files/uno_rick_tmp.yaml b/docs/ai-testbed/sambanova_gen1/files/uno_rick_tmp.yaml deleted file mode 100644 index 234581263..000000000 --- a/docs/ai-testbed/sambanova_gen1/files/uno_rick_tmp.yaml +++ /dev/null @@ -1,11 +0,0 @@ -app: /opt/sambaflow/apps/private/anl/uno_full.py - -model-args: --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial - -compile-args: compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 - -run-args: --multiprocess-pickle --use-pickle-train --measure-spatial --train-samba-spatial --mac-v1 --train_source ALL --lr 0.001 --data-dir /software/sambanova/dataset/ALL_16_500 --converted-pickle - -env: - OMP_NUM_THREADS: 16, - SF_RNT_NUMA_BIND: 2 diff --git a/docs/ai-testbed/sambanova_gen1/getting-started.md b/docs/ai-testbed/sambanova_gen1/getting-started.md deleted file mode 100644 index d5c583716..000000000 --- a/docs/ai-testbed/sambanova_gen1/getting-started.md +++ /dev/null @@ -1,72 +0,0 @@ -# Getting Started - -## On-Boarding - -See [Get Started](https://www.alcf.anl.gov/support-center/get-started) -to request an account and additional information. - -## Setup - -### System View - -Connection to a SambaNova node is a two-step process. The first step is to **ssh** to the **login node**. -This step requires an MFA passcode for authentication - an -eight-digit passcode generated by an app on your mobile device, e.g., mobilePASS+. -The second step is to log in to a SambaNova node from the **login node**. - -![SambaNova System View](files/sambanova_login.jpg "SambaNova System View") - -### Log in to Login Node - -Login to the SambaNova login node from your local machine using the below command. This uses the MobilPass+ token generated every time you log in to the system. This is the same passcode used to authenticate into other ALCF systems, such as Theta and Cooley. - -*In the examples below, replace* ***ALCFUserID*** *with your ALCF user id.* - -```bash -ssh ALCFUserID@sambanova.alcf.anl.gov -Password: < MobilPass+ code > -``` - -Note: Use the ssh "-v" option in order to debug any ssh problems. - -### Log in to a SambaNova Node - -Once you are on the login node, the SambaNova system can be accessed using the alias **sm-01** or **sm-02**. - -```bash -ssh sm-01 -# or -ssh sm-02 -``` - -### SDK setup - -The SambaNova system has a bash shell script to set up the required software environment. -This sets up the SambaFlow software stack, and the associated environmental variables and starts -a pre-configured virtual environment. - -Use - -```bash -ALCFUserID@sm-01:~$ source /software/sambanova/envs/sn_env.sh -(venv) ALCFUserID@sm-01:~$ -``` - -The contents of the sn_env.sh script is shown below for convenience. - -```bash -alias snpath='export PATH=$PATH:/opt/sambaflow/bin' # This is the path to SambaFlow which is the software stack running on SambaNova systems. This stack includes the Runtime, the compilers, and the SambaFlow Python SDK which is used to create and run models. - -alias snthreads='export OMP_NUM_THREADS=16' # The OMP_NUM_THREADS environment variable sets the number of threads to use for parallel regions. The value of this environment variable must be a list of positive integer values. The values of the list set the number of threads to use for parallel regions at the corresponding nested levels. For the SambaNova system, it is usually set to 1. - -alias snvenv='source /opt/sambaflow/venv/bin/activate' # This starts the pre-configured virtual environment that consists of sambaflow and other built-in libraries. -``` - -**NOTE: SambaNova operations will fail unless the SambaNova venv is set -up.** - -You may deactivate the environment if finished. - -```bash -deactivate -``` diff --git a/docs/ai-testbed/sambanova_gen1/job-queuing-and-submission.md b/docs/ai-testbed/sambanova_gen1/job-queuing-and-submission.md deleted file mode 100644 index 9489288d4..000000000 --- a/docs/ai-testbed/sambanova_gen1/job-queuing-and-submission.md +++ /dev/null @@ -1,87 +0,0 @@ -# Job Queueing and Submission - -## Introduction - -SambaNova uses Slurm for job submission and queueing. Below are some of the important commands for using Slurm. For more information refer to [Slurm Documentation](https://slurm.schedmd.com/). - -**NOTE: Run the python scripts using srun or sbatch, to ensure that concurrent jobs do not interfere with each other.** - -**NOTE: There is just one scheduler for both sm-01 and sm-02.** - -## Srun - -The Slurm command `srun` can be used to run individual python scripts in parallel with other scripts on a cluster managed by Slurm. Examples of `srun` usage are shown below. - -Slurm will assign a **nodelist/host** to run a job if a host is not specified. - -Example: - -```bash -srun python lenet.py compile -b=1 --pef-name="lenet" --output-folder="pef" -srun python lenet.py run --pef="pef/lenet/lenet.pef" -``` - -You may specify which node/host on which to run a job. - -Reasons to specify a node list: - -- One wants to test a specific node to verify function of the HW and SW (daily smoke tests do this) -- The nodes are at different software levels and one wants to use a node that has the needed software level for one's application. - -Example: - -```bash -srun --nodelist=sm-02 python lenet.py compile -b=1 --pef-name="lenet" --output-folder="pef" -``` - -## Sbatch - -Alternatively, these jobs can be submitted to the Slurm workload manager through a batch script by using the `sbatch` command. To do this, create a bash script (submit-lenet-job.sh here as an example) with the commands that you want to execute. - -```bash -#!/bin/sh - -python lenet.py compile -b=1 --pef-name="lenet" --output-folder="pef" -python lenet.py run --pef="pef/lenet/lenet.pef" -``` - -Then pass the bash script as an input to the `sbatch` command as shown below. - -```bash -sbatch --output=pef/lenet/output.log submit-lenet-job.sh -``` - -In case of the need to use multiple RDUs (2 in the example shown below), the `sbatch` command would be altered as: - -```bash -sbatch --gres=rdu:2 -``` - - -## Squeue - -The `squeue` command provides information about jobs located in the Slurm scheduling queue. - -```bash -squeue -``` - -## Sinfo - -Sinfo is used to view partition and node information for a system running Slurm. - -Here is a suggested command: - -```bash -sinfo -O AllocNodes, GresUsed, Gres, NodeList -``` - -For more information, see [sinfo](https://slurm.schedmd.com/sinfo.html). - -## Scancel - -Scancel is used to signal or cancel jobs, job arrays, or job steps. - -```bash -scancel job_id -``` diff --git a/docs/ai-testbed/sambanova_gen1/miscellaneous.md b/docs/ai-testbed/sambanova_gen1/miscellaneous.md deleted file mode 100644 index 1a742c90b..000000000 --- a/docs/ai-testbed/sambanova_gen1/miscellaneous.md +++ /dev/null @@ -1,206 +0,0 @@ -# Miscellaneous - -## SDK Version - -To find the SDK version, run the following commands - -```console -(venv) ALCFUserID@sm-01:~$ python -Python 3.7.6 (default, Feb 18 2020, 21:28:31) -[GCC 9.3.0] on linux -Type "help", "copyright", "credits" or "license" for more information. ->>> import sambaflow ->>> sambaflow.__version__ -'1.11.5' ->>> -``` - -## OMP_NUM_THREADS - -The OMP_NUM_THREADS environment variable sets the number of threads to use for parallel regions. - -The value of this environment variable must be a list of positive integer values. The values of the list set the number of threads to use for parallel regions at the corresponding nested levels. - -For the SambaNova system it, is usually set to one. - -```bash -export OMP_NUM_THREADS=1 -``` - -## Where is the Model? - -Two copies of the model are maintained. One in CPU memory and one in RDU -memory. They do not interfere with each other unless you explicitly sync -the model/parameter in between using: - -```text -SambaTensor.rdu() # Moves the CPU model to the RDU -SambaTensor.cpu() # Moves the RDU model to the CPU -``` - -In order to run the model on the CPU, you can simply use the PyTorch model -as if there is no RDU. -In order to run the model on RDU, you would need to use **session.run()**. - -## Useful Commands - -### SN Configuration - -```bash -snconfig -``` - -The snconfig utility shows the static configuration of the system. The configuration on sm-01 for the first RDU is as follows: - -```text -Platform Name: DataScale SN10-8 -Node Name: NODE -Number of XRDUS: 4 -XRDU Name: XRDU_0 -Number of RDUS: 2 -RDU name: RDU_0 -Number of TILES: 4 -TILE Name: TILE_0 -Serial Number : N/A -... -Number of PCIES: 4 -PCIE Name: PCIE_0 -Bandwidth : 32 GB/s -Speed : 16 GT/s -Width : 16 -Serial Number : N/A -... -Number of DDRCHs: 6 -DDR CH Name: DDRCH_0 -Number of DIMMS: 2 -DIMM Name: DIMM_C0 -Size : 64.0 GB -DIMM Name: DIMM_C1 -Size : 0.0 GB -Serial Number : N/A -Current utilization can be seen with sntilestat. In this example, only -four tiles in one RDU are in use. -TILE %idle %exec %pload %aload %chkpt %quiesce PID USER COMMAND -/XRDU_0/RDU_0/TILE_0 80.4 7.0 10.4 2.2 0.0 0.0 49880 arnoldw python -res_ffn_mnist.py run --pef=pef/res_ffn_mnist/res_ffn_mnist.pef ---num-epochs 100 -/XRDU_0/RDU_0/TILE_1 80.5 6.9 11.3 1.3 0.0 0.0 49880 arnoldw python -res_ffn_mnist.py run --pef=pef/res_ffn_mnist/res_ffn_mnist.pef ---num-epochs 100 -/XRDU_0/RDU_0/TILE_2 82.1 4.7 11.4 1.8 0.0 0.0 49880 arnoldw python -res_ffn_mnist.py run --pef=pef/res_ffn_mnist/res_ffn_mnist.pef ---num-epochs 100 -/XRDU_0/RDU_0/TILE_3 80.1 6.3 11.7 1.9 0.0 0.0 49880 arnoldw python -res_ffn_mnist.py run --pef=pef/res_ffn_mnist/res_ffn_mnist.pef ---num-epochs 100 -/XRDU_0/RDU_1/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_1/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_1/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_1/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_0/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_0/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_0/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_0/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_1/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_1/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_1/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_1/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_0/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_0/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_0/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_0/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_1/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_1/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_1/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_1/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_0/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_0/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_0/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_0/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_1/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_1/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_1/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_1/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -``` - -### SambaNova Daemon Service - -The following command checks if the SambaNova daemon service is running. - -```bash -systemctl status snd -``` - -The output should look something like this: - -```text -* snd.service - SN Devices Service - Loaded: loaded (/usr/lib/systemd/system/snd.service; enabled; vendor preset: enabled) - Active: active (running) since Fri 2022-02-18 11:45:15 CST; 1 months 25 days ago - Main PID: 3550 (snd) - Tasks: 10 (limit: 19660) - CGroup: /system.slice/snd.service - `-3550 /opt/sambaflow/bin/snd - -Warning: Journal has been rotated since the unit was started. Log output is incomplete or unavailable. -``` - -### Tile status - -```bash -sntilestat -watch sntilestat -``` - -The output shown below is when the system is completely idle. - -```text -TILE %idle %exec %pload %aload %chkpt %quiesce PID USER COMMAND -/XRDU_0/RDU_0/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_0/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_0/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_0/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_1/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_1/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_1/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_0/RDU_1/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_0/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_0/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_0/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_0/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_1/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_1/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_1/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_1/RDU_1/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_0/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_0/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_0/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_0/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_1/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_1/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_1/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_2/RDU_1/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_0/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_0/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_0/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_0/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_1/TILE_0 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_1/TILE_1 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_1/TILE_2 100.0 0.0 0.0 0.0 0.0 0.0 -/XRDU_3/RDU_1/TILE_3 100.0 0.0 0.0 0.0 0.0 0.0 -``` - -### Finding Hung Tiles - -```bash -snconfig show Node dynamic | grep perfect -``` - -### How busy is the system? - -Use one of - -```bash -top -htop -``` diff --git a/docs/ai-testbed/sambanova_gen1/running-a-model-or-program.md b/docs/ai-testbed/sambanova_gen1/running-a-model-or-program.md deleted file mode 100644 index 68071bdab..000000000 --- a/docs/ai-testbed/sambanova_gen1/running-a-model-or-program.md +++ /dev/null @@ -1,66 +0,0 @@ -# Steps to Run a Model/Program - -**NOTE: Please be mindful of how you are using the system. -For example, consider running larger jobs in the evening or on weekends.** - -**NOTE: Please use only Slurm commands, i.e., srun and sbatch, to run your code. -If you run your code directly using the python command, it may cause conflicts -on the system.** - -## Introduction - -The SambaNova workflow includes the following main steps to run a model. - -1. Compile -2. Run -3. Test (optional) - -The system uses the [Slurm job -scheduler](https://slurm.schedmd.com/quickstart.html) to schedule the jobs and manage the workload on the system. For more information on Slurm, see [Job Queueing and Submission](job-queuing-and-submission.md). - -[Example Programs](example-programs.md) lists the different example applications with corresponding commands for each of the above steps. - -## Compile - -Compiles the model and generates a **.pef** file. This file contains -information on how to reconfigure the hardware, how many compute and -memory resources are required and how they will be used in all subsequent steps. -The pef files are by default saved in the 'out' directory; the -SambaNova documentation advises saving pef files in separate -directories with the '--output-folder' option. - -It is necessary to re-compile only when the model changes, or parameters specific to the model graph change, including the batch size. - -Compile times can be significant. -Compile of the Unet sample, for example, when using images of size 32x32 pixels, takes 358 (s), and 1844 (s) for images of size 256x256. - -Example: - -```bash -srun python lenet.py compile -b=1 --pef-name="lenet" --output-folder="pef" -``` - -Where - -| Argument | Default | Help | -|------------------------|-----------|--------------------------------| -| -b | 1 | Batch size for training | -| | | | - -## Run - -This will run the application on SN nodes. - -```bash -srun python lenet.py run --pef="pef/lenet/lenet.pef" -``` - -The location of the **pef** file generated in the compile step is passed as an argument to the run command. - -## Test (Optional) - -This command is used to run the model on both the host CPU and the SambaNova node. It compares the answers from the CPU and SambaNova RDU and will raise errors if any discrepancies are found. Pass the pef file generated as part of the compile step as the input to this command. - -```bash -srun python lenet.py test --pef="pef/lenet/lenet.pef" -``` diff --git a/docs/ai-testbed/sambanova_gen1/system-overview.md b/docs/ai-testbed/sambanova_gen1/system-overview.md deleted file mode 100644 index 146e9945e..000000000 --- a/docs/ai-testbed/sambanova_gen1/system-overview.md +++ /dev/null @@ -1,7 +0,0 @@ -# System Overview - -## Introduction - -The SambaNova DataScale system is architected around the next-generation Reconfigurable Dataflow Unit (RDU) processor for optimal dataflow processing and acceleration. The AI Testbed's SambaNova system is a half-rack system consisting of two nodes, each of which features eight RDUs interconnected to enable model and data parallelism. SambaFlow, its software stack, extracts, optimizes, and maps dataflow graphs to the RDUs from standard machine learning frameworks, like PyTorch. - -Here is the link to the SambaNova white paper: [Accelerated Computing with a Reconfigurable Dataflow Architecture](https://sambanova.ai/wp-content/uploads/2021/06/SambaNova_RDA_Whitepaper_English.pdf) diff --git a/docs/ai-testbed/sambanova_gen1/tunneling-and-forwarding-ports.md b/docs/ai-testbed/sambanova_gen1/tunneling-and-forwarding-ports.md deleted file mode 100644 index 712c9c363..000000000 --- a/docs/ai-testbed/sambanova_gen1/tunneling-and-forwarding-ports.md +++ /dev/null @@ -1,96 +0,0 @@ -# Tunneling and Forwarding Ports - -Port forwarding is covered here. This is specifically for TensorBoard. - -## TensorBoard Port-Forwarding - -This section describes the steps to be followed to set up port forwarding for applications, -like TensorBoard, which runs on the SambaNova system and binds to one or more ports. -This example uses 6006 and 16006 as port numbers. Using port numbers other than these may -avoid collisions with other users. - -### From your local machine - -Run - -```bash -ssh -v -N -f -L localhost:16006:localhost:16006 ALCFUserID@sambanova.alcf.anl.gov -... -Password: < MobilPass+ code > - -ssh ALCFUserID@sambanova.alcf.anl.gov -... -Password: < MobilPass+ code > -``` - -*replacing* ***ALCFUserID*** *with your ALCF User ID.* - -### From **sambanova.alcf.anl.gov** - -Below are the commands specific to sm-01. You may replace **sm-01** with **sm-02** when using the appropriate system. - -Run - -**NOTE: The full name is sm-01.ai.alcf.anl.gov and it may also be used.** - -```bash -ssh -N -f -L localhost:16006:localhost:6006 ALCFUserID@sm-01 -ssh ALCFUserID@sm-01 -``` - -### On **sm-01** - -Execute the following command: - -```bash -ALCFUserID@sm-01:~$ source /software/sambanova/envs/sn_env.sh -(venv) ALCFUserID@sm-01:~$ -``` - -Navigate to the appropriate directory for your model. -Launch your model using **srun** or **sbatch**. - -```bash -cd /path/to/your/project -sbatch --output=pef/my_model/output.log submit-my_model-job.sh -``` - -### On Another sm-01 Terminal Window - -The SambaNova system has a bash shell script to setup the required software environment. -This sets up the SambaFlow software stack, the associated environmental variables and activates -a pre-configured virtual environment. - -Use - -```bash -ALCFUserID@sm-01:~$ source /software/sambanova/envs/sn_env.sh -(venv) ALCFUserID@sm-01:~$ -``` - -Navigate to the appropriate directory for your model. - -```bash -cd /path/to/your/project -tensorboard --logdir /logs --port 6006 -``` - -### Browser on Local Machine - -Then, navigate in your browser to, in this example, [http://localhost:16006](http://localhost:16006) on your local machine. - -## Notes - -Explanation of **ssh** command: - -```text --N : no remote commands - --f : put ssh in the background - --L ::: : - -The full command line will forward : (local scope) to : (remote scope) -``` - -Adapted from: [How can I run Tensorboard on a remote server?](https://stackoverflow.com/questions/37987839/how-can-i-run-tensorboard-on-a-remote-server) diff --git a/docs/ai-testbed/sambanova_gen1/unused/performance-tools.md b/docs/ai-testbed/sambanova_gen1/unused/performance-tools.md deleted file mode 100644 index cb7e21f5d..000000000 --- a/docs/ai-testbed/sambanova_gen1/unused/performance-tools.md +++ /dev/null @@ -1,38 +0,0 @@ -# Performance Tools - -## Tile Status - -```bash -sntilestat -watch sntilestat -``` - -## Measure TFLOPs - -This is an example for measuring TFLOPs for Conv2D forward pass. - -```python -elif args.command == 'run': - samba.session.run(inputs, section_types=['fwd']) - #samba.session.run(inputs, section_types=['bckwd']) - n_iters = 100 - forward_pass_time = [] - print("run starts") - start_time_forward = time.time() - for loop in range(n_iters): - samba.session.run(inputs, section_types=['fwd']) - #samba.session.run(inputs, section_types=['bckwd']) - #samba.session.run(inputs, section_types=['fwd', 'bckwd']) - end_time_forward = time.time() - forward_pass_time.append(end_time_forward - start_time_forward) - print("run ends") - - w_0 = (args.w + 2*args.pad_w - args.s)/args.wstride + 1 - h_0 = (args.h + 2*args.pad_h - args.r)/args.hstride + 1 - tflops = 2 * (w_0*h_0) * args.s * args.r * args.c * args.k * args.n - tflops_forw = tflops/(sum(forward_pass_time)/n_iters/5)/(10**12) #tflops - print(tflops) - print(sum(forward_pass_time)) - print("tflops: %f"%tflops_forw) - print("SN,Training,%s,Conv2d_fwd,%d,100,1,%d,%d,%d,%d,%d,%d,%d,0.0,%f,None,%f,%f,%f" % ("dtype", args.n, args.w, args.h, args.c, args.k, args.s, args.pad_w, args.wstride, (sum(forward_pass_time)/n_iters)/args.n, args.n/(sum(forward_pass_time)/n_iters), tflops_forw, (sum(forward_pass_time)/n_iters)/args.n)) -``` diff --git a/docs/ai-testbed/sambanova_gen1/unused/running-bert-large-on-sn10-8r.md b/docs/ai-testbed/sambanova_gen1/unused/running-bert-large-on-sn10-8r.md deleted file mode 100644 index d059725d2..000000000 --- a/docs/ai-testbed/sambanova_gen1/unused/running-bert-large-on-sn10-8r.md +++ /dev/null @@ -1,178 +0,0 @@ -# Steps to Run BERT-Large on Sambanova DataScale SN10-8R - - - - - - -## Pretraining in data parallel mode - -**Note**: for the sake of the tutorial, we have precompiled the model and lowered the number of train steps to reduce the execution time. - -1. Create a folder for pretraining in your home repo, and copy the bash script `/projects/aitestbed_training/SN/precompiled_bert/bash_scripts/submit-bert-pretrain-job-LBS1024.sh` to it. Then, go to that folder. Example: - - ```bash - cd $HOME - mkdir pretrain - cp /projects/aitestbed_training/SN/precompiled_bert/bash_scripts/submit-bert-pretrain-job-LBS1024.sh pretrain/ - cd pretrain/ - ``` - -2. Open the `submit-bert-pretrain-job-LBS1024.sh` file, and change `OUTDIR` to location of the pretrain folder. Example: - - ```bash - OUTDIR=$HOME/pretrain - ``` - - Note: the per device batch size (LBS) is set to 1024 here. Also, the number of steps is set to 100, but this can be changed. - -3. SambaNova uses SLURM for job submission and queueing. We will use sbatch to submit our job to the job scheduler. Please refer to [Sambanova Documentation](https://www.alcf.anl.gov/support/ai-testbed-userdocs/sambanova/Job-Queuing-and-Submission/index.html) for further details. In the following example, 2 RDUs are used: - - ```bash - sbatch --output=log_bert_pretrain_LBS1024_np2.out --gres=rdu:2 -c 8 submit-bert-pretrain-job-LBS1024.sh - ``` - Note: `-c` represents the number of cores per task - -4. You can follow the status of your job using: `squeue`. The job should take about 8 min to complete. - -5. Once the job is completed, you can see the checkpoint(s) and accuracy metrics in `hf_output_lrg_run/`. The throughput is outputted in the `log_bert_pretrain_LBS1024_np2.out` file (search for throughput in the file). - -
- Click for sample throughput - - ```bash - Measuring peformance with world size: 2 - initial run starts. - initial run completes. - e2e_latency: 30.75621747970581 seconds, throughput: 665.8816225861821 samples/s, measured over 10 iterations. - NOTE: This is the combined throughput for 2 workers - total duration: 30.75621747970581 s - ``` - -
- -
- Click for sample train_steps.txt - - ```bash - 10 - 20 - 30 - 40 - 50 - 60 - 70 - 80 - 90 - 100 - ``` - -
- -
- Click for sample step_loss.txt - - ```bash - 11.16291 - 10.76511 - 10.44571 - 10.16663 - 9.98203 - 9.85561 - 9.76017 - 9.66340 - 9.57864 - 9.50137 - ``` - -
- -## Fine-tuning for question answering using 1 RDU - -**Note**: for the sake of the tutorial, we have precompiled the model and lowered the number of train steps to reduce the execution time. We will also use a processed dataset. - -1. Create a folder for finetuning in your home repo, and copy the bash script `/projects/aitestbed_training/SN/precompiled_bert/bash_scripts/submit-bert-squad-job.sh` to it. Then, go to that folder. Example: - - ```bash - cd $HOME - mkdir finetune - cp /projects/aitestbed_training/SN/precompiled_bert/bash_scripts/submit-bert-squad-job.sh finetune/ - cd finetune/ - ``` - -2. Copy the processed dataset to the finetune repo. This will avoid tokenizing the dataset on the fly. - ```bash - cp -r /projects/aitestbed_training/SN/precompiled_bert/squad_cache ./ - ``` - -3. Open the `submit-bert-squad-job.sh` file, and change `OUTDIR` to location of the finetune folder. Example: - - ```bash - OUTDIR=$HOME/finetune - ``` - Note: the number of train epochs is set to 0.08, but this can be changed - - -4. SambaNova uses SLURM for job submission and queueing. We will use sbatch to submit our job to the job scheduler. Please refer to [Sambanova Documentation](https://www.alcf.anl.gov/support/ai-testbed-userdocs/sambanova/Job-Queuing-and-Submission/index.html) for further details. In the following example, 1 RDU is used: - - ```bash - sbatch --output=log_bert_squad.out --gres=rdu:1 -c 8 submit-bert-squad-job.sh - ``` - -5. You can follow the status of your job using: `squeue`. The job should take about 8 min to complete. - -6. Once the job is completed, you can see the checkpoint(s) and accuracy metrics in `hf_output_squad_run/`. - -
- Click for sample log_history.json - - ```bash - [ - { - "exact": 54.33301797540208, - "f1": 66.54507382283774, - "epoch": 0.07965242577842144, - "total_flos": 5419063617454080, - "step": 220 - } - ] - ``` - -
- -
- Click for sample eval_results_squad.txt - - ```bash - exact = 54.33301797540208 - f1 = 66.54507382283774 - epoch = 0.07965242577842144 - total_flos = 5419063617454080 - ``` - -
- -# Other Models and Use-cases - -* Full execution scripts (compile, run, measure-perf) for BERT-Large can be found under `/projects/aitestbed_training/SN/full_execution_bert/bash_scripts`. - * `submit-bert-pretrain-job.sh`: bash script for pretraining job with 8 RDUs and LBS=256 - * `submit-bert-squad-job.sh`: bash script for fine-tuning job for question answering with 1 RDU - -* See [Example Programs](https://www.alcf.anl.gov/support/ai-testbed-userdocs/sambanova/Example-Programs/index.html) for instructions to run other well-known AI applications on SambaNova hardware (e.g., LeNet, FFN-MNIST, logistic regression, UNet) diff --git a/docs/ai-testbed/sambanova_gen1/unused/sambanova.md b/docs/ai-testbed/sambanova_gen1/unused/sambanova.md deleted file mode 100644 index 1d7257119..000000000 --- a/docs/ai-testbed/sambanova_gen1/unused/sambanova.md +++ /dev/null @@ -1,110 +0,0 @@ -# SambaNova - -## PyTorch Mirrors - -See . - -There are two mirrors (in the python docs) used for downloading the -mnist dataset. - -mirrors = [ - 'http://yann.lecun.com/exdb/mnist/', - 'https://ossci-datasets.s3.amazonaws.com/mnist/'] - -[yann.lecun.com](http://yann.lecun.com) appears to be intermittently -broken (503 errors). - -## Resources - -- - -- [Argonne SambaNova Training - 11/20](https://anl.app.box.com/s/bqc101mvt3r7rpxbd2yxjsf623ea3gpe) - -- [https://docs.sambanova.ai](https://docs.sambanova.ai/) Create a - SambaNova account if you do not have one. - -- [Getting Started with - SambaFlow](https://docs.sambanova.ai/sambanova-docs/1.6/developer/getting-started.html) - Skip this one. - -- [Tutorial: Creating Models with - SambaFlow](https://docs.sambanova.ai/sambanova-docs/1.6/developer/intro-tutorial.html) - -- Administrators --- @ryade - -## Further Information - - - -## Creating a SambaNova Portal Account to access the documentation portal - -1. Go to [login.sambanova.ai](http://login.sambanova.ai/); - -2. Select the "Sign up" link at the bottom; - -3. Enter your information - - 1. Your ANL email address; - - 2. A password that you choose to access the site; - - 3. First name; - - 4. Last name; - - 5. Alternate email address; - - 6. Use 64693137 for the CLOUD ID; - - 7. Select "Register" button; - - 8. Note: The new web page may be displaying a QR code. Do not navigate away from it. Please edit this page to describe what -happenes for you. - -4. Verify your email address - - 1. Open your ANL email; - - 2. Open the email from Okta; - - 3. Select the "Activate Account" button; - - 4. Select the "Configure factor" button on the displayed web page; - - 5. Select either iPhone or Android for the device time on the new web page; - - 6. Install Okta Verify from the App Store/Google Play Store onto your mobile device.; - - 7. Select "Next" button on the web page; - -5. On your phone - - 1. Open Okta Verify app; - - 2. Select "Get Started" button; - - 3. Select "Next" button; - - 4. Select "Add Account" button; - - 5. Select "Organization" for Account Type; - - 6. Scan the QR Code shown in the browser; - -6. Sign in to the SambaNova web site - - 1. Select the "SambaNova Documentation" button. - -Authorization for sections of the SambaNova site uses the tuple (email -address, cloud id). For ANL users, th*ese **should** be an anl email -address and the cloud id specified above (64693137). (Note: the cloud -id can be changed in the SambaNova user settings.) -**If you are not at Argonne, please send us an email (ai@alcf.anl.gov) -for access. ** - -If you plan to publish, say to a conference, workshop or journal, we -have a review process wherein you share the draft with us -(pre-submission) at and we -will work with SambaNova for the requisite approvals. diff --git a/docs/ai-testbed/sambanova_gen1/unused/sambatune-user-guide.md b/docs/ai-testbed/sambanova_gen1/unused/sambatune-user-guide.md deleted file mode 100644 index c238cb147..000000000 --- a/docs/ai-testbed/sambanova_gen1/unused/sambatune-user-guide.md +++ /dev/null @@ -1,553 +0,0 @@ -# SambaTune - -## Notes - -```bash -cd /home/rweisner/tmp/uno_test -``` - -```text -#TODOBRW -ssh wilsonb@homes.cels.anl.gov -ssh sm-02 -MobilePass+ password -On sm-02 -source /opt/sambaflow/venv/bin/activate -export PATH=/opt/sambaflow/bin:$PATH -sambatune linear_net.yaml --artifact-root $(pwd)/artifact_root --modes benchmark instrument run -sambatune_ui --directory /home/wilsonb/tmp/sambatune_gen --port 8580 -#There will be a username and password displayed that you will use in your browser on your laptop. -Command used on laptop for port forward -ssh -XL 8580:127.0.0.1:8580 wilsonb@sm-02.cels.anl.gov -MobilePass+ password -# You will be logged into sm-02 but, you do not need to do anything. -address used in browser on laptop localhost:8580 -#Use username and password from sambatune_ui. -Username -Password - -#TODOBRW -/home/wilsonb/DL/Sambanova/apps_1.12/private/anl/2022-09-21T19-21-05.html -``` - -## About SambaTune - -SambaTune is a tool for profiling, debugging, and tuning the performance of applications -running on SN hardware. - -The tool automates the collection of hardware performance counters, metrics aggregation, -report generation, and visualization. It also automates benchmarking of the application -to compute average throughput over a sufficient number of runs. The tool is designed to -aid the user with performance bottleneck analysis and tuning. - -SambaTune is currently used by SN engineers involved in performance tuning efforts. -SambaTune is also planned for release to external customers to aid with performance -bottleneck analysis and resolution. - -## Run SambaTune - -```bash -ssh ALCFUserID@sambanova.alcf.anl.gov -# Enter MobilePass+ pass code -ssh sm-01 -``` - -```bash -#TODOBRW -ssh wilsonb@sambanova.alcf.anl.gov -# Enter MobilePass+ pass code -ssh sm-01 -``` - -First, enter the virtual environment on **sm-01** or **sm-02**: - -```bash -source /opt/sambaflow/venv/bin/activate -``` - -Update path: - -```bash -export PATH=/opt/sambaflow/bin:$PATH -``` - -## Usage - -```console -usage: sambatune [-h] [--artifact-root ARTIFACT_ROOT] [--disable-override] - [--compile-only | -m MODES [MODES ...]] [--version] - config - -positional arguments: - config YAML file with model, compile, run configuration. - -optional arguments: - -h, --help show this help message and exit - --artifact-root ARTIFACT_ROOT - Custom location to save compile/run artifacts; - defaults to '$DUMP_ROOT/artifact_root' (default: None) - --disable-override Reuse the placement from the baseline compilation - (default: False) - --compile-only Run compilation of PEFs for selected modes only - (default: False) - -m MODES [MODES ...], --modes MODES [MODES ...] - Select modes to execute from ['benchmark', - 'instrument', 'run'] (default: ['benchmark']) - --version version of sambatune and sambaflow. -``` - -## Command Overview - -By default, it will run with the benchmarking mode enabled. Use the --modes flag to run -modes individually or in any combination. -Benchmark-Only: - -```bash -sambatune example_net.yaml --artifact-root $(pwd)/artifact_root --modes benchmark -``` - -Instrument-Only: - -```bash -sambatune example_net.yaml --artifact-root $(pwd)/artifact_root --modes instrument -``` - -All modes: - -```bash -sambatune example_net.yaml --artifact-root $(pwd)/artifact_root --modes instrument -``` - -## Command Example - -```bash -# From Bill -python /opt/sambaflow/apps/private/anl/uno_full.py compile --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --pef-name=uno_16_4_500_ws --output-folder=/home/arnoldw//models_dir/1520847 --mac-v1 - -python /opt/sambaflow/apps/private/anl/uno_full.py run --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial --pef=/home/arnoldw//models_dir/1520847/uno_16_4_500_ws/uno_16_4_500_ws.pef --in_dir /var/tmp/raw/ --mac-v1 -``` - -```bash -# From Bill --> Bruce -python /opt/sambaflow/apps/private/anl/uno_full.py compile --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --pef-name=uno_16_4_500_ws --output-folder='.' --mac-v1 - -export OMP_NUM_THREADS=1 -python /opt/sambaflow/apps/private/anl/uno_full.py run --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial --pef=./uno_16_4_500_ws/uno_16_4_500_ws.pef --in_dir /var/tmp/raw/ --mac-v1 -``` - -```text -#TODOBRW This works. 9/19/22 -sm-01/home/wilsonb/tmp/uno_test/uno_ccle.yaml -app: /opt/sambaflow/apps/private/anl/uno_full.py - -model-args: --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial - -compile-args: compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 - -run-args: --multiprocess-pickle --use-pickle-train --measure-spatial --train-samba-spatial --mac-v1 --train_source CCLE --lr 0.001 --data-dir /software/sambanova/dataset/CCLE_16_500 --converted-pickle - -env: - OMP_NUM_THREADS: 16, - SF_RNT_NUMA_BIND: 2 -``` - -Run the following example: - -```bash -sambatune uno_ccle.yaml --artifact-root $(pwd)/artifact_root --modes benchmark instrument run -``` - -```bash -#TODOBRW -# Stand-alone -export UNO=. -export NS=500 -srun python /opt/sambaflow/apps/private/anl/uno_full.py compile --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --pef-name=uno_16_4_${NS}_ws --output-folder='.' --mac-v1 - -export OMP_NUM_THREADS=1 -srun python /opt/sambaflow/apps/private/anl/uno_full.py run --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef=./uno_16_4_${NS}_ws/uno_16_4_${NS}_ws.pef --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE --data-dir /software/sambanova/dataset/CCLE_16_${NS} - -export UNO=. -export NS=500 -export OMP_NUM_THREADS=1 -srun pyinstrument /opt/sambaflow/apps/private/anl/uno_full.py run --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef=./uno_16_4_${NS}_ws/uno_16_4_${NS}_ws.pef --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE --data-dir /software/sambanova/dataset/CCLE_16_${NS} > pyinstrument_1.13.log 2>&1 - - - -Ricks run python ${UNO}/uno_full.py run --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef=“out/uno_16_4_${NS}/uno_16_4_${NS}.pef” --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE -``` - -```text -#TODOBRW -sm-01/home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_brw_CCLE_1_12.yaml -export OMP_NUM_THREADS=16 -app: /home/wilsonb/DL/Sambanova/apps_1.12/private/anl/uno_full.py - -model-args: --weight-sharing -b 16 -mb 4 --num-spatial-batches 500 --mapping spatial - -compile-args: compile --plot --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 - -run-args: --measure-spatial --train-samba-spatial --mac-v1 --train_source CCLE --lr 0.001 --data-dir /software/sambanova/dataset/CCLE_16_500 - -env: - OMP_NUM_THREADS: 16, - SF_RNT_NUMA_BIND: 2 -``` - -Run the following example: - -```bash -sambatune uno_brw_CCLE_1_12.yaml --artifact-root $(pwd)/artifact_root --modes benchmark instrument run - -export UNO=. -export NS=50 -export OMP_NUM_THREADS=1 - -srun python /opt/sambaflow/apps/private/anl/uno_full.py compile --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 - -xsrun pyinstrument /opt/sambaflow/apps/private/anl/uno_full.py run --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef=./uno_16_4_${NS}_ws/uno_16_4_${NS}_ws.pef --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE --data-dir /software/sambanova/dataset/CCLE_16_${NS} --epochs 1 > my.log 2>&1 - -srun python /opt/sambaflow/apps/private/anl/uno_full.py run --multiprocess-pickle --measure-spatial --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef=./out/uno_full_16_47_${NS}/uno_full_16_47_${NS}.pef --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE --lr 0.001 --data-dir /software/sambanova/dataset/CCLE_16_${NS} > pyinstrument_1.13.log 2>&1 - -cat my.log # Has pyinstrument run name. -pyinstrument --load-prev 2022-09-21T19-21-05 -r html - - -1.13 - -source /opt/sambaflow/venv/bin/activate -cd ~/tmp/uno_test/ -export UNO=. -export NS=500 -export OMP_NUM_THREADS=1 -export PATH=/opt/sambaflow/bin:$PATH -sntilestat - - - -./uno_pickl.sh compile 500 -./uno_pickl.sh run 500 - -``` - -```bash -sambatune uno_brw_CCLE_1_12.yaml --artifact-root $(pwd)/artifact_root --modes benchmark instrument run - -export UNO=. -export NS=50 -export OMP_NUM_THREADS=1 - -srun python /opt/sambaflow/apps/private/anl/uno_full.py compile --mac-human-decision /opt/sambaflow/apps/private/anl/samba_uno/human_decisions_spatial.json --mac-v1 - -xsrun pyinstrument /opt/sambaflow/apps/private/anl/uno_full.py run --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef=./uno_16_4_${NS}_ws/uno_16_4_${NS}_ws.pef --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE --data-dir /software/sambanova/dataset/CCLE_16_${NS} --epochs 1 > my.log 2>&1 - -srun python /opt/sambaflow/apps/private/anl/uno_full.py run --multiprocess-pickle --measure-spatial --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef=./out/uno_full_16_47_${NS}/uno_full_16_47_${NS}.pef --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE --lr 0.001 --data-dir /software/sambanova/dataset/CCLE_16_${NS} > pyinstrument_1.13.log 2>&1 - -cat my.log # Has pyinstrument run name. -pyinstrument --load-prev 2022-09-21T19-21-05 -r html - - -1.13 - -source /opt/sambaflow/venv/bin/activate -cd ~/tmp/uno_test/ -export UNO=. -export NS=500 -export OMP_NUM_THREADS=1 -export PATH=/opt/sambaflow/bin:$PATH -sntilestat -``` - -uno_pickl.sh - -```bash -#! /bin/bash -x -#set -e -source /opt/sambaflow/venv/bin/activate -SECONDS=0 -NS=${2} -UNO=/opt/sambaflow/apps/private/anl/ -DS="ALL" -DS="CCLE" - -BS=$((NS*16)) -export OMP_NUM_THREADS=16 - -echo "Model: UNO_SPA_TRN" -echo "Date: " $(date +%m/%d/%y) -echo "Time: " $(date +%H:%M) -if [ "${1}" == "convert" ] ; then -python3 ${UNO}/uno/uno_data_loaders_converted.py --in_dir /var/tmp/raw/ --out_dir /software/sambanova/dataset/${DS}_16_${NS} --batch-size ${BS} --train_sources ${DS} --file-write-frequency 10 - - -elif [ "${1}" == "compile" ] ; then - echo "COMPILE" - python ${UNO}/uno_full.py compile --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --mac-human-decision ${UNO}/samba_uno/human_decisions_spatial.json --pef-name="uno_16_4_${NS}" --mac-v1 - - -elif [ "${1}" == "run" ] ; then - echo "RUN ${DS}" - SF_RNT_NUMA_BIND=2 - #python ${UNO}/uno_full.py run --acc-test --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef="out/uno_16_4_${NS}/uno_16_4_${NS}.pef" --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE - python ${UNO}/uno_full.py run --mac-v1 --multiprocess-pickle --use-pickle-train --train-samba-spatial -b 16 -mb 4 --num-spatial-batches ${NS} --lr 0.001 --mapping spatial --data-dir /software/sambanova/dataset/${DS}_16_${NS} --converted-pickle --train_sources ${DS} --pef="out/uno_16_4_${NS}/uno_16_4_${NS}.pef" --epochs 1 - #python ${UNO}/uno_full.py run --mac-v1 --multiprocess-pickle --use-pickle-train --train-samba-spatial -b 16 -mb 4 --num-spatial-batches ${NS} --lr 0.001 --mapping spatial --data-dir /software/sambanova/dataset/${DS}_16_${NS} --converted-pickle --train_sources ${DS} --pef="out/uno_16_4_${NS}/uno_16_4_${NS}.pef" - -elif [ "${1}" == "pyinstrument" ] ; then - echo "RUN ${DS}" - SF_RNT_NUMA_BIND=2 - #python ${UNO}/uno_full.py run --acc-test --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef="out/uno_16_4_${NS}/uno_16_4_${NS}.pef" --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE - pyinstrument ${UNO}/uno_full.py run --mac-v1 --multiprocess-pickle --use-pickle-train --train-samba-spatial -b 16 -mb 4 --num-spatial-batches ${NS} --lr 0.001 --mapping spatial --data-dir /software/sambanova/dataset/${DS}_16_${NS} --converted-pickle --train_sources ${DS} --pef="out/uno_16_4_${NS}/uno_16_4_${NS}.pef" --epochs 1 - #python ${UNO}/uno_full.py run --mac-v1 --multiprocess-pickle --use-pickle-train --train-samba-spatial -b 16 -mb 4 --num-spatial-batches ${NS} --lr 0.001 --mapping spatial --data-dir /software/sambanova/dataset/${DS}_16_${NS} --converted-pickle --train_sources ${DS} --pef="out/uno_16_4_${NS}/uno_16_4_${NS}.pef" - -elif [ "${1}" == "no_pickle" ] ; then - echo "no_pickle ${DS}" - SF_RNT_NUMA_BIND=2 - python ${UNO}/uno_full.py run --train-samba-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef="out/uno_16_4_${NS}/uno_16_4_${NS}.pef" --in_dir /var/tmp/raw/ --mac-v1 --train_source CCLE - -elif [ "${1}" == "mp" ] ; then -echo "Duration: " $SECONDS - -elif [ "${1}" == "mp" ] ; then -echo "Duration: " $SECONDS -echo "PERF" -python uno_full.py measure-performance --measure-spatial --weight-sharing -b 16 -mb 4 --num-spatial-batches ${NS} --mapping spatial --pef="out/uno_16_4_${NS}/uno_16_4_${NS}.pef" --num-iterations 20 --mac-v1 -fi - -echo "Duration: " $SECONDS -``` - -```bash -./uno_pickl.sh compile 500 -./uno_pickl.sh run 500 -./uno_pickl.sh pyinstrument 500 -pyinstrument --load-prev 2022-09-22T18-31-24 -r html -stdout is a terminal, so saved profile output to /tmp/tmpeo5ehksn.html -cp /tmp/tmpeo5ehksn.html . -``` - -On dev terminal - -```bash -scp wilsonb@sambanova.alcf.anl.gov:tmp/uno_test/tmpeo5ehksn.html . -``` - -View in local browser. - -### Running - -Create a directory for your work. - -```bash -mkdir ~/sambatune -cd ~/sambatune -``` - -Create **small_vae.yaml** with the following content using your favorite editor. - -```yaml -app: /opt/sambaflow/apps/private/anl/moleculevae.py - -model-args: -b 128 --in-width 512 --in-height 512 - -compile-args: compile --plot --enable-conv-tiling --compiler-configs-file /opt/sambaflow/apps/private/anl/moleculevae/compiler_configs_conv.json --mac-v2 --mac-human-decision /opt/sambaflow/apps/private/anl/moleculevae/symmetric_human_decisions_tiled_v2.json - -run-args: --input-path /var/tmp/dataset/moleculevae/ras1_prot-pops.h5 --out-path ${HOME}/moleculevae_out --model-id 0 --epochs 10 - -env: - OMP_NUM_THREADS: 16 - SF_RNT_FSM_POLL_BUSY_WAIT: 1 - SF_RNT_DMA_POLL_BUSY_WAIT: 1 - CONVFUNC_DEBUG_RUN: 0 -``` - -Run the following example: - -```bash -sambatune small_vae.yaml --artifact-root $(pwd)/artifact_root --modes benchmark instrument run -``` - -Create **linear_net.yaml** with the following content using your favorite editor. - -```yaml -app: /opt/sambaflow/apps/micros/linear_net.py - -model-args: > - -b 1024 - -mb 64 - --in-features 8192 - --out-features 4096 - --repeat 128 - --inference - -compile-args: > - --n-chips 2 - --plot - -env: - SF_RNT_FSM_POLL_BUSY_WAIT: 1 - SF_RNT_DMA_POLL_BUSY_WAIT: 1 - CONVFUNC_DEBUG_RUN": 0 -``` - -**NOTE:** The following takes 45 minutes to run. - -Run the following example: - -```bash -sambatune linear_net.yaml --artifact-root $(pwd)/artifact_root --modes benchmark instrument run -``` - -```bash -#TODOBRW -cd ~/tmp/uno_test -screen -sambatune uno.yaml --artifact-root $(pwd)/artifact_root --modes benchmark instrument run -``` - -where **linear_net.yaml** is a user-specified configuration file you created above. - -## SambaTune UI - -### Port Availability - -It is recommended that you check if the port you want to use is available. You may check by: - -```bash -ps -elf | grep desired_port -``` - -Example: - -```bash -ps -elf | grep 8576 -``` - -Alternatively, you may check for all ports in use by **sambatune_ui**: - -```bash -ps -elf | grep sambatune_ui -``` - -If you need to free a port that you are finished with, you may use the **kill** command. - -### Start SambaTune UI - -If you followed the above directions, your artifact_root will be at ~/sambatune/artifact_root. - -Start the UI: - -It will tell you the **username** and **password**. - -**NOTE:** It is recommended to use a port other than **8576** in case someone else is using it. Select another port close to **8576**. - -Next - -```bash -sambatune_ui --directory ~/sambatune/artifact_root/sambatune_gen/ --port 8576 -``` - -```bash -#TODOBRW -sambatune_ui --directory ~/sambatune/artifact_root/sambatune_gen/ --port 8580 -sambatune_ui --directory /home/wilsonb/tmp/uno_test/artifact_root/sambatune_gen --port 8580 -username: "admin", password: "4f7cac2c-351e-11ed-93a3-f7ef9c6e5d46" -username: "admin", password: "aaf1fc88-35c8-11ed-93a3-f7ef9c6e5d46" -username: "admin", password: "bf64e4f8-3831-11ed-93a3-f7ef9c6e5d46" -username: "admin", password: "8feca89e-384c-11ed-93a3-f7ef9c6e5d46" -username: "admin", password: "355222d6-3a88-11ed-93a3-f7ef9c6e5d46" -``` - -You will see something like: - -```console -with the, - username: "admin", password: "05c63938-2941-11ed-93a3-f7ef9c6e5d46" -[2022-08-31 15:24:36 +0000] [1344959] [Info] Starting gunicorn 20.1.0 -[2022-08-31 15:24:36 +0000] [1344959] [Info] Listening at: http://0.0.0.0:8576 (1344959) -[2022-08-31 15:24:36 +0000] [1344959] [Info] Using worker: sync -[2022-08-31 15:24:36 +0000] [1345092] [Info] Booting worker with pid: 1345092 -[2022-08-31 15:24:36 +0000] [1345093] [Info] Booting worker with pid: 1345093 -``` - -**NOTE:** Write down the username and password. - -**NOTE:** The password only works with this one instance of sambatune_ui. If you stop this instance of sambatune_ui and start another instance, it will have a new password. - -**NOTE:** You will need to **>** or use the **kill** command to stop sambatune_ui when you have finished. -Not doing so will tie up the port. -You can **ps -elf | grep the_port_you_used** to find the running processes. -If you are not comfortable doing this, please ask for help. - -## Use Port-Forwarding - -This describes the steps to set up port-forwarding for applications, -like SambaTune UI, which runs on the SambaNova system and binds to one or more ports. -This example uses 8576 and 18576 as port numbers. **Using port numbers other than these may -avoid collisions with other users.** - -### From your local machine - -This command sets up a port forward SambaNova login node to your local machine. - -Run - -```bash -ssh -N -f -L localhost:18576:localhost:18576 ALCFUserID@sambanova.alcf.anl.gov -... -Password: < MobilPass+ code > - -ssh ALCFUserID@sambanova.alcf.anl.gov -``` - -```bash -#TODOBRW -ssh -v -N -f -L localhost:8580:localhost:8580 wilsonb@sambanova.alcf.anl.gov -ssh -N -f -L localhost:8580:localhost:8580 wilsonb@sambanova.alcf.anl.gov -... -Password: < MobilPass+ code > - -ssh wilsonb@sambanova.alcf.anl.gov -``` - -*replacing* ***ALCFUserID*** *with your ALCF User ID.* - -### From **sambanova.alcf.anl.gov** - -This command sets up a port forward from a SambaNova node to the sambanova login machine. - -Below are the commands specific to sm-01. You may replace **sm-01** with **sm-02** when using that system. - -Run - -**NOTE: The full name is sm-01.ai.alcf.anl.gov and it may also be used.** - -```bash -ssh -N -f -L localhost:18576:localhost:8576 ALCFUserID@sm-01 -``` - -```bash -#TODOBRW -ssh -N -f -L localhost:8580:localhost:8580 wilsonb@sm-01 -``` - -### Browser on Local Machine - -Then, navigate in your browser to, in this example, [http://localhost:18576](http://localhost:18576) on your local machine. - -Use the username and password from **sm-01** to log in. - -## SSH Notes - -Explanation of **ssh** command: - -```text --N : no remote commands - --f : put ssh in the background - --L ::: : - -The full command line will forward : (local scope) to : (remote scope) -``` - -Adapted from: [How can I run Tensorboard on a remote server?](https://stackoverflow.com/questions/37987839/how-can-i-run-tensorboard-on-a-remote-server) diff --git a/docs/ai-testbed/sambanova_gen1/virtual-environment.md b/docs/ai-testbed/sambanova_gen1/virtual-environment.md deleted file mode 100644 index ead5710a6..000000000 --- a/docs/ai-testbed/sambanova_gen1/virtual-environment.md +++ /dev/null @@ -1,47 +0,0 @@ -# Virtual Environments to Customize Environment - -## Using a Virtual Venv - -To create a virtual environment, one can use the --system-site-packages flag: - -```bash -python -m venv --system-site-packages my_env -source my_env/bin/activate -``` - -### System Site Packages - -There are many packages available on the system. -Run the following Python script to retrieve the -location of the packages: - -```python -import sys -site_packages = next(p for p in sys.path if 'site-packages' in p) -print(site_packages) -``` - -Given the location of the packages, one may list the packages. -For example: - -```bash -ls -al /opt/sambaflow/venv/lib/python3.7/site-packages -``` - -## Installing Packages - -Install packages in the normal manner such as: - -```bash -python3 -m pip install "SomeProject" -``` - -For more details see [Use pip for installing](https://packaging.python.org/en/latest/tutorials/installing-packages/#use-pip-for-installing). - -To install a different version of a package that is already installed in one's environment, one can use: - -```bash -pip install --ignore-installed ... # or -I -``` - -Note: Conda is not supported on the SambaNova system. From bda4487ff07c1c07ea0b24460e9b02c3bc1e8112 Mon Sep 17 00:00:00 2001 From: vksastry Date: Tue, 17 Oct 2023 13:27:29 -0500 Subject: [PATCH 61/67] rename sambanova_gen2 to sambanova --- .../{sambanova_gen2 => sambanova}/TODO.md | 0 .../{sambanova_gen2 => sambanova}/documentation.md | 0 .../example-multi-node-programs.md | 0 .../example-programs.md | 0 .../files/BertLarge.sh | 0 .../files/BertLarge_nvme.sh | 0 .../files/Gpt1.5B_compile.sh | 0 .../files/Gpt1.5B_run.sh | 0 .../files/Gpt1.5B_single.sh | 0 .../{sambanova_gen2 => sambanova}/files/Log_in.png | Bin .../{sambanova_gen2 => sambanova}/files/ST_UI.jpg | Bin .../files/ST_console.jpg | Bin .../{sambanova_gen2 => sambanova}/files/Unet2d.sh | 0 .../files/ffn_mnist_compile_run.sh | 0 .../files/sambanova_login.jpg | Bin .../files/unet_batch.sh | 0 .../getting-started.md | 0 .../job-queuing-and-submission.md | 0 .../{sambanova_gen2 => sambanova}/miscellaneous.md | 0 .../running-a-model-or-program.md | 0 .../system-overview.md | 0 .../tunneling-and-forwarding-ports.md | 0 .../unused/cosmictagger-conversion.md | 0 .../unused/files/Gpt1.5B.sh | 0 .../unused/performance-tools.md | 0 .../unused/running-GPT2-multi-node.md | 0 .../unused/running-GPT2.md | 0 .../unused/running-bert-large-on-sn30.md | 0 .../unused/sambatune-user-guide.md | 0 .../virtual-environment.md | 0 30 files changed, 0 insertions(+), 0 deletions(-) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/TODO.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/documentation.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/example-multi-node-programs.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/example-programs.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/BertLarge.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/BertLarge_nvme.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/Gpt1.5B_compile.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/Gpt1.5B_run.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/Gpt1.5B_single.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/Log_in.png (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/ST_UI.jpg (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/ST_console.jpg (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/Unet2d.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/ffn_mnist_compile_run.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/sambanova_login.jpg (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/files/unet_batch.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/getting-started.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/job-queuing-and-submission.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/miscellaneous.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/running-a-model-or-program.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/system-overview.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/tunneling-and-forwarding-ports.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/unused/cosmictagger-conversion.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/unused/files/Gpt1.5B.sh (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/unused/performance-tools.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/unused/running-GPT2-multi-node.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/unused/running-GPT2.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/unused/running-bert-large-on-sn30.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/unused/sambatune-user-guide.md (100%) rename docs/ai-testbed/{sambanova_gen2 => sambanova}/virtual-environment.md (100%) diff --git a/docs/ai-testbed/sambanova_gen2/TODO.md b/docs/ai-testbed/sambanova/TODO.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/TODO.md rename to docs/ai-testbed/sambanova/TODO.md diff --git a/docs/ai-testbed/sambanova_gen2/documentation.md b/docs/ai-testbed/sambanova/documentation.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/documentation.md rename to docs/ai-testbed/sambanova/documentation.md diff --git a/docs/ai-testbed/sambanova_gen2/example-multi-node-programs.md b/docs/ai-testbed/sambanova/example-multi-node-programs.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/example-multi-node-programs.md rename to docs/ai-testbed/sambanova/example-multi-node-programs.md diff --git a/docs/ai-testbed/sambanova_gen2/example-programs.md b/docs/ai-testbed/sambanova/example-programs.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/example-programs.md rename to docs/ai-testbed/sambanova/example-programs.md diff --git a/docs/ai-testbed/sambanova_gen2/files/BertLarge.sh b/docs/ai-testbed/sambanova/files/BertLarge.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/BertLarge.sh rename to docs/ai-testbed/sambanova/files/BertLarge.sh diff --git a/docs/ai-testbed/sambanova_gen2/files/BertLarge_nvme.sh b/docs/ai-testbed/sambanova/files/BertLarge_nvme.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/BertLarge_nvme.sh rename to docs/ai-testbed/sambanova/files/BertLarge_nvme.sh diff --git a/docs/ai-testbed/sambanova_gen2/files/Gpt1.5B_compile.sh b/docs/ai-testbed/sambanova/files/Gpt1.5B_compile.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/Gpt1.5B_compile.sh rename to docs/ai-testbed/sambanova/files/Gpt1.5B_compile.sh diff --git a/docs/ai-testbed/sambanova_gen2/files/Gpt1.5B_run.sh b/docs/ai-testbed/sambanova/files/Gpt1.5B_run.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/Gpt1.5B_run.sh rename to docs/ai-testbed/sambanova/files/Gpt1.5B_run.sh diff --git a/docs/ai-testbed/sambanova_gen2/files/Gpt1.5B_single.sh b/docs/ai-testbed/sambanova/files/Gpt1.5B_single.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/Gpt1.5B_single.sh rename to docs/ai-testbed/sambanova/files/Gpt1.5B_single.sh diff --git a/docs/ai-testbed/sambanova_gen2/files/Log_in.png b/docs/ai-testbed/sambanova/files/Log_in.png similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/Log_in.png rename to docs/ai-testbed/sambanova/files/Log_in.png diff --git a/docs/ai-testbed/sambanova_gen2/files/ST_UI.jpg b/docs/ai-testbed/sambanova/files/ST_UI.jpg similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/ST_UI.jpg rename to docs/ai-testbed/sambanova/files/ST_UI.jpg diff --git a/docs/ai-testbed/sambanova_gen2/files/ST_console.jpg b/docs/ai-testbed/sambanova/files/ST_console.jpg similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/ST_console.jpg rename to docs/ai-testbed/sambanova/files/ST_console.jpg diff --git a/docs/ai-testbed/sambanova_gen2/files/Unet2d.sh b/docs/ai-testbed/sambanova/files/Unet2d.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/Unet2d.sh rename to docs/ai-testbed/sambanova/files/Unet2d.sh diff --git a/docs/ai-testbed/sambanova_gen2/files/ffn_mnist_compile_run.sh b/docs/ai-testbed/sambanova/files/ffn_mnist_compile_run.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/ffn_mnist_compile_run.sh rename to docs/ai-testbed/sambanova/files/ffn_mnist_compile_run.sh diff --git a/docs/ai-testbed/sambanova_gen2/files/sambanova_login.jpg b/docs/ai-testbed/sambanova/files/sambanova_login.jpg similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/sambanova_login.jpg rename to docs/ai-testbed/sambanova/files/sambanova_login.jpg diff --git a/docs/ai-testbed/sambanova_gen2/files/unet_batch.sh b/docs/ai-testbed/sambanova/files/unet_batch.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/files/unet_batch.sh rename to docs/ai-testbed/sambanova/files/unet_batch.sh diff --git a/docs/ai-testbed/sambanova_gen2/getting-started.md b/docs/ai-testbed/sambanova/getting-started.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/getting-started.md rename to docs/ai-testbed/sambanova/getting-started.md diff --git a/docs/ai-testbed/sambanova_gen2/job-queuing-and-submission.md b/docs/ai-testbed/sambanova/job-queuing-and-submission.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/job-queuing-and-submission.md rename to docs/ai-testbed/sambanova/job-queuing-and-submission.md diff --git a/docs/ai-testbed/sambanova_gen2/miscellaneous.md b/docs/ai-testbed/sambanova/miscellaneous.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/miscellaneous.md rename to docs/ai-testbed/sambanova/miscellaneous.md diff --git a/docs/ai-testbed/sambanova_gen2/running-a-model-or-program.md b/docs/ai-testbed/sambanova/running-a-model-or-program.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/running-a-model-or-program.md rename to docs/ai-testbed/sambanova/running-a-model-or-program.md diff --git a/docs/ai-testbed/sambanova_gen2/system-overview.md b/docs/ai-testbed/sambanova/system-overview.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/system-overview.md rename to docs/ai-testbed/sambanova/system-overview.md diff --git a/docs/ai-testbed/sambanova_gen2/tunneling-and-forwarding-ports.md b/docs/ai-testbed/sambanova/tunneling-and-forwarding-ports.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/tunneling-and-forwarding-ports.md rename to docs/ai-testbed/sambanova/tunneling-and-forwarding-ports.md diff --git a/docs/ai-testbed/sambanova_gen2/unused/cosmictagger-conversion.md b/docs/ai-testbed/sambanova/unused/cosmictagger-conversion.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/unused/cosmictagger-conversion.md rename to docs/ai-testbed/sambanova/unused/cosmictagger-conversion.md diff --git a/docs/ai-testbed/sambanova_gen2/unused/files/Gpt1.5B.sh b/docs/ai-testbed/sambanova/unused/files/Gpt1.5B.sh similarity index 100% rename from docs/ai-testbed/sambanova_gen2/unused/files/Gpt1.5B.sh rename to docs/ai-testbed/sambanova/unused/files/Gpt1.5B.sh diff --git a/docs/ai-testbed/sambanova_gen2/unused/performance-tools.md b/docs/ai-testbed/sambanova/unused/performance-tools.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/unused/performance-tools.md rename to docs/ai-testbed/sambanova/unused/performance-tools.md diff --git a/docs/ai-testbed/sambanova_gen2/unused/running-GPT2-multi-node.md b/docs/ai-testbed/sambanova/unused/running-GPT2-multi-node.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/unused/running-GPT2-multi-node.md rename to docs/ai-testbed/sambanova/unused/running-GPT2-multi-node.md diff --git a/docs/ai-testbed/sambanova_gen2/unused/running-GPT2.md b/docs/ai-testbed/sambanova/unused/running-GPT2.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/unused/running-GPT2.md rename to docs/ai-testbed/sambanova/unused/running-GPT2.md diff --git a/docs/ai-testbed/sambanova_gen2/unused/running-bert-large-on-sn30.md b/docs/ai-testbed/sambanova/unused/running-bert-large-on-sn30.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/unused/running-bert-large-on-sn30.md rename to docs/ai-testbed/sambanova/unused/running-bert-large-on-sn30.md diff --git a/docs/ai-testbed/sambanova_gen2/unused/sambatune-user-guide.md b/docs/ai-testbed/sambanova/unused/sambatune-user-guide.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/unused/sambatune-user-guide.md rename to docs/ai-testbed/sambanova/unused/sambatune-user-guide.md diff --git a/docs/ai-testbed/sambanova_gen2/virtual-environment.md b/docs/ai-testbed/sambanova/virtual-environment.md similarity index 100% rename from docs/ai-testbed/sambanova_gen2/virtual-environment.md rename to docs/ai-testbed/sambanova/virtual-environment.md From 61b2a4cb0885501a1652e0546d7e747d1cdbe4ba Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 13:29:52 -0500 Subject: [PATCH 62/67] Rename sambanova_gen2 to sambanova --- mkdocs.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 7233facda..516dbb051 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -219,18 +219,18 @@ nav: - Virtual Environments: ai-testbed/groq/virtual-environments.md - Job Queueing and Submission: ai-testbed/groq/job-queuing-and-submission.md - SambaNova: - - System Overview: ai-testbed/sambanova_gen2/system-overview.md - - Getting Started: ai-testbed/sambanova_gen2/getting-started.md - - Virtual Environment: ai-testbed/sambanova_gen2/virtual-environment.md - - Running a Model/Program: ai-testbed/sambanova_gen2/running-a-model-or-program.md - - Job Queuing and Submission: ai-testbed/sambanova_gen2/job-queuing-and-submission.md - - Example Programs: ai-testbed/sambanova_gen2/example-programs.md - - Example Multi-Node Programs: ai-testbed/sambanova_gen2/example-multi-node-programs.md - # - Running BERT Large on Sambanova DataScale SN30-8: ai-testbed/sambanova_gen2/running-bert-large-on-sn30.md - - Tunneling and Forwarding Ports: ai-testbed/sambanova_gen2/tunneling-and-forwarding-ports.md - - Miscellaneous: ai-testbed/sambanova_gen2/miscellaneous.md - - SambaNova Documentation: ai-testbed/sambanova_gen2/documentation.md - # - Performance Tools: ai-testbed/sambanova_gen2/performance-tools.md + - System Overview: ai-testbed/sambanova/system-overview.md + - Getting Started: ai-testbed/sambanova/getting-started.md + - Virtual Environment: ai-testbed/sambanova/virtual-environment.md + - Running a Model/Program: ai-testbed/sambanova/running-a-model-or-program.md + - Job Queuing and Submission: ai-testbed/sambanova/job-queuing-and-submission.md + - Example Programs: ai-testbed/sambanova/example-programs.md + - Example Multi-Node Programs: ai-testbed/sambanova/example-multi-node-programs.md + # - Running BERT Large on Sambanova DataScale SN30-8: ai-testbed/sambanova/running-bert-large-on-sn30.md + - Tunneling and Forwarding Ports: ai-testbed/sambanova/tunneling-and-forwarding-ports.md + - Miscellaneous: ai-testbed/sambanova/miscellaneous.md + - SambaNova Documentation: ai-testbed/sambanova/documentation.md + # - Performance Tools: ai-testbed/sambanova/performance-tools.md - Data Management: ai-testbed/data-management/data-management-overview.md - Cooley: - Hardware Overview: From 4e09287ab02de3e8937fba137c6c55ebe9c31ef1 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 13:32:28 -0500 Subject: [PATCH 63/67] Rename sambanova_gen2 to sambanova --- docs/ai-testbed/cerebras/tunneling-and-forwarding-ports.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/cerebras/tunneling-and-forwarding-ports.md b/docs/ai-testbed/cerebras/tunneling-and-forwarding-ports.md index ef102a266..4f003b59b 100644 --- a/docs/ai-testbed/cerebras/tunneling-and-forwarding-ports.md +++ b/docs/ai-testbed/cerebras/tunneling-and-forwarding-ports.md @@ -2,4 +2,4 @@ See ALCF's [Jupyter Instructions](https://github.com/argonne-lcf/ThetaGPU-Docs/blob/master/doc_staging/jupyter.md), and -[Tunneling and forwarding ports](../sambanova_gen2/tunneling-and-forwarding-ports.md). The Cerebras login nodes are direct login; tunneling and port forwarding do not involve jump hosts. +[Tunneling and forwarding ports](../sambanova/tunneling-and-forwarding-ports.md). The Cerebras login nodes are direct login; tunneling and port forwarding do not involve jump hosts. From 0f91675b61f132b7ffbb08742a2e4d7143e20558 Mon Sep 17 00:00:00 2001 From: Varuni Sastry <88804132+vksastry@users.noreply.github.com> Date: Tue, 17 Oct 2023 13:45:53 -0500 Subject: [PATCH 64/67] Update system-overview.md --- docs/ai-testbed/groq/system-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ai-testbed/groq/system-overview.md b/docs/ai-testbed/groq/system-overview.md index e7f0550ec..bde6a7ac9 100644 --- a/docs/ai-testbed/groq/system-overview.md +++ b/docs/ai-testbed/groq/system-overview.md @@ -1,5 +1,5 @@ -ALCF consists of a single `GroqRackTM compute cluster` that provides an extensible accelerator network consisting of 9 `GroqNodeTM` [ groq-r01-gn-01 through groq-r01-gn-09 ] nodes with a rotational network topology. Each of these GroqNodes consists of 8 GroqCardTM accelerators in them with integrated chip-to-chip connections. +ALCF consists of a single `GroqRackTM compute cluster` that provides an extensible accelerator network consisting of 9 `GroqNodeTM` [ groq-r01-gn-01 through groq-r01-gn-09 ] nodes with a rotational multi-node network topology. Each of these GroqNodes consists of 8 GroqCardTM accelerators in them with integrated chip-to-chip connections with a dragonfly multi-chip topology. `GroqCardTM accelerator` is a dual-width, full-height, three-quarter length PCI-Express Gen4 x16 adapter that includes a single `GroqChipTM processor` with 230 MB of on-chip memory. Based on the proprietary Tensor Streaming Processor (TSP) architecture, the GroqChip processor is a low latency and high throughput single core SIMD compute engine capable of 750 TOPS (INT8) and 188 TFLOPS (FP16) @ 900 MHz that includes advanced vector and matrix mathematical acceleration units. The GroqChip processor is deterministic, providing predictable and repeatable performance. From 957612ebf15132556d49eac930db142eddc5f098 Mon Sep 17 00:00:00 2001 From: Kyle Gerard Felker Date: Wed, 18 Oct 2023 13:09:48 -0500 Subject: [PATCH 65/67] Delete trailing whitespace --- docs/polaris/mig-compute.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/polaris/mig-compute.md b/docs/polaris/mig-compute.md index 32d5a748d..2875c5e8f 100644 --- a/docs/polaris/mig-compute.md +++ b/docs/polaris/mig-compute.md @@ -36,21 +36,21 @@ Please study the following example of a valid configuration file: - a basic validator script is available at /soft/pbs/mig_conf_validate.sh. it will check for simple errors in your config, and print the expected configuration. example: > ascovel@polaris-login-02:~> /soft/pbs/mig_conf_validate.sh -h > usage: mig_conf_validate.sh -c CONFIG_FILE -> ascovel@polaris-login-02:~> /soft/pbs/mig_conf_validate.sh -c ./polaris-mig/mig_config.json +> ascovel@polaris-login-02:~> /soft/pbs/mig_conf_validate.sh -c ./polaris-mig/mig_config.json > expected MIG configuration: > GPU GPU_INST COMPUTE_INST > ------------------------------- -> 0 7g.40gb 4c.7g.40gb -> 0 7g.40gb 3c.7g.40gb -> 1 7g.40gb 4c.7g.40gb -> 1 7g.40gb 3c.7g.40gb -> 2 2g.10gb 2g.10gb -> 2 4g.20gb 2c.4g.20gb -> 2 4g.20gb 2c.4g.20gb -> 3 2g.10gb 2g.10gb -> 3 4g.20gb 2c.4g.20gb -> 3 4g.20gb 2c.4g.20gb -> ascovel@polaris-login-02:~> +> 0 7g.40gb 4c.7g.40gb +> 0 7g.40gb 3c.7g.40gb +> 1 7g.40gb 4c.7g.40gb +> 1 7g.40gb 3c.7g.40gb +> 2 2g.10gb 2g.10gb +> 2 4g.20gb 2c.4g.20gb +> 2 4g.20gb 2c.4g.20gb +> 3 2g.10gb 2g.10gb +> 3 4g.20gb 2c.4g.20gb +> 3 4g.20gb 2c.4g.20gb +> ascovel@polaris-login-02:~> ## Example use of MIG compute instances @@ -58,7 +58,7 @@ The following example demonstrates the use of MIG compute instances via the CUDA > ascovel@polaris-login-02:~/polaris-mig> qsub -l mig_config=/home/ascovel/polaris-mig/mig_config.json -l select=1 -l walltime=60:00 -l filesystems=home:grand:swift -A Operations -q R639752 -k doe -I > qsub: waiting for job 640002.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov to start > qsub: job 640002.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov ready -> +> > ascovel@x3209c0s19b0n0:~> cat ./polaris-mig/mig_config.json > { > "group1": { @@ -70,8 +70,8 @@ The following example demonstrates the use of MIG compute instances via the CUDA > "gpus": [2,3], > "mig_enabled": true, > "instances": {"4g.20gb": ["2c.4g.20gb", "2c.4g.20gb"], "2g.10gb": ["2g.10gb"] } -> } -> } +> } +> } > ascovel@x3209c0s19b0n0:~> nvidia-smi -L | grep -Po -e "MIG[0-9a-f\-]+" > MIG-63aa1884-acb8-5880-a586-173f6506966c > MIG-b86283ae-9953-514f-81df-99be7e0553a5 @@ -101,4 +101,4 @@ The following example demonstrates the use of MIG compute instances via the CUDA > | 3 1 1 17488 C ./saxpy 8313MiB | > | 3 5 0 17489 C ./saxpy 8313MiB | > +-----------------------------------------------------------------------------+ -> ascovel@x3209c0s19b0n0:~> +> ascovel@x3209c0s19b0n0:~> From c6cd89676c872a4d23007c107ac631574373d445 Mon Sep 17 00:00:00 2001 From: Kyle Gerard Felker Date: Wed, 18 Oct 2023 13:37:39 -0500 Subject: [PATCH 66/67] Capitalize some things --- docs/polaris/mig-compute.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/polaris/mig-compute.md b/docs/polaris/mig-compute.md index 2875c5e8f..5567006d5 100644 --- a/docs/polaris/mig-compute.md +++ b/docs/polaris/mig-compute.md @@ -1,6 +1,6 @@ -# MIG mode +# Multi-Instance GPU (MIG) mode -MIG mode can be enabled and configured on Polaris by passing a valid configuration file to qsub: +MIG mode can be enabled and configured on Polaris by passing a valid configuration file to `qsub`: > qsub ... -l mig_config=/home/ME/path/to/mig_config.json ... You can find a concise explanation of MIG concepts and terms at https://docs.nvidia.com/datacenter/tesla/mig-user-guide/index.html#concepts @@ -21,19 +21,19 @@ Please study the following example of a valid configuration file: > } > } -### note: -- group names are arbitrary, but must be unique -- "gpus" must be an array of integers. if only one physical gpu is being configured in a group, it must still be contained within an array(ex. "gpus": [0],) -- only groups with mig_enabled set to true will be configured -- instances denote the MIG gpu instances and the nested compute instances you wish to be configured - - syntax is {"gpu instance 1": ["cpu instance 1", "cpu instance 2"], ...} - - valid gpu instances are 1g.5gb, 1g.10gb, 2g.10gb, 3g.20gb, 4g.20gb, and 7g.40gb. the first number denotes the number of slots used out of 7 total, and the second number denotes memory in GB +### Notes +- Group names are arbitrary, but must be unique +- `"gpus"` must be an array of integers. if only one physical gpu is being configured in a group, it must still be contained within an array(ex. `"gpus": [0],`) +- Only groups with `mig_enabled` set to `true` will be configured +- `instances` denote the MIG gpu instances and the nested compute instances you wish to be configured + - syntax is `{"gpu instance 1": ["cpu instance 1", "cpu instance 2"], ...}` + - valid gpu instances are `1g.5gb`, `1g.10gb`, `2g.10gb`, `3g.20gb`, `4g.20gb`, and `7g.40gb`. the first number denotes the number of slots used out of 7 total, and the second number denotes memory in GB - the default cpu instance for any gpu instance has the same identifier as the gpu instance(in which case it will be the only one configurable) - - other cpu instances can be configured with the identifier syntax "Xc.Y", where X is the number of slots available in that gpu instance, and Y is the gpu instance identifier string - - some gpu instances cannot be configured adjacently, despite there being sufficient slots/memory remaining(ex. 3g.20gb and 4g.20gb). please see nvidia MIG documentation for further details -- currently, MIG configuration is only available in the debug, debug-scaling, and preemptable queues. submissions to other queues will result in any MIG config files passed being silently ignored -- files which do not match the above syntax will be silently rejected, and any invalid configurations in properly formatted files will be silently ignored. please test any changes to your configuration in an interactive job session before use -- a basic validator script is available at /soft/pbs/mig_conf_validate.sh. it will check for simple errors in your config, and print the expected configuration. example: + - other cpu instances can be configured with the identifier syntax `Xc.Y`, where `X` is the number of slots available in that gpu instance, and `Y` is the gpu instance identifier string + - some gpu instances cannot be configured adjacently, despite there being sufficient slots/memory remaining(ex. `3g.20gb` and `4g.20gb`). Please see NVIDIA MIG documentation for further details +- Currently, MIG configuration is only available in the debug, debug-scaling, and preemptable queues. submissions to other queues will result in any MIG config files passed being silently ignored +- Files which do not match the above syntax will be silently rejected, and any invalid configurations in properly formatted files will be silently ignored. Please test any changes to your configuration in an interactive job session before use +- A basic validator script is available at `/soft/pbs/mig_conf_validate.sh`. It will check for simple errors in your config, and print the expected configuration. For example: > ascovel@polaris-login-02:~> /soft/pbs/mig_conf_validate.sh -h > usage: mig_conf_validate.sh -c CONFIG_FILE > ascovel@polaris-login-02:~> /soft/pbs/mig_conf_validate.sh -c ./polaris-mig/mig_config.json @@ -54,7 +54,7 @@ Please study the following example of a valid configuration file: ## Example use of MIG compute instances -The following example demonstrates the use of MIG compute instances via the CUDA_VISIBLE_DEVICES environment variable: +The following example demonstrates the use of MIG compute instances via the `CUDA_VISIBLE_DEVICES` environment variable: > ascovel@polaris-login-02:~/polaris-mig> qsub -l mig_config=/home/ascovel/polaris-mig/mig_config.json -l select=1 -l walltime=60:00 -l filesystems=home:grand:swift -A Operations -q R639752 -k doe -I > qsub: waiting for job 640002.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov to start > qsub: job 640002.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov ready From 0b846e0f2ec56aafb2b69d9024168f853e21d257 Mon Sep 17 00:00:00 2001 From: Kyle Gerard Felker Date: Wed, 18 Oct 2023 13:39:59 -0500 Subject: [PATCH 67/67] Move new MIG page under Workflows in sidebar Not ideal, but temp solution --- docs/polaris/{ => workflows}/mig-compute.md | 0 mkdocs.yml | 1 + 2 files changed, 1 insertion(+) rename docs/polaris/{ => workflows}/mig-compute.md (100%) diff --git a/docs/polaris/mig-compute.md b/docs/polaris/workflows/mig-compute.md similarity index 100% rename from docs/polaris/mig-compute.md rename to docs/polaris/workflows/mig-compute.md diff --git a/mkdocs.yml b/mkdocs.yml index 516dbb051..d499778c5 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -86,6 +86,7 @@ nav: - Visualization: - Paraview: polaris/visualization/paraview.md - Workflows: + - Multi-Instance GPU (MIG) mode: polaris/workflows/mig-compute.md - Balsam: polaris/workflows/balsam.md - Parsl: polaris/workflows/parsl.md - libEnsemble: polaris/workflows/libensemble.md