├── .gitignore ├── LICENSE ├── README.md ├── resources ├── .~lock.CHPC_SCC_2024_Technical_Knowledge_Assessment.docx# ├── CHPC_2024_SCC_Local_Selection_Round_Timetable.png ├── CHPC_SCC_2024_Technical_Knowledge_Assessment.docx ├── CHPC_Student_Cluster_Competition_Parts_List_2024.xlsx ├── github_clone.png ├── github_profile_settings.png └── github_profile_settings_highlight.png ├── tutorial1 ├── README.md └── resources │ ├── Contemporary_Computer_Lab.jpg │ ├── Mobile-networks-Telkom-Vodacom-MTN-Cell-C.jpg │ ├── SCC-tut1-fig1.png │ ├── VNC_icon.png │ ├── WIOCC-EASSy-WACS-EIG-map.jpg │ ├── android_networking_info.jpeg │ ├── append.png │ ├── browser-15og.jpg │ ├── browsing_internet.odg │ ├── browsing_internet.pdf │ ├── browsing_internet.png │ ├── browsing_internet_dark.odg │ ├── browsing_internet_dark.png │ ├── browsing_internet_dark.png.odg │ ├── browsing_internet_light.odg │ ├── browsing_internet_light.png │ ├── cat_command.png │ ├── cell_tower.jpg │ ├── chat_install_nano_on_linux.png │ ├── chatgpt_text_editors.png │ ├── chrony_clients.png │ ├── dns-servers.png │ ├── dns_info.png │ ├── eastern_cape.jpg │ ├── google_headquarters.jpg │ ├── google_search_page.png │ ├── google_webpage_light.png │ ├── head_node_basic_networking_commands.png │ ├── headnode_hostname_status.png │ ├── headnode_journalctl_sshd_brute_force.png │ ├── headnode_resolv_status.png │ ├── headnode_systemd-networkd.png │ ├── headnode_systemd_resolved.png │ ├── history_command.png │ ├── ip a.png │ ├── iphone_image.png │ ├── ips_openstack.png │ ├── kisspng-computer-icons-wi-fi-internet-computer-network-cli-wifi-icon-5b4c03cc230324.4271102915317083641434.png │ ├── kisspng-signal-strength-in-telecommunications-mobile-phone-5b156cf632da28.9700360515281308062083.png │ ├── kisspng-wi-fi-computer-icons-encapsulated-postscript-5afd94ae4a2736.7211633215265681103037.png │ ├── kisspng-wi-fi-iphone-6s-signal-wireless-internet-5c0f3a79e4fb44.5247840315445018819379.png │ ├── less_command.png │ ├── linux_basic_networking_checking_networkd_service.png │ ├── linux_basic_networking_checking_resolv_service.png │ ├── linux_basic_networking_checking_resolvconf_file.png │ ├── linux_basics_hostname.png │ ├── linux_terminal_network_basics.png │ ├── mac_openstack.png │ ├── man_sudo_feedback.png │ ├── network-diagram.png │ ├── networking.jpg │ ├── openstack_added_floating_ip.png │ ├── openstack_associate_floating_ip.png │ ├── openstack_import_public_key.png │ ├── openstack_import_public_key_highlight.png │ ├── openstack_instance_flavor.png │ ├── openstack_key_pair_select.png │ ├── openstack_launch_instance.png │ ├── openstack_launch_instance_highlight.png │ ├── openstack_login.png │ ├── openstack_networks.png │ ├── openstack_overview.png │ ├── openstack_public_net.png │ ├── openstack_running.png │ ├── openstack_security_groups.png │ ├── openstack_source_image.png │ ├── openstack_troubleshooting_delete_instance.png │ ├── openstack_troubleshooting_delete_volume.png │ ├── openstack_troubleshooting_dissociate_float_ip.png │ ├── openstack_vnc_access.png │ ├── replaces.png │ ├── rerun_command_from_history.png │ ├── search_commands_grep.png │ ├── sudo_with-h_flag.png │ ├── uct.jpg │ ├── whatismyip_cell.odg │ ├── whatismyip_cell.png │ ├── whatismyip_hotspot.odg │ ├── whatismyip_hotspot.png │ ├── whatismyip_wifi.odg │ ├── whatismyip_wifi.png │ ├── windows_powershell_firsttime_ssh.png │ ├── windows_powershell_sshkeygen.png │ ├── windows_putty_enter_headnode_ip.png │ ├── windows_putty_enter_private_key.png │ ├── windows_putty_username.png │ ├── windows_puttygen_generate.png │ └── windows_puttygen_save.png ├── tutorial2 ├── README.md └── resources │ ├── :etc:hosts.png │ ├── Selection_175.png │ ├── ansible_create_user_run_result.png │ ├── ansible_individual_host_access.png │ ├── ansible_ping_feedback.png │ ├── ansible_ping_servers.png │ ├── ansible_run_command_on_hosts.png │ ├── ansible_team_lead_user_verification.png │ ├── apache_default_page.png │ ├── cdexample.png │ ├── compute_node_basic_networking_commands.png │ ├── cpexamble.png │ ├── etchost.png │ ├── firefox_proxy_option.png │ ├── freeipa.png │ ├── generate_key_and_ssh_into_compute_node.png │ ├── history_command.png │ ├── hn.nft │ ├── home_dir_mounted.png │ ├── hostnamechange.png │ ├── htopcommand.png │ ├── install_tmux.png │ ├── ipaforeth0interface.png │ ├── ls_uid_different.png │ ├── lsdirectory.png │ ├── mvcommandexample.png │ ├── nfs_cat_pub_key_authorized.png │ ├── nsible_ping_servers.png │ ├── ntp.png │ ├── ntp_clients.png │ ├── ntp_source_for_compute_node.png │ ├── openstack_hostsfile.png │ ├── openstack_verify_network.png │ ├── openstack_vnc_access.png │ ├── rerun_command_from_history.png │ ├── rmcommand.png │ ├── rmcommandexample.png │ ├── selectSetting.png │ ├── sock5proxysettings.png │ ├── ssh_bruteforce_attacks.png │ ├── ssh_compute_node_passwd.png │ ├── ssh_example.avif │ ├── ssh_into_compute_node.png │ ├── ssh_keygen_login_compute_node.png │ ├── sshkeygen.png │ ├── tmux_btop_htop.png │ ├── tmux_running_htop_btop.png │ ├── tmux_ssh_run_tops.png │ ├── tut2_fig_part1_ssh_tunnel.png │ ├── zerotier-networks-empty.png │ ├── zerotier_auth.png │ └── zerotier_new_network.png ├── tutorial3 ├── README.md └── resources │ ├── An-example-of-P-by-Q-partitioning-of-a-HPL-matrix-in-6-processes-2x3-decomposition.png │ ├── MultiThreaded_HPL.png │ ├── format.pl │ ├── lj.in │ ├── openstack_instance_snapshot.png │ └── qv_experiment.py └── tutorial4 ├── README.md └── resources ├── circleci_create_organization.png ├── circleci_create_project00.png ├── circleci_create_project01.png ├── circleci_create_project02.png ├── circleci_create_project03.png ├── circleci_environment_variables.png ├── circleci_successful_deploy.png ├── github_create_new_repo.png ├── github_manage_access.png ├── openstack_application_creds.png ├── terraform_apply.png ├── terraform_install.png ├── terraform_install_init.png ├── terraform_plan.png └── terraform_statefile.png /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | CHPC 2024 Student Cluster Competition 2 | ====================================== 3 | 4 | Welcome the **Center for High Performance Computing (CHPC)'s Student Cluster Competition (SCC)** - Team Selection Round. This round requires each team to build a **prototype multi-node compute cluster** within the National Integrated Cyber Infrastructure Systems (NICIS) **virtual compute cloud** (described below). 5 | 6 | The goal of this document is to introduce you to the competition platform and familiarise you with some Linux and systems administration concepts. This competition provides you with a fixed set of virtual resources, that you will use to initialize a set a set of virtual machines instances based on your choice _or flavor_ of *Linux*. 7 | 8 | # Table of Contents 9 | 10 | 11 | 1. [Structure of the Competition](#structure-of-the-competition) 12 | 1. [Getting Help](#getting-help) 13 | 1. [Timetable](#timetable) 14 | 1. [Scoring](#scoring) 15 | 1. [Instructions for Mentors](#instructions-for-mentors) 16 | 1. [Hands-Off Rule *(You may not touch the keyboard)*](#hands-off-rule-you-may-not-touch-the-keyboard) 17 | 1. [Cheat Sheet](#cheat-sheet) 18 | 1. [Deliverables](#deliverables) 19 | 1. [Cluster Design Assignment](#cluster-design-assignment) 20 | 1. [Technical Knowledge Assessment](#technical-knowledge-assessment) 21 | 1. [Tutorials](#tutorials) 22 | 1. [Lecture Recordings](#lecture-recordings) 23 | 1. [Contributing to the Project](#contributing-to-the-project) 24 | 1. [Steps to follow when editing existing content](#steps-to-follow-when-editing-existing-content) 25 | 1. [Syntax and Style](#syntax-and-style) 26 | 27 | 28 | 29 | # Structure of the Competition 30 | 31 | The CHPC invites applications from suitably qualified candidates to enter the CHPC Student Cluster Competition. The CHPC Student Cluster Competition gives undergraduate students at South African universities exposure to the High Performance Computing (HPC) Industry. The winning team will be entered into the ISC Student Cluster Competition hosted at the [2025 International Supercomputing Conference](https://www.isc-hpc.com/) held in Hamburg, Germany. 32 | 33 | You will be accessing all of the course work and material through this GitHub repository, which you and your team must check regularly to receive updates. 34 | 35 | ## Getting Help 36 | 37 | You are strongly encouraged to get help and even assist others by [Opening and Participating in Discussions](https://github.com/chpc-tech-eval/chpc24-scc-nmu/discussions). 38 | 39 | > [!TIP] 40 | > Active participation in the student discussions is an easy way to separate yourselves from the rest of the competition and make it easy for the instructors to notice you! 41 | 42 | ## Timetable 43 | 44 | Everyday will comprise of four lectures in the mornings and tutorials taking place in the afternoons. A [PDF Version of the Timetable](./resources/CHPC_2024_SCC_Local_Selection_Round_Timetable.pdf) is available for you to download. 45 | 46 |

Timetable.

47 | 48 | ## Scoring 49 | 50 | Teams will be evaluate according to the following breakdown, with your progress in the tutorials and your final presentations carrying the most weight. 51 | 52 | | Component | Weight | 53 | |:-----------------------------------|:------:| 54 | | | | 55 | | Technical Knowledge Assessment | 0.1 | 56 | | Tutorials | 0.4 | 57 | | Cluster Design Assignment (Part 1) | 0.1 | 58 | | Cluster Design Presentation | 0.4 | 59 | | | | 60 | 61 | ## Instructions for Mentors 62 | 63 | The role of mentors, instructors and volunteers is to provide leadership and guidance for the student competitors participating in this year's Center for High Performance Computing 2024 Student Cluster Competition. 64 | 65 | In preparing your teams for the competition, your main goal is to ensure that you teach and impart knowledge to the student participants in such a way that they are empowered and enable to tackle the problems and benchmarking tasks themselves. 66 | 67 | ### Hands-Off Rule *(You may not touch the keyboard)* 68 | 69 | Under no circumstances whatsoever may mentors touch any competition hardware belonging to either their team, or the competition hardware of another team. Mentors are encouraged to provide guidance and leadership to their *(as well as other)* teams. 70 | 71 | Any mentors found to be directly in contravention of this rule, may result in their team incurring a penalty. Repeated infringements may result in possible disqualification of their team. 72 | 73 | ## Cheat Sheet 74 | 75 | Below is a table with a number of Linux system commands and utilities that you *may* find useful in assisting you to debug problems that you may encounter with your clusters. Note that some of these utilities do not ship with the base deployment of a number of Linux flavors, and you may be required to install the associated packages, prior to making use of them. 76 | 77 | | Command | Description | 78 | | --- | --- | 79 | | ssh | Used from logging into the remote machine and for executing commands on the remote machine. | 80 | | scp | SCP copies files between hosts on a network. It uses ssh for data transfer, and uses the same authentication and provides the same security as ssh. | 81 | | wget / curl | Utility for non-interactive download of files from the Web.It supports HTTP, HTTPS, and FTP protocols. | 82 | | top / htop / btop | Provides a dynamic real-time view of a running system. It can display system summary information as well as a list of processes or threads. | 83 | | screen / tmux | Full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells). | 84 | | ip a | Display IP Addresses and property information | 85 | | dmesg | Prints the message buffer of the kernel. The output of this command typically contains the messages produced by the device drivers | 86 | | watch | Execute a program periodically, showing output fullscreen. | 87 | | df -h | Report file system disk space usage. | 88 | | ping | PING command is used to verify that a device can communicate with another on a network. | 89 | | lynx | Command-line based web browser (more useful than you think) | 90 | | ctrl+alt+[F1...F6] | Open another shell session (multiple ‘desktops’) | 91 | | ctrl+z | Move command to background (useful with ‘bg’) | 92 | | du -h | Summarize disk usage of each FILE, recursively for directories. | 93 | | lscpu | Command line utility that provides system CPU related information. | 94 | | lstotp | View the topology of a Linux system. | 95 | | inxi | Lists information related to your systems' sensors, partitions, drives, networking, audio, graphics, CPU, system, etc... | 96 | | hwinfo | Hardware probing utility that provides detailed info about various components. | 97 | | lshw | Hardware probing utility that provides detailed info about various components. | 98 | | proc | Information and control center of the kernel, providing a communications channel between kernel space and user space. Many of the preceding commands query information provided by proc, i.e. `cat /proc/cpuinfo`. | 99 | | uname | Useful for determining information about your current flavor and distribution of your operating system and its version. | 100 | | lsblk | Provides information about block devices (disks, hard drives, flash drives, etc) connected to your system and their partitioning schemes. | 101 | | | | 102 | 103 | # Deliverables 104 | 105 | You will need to submit the following for scoring and evaluation by the judges: 106 | * Cluster Design Assignment (Part 1) *[10 %]* 107 | * Cluster Design Assignment (Part 2) *[40 %]* 108 | * One PDF Presentation Slide with Team Profiles 109 | This slide must clearly indicate your Team Name and Institution. Below each team member's photograph, indicate their 110 | * Name and surname, 111 | * Degree and Year of study, 112 | * Presentation Slides 113 | * Short Technical Brief with Cluster Design Specifications 114 | * Technical Knowledge Assessment *[10 %]* 115 | * Tutorials *[40 %]* 116 | 117 | ## Cluster Design Assignment 118 | 119 | You are tasked with designing a small cluster, with at least three nodes, to the value of R 400  000.00 (ZAR) and present your design to the judging panel. In your design you must specify hardware and software for an operational cluster and describe how it functions. The design must be based on servers and interconnects from either [HPE](https://buy.hpe.com/us/en/servers-systems) or [Dell](www.dell.com/en-us), and accessories from either [NVIDIA](https://www.nvidia.com/en-us/high-performance-computing/), or [AMD](https://www.amd.com/en/solutions/high-performance-computing.html) or [Intel](https://www.intel.com/content/www/us/en/high-performance-computing/hpc-products.html). You must use the prices you find in the [Parts List Spreadsheet](resources/CHPC_Student_Cluster_Competition_Parts_List_2024.xlsx). 120 | 121 | The primary purpose of your HPC cluster is to run one of the following codes as efficiently as possible: 122 | * [Amber](https://ambermd.org/) 123 | * [ICON](https://icon-model.org/) 124 | * [SwiftSIM](https://github.com/SWIFTSIM/SWIFT) 125 | * [MLPerf](https://www.nvidia.com/en-us/data-center/resources/mlperf-benchmarks/) 126 | 127 | You are not given a choice regarding the application selection. Your team will be told which application to optimize for on Wednesday. For now, you should investigate the codes above to understand their unique hardware and software requirements. **You are required to submit a brief (half page) report on your findings to the competition organizers by 23:00 on Tuesday**. 128 | 129 | In addition, your choice of design must take into consideration: 130 | * Base Platform (Server), 131 | * Target Processing Unit (CPU / GPU), 132 | * Memory, Networking and Storage Requirements, 133 | * System and Application Dependency Software Requirements, 134 | * Ease of Use (Build, Assembly, Deployment), 135 | * Efficiency, Performance, Power Consumption and Reliability and 136 | * Team Management, Coordination and Planning. 137 | 138 | > [!IMPORTANT] 139 | > You may submit an additional design, that extends upon your small R 400 000.00 cluster, up to the value of R 1 000 000.00. You may use any of the above links for this exercise, using a Dollar to Rand conversion rate or 1:20. You may use GPU's from either AMD or NVIDIA. You may utilize CPUs from either AMD or Intel. You may use either Dell or HPE as a vendor. 140 | 141 | The 10 minute slide presentation by the whole team must include your design decisions and the features of your cluster, including: cost, hardware, software, configuration and operation. Each member of the team is required to present even though you will be assessed as a team. 142 | 143 | After the presentation the judging panel will have an opportunity to ask questions to each member of your team. All members of your team can be questioned about any part of the cluster, so make sure you are fully familiar with the design. 144 | 145 | ## Technical Knowledge Assessment 146 | 147 | Each Team must work together to answer and complete the [Technical Knowledge Assessment](resources/CHPC_SCC_2024_Technical_Knowledge_Assessment.docx) to the best of their ability. Team Captains must email your findings to the organizers **no later than 23:00 13th July**. You are required to demonstrate your understanding of the concepts in **YOUR OWN WORDS**. Keep your answers succinct and to the point. Your answers to each of the questions, should not exceed more than 2-3 lines. 148 | 149 | ## Tutorials 150 | 151 | You will be evaluated on your overall progress in the tutorials. Below you will find an overview, glossary and high level breakdown of the tutorials. You must progress through four tutorials, which will be released daily. Your overall progress through the tutorials forms a large component of you score. By the end of the week you would have covered a considerable amount of content, use the links provided should you need to refer to a specific section and are having trouble remembering where is it. 152 | 153 | **Tutorial 1** deals with introducing concepts to users and getting them started with using the virtual lab, standing up the first virtual machine instance and connecting to it remotely. The content is as follows: 154 | 155 | 1. [Checklist](tutorial1/README.md#checklist) 156 | 1. [Network Primer](tutorial1/README.md#network-primer) 157 | 1. [Basic Networking Example (WhatIsMyIp.com)](tutorial1/README.md#basic-networking-example-whatismyipcom) 158 | 1. [Terminal, Windows MobaXTerm and PowerShell Commands](tutorial1/README.md#terminal-windows-mobaxterm-and-powershell-commands) 159 | 1. [Launching your First Open Stack Virtual Machine Instance](tutorial1/README.md#launching-your-first-open-stack-virtual-machine-instance) 160 | 1. [Accessing the NICIS Cloud](tutorial1/README.md#accessing-the-nicis-cloud) 161 | 1. [Verify your Teams' Project Workspace and Available Resources](tutorial1/README.md#verify-your-teams-project-workspace-and-available-resources) 162 | 1. [Generating SSH Keys](tutorial1/README.md#generating-ssh-keys) 163 | 1. [Launch a New Instance](tutorial1/README.md#launch-a-new-instance) 164 | 1. [Linux Flavors and Distributions](tutorial1/README.md#linux-flavors-and-distributions) 165 | 1. [Summary of Linux Distributions](tutorial1/README.md#summary-of-linux-distributions) 166 | 1. [OpenStack Instance Flavors](tutorial1/README.md#openstack-instance-flavors) 167 | 1. [Networks, Ports, Services and Security Groups](tutorial1/README.md#networks-ports-services-and-security-groups) 168 | 1. [Key Pair](tutorial1/README.md#key-pair) 169 | 1. [Verify that your Instance was Successfully Deployed and Launched](tutorial1/README.md#verify-that-your-instance-was-successfully-deployed-and-launched) 170 | 1. [Associating an Externally Accessible IP Address](tutorial1/README.md#associating-an-externally-accessible-ip-address) 171 | 1. [Success State, Resource Management and Troubleshooting](tutorial1/README.md#success-state-resource-management-and-troubleshooting) 172 | 1. [Introduction to Basic Linux Administration](tutorial1/README.md#introduction-to-basic-linux-administration) 173 | 1. [Accessing your VM Using SSH vs the OpenStack Web Console (VNC)](tutorial1/README.md#accessing-your-vm-using-ssh-vs-the-openstack-web-console-vnc) 174 | 1. [Running Basic Linux Commands and Services](tutorial1/README.md#running-basic-linux-commands-and-services) 175 | 1. [Linux Binaries, Libraries and Package Management](tutorial1/README.md#linux-binaries-libraries-and-package-management) 176 | 1. [User Environment and the `PATH` Variable](tutorial1/README.md#user-environment-and-the-path-variable) 177 | 1. [Install, Compile and Run High Performance LinPACK (HPL) Benchmark](tutorial1/README.md#install-compile-and-run-high-performance-linpack-hpl-benchmark) 178 | 179 | **Tutorial 2** will demonstrate how to configure and stand-up a compute node, and access it using a transparently created, port forwarding SSH tunnel between your workstation and your head node. You will then install a number of critical services across your cluster. 180 | 181 | 1. [Checklist](tutorial2/README.md#checklist) 182 | 1. [Spinning Up a Compute Node on Sebowa(OpenStack)](tutorial2/README.md#spinning-up-a-compute-node-on-sebowaopenstack) 183 | 1. [Compute Node Considerations](tutorial2/README.md#compute-node-considerations) 184 | 1. [Accessing Your Compute Node Using `ProxyJump` Directive](tutorial2/README.md#accessing-your-compute-node-using-proxyjump-directive) 185 | 1. [Setting a Temporary Password on your Compute Node](tutorial2/README.md#setting-a-temporary-password-on-your-compute-node) 186 | 1. [Understanding the Roles of the Head Node and Compute Node](tutorial2/README.md#understanding-the-roles-of-the-head-node-and-compute-node) 187 | 1. [Terminal Multiplexers and Basic System Monitoring](tutorial2/README.md#terminal-multiplexers-and-basic-system-monitoring) 188 | 1. [Manipulating Files and Directories](tutorial2/README.md#manipulating-files-and-directories) 189 | 1. [Verifying Networking Setup](tutorial2/README.md#verifying-networking-setup) 190 | 1. [Configuring a Simple Stateful Firewall Using nftables](tutorial2/README.md#configuring-a-simple-stateful-firewall-using-nftables) 191 | 1. [Network Time Protocol](tutorial2/README.md#network-time-protocol) 192 | 1. [Network File System](tutorial2/README.md#network-file-system) 193 | 1. [Generating an SSH Key for your NFS `/home`](tutorial2/README.md#generating-an-ssh-key-for-your-nfs-home) 194 | 1. [User Account Management](tutorial2/README.md#user-account-management) 195 | 1. [Out-Of-Sync Users and Groups](tutorial2/README.md#out-of-sync-users-and-groups) 196 | 1. [Ansible User Declaration](tutorial2/README.md#ansible-user-declaration) 197 | 1. [Create User Accounts](tutorial2/README.md#create-user-accounts) 198 | 1. [WirGuard VPN Cluster Access](tutorial2/README.md#wirguard-vpn-cluster-access) 199 | 1. [ZeroTier](tutorial2/README.md#zerotier) 200 | 201 | **Tutorial 3** will demonstrate how to configure, build, compile and install a number of various system software and applications. You will also be building these applications with different tools. Finally, you will learn how to run applications across your cluster. 202 | 203 | 1. [Checklist](tutorial3/README.md#checklist) 204 | 1. [Managing Your Environment](tutorial3/README.md#managing-your-environment) 205 | 1. [NFS Mounted Shared `home` folder and the `PATH` Variable](tutorial3/README.md#nfs-mounted-shared-home-folder-and-the-path-variable) 206 | 1. [Install Lmod](tutorial3/README.md#install-lmod) 207 | 1. [Lmod Usage](tutorial3/README.md#lmod-usage) 208 | 1. [Running the High Performance LINPACK (HPL) Benchmark on Your Compute Node](tutorial3/README.md#running-the-high-performance-linpack-hpl-benchmark-on-your-compute-node) 209 | 1. [System Libraries](tutorial3/README.md#system-libraries) 210 | 1. [Configure and Run HPL on Compute Node](tutorial3/README.md#configure-and-run-hpl-on-compute-node) 211 | 1. [Building and Compiling OpenBLAS and OpenMPI Libraries from Source](tutorial3/README.md#building-and-compiling-openblas-and-openmpi-libraries-from-source) 212 | 1. [Intel oneAPI Toolkits and Compiler Suite](tutorial3/README.md#intel-oneapi-toolkits-and-compiler-suite) 213 | 1. [Configure and Install Intel oneAPI Base and HPC Toolkits](tutorial3/README.md#configure-and-install-intel-oneapi-base-and-hpc-toolkits) 214 | 1. [Configuring and Running HPL with Intel oneAPI Toolkit and MKL](tutorial3/README.md#configuring-and-running-hpl-with-intel-oneapi-toolkit-and-mkl) 215 | 1. [LinPACK Theoretical Peak Performance](tutorial3/README.md#linpack-theoretical-peak-performance) 216 | 1. [Top500 List](tutorial3/README.md#top500-list) 217 | 1. [Spinning Up a Second Compute Node Using a Snapshot](tutorial3/README.md#spinning-up-a-second-compute-node-using-a-snapshot) 218 | 1. [Running HPL Across Multiple Nodes](tutorial3/README.md#running-hpl-across-multiple-nodes) 219 | 1. [HPC Challenge](tutorial3/README.md#hpc-challenge) 220 | 1. [Application Benchmarks and System Evaluation](tutorial3/README.md#application-benchmarks-and-system-evaluation) 221 | 1. [GROMACS (ADH Cubic)](tutorial3/README.md#gromacs-adh-cubic) 222 | 1. [LAMMPS (Lennard-Jones)](tutorial3/README.md#lammps-lennard-jones) 223 | 1. [Qiskit (Quantum Volume)](tutorial3/README.md#qiskit-quantum-volume** 224 | 225 | **Tutorial 4** demonstrates how to configure docker containers to deploy a monitoring stack, comprising of a metrics database service, an exporting / scraping service and a metric visualization services. You will then learn the very basics of how to visualize and interpret data. You will then learn how to automate the deployment of your Sebowa OpenStack infrastructure. Lastly, you'll deploy a scheduler and submit a job to it. 226 | 227 | 1. [Checklist](tutorial4/README.md#checklist) 228 | 1. [Cluster Monitoring](tutorial4/README.md#cluster-monitoring) 229 | 1. [Install Docker Engine, Containerd and Docker Compose](tutorial4/README.md#install-docker-engine-containerd-and-docker-compose) 230 | 1. [Installing your Monitoring Stack](tutorial4/README.md#installing-your-monitoring-stack) 231 | 1. [Startup and Test the Monitoring Services](tutorial4/README.md#startup-and-test-the-monitoring-services) 232 | 1. [SSH Port Local Forwarding Tunnel](tutorial4/README.md#ssh-port-local-forwarding-tunnel) 233 | 1. [Create a Dashboard in Grafana](tutorial4/README.md#create-a-dashboard-in-grafana) 234 | 1. [Success State, Next Steps and Troubleshooting](tutorial4/README.md#success-state-next-steps-and-troubleshooting) 235 | 1. [Configuring and Connecting to your Remote JupyterLab Server](tutorial4/README.md#configuring-and-connecting-to-your-remote-jupyterlab-server) 236 | 1. [Visualize Your HPL Benchmark Results](tutorial4/README.md#visualize-your-hpl-benchmark-results) 237 | 1. [Visualize Your Qiskit Results](tutorial4/README.md#visualize-your-qiskit-results) 238 | 1. [Automating the Deployment of your OpenStack Instances Using Terraform](tutorial4/README.md#automating-the-deployment-of-your-openstack-instances-using-terraform) 239 | 1. [Install and Initialize Terraform](tutorial4/README.md#install-and-initialize-terraform) 240 | 1. [Generate `clouds.yml` and `main.tf` Files](tutorial4/README.md#generate-cloudsyml-and-maintf-files) 241 | 1. [Generate, Deploy and Apply Terraform Plan](tutorial4/README.md#generate-deploy-and-apply-terraform-plan) 242 | 1. [Continuous Integration Using CircleCI](tutorial4/README.md#continuous-integration-using-circleci) 243 | 1. [Prepare GitHub Repository](tutorial4/README.md#prepare-github-repository) 244 | 1. [Reuse `providers.tf` and `main.tf` Terraform Configurations](tutorial4/README.md#reuse-providerstf-and-maintf-terraform-configurations) 245 | 1. [Create `.circleci/config.yml` File and `push` Project to GitHub](tutorial4/README.md#create-circleciconfigyml-file-and-push-project-to-github) 246 | 1. [Create CircleCI Account and Add Project](tutorial4/README.md#create-circleci-account-and-add-project) 247 | 1. [Slurm Scheduler and Workload Manager](tutorial4/README.md#slurm-scheduler-and-workload-manager) 248 | 1. [Prerequisites](tutorial4/README.md#prerequisites) 249 | 1. [Head Node Configuration (Server)](tutorial4/README.md#head-node-configuration-server) 250 | 1. [Compute Node Configuration (Clients)](tutorial4/README.md#compute-node-configuration-clients) 251 | 1. [GROMACS Application Benchmark](tutorial4/README.md#gromacs-application-benchmark) 252 | 1. [Protein Visualization](tutorial4/README.md#protein-visualization) 253 | 1. [Benchmark 2 (1.5M Water)](tutorial4/README.md#benchmark-2-15m-water) 254 | # Lecture Recordings 255 | 256 | In this section you will finds links to all of the livestreams of the lectures (Teams Meetings) and subsequent recordings for you to refer back to. 257 | 258 | 1. Welcome, Introduction and Getting Started 259 | * [Welcome and Introduction](https://youtu.be/T68pHDdZW3s) 260 | * [Getting Started](https://youtu.be/cIB9Gtpifpk) 261 | * [Intro to Linux & Services](https://youtu.be/pbpjAw9eVcM) 262 | * [Intro to Tools for the Modern IT Engineer](https://youtu.be/t4hD6NMw9Xg) 263 | 264 | 2. HPC Hardware, HPC Networking and Systems Administration 265 | * [HPC Hardware](https://youtu.be/gkZCrdTuvrc) 266 | * [HPC Networking](https://youtu.be/pGzQutsk2-A) 267 | * [System Administration & Configuration Management](https://youtu.be/YY6D-0e5iHw) 268 | * [Standing up a Compute Node](https://youtu.be/V6bx86qJwHE) 269 | 270 | 3. Benchmarking, Compilation and Parallel Computing 271 | * [HPC Benchmarking]() 272 | * [Code Compilation]() 273 | * [Parallel Computing and Intro to QC]() 274 | * [Applications: LAMMPS & Qiskit]() 275 | 276 | 4. Administration and Application Visualization 277 | * [Cluster Admin, Ansible & Containers] 278 | * [Monitoring]() 279 | * [Schedulers] 280 | * [Data Visualization & Jupyter Lab] 281 | 282 | 5. Career Guidance 283 | * [HPC Career Panel]() 284 | 285 | # Contributing to the Project 286 | 287 | > [!IMPORTANT] 288 | > While we value your feedback, the following sections are primarily targeted as _Contributors to the Project_. As a student participating in the competition, do **NOT** spend your time working through any of the material below. However, we would love to have your contributions to the project, *after* the competition. 289 | 290 | You are strongly encouraged to contribute and improve the project by [Opening and Participating in Discussions](https://github.com/chpc-tech-eval/chpc24-scc-nmu/discussions), [Raising, Addressing and Resolving Issues](https://github.com/chpc-tech-eval/chpc24-scc-nmu/issues). The following guide describes [How to clone, push, and pull with git (beginners GitHub tutorial)](https://youtu.be/yxvqLBHZfXk?si=jFFdP1XafscVX9BF). 291 | 292 | ## Steps to follow when editing existing content 293 | 294 | In order to effectively manage the various workflows and stages of development, testing and deployment, the project is comprised of three primary branches: 295 | * `main`: *Stable* and production-ready deployment branch of the project. 296 | * `stag`: *Staging* branch which mirrors production and is used for integration testing of new features. 297 | * `dev`: *Development* branch for incorporating new features and bug fixes. 298 | 299 | Editing the content directly, will require the use of Git. Using a terminal application or [Git for Windows PowerShell](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-PowerShell) or [Git for MobaXTerm](https://www.geeksforgeeks.org/how-to-install-git-on-mobaxterm/). 300 | 301 | 1. [Generate an SSH Key](#tutorial1/README.md#generating-ssh-keys) (or use an existing one). 302 | 1. Add your SSH key to your Git profile. 303 | - Navigate to your *'Profile'* and go to *'Settings'*. 304 | - Under *'Access'*, navigate to *'SSH and GPG Keys'* 305 |

Adding SSH Keys to GitHub.

306 | 307 | 1. `git clone` a local copy of the repository, to your personal work space. 308 |

Adding SSH Keys to GitHub.

309 | 310 | You can copy the command from GitHub itself. 311 | 312 | ```bash 313 | git clone git@github.com:chpc-tech-eval/chpc24-scc-nmu.git 314 | ``` 315 | 1. When starting work on a new feature or bug fix, create a feature branch off of the development branch and regularly get updates from `dev` to ensure that you remain consistent with any changes to `dev`: 316 | ```bash 317 | git checkout dev 318 | git pull origin dev 319 | ``` 320 | 1. Create a new branch to work on. i.e. `git branch tutX/bugfix-or-new-feature` followed by `git checkout tutX/bugfix-or-new-feature`, or simply use a single command `git checkout -b tutX/bugfix-or-new-feature`. 321 | - Give the branch a sensible name. 322 | - You are encouraged to push the branch back to the remote so that collaborators can see what you are working on as you make the changes. 323 | 1. Make the appropriate changes and commit them locally: 324 | ```bash 325 | git add 326 | git commit -m "some_message_pertaining_to_changes_made" 327 | ``` 328 | 1. When you have completed editing your feature, merge any remote changes from `dev` and then `push` your local changes, back upstream to the remote repository: 329 | ```bash 330 | git pull origin dev # (optional) it is generally a good practice to incorporate any changes in dev into your code early and often 331 | git pull origin feature/bugfix-or-new-feature # (optional) if you are collaborating on a specific feature with someone, it is important to incorporate their changes early and often 332 | git push origin feature/bugfix-or-new-feature 333 | ``` 334 | 1. Once you are satisfied with the changes you've have been editing, eliminate all merge conflicts by pulling all remote changes and deviations into your local working copy. `git pull`. 335 | - If you are confident that your feature does not or has not deviated from the remote `dev` branch, use `git pull` to automatically `fetch` and `merge` remote changes from `dev` into your feature branch. 336 | - Alternatively, if your branch is old, or depends on / requires changes from remote use `git fetch`, to `fetch` remote changes and be able to preview them before merging. 337 | - Eliminate your local conflicts and merge all remote changes `git merge`. 338 | - Once all the conflicts have been resolved, and you've successfully merged all remote changes, push your branch upstream. 339 | 1. [Create a pull request](https://github.com/chpc-tech-eval/chpc24-scc-nmu/compare/dev...dev) to the remote `dev` branch on GitHub, to incorporate your feature. 340 | - Or another branch, if your feature branch was adding functionality to an existing feature branch. 341 | 342 | ## Syntax and Style 343 | 344 | Use the following guide on [Github Markdown Syntax Editing](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github). 345 | 346 | -------------------------------------------------------------------------------- /resources/.~lock.CHPC_SCC_2024_Technical_Knowledge_Assessment.docx#: -------------------------------------------------------------------------------- 1 | ,nlisa,grogu,09.07.2024 07:31,file:///home/nlisa/.config/libreoffice/4; -------------------------------------------------------------------------------- /resources/CHPC_2024_SCC_Local_Selection_Round_Timetable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/resources/CHPC_2024_SCC_Local_Selection_Round_Timetable.png -------------------------------------------------------------------------------- /resources/CHPC_SCC_2024_Technical_Knowledge_Assessment.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/resources/CHPC_SCC_2024_Technical_Knowledge_Assessment.docx -------------------------------------------------------------------------------- /resources/CHPC_Student_Cluster_Competition_Parts_List_2024.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/resources/CHPC_Student_Cluster_Competition_Parts_List_2024.xlsx -------------------------------------------------------------------------------- /resources/github_clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/resources/github_clone.png -------------------------------------------------------------------------------- /resources/github_profile_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/resources/github_profile_settings.png -------------------------------------------------------------------------------- /resources/github_profile_settings_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/resources/github_profile_settings_highlight.png -------------------------------------------------------------------------------- /tutorial1/README.md: -------------------------------------------------------------------------------- 1 | Tutorial 1: Standing Up Your Head Node and Running HPL 2 | ====================================================== 3 | 4 | This tutorial will help you become familiar with Cloud Computing and will also serve as an introduction to Linux. This tutorial will start with a network primer that will help you to understand the basics of public and private networks, ip addresses, ports and routing. 5 | 6 | You will then login into the CHPC's Cloud Computing Platform and launch your own OpenStack virtual machine instances. Here you will need to make a decision on choice of Linux distribution that you will use as well as how your team will allocate your limited cloud computing resources. 7 | 8 | Once your team has successfully launched your instances you'll login to your VM's to do some basic Linux administration, such as navigating and configuring your hosts and network on the terminal. If you are new to Linux and need help getting more comfortable, please check out the resources tab on the learning system. 9 | 10 | This tutorial will conclude with you downloading, installing and running the High Performance LinPACK benchmark on your newly created VM's. 11 | 12 | # Table of Contents 13 | 14 | 15 | 16 | 1. [Checklist](#checklist) 17 | 1. [Network Primer](#network-primer) 18 | 1. [Basic Networking Example (WhatIsMyIp.com)](#basic-networking-example-whatismyipcom) 19 | 1. [Terminal, Windows MobaXTerm and PowerShell Commands](#terminal-windows-mobaxterm-and-powershell-commands) 20 | 1. [Launching your First Open Stack Virtual Machine Instance](#launching-your-first-open-stack-virtual-machine-instance) 21 | 1. [Accessing the NICIS Cloud](#accessing-the-nicis-cloud) 22 | 1. [Verify your Teams' Project Workspace and Available Resources](#verify-your-teams-project-workspace-and-available-resources) 23 | 1. [Generating SSH Keys](#generating-ssh-keys) 24 | 1. [Launch a New Instance](#launch-a-new-instance) 25 | 1. [Linux Flavors and Distributions](#linux-flavors-and-distributions) 26 | 1. [Summary of Linux Distributions](#summary-of-linux-distributions) 27 | 1. [OpenStack Instance Flavors](#openstack-instance-flavors) 28 | 1. [Networks, Ports, Services and Security Groups](#networks-ports-services-and-security-groups) 29 | 1. [Key Pair](#key-pair) 30 | 1. [Verify that your Instance was Successfully Deployed and Launched](#verify-that-your-instance-was-successfully-deployed-and-launched) 31 | 1. [Associating an Externally Accessible IP Address](#associating-an-externally-accessible-ip-address) 32 | 1. [Troubleshooting](#troubleshooting) 33 | 1. [Introduction to Basic Linux Administration](#introduction-to-basic-linux-administration) 34 | 1. [Accessing your VM Using SSH vs the OpenStack Web Console (VNC)](#accessing-your-vm-using-ssh-vs-the-openstack-web-console-vnc) 35 | 1. [Running Basic Linux Commands and Services](#running-basic-linux-commands-and-services) 36 | 1. [Linux Binaries, Libraries and Package Management](#linux-binaries-libraries-and-package-management) 37 | 1. [User Environment and the `PATH` Variable](#user-environment-and-the-path-variable) 38 | 1. [Install, Compile and Run High Performance LinPACK (HPL) Benchmark](#install-compile-and-run-high-performance-linpack-hpl-benchmark) 39 | 40 | 41 | 42 | # Checklist 43 | 44 | Use the following checklist to keep track of your team's progress and to ensure that all members in your understand these concepts. 45 | 46 | - [ ] Understand IT concepts like cloud computing, virtualisation and remote connections: 47 | - [ ] Understand and be able to explain networking terms such as URL, DNS, IP Address, Port, Subnet, Gateway, Router, and 48 | - [ ] Understand the difference between a Local Private Network and an External Public Network. 49 | - [ ] Learn how to use the CHPC's cloud computing environment: 50 | - [ ] Learn about different Linux Distributions and Flavors, and 51 | - [ ] Learn about Cloud Resource Management. 52 | - [ ] Learn about Basic Linux Administration: 53 | - [ ] Learn what SSH is and how to use it, 54 | - [ ] Learn about Linux password management, 55 | - [ ] Use a Linux Console / Terminal Based Text Editors, 56 | - [ ] Understand Linux Privileges and the Root user, 57 | - [ ] Learn how to Install Packages in your Linux Environment, and 58 | - [ ] Learn about Configuring system files. 59 | - [ ] Download, Configure, Install and Run HPL Benchmark: 60 | - [ ] Understand how to satisfy Linux Package Dependencies, 61 | - [ ] Download and unpack files using a terminal, 62 | - [ ] Editing Makefiles, 63 | - [ ] Compiling Sourcefiles to produce an Executable Binary, and 64 | - [ ] Understanding the basics of the Linux Shell Environment. 65 | 66 | # Network Primer 67 | 68 | At the core of High Performance Computing (HPC) is networking. Something as simple as browsing the internet from either your cell phone or the workstation in front of you, involves the transfer and exchange of information between many different networks. Each resource or service connected to the internet is made available through a unique address and network port. For example, https://www.google.co.za:443 is the [Uniform Resource Locator (URL)](https://en.wikipedia.org/wiki/URL) used to uniquely identify Google's search engine page on the South African [co.za]. [domain](https://en.wikipedia.org/wiki/Domain_name). The [443] is the [port number](https://en.wikipedia.org/wiki/Port_(computer_networking)) which in this instance lets you know that you're connecting to a secure [https](https://en.wikipedia.org/wiki/HTTPS) server. 69 | 70 | When you enter this address into your browser, one of the first things that will happen is that a [Domain Name Service (DNS)](https://en.wikipedia.org/wiki/Domain_Name_System) will translate the URL [google.co.za] into it's corresponding [Internet Protocol (IP) Address](https://en.wikipedia.org/wiki/IP_address) [142.251.216.67]. 71 | 72 | A number of [routing](https://en.wikipedia.org/wiki/Router_(computing)) lookup tables will be utilized to determine an available, _and preferably optimal_ path to the resource that you'd requested, thereafter a number of routers or gateway devices will be used to exchange packets between your workstation, through all of the intermediary networks, and finally the target resource. 73 | 74 | At this point it is important to note that even though packets and network traffic are being exchanged between your local workstation and the Google servers, at no point is the private IP Address of your workstation exposed to the external Google Servers. Your workstation would have been assigned a private internal IP Address based on the computer laboratory. Traffic is then routed between the computer laboratory's private internal network and the rest of the university's networks through routers and gateway devices. All the internal computers and components across the campus will appear to the outside as though they have a single public IP address. This is accomplished through a process known as [Network address Translation (NAT)](https://en.wikipedia.org/wiki/Network_address_translation). 75 | 76 | Diagram loosely describing process behind browsing to Google.com. You have no information about the computers and servers behind 72.14.222.1, just as Google has no information about your workstation’s internal IP. 77 | 78 | The process of browsing to https://www.google.co.za on your workstation, can be simplified and depicted in the image above and summarized as follows: 79 | 1. You open a browser on your workspace and navigate to [google.co.za](https://www.google.com). 80 | 1. A DNS Server then translates the URL [google.co.za](https://www.google.co.za) into it's corresponding IP Address [142.251.216.67](142.251.216.67). 81 | 1. With the relevant IP Address, a Routing Table is used to navigate a path between your workstation and the server housing the information / data that you're after. Packets are exchanged between your workstation and all the networks between you and your desired data: 82 | 1. Data Packets are exchanged between your workstation and the computer laboratory's internal networks (e.g. 192.168.0.1/24 and 10.0.0.1/24 networks), 83 | 1. Data Packets are exchanged between Universities' _internal_ networks and _publicly_ assigned IP Address Range (e.g. 192.96.15.90), 84 | 1. Data Packets are exchanged between Universities' _public_ facing network interfaces, to the regional, national and international backbone networks and connections, and finally 85 | 1. Data Packets are exchanged between _Regional_, _National_ and _International_ networks and those of the target [Google](https://www.google.com) domains (e.g.: _local [Google.co.za](https://www.google.co.za):_ [142.251.216.67](142.251.216.67), or _California_ [72.14.222.1](72.14.222.1)) 86 | 87 | > [!IMPORTANT] 88 | > It is important to note that in the preceding examples, the specific IP Address and Routing Tables provided were merely an indicative oversimplification for the purposes of clarifying the related concepts. 89 | 90 | ## Basic Networking Example (WhatIsMyIp.com) 91 | 92 | In the following examples, you will be using your Android and/or Apple Cellular devices to complete the following tasks in your respective groups. Start by ensuring that your cell phone is connected to the local WiFi. Then navigate to the _"Network Details"_ page of the WiFi connection. 93 | 94 |

Typical information displayed from the WiFi Network Settings Options Section of an Android device.

95 | 96 | From the _"Network Details"_ section of your own device, you should see similar information and you will have the following details: 97 | * *Wi-Fi Type*: Your cellular device may have a WiFi radio card operating at either [2.4GHz or 5GHz](https://help.afrihost.com/entry/the-difference-between-2-4-ghz-and-5-ghz-wi-fi) or two independent radios so that it operates at _both_ frequencies, 98 | * *MAC Address*: [Medium Access Control Address](https://en.wikipedia.org/wiki/MAC_address) which is a unique identifier that each physical network interface controller on any device will have, i.e. if your phone has both 2.4GHz and 5GHz radios, then each will have their own physical unique MAC addresses. 99 | * *IP Address*: [Internet Protocol Address](https://en.wikipedia.org/wiki/IP_address) is the unique address assigned to a device connected to a network implementing the IP protocol for communication, _(i.e. you cell connected to the WiFi)_. 100 | * *Gateway*: _or_ [Router](https://en.wikipedia.org/wiki/Gateway_(telecommunications)) is a hardware or software device used to transmit data between different networks_or (subnets)_, _i.e. the same way that the WiFi Router, connects your cell phone to the rest of the university and to the internet_. 101 | * *Subnet Mask*: A [Subnet](https://en.wikipedia.org/wiki/Subnet) corresponds to the logical subdivision of a network and serves as an indication of the number of hosts available on a particular network. I.e. for the subnet mask _255.255.224.0_, there are _8192_ possible hosts over the subnets _10.31.[0-31].[1-254]_. 102 | * *DNS*: A [Domain Name System](https://en.wikipedia.org/wiki/Domain_Name_System) is a lookup service that translates human readable domain names into the corresponding IP Addresses. 103 | 104 | > [!IMPORTANT] 105 | > The IP Addresses, Gateways, Subnet Masks, DNS Servers _may_ not correspond to those on _YOUR_ particular device. You must ensure that you are connected to the correct network when executing the next set of tasks. Each member of your team must record the *IP Address*, *Gateway*, *Subnet Mask*, and *DNS* settings from their connection when completing this short exercise. 106 | 107 | 1. Testing the Local WiFi Connection Network 108 | 109 | On your cellular device, ensure that you are connected to the *computer laboratory's WiFi network* and that all SIM card(s) are disabled. Navigate to https://WhatIsMyIp.com, explore the website and record the IP Address indicated. 110 | 111 |

WhatIsMyWiFi.com test while connected to university computer laboratory WiFi.

112 | 113 | 1. Testing the External Cellular Network 114 | 115 | On your cellular device, ensure that you are connected to your *SIM provider's network* and that all WiFi radios are disabled. Navigate to https://www.whatismyip.com and again record the IP Address indicated. 116 | 117 |

WhatIsMyWiFi.com test while connected to your SIM provider's network.

118 | 119 | 1. WiFi Hotspot Example 120 | 121 | Team Captains are required to setup and establish a WiFi Hotspot for their team mates. The above experiments will be repeated for the university's computer laboratory WiFi connections as well as the Team Captain's Cellular SIM provider's network. 122 | 123 | On your cellular device, ensure that you are connected to your Team Captain's WiFi Hotspot network, *alternating for both* the *SIM provider's network* as well as the *university's computer laboratory's WiFi network*. Navigate to https://www.whatismyip.com and again record the IP Address indicated and this time you *MUST* also record your device's _"Network Settings"_. 124 | 125 |

WhatIsMyWiFi.com test while connected to your Team Captain's WiFi Hotspot network.

126 | 127 | > [!TIP] 128 | > Pay careful attention to the IP Address reported by WhatIsMyIp.com. This is the unique identifier that _your_ device will be identified and recognized by externally on the internet. Use this information to assist you to understand and describe [NAT](https://en.wikipedia.org/wiki/Network_address_translation). 129 | 130 | ## Terminal, Windows MobaXTerm and PowerShell Commands 131 | 132 | You should familiarize yourself with a few basic networking commands that can be utilized on your local shell, as well as your compute nodes. These commands are useful as a first step in debugging network related connection issues. 133 | 134 | * `ip a` or `ipconfig`: 135 | The ip a command (short for ip addr) is used to display all IP addresses assigned to all network interfaces on a Linux system. It provides detailed information about the state of the network interfaces, including the IP address, broadcast address, subnet mask, and other relevant details. 136 | 137 | * `ping 8.8.8.8`: 138 | The ping command is used to test the reachability of a host on an IP network. The 8.8.8.8 is a well-known public DNS server provided by Google. By sending ICMP Echo Request messages to 8.8.8.8, you can determine if the server is reachable and measure the round-trip time of the packets. 139 | 140 | * `ip route` or `route print`: 141 | The ip route command is used to display or manipulate the routing table on a Linux system. It shows the kernel's routing table, which dictates how packets should be routed through the network. This includes the default gateway, subnet routes, and any other custom routing rules. 142 | 143 | * `tracepath` or `tracert`: 144 | The tracepath command is used to trace the network path to a destination, showing the route that packets take to reach it. Unlike traceroute, tracepath does not require root privileges and is often easier to use. It provides details about each hop along the route, including the IP address and round-trip time. 145 | 146 | > [!TIP] 147 | > Refer to the [Q&A Discussion on GitHub](https://github.com/chpc-tech-eval/chpc24-scc-nmu/discussions/48) for an example. Post a similar screenshot of your team executing these commands as a comment to that discussion. 148 | 149 | # Launching your First Open Stack Virtual Machine Instance 150 | 151 | In this section you will be configuring and launching your first [Virtual Machine](https://en.wikipedia.org/wiki/Virtual_machine) instance. This allows you to use a portion of another computer's resources, to host another [Operating System](https://en.wikipedia.org/wiki/Operating_system) as though it were running on its own dedicated hardware resources. For example, your laptops or workstations are running a Windows-based operating system, you _"could"_ use a type of computer software [Hypervisor](https://en.wikipedia.org/wiki/Hypervisor), that runs and creates _virtual machines_, to run a Linux-based operating while your are in your Windows environment. 152 | 153 | The physical servers that you will use to spawn your VM's are housed in Rosebank, Cape Town. We will verify this later using [WhatIsMyIp](https://www.whatismyip.com). 154 | 155 | ## Accessing the NICIS Cloud 156 | 157 | Open your web browser and navigate to the NICIS OpenStack Cloud platform https://sebowa.nicis.ac.za/, and use the credentials that your team has been provided with to login into your team's project workspace. 158 | 159 |

Sebowa.nicis.ac.za NICIS OpenStack Cloud.

160 | 161 | ## Verify your Teams' Project Workspace and Available Resources 162 | 163 | Once you've successfully logged in, navigate to `Computer -> Overview` and verify that the Project Workspace corresponds to _YOUR TEAM_ and that you've been allocated the correct number of resources. 164 | 165 | > [!NOTE] 166 | > The following screenshot is for illustration purposes only, your actual available resources _may_ differ. 167 |

Sebowa.nicis.ac.za NICIS OpenStack Cloud available resources.

168 | 169 | ## Generating SSH Keys 170 | 171 | Over the course of the lecture content and the tutorials, you will be making extensive use of [Secure Shell (SSH)](https://en.wikipedia.org/wiki/Secure_Shell) which grants you a [Command-Line Interface (CLI)](https://en.wikipedia.org/wiki/Command-line_interface) with which to access your VMs. SSH keys allows you to authenticate against a remote SSH server, without the use of a password. 172 | 173 | > [!IMPORTANT] 174 | > When you are presented with foldable code blocks, you must pick and implement only **one** of the options presented, which is suitable to your current configuration and/or circumstance. 175 | 176 | > [!TIP] 177 | > A number [encryption algorithms](https://en.wikipedia.org/wiki/Public-key_cryptography) exist for securing your SSH connections. [Elliptic Curve Digital Signature Algorithm (ECDSA)](https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm) is secure and simple enough should you need to copy the public key manually. Nonetheless, you are free to use whichever algorithm you choose to. 178 | 179 | From the `Start` menu, open the Windows `PowerShell` application: 180 | These commands are the same if you are commenting from a Linux, Unix or MacOS Terminal, and Moba XTerm. 181 | 1. Generate an SSH key pair: 182 | ```bash 183 | ssh-keygen -t ed25519 184 | ``` 185 | 1. When prompted to _"Enter file in which to save the key"_, press `Enter`, 186 | 1. When prompted to _"Enter a passphrase"_, press `Enter`, and `Enter` again to verify it. 187 | 188 |

Windows Powershell SSH Keygen.

189 | 190 | > [!TIP] 191 | > Below is an example using Windows PuTTY. It is hidden and you must click the heading to reveal it's contents. You are strongly encourage to use either Windows PowerShell or Moba XTerm instead. 192 | 193 |
194 | Windows PuTTY 195 | 196 | [PuTTY](https://putty.org/) is a Windows-based SSH and Telnet client. From the `Start` menu, open the `PuTTYgen` application. 197 | 1. Generate an SSH key pair using the `Ed25519` encryption algorithm. 198 | 1. Generate the necessary entropy by moving your mouse pointer over the `Key` section until the green bar is filled. 199 |

PuTTYgen Generate.

200 | 1. Proceed to **Save** both the `Private Key` and `Public Key`. 201 |

PuTTYgen Generate Save.

202 |
203 | 204 | You **MUST** take note of the location and paths to **BOTH** your public and private keys. Your public key will be shared and distributed to the SSH servers you want to authenticate against. Your private key must be kept secure within your team, and must not be shared or distributed to anyone. 205 | 206 | Once you have successfully generated an SSH key pair, navigate to `Compute` → `Key Pairs` and import the **public** key `id_ed25519.pub` into your Team's Project Workspace within OpenStack. 207 | 208 |

Import id_25519.pub into OpenStack.

209 | 210 | ## Launch a New Instance 211 | 212 | From your Team's OpenStack Project Workspace, navigate to `Compute` → `Instance` and click `Launch Instance**. 213 | 214 |

OpenStack Launch New Instance.

215 | 216 | Within the popup window, enter an appropriate name for your instance that will describe what the VM's intended purpose is meant to be and help you to remember it's primary function. In this case, a suitable name for your instance would be **head node**. 217 | 218 | ## Linux Flavors and Distributions 219 | 220 | After configuring your new VM name under instance details, you will need to select the template that will be used to create the instance from the *Source* menu. Before selection a [Linux Operating System Distribution](https://en.wikipedia.org/wiki/Linux_distribution) for your new instance, ensure that the default *Source* options are correctly configured: 221 | 1. *Select Boot Source* is set to `Image`, 222 | 1. *Create New Volume* is `Yes`, 223 | 1. *Delete Volume on Instance Delete* is `No`, and 224 | 1. *Volume Size (GB)* will be set when you configure the instance flavor. 225 | 226 | There are a number of considerations that must be taken into account when selecting a Linux distribution that will be appropriate for your requirements and needs. [Since June 2017](https://www.top500.org/statistics/details/osfam/1/) **all** of the systems on the Top500 list make use of a Linux-based Operating System. Familiarity and proficiency with Linux-based operating systems and their derivatives is a mandatory requirement for gaining expertise in Software Development, Systems Administration and Networking. 227 | 228 | An argument could be made, that the best way to acquire Linux systems administration skills, is to make daily use of a Linux Distribution by running it on your personal laptop, desktop or workstation at home / school. 229 | 230 | This is something for you and your team to investigate after the competition and will not be covered in these tutorials. If you feel that you are not comfortable completely migrating to a Linux-based environment, there are a number of methods that can be implemented to assist you in transitioning from Windows to a Linux (or macOS) based *'Daily Driver*: 231 | * Dual-boot Linux alongside your Windows environment, 232 | * Windows Subsystem for Linux [(WSL)](https://learn.microsoft.com/en-us/linux/install), 233 | * Running Linux VM's locally within your Windows environment, 234 | * Running Linux VM's through cloud-based solutions, and Virtual Private Servers [(VPS)](https://en.wikipedia.org/wiki/Virtual_private_server), as you are doing for the competition. There are many commercial and free-tier services available, e.g. [Amazon AWS](https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all), [Google Cloud](https://cloud.google.com/free) and [Microsoft Azure](https://azure.microsoft.com/en-us/free). 235 | 236 | ### Summary of Linux Distributions 237 | 238 | A Linux distribution, is a collection of software that is at the very leased comprised of a [Linux kernel](https://en.wikipedia.org/wiki/Linux_kernel) and a [package manager](https://en.wikipedia.org/wiki/Package_manager). A package manager is responsible for automating the process of installing, configuring, upgrading, downgrading and removing software programs and associated components from a computer's operating system. 239 | 240 | A number of considerations must be taken into account when deciding on choice of Linux distro as a *'daily driver'* and as well as a server. There are subtleties and nuances between the various Linux flavors. These vary from a number of factors, not least of which including: 241 | * Support - is the project well documented and do the developers respond to queries, 242 | * Community - is there a large and an active userbase, 243 | * Driver Compatibility - will the distro *'natively'* run on your hardware without workarounds or custom compilation / installation of various device drivers, 244 | * Stability and Maturity - is the intended distro and version currently actively supported and maintained, not 'End of Life' and verified to run across a number of different systems and environment configurations. Or do you intend to run a *'bleeding-edge'* distro so that you may in the future, influence the direction of application development and assist developers in identifying bugs in their releases... 245 | 246 | You and your Team, together with input and advise from your mentors, must do some research and depending on the intended use case, decide which will be the best choice. 247 | 248 | The following list provides a few examples of Linux distros that *may* be available on the Sebowa OpenStack cloud for you to use, and that you *might* consider using as a *'daily driver'*. 249 | 250 | > [!TIP] 251 | > You do not need to decide right now which Linux Flavor you and your team will be installing on you personal / school laptop and desktop computers. The list and corresponding links are provided for later reference, however for the time being you are strongly encouraged to proceed with **Rocky 9.3 image**. If you are already using or familiar with Linux, discuss this with the instructors who will advise you on how to proceed. 252 | 253 | * **RPM** or Red Hat Package Manager is a free and open-source package management system. The name RPM refers to the `.rpm` file format and the package manager program itself. Examples include [Red Hat Enterprise Linux](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux), [Rocky Linux](https://rockylinux.org/), [Alma Linux](https://almalinux.org/), [CentOS Stream](https://www.centos.org/centos-stream/) and [Fedora](https://fedoraproject.org/). You can't go wrong with choose of either Red Hat, Alma, ***Rocky*** or CentoS Stream for the competition. You manage packages through tools such at `yum` (Yellowdog Updater, Modified) and / or `dnf` (Dandified YUM). 254 | 255 | * **Zypper** is the package manager used by [openSUSE](https://www.opensuse.org/), [SUSE Linux Enterprise (SLE)](https://www.suse.com/), and related distributions. This is another good choice for beginners, however openSUSE is not available as an image for the competition. 256 | 257 | * **APT**: In Debian-based distributions, the installation and removal of software are generally managed through the package management system known as the Advanced Package Tool (APT). Examples include [Debian](https://www.debian.org/), [Ubuntu](https://ubuntu.com/), [Linux Mint](https://linuxmint.com/), [Pop! OS](https://pop.system76.com/) and [Kali Linux](https://www.kali.org/). Debian or Ubuntu Based Linux distributions are fantastic options for beginners. If one of your team members are already using such a system, then you are advised to use the provided Ubuntu image for the competition. 258 | 259 | * **PkgTool** is a menu-driven package maintenance tool provided with the [Slackware Linux distribution](http://www.slackware.com/). Listed here for interest, not recommended for beginners. 260 | 261 | * **Pacman** is a package manager that is used in the [Arch Linux](https://archlinux.org/) distribution and its derivatives such as [Manjaro](https://manjaro.org/). Not recommended for beginners. 262 | 263 | * **Portage** is a package management system originally created for and used by [Gentoo Linux](https://www.gentoo.org/) and also by ChromeOS. Definitely not recommended for beginners. 264 | 265 | * **Source-Based**: [Linux From Scratch (LFS)](https://www.linuxfromscratch.org/) is a project that teaches you how to create your own Linux system from source code, using another Linux system. Learn how to install, configure and customize LFS and BLFS, and use tools for automation and management. Once you are **very** familiar with Linux, LFS is an excellent medium term side project that you peruse in you own time. Only Linux experts need apply. 266 | 267 | Type *"Rocky"* in the search bar, and select the **Rocky-9.3** cloud image as a boot source. 268 | 269 |

OpenStack Select Source.

270 | 271 | ## OpenStack Instance Flavors 272 | 273 | An important aspect of system administration is resource monitoring, management and utilization. Each Team will be required to manage their available resources and ensure that the resources of their clusters are utilized in such a way as to maximize system performance. You have been allocated a pool of resources which you will need to decide how you are going to allocate the sizing of the compute, memory and storage across your head node and compute node(s). 274 | 275 | 1. Compute (vCPUs) 276 | You have been allocated a pool totaling **18 vCPUs**, which would permit the following configurations: 277 | 1. Head Node (2 vCPUs) and 2 x Compute Nodes (8 vCPUs each), 278 | 1. Head node (6 vCPUs) and 2 x Compute Nodes (6 vCPUs each), 279 | 1. Head node (10 vCPUs) and 1 x Compute Node (8 vCPUs). 280 | 281 | 1. Memory (RAM) 282 | You have been allocated a pool totaling **36 GB** of RAM, which would permit the following configurations: 283 | 1. Head Node (4 GB RAM) and 2 x Compute Nodes (16 GB RAM each), 284 | 1. Head node (12 GB RAM) and 2 x Compute Nodes (12 GB RAM each), 285 | 1. Head node (20 GB RAM) and 1 x Compute Node (16 GB RAM). 286 | 287 | 1. Storage (DISK) 288 | You have been allocated a pool of 50 GB of storage, which can be distributed in the following configurations: 289 | 1. Head Node (60 GB of storage) and 2 x Compute Nodes (10 GB of storage each), 290 | 1. Head Node (60 GB of storage) and 2 x Compute Nodes (10 GB of storage each), and 291 | 1. Head Node (60 GB of storage) and 1 x Compute Node (10 GB of storage). 292 | 293 | The following table summarizes the various permutations and allocations that can be used for designing your clusters within your Team's Project Workspace on Sebowa's OpenStack cloud platform. 294 | 295 | | Cluster Configurations | Instance Flavor | Compute (vCPUS) | Memory (RAM) | Storage (Disk) | 296 | |----------------------------|:---------------:|:---------------:|:------------:|:--------------:| 297 | | | | | | | 298 | | Dedicated Head Node | scc24.C2.M4.S60 | 2 | 4 GB | 60 GB | 299 | | Compute Node 01 | scc24.C8.M16.S10 | 8 | 16 GB | 10 GB | 300 | | Compute Node 02 | scc24.C8.M16.S10 | 8 | 16 GB | 10 GB | 301 | | | | | | | 302 | | | | | | | 303 | | Hybrid Head / Compute Node | scc24.C6.M12.S60 | 6 | 12 GB | 60 GB | 304 | | Compute Node 01 | scc24.C6.M12.S10 | 6 | 12 GB | 10 GB | 305 | | Compute Node 02 | scc24.C6.M12.S10 | 6 | 12 GB | 10 GB | 306 | | | | | | | 307 | | | | | | | 308 | | Hybrid Head / Compute Node | scc24.C10.M20.S60 | 10 | 20 GB | 60 GB | 309 | | Compute Node 01 | scc24.C8.M16.S10 | 8 | 16 GB | 10 GB | 310 | | | | | | | 311 | 312 | Type *"scc"* in the search bar and select the **scc24.C2.M4.S60** instance flavor. 313 | 314 |

OpenStack Instance flavor.

315 | 316 | > [!TIP] 317 | > When designing clusters, very generally speaking the *'Golden Rule'* in terms of Memory is **2 GB of RAM per CPU Core**. The storage on your head node is typically '*shared*' to your compute nodes through some form of [Network File System (NFS)](https://en.wikipedia.org/wiki/Network_File_System). A selection of pregenerated instance flavors have been pre-configured for you. For the purposes of starting with this tutorial, unless you have very good reasons for doing otherwise, you are **STRONGLY** advised to make use of the **scc24.C2.M4.S60** flavor with *2 vCPUs* and *4 GB RAM*. 318 | 319 | ## Networks, Ports, Services and Security Groups 320 | 321 | Under the *Networks* settings, make sure to select the `vxlan` that corresponds to your Team Name. 322 | 323 |

OpenStack Networks Selection.

324 | 325 | No configurations are required for *Network Ports*, however you must ensure that you have selected `scc24_sg` under *Security Groups*. 326 | 327 |

OpenStack Security Groups Selection.

328 | 329 | ## Key Pair 330 | 331 | > [!CAUTION] 332 | > You must ensure that you associate the SSH Key that you created earlier to your VM, otherwise you will not be able to log into your newly created instance 333 | >

OpenStack Key Pair Selection.

334 | 335 | ## Verify that your Instance was Successfully Deployed and Launched 336 | 337 | Congratulations! Once your VM instance has completed it's building, block device mapping and deployment phase, and if your *Power State* indicates `Running`, then you have successfully launched your very first OpenStack instance. 338 | 339 |

OpenStack Running State.

340 | 341 | ## Associating an Externally Accessible IP Address 342 | 343 | In order for you to be able to SSH into your newly created OpenStack instance, you'll need to associate a publicly accessible [Floating IP](https://kb.leaseweb.com/network/floating-ips/using-floating-ips) address. This allocates a *virtual IP* address to your *virtual machine*, so that you can access it directly from your laboratory workstation. 344 | 345 | 1. Select ***Associate Floating IP*** from the *Create Snapshot* dropdown menu, just below the *Actions* tab: 346 |

OpenStack Running State.

347 | 1. From the *Manage Floating IP Associations* dialog box, click the "➕" and select *publicnet*: 348 |

OpenStack Running State.

349 | 1. Select the `154.114.57.*` IP address allocated and click on the *Associate* button. 350 |

OpenStack Running State.

351 | 352 | ## Troubleshooting 353 | 354 | > [!CAUTION] 355 | > The following section is strictly for debugging and troubleshooting purposes. You **MUST** discuss your circumstances with an instructor before proceeding with this section. If you have successfully launched your head node, proceed to the [Intro on Basic Sys Admin](#introduction-to-basic-linux-administration). 356 | 357 | * Deleting Instances 358 | - When all else fails and you would like to reattempt the creation of your nodes from a clean start, Select the VM you want to remove and click `Delete Instance` from the drop down menu. 359 | - Occasionally you may find yourself accidentally deleting a VM instance. Do not despair, by default `no` is selected on `Delete Volume on Instance Delete` this will leave your storage `volume` intact and you can recover it by launching a new instance from the `volume`. Details will be provided later in [Tutorial 3](#spinning-up-a-second-compute-node). 360 |

OpenStack Instance flavor.

361 | 362 | * Deleting Volumes 363 | 364 | When a VM's storage `volume` lingers behind after intentionally deleting a VM, you will need to go to manually remove the volume from your work space. 365 |

OpenStack Instance flavor.

366 | 367 | * Dissociating Floating IP 368 | 369 | If your VM is deleted then the floating IP associated with that deleted VM will stay in your project under `Networks -> Floating IPs` for future use. Should you accidentally associate your floating IP to one of your compute nodes, dissociate it as per the diagram below, so that it may be allocated to your head node. Selecting the floating IP and clicking `Release Floating IPs` will send the floating IP back to the pool and you can call a tutor to help you get back your IP. 370 |

OpenStack Instance flavor.

371 | 372 | # Introduction to Basic Linux Administration 373 | 374 | If you've managed to successfully build and deploy your VM instance, and you managed to successfully associate and attach a floating IP bridged over your internal interface, you are finally ready to connect to your newly created instance. 375 | 376 | ## Accessing your VM Using SSH vs the OpenStack Web Console (VNC) 377 | 378 | The VMs are running minimalist, cloud-based operating systems that are not packaged with a graphical desktop environment. You are required to interact with the VM instance using text prompts, through a [Command-Line Interface (CLI)](https://en.wikipedia.org/wiki/Command-line_interface). By design for security reasons, the cloud images are only accessible via SSH after instantiating a VM. Once you have successfully logged into your instance, you may change the password so as to enable you to make use of the [VNC Console](https://en.wikipedia.org/wiki/Virtual_Network_Computing). 379 | 380 | > [!NOTE] 381 | > You will require the **PATH** to the private SSH key that you have previously [generated](#generating-ssh-keys), as well as the Floating IP address [associated](#associating-an-externally-Accessible-ip-address) to your VM. Depending on the specific distribution your Team chose to implement for your Head Node, the ***default username** will vary accordingly. 382 | 383 | * SSH Through a Linux Terminal, MobaXTerm or Windows PowerShell 384 | 385 | If your workstation or laptop is running a Linux-based or macOS operating system, or a version of Windows with MobaXTerm or Windows PowerShell, then you may proceed using a terminal. Most Linux and macOS distributions come preshipped with an SSH client included via `OpenSSH`. 386 | 387 | > [!NOTE] 388 | > In an Alma Linux cloud image, the default login account is **alma**. 389 | 390 | ```bash 391 | ssh -i ~/.ssh/id_ed25519 alma@154.114.57. 392 | ``` 393 | 394 | > [!NOTE] 395 | > In an Arch Linux cloud image, the default login account is **arch**. 396 | 397 | ```bash 398 | ssh -i ~/.ssh/id_ed25519 arch@154.114.57. 399 | ``` 400 | 401 | > [!NOTE] 402 | > In a CentOS Linux cloud image, the default login account is **centos**. 403 | 404 | ```bash 405 | ssh -i ~/.ssh/id_ed25519 centos@154.114.57. 406 | ``` 407 | 408 | > [!NOTE] 409 | > In a Rocky Linux cloud image, the default login account is **rocky**. 410 | 411 | ```bash 412 | ssh -i ~/.ssh/id_ed25519 rocky@154.114.57. 413 | ``` 414 | 415 | > [!NOTE] 416 | > In an Ubuntu Linux cloud image, the default login account is **ubuntu**. 417 | 418 | ```bash 419 | ssh -i ~/.ssh/id_ed25519 ubuntu@154.114.57. 420 | ``` 421 | 422 | > [!TIP] 423 | > The "~" in `~/.ssh/id_ed25519` is a shortcut for `/home/`. Secondly, the first time you connect to a new SSH server, you will be prompted to confirm the authenticity of the host. Type 'yes' and hit 'Enter' 424 | 425 |

OpenStack Running State.

426 | 427 |
428 | Windows PuTTY 429 | 430 | If your workstation or laptop is running Windows, then you may proceed using either Windows PowerShell above *(preferred)* or PuTTY. Use PuTTY only if Windows PowerShell is not available on your current system. 431 | 432 | 1. Launch the PuTTY application and from the *Session* category, enter your `` 433 |

OpenStack Running State.

434 | 1. From the *Connection* → *Data* category, enter your `` 435 |

OpenStack Running State.

436 | 1. From the *Connection* → *SSH* → *Auth* → *Credentials* category, select `Browse` and navigate to the path where your private key is located: 437 |

OpenStack Running State.

438 | 439 |
440 | 441 | * Username and Password 442 | 443 | Once you've successfully logged into your head node VM, you are encouraged to setup your password login as a fail safe in case your SSH keys are giving issue, you may also access your head node through the OpenStack VNC console interface. 444 | 445 | ```bash 446 | sudo passwd 447 | ``` 448 | 449 |

OpenStack VNC.

450 | 451 | > [!CAUTION] 452 | > Setting up a password for any user *- especially the default user -* may make your VM's vulnerable to [Brute Force SSH Attacks](https://helpcenter.trendmicro.com/en-us/article/tmka-19689) if you enable password SSH authentication. 453 | 454 | ## Running Basic Linux Commands and Services 455 | 456 | Once logged into your head node, you can now make use of the [previously discussed basic networking commands](#terminal-mobaxterm-and-windows-powershell-commands): `ip a`, `ping`, `ip route` and `tracepath`, refer to [Discussion on GitHub](https://github.com/chpc-tech-eval/chpc24-scc-nmu/discussions/48) for example out, and to also post your screenshots as comments. 457 | 458 | Here is a list of further basic Linux / Unix commands that you must familiarize yourselves and become comfortable with in order to be successful in the competition. 459 | 460 | * Manual Pages `man`: On Linux systems, information about commands can be found in a manual page. This document is accessible via a command called `man` short term for manual page. For example, try running `man sudo`, scroll up and down then press `q` to exit the page. 461 | 462 | * The `-h` Switch: You can make use of the `--help or -h` flag to see which options are available for a specific command. Similarly, to the above, try running `sudo -h` 463 | 464 | * Piping and Console Redirection 465 | 466 | `>` replaces the content of an output file with all input content 467 | `>>` appends the input content to the end of the output file. 468 | 469 | For example to create a file called `students.txt` and add a name to the file, use: 470 | ```bash 471 | # You can create new files using the `touch` command or the `>` redirect. 472 | touch students.txt 473 | echo "zama" >> students.txt 474 | echo "" >> students.txt 475 | echo "zama lecturer" >> students.txt 476 | echo "> students.txt 477 | ``` 478 | 479 | Pipe `|` through `grep` can be used when searching the content of the file, if it exist it will be printed on the screen, if the search does not exist nothing will show on the screen. 480 | ```bash 481 | cat students.txt 482 | cat students.txt | grep "zama" 483 | ``` 484 | 485 | * Reading and Editing Documents: Linux systems administration essentially involves file manipulation. [Everything in a Linux is a file](https://en.wikipedia.org/wiki/Everything_is_a_file). Familiarize yourself with the basic use of `nano`. 486 | 487 | * The GNU `history` command shows all commands you have executed so far, the feedback is numbered, use `!14` to rerun the 14th command. 488 | 489 | Make sure that you try some of these commands to familiarize yourself and become comfortable with the Linux terminal shell and command line. You can find sample outputs and are strongly encouraged to post your teams screenshots of at least one of the above commands on the [Discussion Page on GitHub](https://github.com/chpc-tech-eval/chpc24-scc-nmu/discussions/49). 490 | 491 | * Understanding `journalctl` and `systemctl` 492 | 493 | Both `journalctl` and `systemctl` are two powerful command-line utilities used to manage and view system logs and services on Linux systems, respectively. Both are part of the systemd suite, which is used for system and service management. 494 | * `journalctl` is used to query and display logs from the journal, which is a component of systemd that provides a centralized location for logging messages generated by the `system` and services. 495 | * `systemctl` is used to examine and control the `systemd` system and service manager. It provides commands to start, stop, restart, enable, disable, and check the status of services, among other functionalities. 496 | 497 | For example to query the status of the `systemd-networkd` daemon / service, use: 498 | ```bash 499 | sudo systemctl status systemd-networkd 500 | ``` 501 | 502 | Verify some of your system's configuration settings and post a screenshot as a comment to this [Discussion Page on GitHub](https://github.com/chpc-tech-eval/chpc24-scc-nmu/discussions/56). 503 | 504 | > [!CAUTION] 505 | > It is **CRITICAL** that you are always aware and sure which node or server your are working on. As you can see in the examples above, you can run *similar* commands in a Linux terminal on your workstation, on the console prompt of your head node, and as you will see later, on the console prompt of your compute node. 506 | 507 | # Linux Binaries, Libraries and Package Management 508 | 509 | Understanding Linux binaries, libraries, and package managers is crucial for effective software development and system management on Linux systems. 510 | 511 | > [!NOTE] 512 | > The following discussion around the concepts of binaries and libraries does not need to be fully understood at this stage and will be covered in more detail in later tutorials and lectures. 513 | 514 | * **Binaries** are executable files created from source code, often written in languages like C or C++, through a process called compilation. These files contain machine code that the operating system can execute directly. 515 | * **Executable Files**: These are typically found in directories like `/bin`, `/sbin`, `/usr/bin`, and `/usr/sbin`. 516 | * **Shared Libraries**: These are files containing code that can be shared by multiple programs. They usually have extensions like `.so` (shared object) and are found in directories like `/lib` and `/usr/lib`. 517 | 518 | * **Libraries** provide a way to share code among multiple programs to avoid redundancy and ease maintenance. They come in two main types: 519 | * **Static Libraries (`.a` files)** are linked into the executable at compile time, resulting in a larger binary. Do not require the library to be present at runtime. 520 | * **Shared (Dynamic) Libraries (.so files)** are linked at runtime, reducing the binary size. The executable will need the shared library to be present on the system at runtime. 521 | 522 | * **Package Managers** are tools that automate the process of installing, updating, configuring, and removing software packages. They handle dependencies and ensure that software components are properly integrated into the system. 523 | * **Repositories** are online servers storing software packages. Package managers download packages from these repositories. 524 | * **Dependencies** are binaries, libraries or other packages that software depends on to function correctly. Package managers resolve, install and remove dependencies automatically. 525 | 526 | From this point onward, you're going to need to pay extra attention to the commands that have been issued and you must ensure that they correspond to the distribution that you are using. 527 | 528 | > [!WARNING] 529 | > Do not try to type the following arbitrary commands into your head node's terminal. They are merely included here for illustration purposes. 530 | 531 | * DNF / YUM 532 | ```bash 533 | # RHEL, Alma, Rocky, Centos 534 | # You are strongly recommended to use one of the distros mentioned above. 535 | # This will always be the first example use case given for any scenario and 536 | # the recommended approach to follow 537 | 538 | sudo dnf update 539 | sudo dnf install 540 | sudo dnf remove 541 | ``` 542 | * APT-based systems 543 | ```bash 544 | 545 | # Ubuntu 546 | # Another really good choice and strong recommendation to adopt is Ubuntu. 547 | # Ubuntu has many users, and many first time Linux users, start their 548 | # journeys into Linux through APT (or Ubuntu) based distros. 549 | # Moreover Ubuntu has it's origins in South Africa... 550 | 551 | sudo apt update 552 | sudo apt install 553 | sudo apt remove 554 | ``` 555 | * Pacman-based systems 556 | ```bash 557 | 558 | # Arch-Like Linux 559 | # Arch Linux is one of the most "flexible and succinct" Linux distros 560 | # available today. It popularity stems not only from the fact that is has 561 | # excellent documentation, but it's "keep it straight and simple" approach. 562 | # Not recommend for beginners, unless you have previous Linux expertise or 563 | # unless you are looking for a challenge. 564 | 565 | sudo pacman -Syu 566 | sudo pacman -S 567 | sudo pacman -R 568 | ``` 569 | 570 | ## User Environment and the `PATH` Variable 571 | 572 | Understanding the user environment and the `PATH` variable is crucial for effective command-line operations and software management on Linux systems. The user environment in Linux refers to the collection of settings and variables that define how the system behaves for a user. These settings include environment variables, configuration files, and shell settings. 573 | ```bash 574 | # For example, to view the `USER` and `HOME` variables 575 | echo $USER 576 | echo $HOME 577 | ``` 578 | 579 | The `PATH` variable is one of the most important environment variables. It specifies a list of directories that the shell searches to find executable files for commands. When you type a command in the terminal, the shell looks for an executable file with that name in the directories listed in `PATH`. 580 | ``` 581 | # View the contents of your PATH variable 582 | echo $PATH 583 | 584 | # List the contents of your HOME directory 585 | ls $HOME 586 | 587 | # Find the location of the ls command 588 | which ls 589 | ``` 590 | 591 | # Install, Compile and Run High Performance LinPACK (HPL) Benchmark 592 | 593 | HPL is a crucial tool in the HPC community for benchmarking and comparing the performance of supercomputing systems. The benchmark is a software package designed to solve a dense system of linear equations using double-precision floating-point arithmetic. It is commonly used to measure the performance of supercomputers, providing a standardized way to assess their computational power. 594 | 595 | You will now install and run HPL on your **head node**. 596 | 597 | > [!WARNING] 598 | > You are advised to skip this section if you have fallen behind the pace recommended by the course coordinators. Skipping this section will *NOT* stop you from completing the remainder of the tutorials. You will be repeating this exercise during tutorial 3. 599 | > 600 | > However, familiarizing yourselves with this material now, will make things easier for you and your team in the subsequent tutorials and their respective sections. 601 | 602 | 1. Update the system and install dependencies 603 | 604 | You are going to be installing tools that will allow you to compile applications using the `make` command. You will also be installing a maths library to compute matrix multiplications, and an `mpi` library for communication between processes, in this case mapped to CPU cores. 605 | * DNF / YUM 606 | ```bash 607 | # RHEL, Rocky, Alma, Centos Steam 608 | sudo dnf update -y 609 | sudo dnf install openmpi atlas openmpi-devel atlas-devel -y 610 | sudo dnf install wget nano -y 611 | ``` 612 | * APT 613 | ```bash 614 | # Ubuntu 615 | sudo apt update 616 | sudo apt install build-essential openmpi-bin libopenmpi-dev libatlas-base-dev 617 | ``` 618 | * Pacman 619 | ```bash 620 | # Arch 621 | sudo pacman -Syu 622 | sudo pacman -S base-devel openmpi atlas-lapack nano wget 623 | ``` 624 | 1. Fetch the HPL source files 625 | 626 | You will download the HPL source files. This is why you installed `wget` in the previous step. 627 | ```bash 628 | # Download the source files 629 | wget http://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz 630 | 631 | # Extract the files from the tarball 632 | tar -xzf hpl-2.3.tar.gz 633 | 634 | # Move and go into the newly extracted folder 635 | mv hpl-2.3 ~/hpl 636 | cd ~/hpl 637 | 638 | # list the contents of the folder 639 | ls 640 | ``` 641 | 1. Configure HPL 642 | 643 | Copy and edit your own `Make.` file in the `hpl` directory to suit your system configuration. 644 | ```bash 645 | cp setup/Make.Linux_PII_CBLAS_gm Make. 646 | nano Make. 647 | ``` 648 | 649 | You need to carefully edit your `Make.` file, ensuring that you make the following changes: 650 | * RHEL, Rocky, Alma, CentOS Stream based systems 651 | ```conf 652 | ARCH = 653 | 654 | MPdir = /usr/lib64/openmpi 655 | 656 | LAdir = /usr/lib64/atlas 657 | LAlib = $(LAdir)/libtatlas.so $(LAdir)/libsatlas.so 658 | 659 | CC = mpicc 660 | 661 | LINKER = mpicc 662 | ``` 663 | * Ubuntu based systems 664 | ```conf 665 | ARCH = 666 | 667 | MPdir = /usr/lib/x86_64-linux-gnu/openmpi 668 | 669 | LAdir = /usr/lib/x86_64-linux-gnu/atlas/ 670 | LAlib = $(LAdir)/libblas.so $(LAdir)/liblapack.so 671 | 672 | CC = mpicc 673 | 674 | LINKER = mpicc 675 | ``` 676 | 677 | 1. Temporarily edit your `PATH` variable 678 | 679 | You are almost ready to compile HPL, you will need to modify your path variable in order for your MPI C Compiler `mpicc` to be a recognized binary. 680 | Check to see if `mpicc` is currently detected: 681 | ```bash 682 | # The following command will return a command not found error. 683 | which mpicc 684 | 685 | # Temporarily append openmpi binary path to your PATH variable 686 | # These settings will reset after you logout and re-login again. 687 | export PATH=/usr/lib64/openmpi/bin:$PATH 688 | 689 | # Rerun the which command to confirm that the `mpicc` binary is found 690 | which mpicc 691 | ``` 692 | 1. Compile HPL 693 | 694 | You are finally ready to compile HPL. Should you encounter any errors and need to make adjustments and changes, first run a `make clean arch=`. 695 | ```bash 696 | make arch= 697 | 698 | # Confirm that your `xhpl` binary has been successfully built 699 | ls bin/ 700 | ``` 701 | 702 | 1. Configure your `HPL.dat` 703 | 704 | Make the following changes to your `HPL.dat` file: 705 | ```bash 706 | cd bin/ 707 | nano HPL.dat 708 | ``` 709 | 710 | Carefully edit you `HPL.dat` file and verify the following changes: 711 | ```conf 712 | 1 # of process grids (P x Q) 713 | 1 Ps 714 | 1 Qs 715 | ``` 716 | 1. Running HPL on a Single CPU 717 | 718 | For now, you will be running HPL on your head node, on a single CPU. Later you will learn how to run HPL over multiple CPUs, each with multiple cores, across multiple nodes... 719 | ```bash 720 | # Excute the HPL binary 721 | ./xhpl 722 | ``` 723 | 724 | > [!TIP] 725 | > Note that when you want to configure and recompile HPL for different architectures, compilers and systems, adapt and the `Make.` and recompile that architecture or configuration. 726 | > 727 | > If you compile fails and you would like to try to fix your errors and recompile, you must ensure that you reset to a clean start with `make clean`. 728 | 729 | Congratulations! 730 | 731 | You have successfully completed you first HPL benchmark. 732 | -------------------------------------------------------------------------------- /tutorial1/resources/Contemporary_Computer_Lab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/Contemporary_Computer_Lab.jpg -------------------------------------------------------------------------------- /tutorial1/resources/Mobile-networks-Telkom-Vodacom-MTN-Cell-C.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/Mobile-networks-Telkom-Vodacom-MTN-Cell-C.jpg -------------------------------------------------------------------------------- /tutorial1/resources/SCC-tut1-fig1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/SCC-tut1-fig1.png -------------------------------------------------------------------------------- /tutorial1/resources/VNC_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/VNC_icon.png -------------------------------------------------------------------------------- /tutorial1/resources/WIOCC-EASSy-WACS-EIG-map.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/WIOCC-EASSy-WACS-EIG-map.jpg -------------------------------------------------------------------------------- /tutorial1/resources/android_networking_info.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/android_networking_info.jpeg -------------------------------------------------------------------------------- /tutorial1/resources/append.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/append.png -------------------------------------------------------------------------------- /tutorial1/resources/browser-15og.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browser-15og.jpg -------------------------------------------------------------------------------- /tutorial1/resources/browsing_internet.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browsing_internet.odg -------------------------------------------------------------------------------- /tutorial1/resources/browsing_internet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browsing_internet.pdf -------------------------------------------------------------------------------- /tutorial1/resources/browsing_internet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browsing_internet.png -------------------------------------------------------------------------------- /tutorial1/resources/browsing_internet_dark.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browsing_internet_dark.odg -------------------------------------------------------------------------------- /tutorial1/resources/browsing_internet_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browsing_internet_dark.png -------------------------------------------------------------------------------- /tutorial1/resources/browsing_internet_dark.png.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browsing_internet_dark.png.odg -------------------------------------------------------------------------------- /tutorial1/resources/browsing_internet_light.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browsing_internet_light.odg -------------------------------------------------------------------------------- /tutorial1/resources/browsing_internet_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/browsing_internet_light.png -------------------------------------------------------------------------------- /tutorial1/resources/cat_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/cat_command.png -------------------------------------------------------------------------------- /tutorial1/resources/cell_tower.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/cell_tower.jpg -------------------------------------------------------------------------------- /tutorial1/resources/chat_install_nano_on_linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/chat_install_nano_on_linux.png -------------------------------------------------------------------------------- /tutorial1/resources/chatgpt_text_editors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/chatgpt_text_editors.png -------------------------------------------------------------------------------- /tutorial1/resources/chrony_clients.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/chrony_clients.png -------------------------------------------------------------------------------- /tutorial1/resources/dns-servers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/dns-servers.png -------------------------------------------------------------------------------- /tutorial1/resources/dns_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/dns_info.png -------------------------------------------------------------------------------- /tutorial1/resources/eastern_cape.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/eastern_cape.jpg -------------------------------------------------------------------------------- /tutorial1/resources/google_headquarters.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/google_headquarters.jpg -------------------------------------------------------------------------------- /tutorial1/resources/google_search_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/google_search_page.png -------------------------------------------------------------------------------- /tutorial1/resources/google_webpage_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/google_webpage_light.png -------------------------------------------------------------------------------- /tutorial1/resources/head_node_basic_networking_commands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/head_node_basic_networking_commands.png -------------------------------------------------------------------------------- /tutorial1/resources/headnode_hostname_status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/headnode_hostname_status.png -------------------------------------------------------------------------------- /tutorial1/resources/headnode_journalctl_sshd_brute_force.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/headnode_journalctl_sshd_brute_force.png -------------------------------------------------------------------------------- /tutorial1/resources/headnode_resolv_status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/headnode_resolv_status.png -------------------------------------------------------------------------------- /tutorial1/resources/headnode_systemd-networkd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/headnode_systemd-networkd.png -------------------------------------------------------------------------------- /tutorial1/resources/headnode_systemd_resolved.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/headnode_systemd_resolved.png -------------------------------------------------------------------------------- /tutorial1/resources/history_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/history_command.png -------------------------------------------------------------------------------- /tutorial1/resources/ip a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/ip a.png -------------------------------------------------------------------------------- /tutorial1/resources/iphone_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/iphone_image.png -------------------------------------------------------------------------------- /tutorial1/resources/ips_openstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/ips_openstack.png -------------------------------------------------------------------------------- /tutorial1/resources/kisspng-computer-icons-wi-fi-internet-computer-network-cli-wifi-icon-5b4c03cc230324.4271102915317083641434.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/kisspng-computer-icons-wi-fi-internet-computer-network-cli-wifi-icon-5b4c03cc230324.4271102915317083641434.png -------------------------------------------------------------------------------- /tutorial1/resources/kisspng-signal-strength-in-telecommunications-mobile-phone-5b156cf632da28.9700360515281308062083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/kisspng-signal-strength-in-telecommunications-mobile-phone-5b156cf632da28.9700360515281308062083.png -------------------------------------------------------------------------------- /tutorial1/resources/kisspng-wi-fi-computer-icons-encapsulated-postscript-5afd94ae4a2736.7211633215265681103037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/kisspng-wi-fi-computer-icons-encapsulated-postscript-5afd94ae4a2736.7211633215265681103037.png -------------------------------------------------------------------------------- /tutorial1/resources/kisspng-wi-fi-iphone-6s-signal-wireless-internet-5c0f3a79e4fb44.5247840315445018819379.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/kisspng-wi-fi-iphone-6s-signal-wireless-internet-5c0f3a79e4fb44.5247840315445018819379.png -------------------------------------------------------------------------------- /tutorial1/resources/less_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/less_command.png -------------------------------------------------------------------------------- /tutorial1/resources/linux_basic_networking_checking_networkd_service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/linux_basic_networking_checking_networkd_service.png -------------------------------------------------------------------------------- /tutorial1/resources/linux_basic_networking_checking_resolv_service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/linux_basic_networking_checking_resolv_service.png -------------------------------------------------------------------------------- /tutorial1/resources/linux_basic_networking_checking_resolvconf_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/linux_basic_networking_checking_resolvconf_file.png -------------------------------------------------------------------------------- /tutorial1/resources/linux_basics_hostname.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/linux_basics_hostname.png -------------------------------------------------------------------------------- /tutorial1/resources/linux_terminal_network_basics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/linux_terminal_network_basics.png -------------------------------------------------------------------------------- /tutorial1/resources/mac_openstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/mac_openstack.png -------------------------------------------------------------------------------- /tutorial1/resources/man_sudo_feedback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/man_sudo_feedback.png -------------------------------------------------------------------------------- /tutorial1/resources/network-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/network-diagram.png -------------------------------------------------------------------------------- /tutorial1/resources/networking.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/networking.jpg -------------------------------------------------------------------------------- /tutorial1/resources/openstack_added_floating_ip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_added_floating_ip.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_associate_floating_ip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_associate_floating_ip.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_import_public_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_import_public_key.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_import_public_key_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_import_public_key_highlight.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_instance_flavor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_instance_flavor.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_key_pair_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_key_pair_select.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_launch_instance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_launch_instance.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_launch_instance_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_launch_instance_highlight.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_login.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_networks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_networks.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_overview.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_public_net.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_public_net.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_running.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_security_groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_security_groups.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_source_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_source_image.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_troubleshooting_delete_instance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_troubleshooting_delete_instance.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_troubleshooting_delete_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_troubleshooting_delete_volume.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_troubleshooting_dissociate_float_ip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_troubleshooting_dissociate_float_ip.png -------------------------------------------------------------------------------- /tutorial1/resources/openstack_vnc_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/openstack_vnc_access.png -------------------------------------------------------------------------------- /tutorial1/resources/replaces.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/replaces.png -------------------------------------------------------------------------------- /tutorial1/resources/rerun_command_from_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/rerun_command_from_history.png -------------------------------------------------------------------------------- /tutorial1/resources/search_commands_grep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/search_commands_grep.png -------------------------------------------------------------------------------- /tutorial1/resources/sudo_with-h_flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/sudo_with-h_flag.png -------------------------------------------------------------------------------- /tutorial1/resources/uct.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/uct.jpg -------------------------------------------------------------------------------- /tutorial1/resources/whatismyip_cell.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/whatismyip_cell.odg -------------------------------------------------------------------------------- /tutorial1/resources/whatismyip_cell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/whatismyip_cell.png -------------------------------------------------------------------------------- /tutorial1/resources/whatismyip_hotspot.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/whatismyip_hotspot.odg -------------------------------------------------------------------------------- /tutorial1/resources/whatismyip_hotspot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/whatismyip_hotspot.png -------------------------------------------------------------------------------- /tutorial1/resources/whatismyip_wifi.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/whatismyip_wifi.odg -------------------------------------------------------------------------------- /tutorial1/resources/whatismyip_wifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/whatismyip_wifi.png -------------------------------------------------------------------------------- /tutorial1/resources/windows_powershell_firsttime_ssh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/windows_powershell_firsttime_ssh.png -------------------------------------------------------------------------------- /tutorial1/resources/windows_powershell_sshkeygen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/windows_powershell_sshkeygen.png -------------------------------------------------------------------------------- /tutorial1/resources/windows_putty_enter_headnode_ip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/windows_putty_enter_headnode_ip.png -------------------------------------------------------------------------------- /tutorial1/resources/windows_putty_enter_private_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/windows_putty_enter_private_key.png -------------------------------------------------------------------------------- /tutorial1/resources/windows_putty_username.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/windows_putty_username.png -------------------------------------------------------------------------------- /tutorial1/resources/windows_puttygen_generate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/windows_puttygen_generate.png -------------------------------------------------------------------------------- /tutorial1/resources/windows_puttygen_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial1/resources/windows_puttygen_save.png -------------------------------------------------------------------------------- /tutorial2/resources/:etc:hosts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/:etc:hosts.png -------------------------------------------------------------------------------- /tutorial2/resources/Selection_175.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/Selection_175.png -------------------------------------------------------------------------------- /tutorial2/resources/ansible_create_user_run_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ansible_create_user_run_result.png -------------------------------------------------------------------------------- /tutorial2/resources/ansible_individual_host_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ansible_individual_host_access.png -------------------------------------------------------------------------------- /tutorial2/resources/ansible_ping_feedback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ansible_ping_feedback.png -------------------------------------------------------------------------------- /tutorial2/resources/ansible_ping_servers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ansible_ping_servers.png -------------------------------------------------------------------------------- /tutorial2/resources/ansible_run_command_on_hosts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ansible_run_command_on_hosts.png -------------------------------------------------------------------------------- /tutorial2/resources/ansible_team_lead_user_verification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ansible_team_lead_user_verification.png -------------------------------------------------------------------------------- /tutorial2/resources/apache_default_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/apache_default_page.png -------------------------------------------------------------------------------- /tutorial2/resources/cdexample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/cdexample.png -------------------------------------------------------------------------------- /tutorial2/resources/compute_node_basic_networking_commands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/compute_node_basic_networking_commands.png -------------------------------------------------------------------------------- /tutorial2/resources/cpexamble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/cpexamble.png -------------------------------------------------------------------------------- /tutorial2/resources/etchost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/etchost.png -------------------------------------------------------------------------------- /tutorial2/resources/firefox_proxy_option.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/firefox_proxy_option.png -------------------------------------------------------------------------------- /tutorial2/resources/freeipa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/freeipa.png -------------------------------------------------------------------------------- /tutorial2/resources/generate_key_and_ssh_into_compute_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/generate_key_and_ssh_into_compute_node.png -------------------------------------------------------------------------------- /tutorial2/resources/history_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/history_command.png -------------------------------------------------------------------------------- /tutorial2/resources/hn.nft: -------------------------------------------------------------------------------- 1 | table inet hn_table { 2 | chain hn_output { 3 | type filter hook output priority filter; policy accept; 4 | } 5 | 6 | chain hn_tcp_chain { 7 | tcp dport 22 accept 8 | } 9 | 10 | chain hn_udp_chain { 11 | } 12 | 13 | chain hn_input { 14 | type filter hook input priority filter; policy drop; 15 | ct state established,related accept 16 | iif "lo" accept 17 | ct state invalid drop 18 | meta l4proto ipv6-icmp accept 19 | meta l4proto icmp accept 20 | ip protocol igmp accept 21 | meta l4proto udp ct state new jump hn_udp_chain 22 | tcp flags syn / fin,syn,rst,ack ct state new jump hn_tcp_chain 23 | meta l4proto udp reject 24 | meta l4proto tcp reject with tcp reset 25 | counter reject 26 | } 27 | 28 | chain hn_forward { 29 | type filter hook forward priority filter; policy drop; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /tutorial2/resources/home_dir_mounted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/home_dir_mounted.png -------------------------------------------------------------------------------- /tutorial2/resources/hostnamechange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/hostnamechange.png -------------------------------------------------------------------------------- /tutorial2/resources/htopcommand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/htopcommand.png -------------------------------------------------------------------------------- /tutorial2/resources/install_tmux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/install_tmux.png -------------------------------------------------------------------------------- /tutorial2/resources/ipaforeth0interface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ipaforeth0interface.png -------------------------------------------------------------------------------- /tutorial2/resources/ls_uid_different.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ls_uid_different.png -------------------------------------------------------------------------------- /tutorial2/resources/lsdirectory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/lsdirectory.png -------------------------------------------------------------------------------- /tutorial2/resources/mvcommandexample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/mvcommandexample.png -------------------------------------------------------------------------------- /tutorial2/resources/nfs_cat_pub_key_authorized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/nfs_cat_pub_key_authorized.png -------------------------------------------------------------------------------- /tutorial2/resources/nsible_ping_servers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/nsible_ping_servers.png -------------------------------------------------------------------------------- /tutorial2/resources/ntp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ntp.png -------------------------------------------------------------------------------- /tutorial2/resources/ntp_clients.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ntp_clients.png -------------------------------------------------------------------------------- /tutorial2/resources/ntp_source_for_compute_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ntp_source_for_compute_node.png -------------------------------------------------------------------------------- /tutorial2/resources/openstack_hostsfile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/openstack_hostsfile.png -------------------------------------------------------------------------------- /tutorial2/resources/openstack_verify_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/openstack_verify_network.png -------------------------------------------------------------------------------- /tutorial2/resources/openstack_vnc_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/openstack_vnc_access.png -------------------------------------------------------------------------------- /tutorial2/resources/rerun_command_from_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/rerun_command_from_history.png -------------------------------------------------------------------------------- /tutorial2/resources/rmcommand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/rmcommand.png -------------------------------------------------------------------------------- /tutorial2/resources/rmcommandexample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/rmcommandexample.png -------------------------------------------------------------------------------- /tutorial2/resources/selectSetting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/selectSetting.png -------------------------------------------------------------------------------- /tutorial2/resources/sock5proxysettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/sock5proxysettings.png -------------------------------------------------------------------------------- /tutorial2/resources/ssh_bruteforce_attacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ssh_bruteforce_attacks.png -------------------------------------------------------------------------------- /tutorial2/resources/ssh_compute_node_passwd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ssh_compute_node_passwd.png -------------------------------------------------------------------------------- /tutorial2/resources/ssh_example.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ssh_example.avif -------------------------------------------------------------------------------- /tutorial2/resources/ssh_into_compute_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ssh_into_compute_node.png -------------------------------------------------------------------------------- /tutorial2/resources/ssh_keygen_login_compute_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/ssh_keygen_login_compute_node.png -------------------------------------------------------------------------------- /tutorial2/resources/sshkeygen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/sshkeygen.png -------------------------------------------------------------------------------- /tutorial2/resources/tmux_btop_htop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/tmux_btop_htop.png -------------------------------------------------------------------------------- /tutorial2/resources/tmux_running_htop_btop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/tmux_running_htop_btop.png -------------------------------------------------------------------------------- /tutorial2/resources/tmux_ssh_run_tops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/tmux_ssh_run_tops.png -------------------------------------------------------------------------------- /tutorial2/resources/tut2_fig_part1_ssh_tunnel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/tut2_fig_part1_ssh_tunnel.png -------------------------------------------------------------------------------- /tutorial2/resources/zerotier-networks-empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/zerotier-networks-empty.png -------------------------------------------------------------------------------- /tutorial2/resources/zerotier_auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/zerotier_auth.png -------------------------------------------------------------------------------- /tutorial2/resources/zerotier_new_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial2/resources/zerotier_new_network.png -------------------------------------------------------------------------------- /tutorial3/README.md: -------------------------------------------------------------------------------- 1 | Student Cluster Competition - Tutorial 3 2 | 3 | ## Table of Contents 4 | 5 | 6 | 7 | 1. [Checklist](#checklist) 8 | 1. [Managing Your Environment](#managing-your-environment) 9 | 1. [NFS Mounted Shared `home` folder and the `PATH` Variable](#nfs-mounted-shared-home-folder-and-the-path-variable) 10 | 1. [Install Lmod](#install-lmod) 11 | 1. [Lmod Usage](#lmod-usage) 12 | 1. [Running the High Performance LINPACK (HPL) Benchmark on Your Compute Node](#running-the-high-performance-linpack-hpl-benchmark-on-your-compute-node) 13 | 1. [System Libraries](#system-libraries) 14 | 1. [Configure and Run HPL on Compute Node](#configure-and-run-hpl-on-compute-node) 15 | 1. [Building and Compiling OpenBLAS and OpenMPI Libraries from Source](#building-and-compiling-openblas-and-openmpi-libraries-from-source) 16 | 1. [Intel oneAPI Toolkits and Compiler Suite](#intel-oneapi-toolkits-and-compiler-suite) 17 | 1. [Configure and Install Intel oneAPI Base and HPC Toolkits](#configure-and-install-intel-oneapi-base-and-hpc-toolkits) 18 | 1. [Configuring and Running HPL with Intel oneAPI Toolkit and MKL](#configuring-and-running-hpl-with-intel-oneapi-toolkit-and-mkl) 19 | 1. [LinPACK Theoretical Peak Performance](#linpack-theoretical-peak-performance) 20 | 1. [Top500 List](#top500-list) 21 | 1. [Spinning Up a Second Compute Node Using a Snapshot](#spinning-up-a-second-compute-node-using-a-snapshot) 22 | 1. [Running HPL Across Multiple Nodes](#running-hpl-across-multiple-nodes) 23 | 1. [HPC Challenge](#hpc-challenge) 24 | 1. [Application Benchmarks and System Evaluation](#application-benchmarks-and-system-evaluation) 25 | 1. [GROMACS (ADH Cubic)](#gromacs-adh-cubic) 26 | 1. [LAMMPS (Lennard-Jones)](#lammps-lennard-jones) 27 | 1. [Qiskit (Quantum Volume)](#qiskit-quantum-volume) 28 | 29 | 30 | 31 | # Checklist 32 | 33 | Tutorial 3 demonstrates environment variable manipulation through the use of modules and the compilation and optimization of HPC benchmark software. This introduces the reader to the concepts of environment management and workspace sanity, as well as compilation of various software applications on Linux. 34 | 35 | In this tutorial, you will also be _spinning up and connecting a second compute node_ in order to further extend the capabilities of your small VM cluster. More importantly, you will given detailed specifics on exactly how to go about running application benchmarks across multiple nodes. 36 | 37 | In this tutorial you will: 38 | 39 | - [ ] Understand the importance of having a consistent environment across your cluster. 40 | - [ ] Understand the difference between system software and user _(local to the user's `home` directory)_ installed software. 41 | - [ ] Install, configure and use Lmod. 42 | - [ ] Understand some of the fundamental considerations around optimizing HPL. 43 | - [ ] Understand the pros and cons of compiling libraries from source. 44 | - [ ] Install and make use of Intel's oneAPI framework to run HPL. 45 | - [ ] Understand theoretical system peak performance. 46 | - [ ] Appreciate the significance of the Top500 list and benchmarking. 47 | - [ ] Standup and Configure a Second Compute Node, and running applications across a cluster. 48 | - [ ] Download and compile the High Performance Computing Challenge (HPCC) benchmark. 49 | - [ ] Understand that scientific computer applications are primarily used to conduct scientific research, and can also evaluate system performance. 50 | 51 | # Managing Your Environment 52 | 53 | One of the most central and fundamental problems that you and your team will need to tackle, will be that of managing you environment. When you run an application, there are a number of locations that are searched to determine the binary to execute. 54 | 55 | For example, if you wanted to know _"which"_ GNU C Compiler your VM's are using by default: 56 | ```bash 57 | # If you completed the HPL excercise in tutorial1, you would have installed 58 | # a system-wide GCC on your head node, and can expect and out of /usr/bin/gcc 59 | 60 | which gcc 61 | ``` 62 | We see that for this particular system, the `gcc` that will be invoked by default is located in the directory `/usr/bin/`. 63 | 64 | > [!TIP] 65 | > Try the above command on your compute node, and you should notice that `no gcc in $PATH` is found... 66 | 67 | ## NFS Mounted Shared `home` folder and the `PATH` Variable 68 | 69 | You will recall that you were required to configure an [NFS Mounted home dir](../tutorial2/README.md#network-file-system). This means that any software that you install into your `/home/` on your head node, will also automatically be available on your compute nodes. 70 | 71 | In order for this to work as expected, there are two important conditions that must be satisfied: 72 | 1. Firstly, you must ensure that you're `PATH` variable is correctly configured on your head node and must similarly have a corresponding configuration on your compute node(s). For example, to see a colon (`:`) separated list of directories that are searched whenever you execute a binary: 73 | ```bash 74 | echo $PATH 75 | ``` 76 | 1. Secondly, you must ensure that any system dependencies are correctly installed on **each** of your nodes. For example, this would be a good time to install `gcc` on your **compute node**: 77 | ```bash 78 | sudo dnf install gcc 79 | ``` 80 | 81 |
82 | Instructions for APT (Ubuntu) and Pacman (Arch) 83 | 84 | ```bash 85 | # APT 86 | sudo apt install gcc 87 | 88 | # Pacman 89 | sudo pacman -S gcc 90 | ``` 91 |
92 | 93 | > [!IMPORTANT] 94 | > Software on one node will not automatically be installed across all nodes. For example, if you want to monitor the system performance of your head node, you must install and/or run `top # or htop or btop` on your head node. Similarly if you want to do this for your compute node(s), you must install and run the application on all of your compute node(s). 95 | 96 | In the next few sections you will be installing and deploying Lmod across your cluster. You will be configuring, building and compiling Lmod from a directory in your `/home/` directory. This will mean that the Lmod binary will be available across your cluster, however in order to run Lmod on your compute nodes for example, you must ensure that all Lua system dependencies are installed across all you nodes. 97 | 98 | # Install Lmod 99 | 100 | Environment Modules provide a convenient way to dynamically change a user's environment through _modulefiles_ to simplify software and library use when there are multiple versions of a particular software package (e.g. Python2.7 and Python 3.x) installed on the system. Environment Module parameters typically involve, among other things, modifying the `PATH` environment variable for locating a particular package (such as dynamically changing the path to Python from `/usr/local/bin/python2.7` to `/usr/local/bin/python3`). 101 | 102 | In this section, you are going to be building and compiling Lmod from source. Lmod is a Lua-based environment module tool for users to easily manipulate their HPC software environment and is used on thousands of HPC systems around the world. Carefully follow these instructions, as there are prerequisites and dependencies that are required to build Lmod, which are slightly different to those required to execute the Lmod binary. 103 | 104 | > [!IMPORTANT] 105 | > You can build Lmod on either your head node or one of your compute nodes. Since your compute node(s), _will generally speaking_ have **more CPUs for compute**, they will typically be able to build and compile applications much much faster than your administrative (or login) _head node_. 106 | 107 | 1. Install prerequisites required to build Lmod: 108 | From one of your **compute nodes**, install the following dependencies 109 | * DNF / YUM 110 | ```bash 111 | # Rocky (or similar RPM based systems: RHEL, Alma, CentOS Stream) 112 | sudo dnf install -y epel-release 113 | sudo dnf install -y git gcc make 114 | ``` 115 | * APT 116 | ```bash 117 | # Ubuntu (or similar APT based systems) 118 | sudo apt update 119 | sudo apt install -y git gcc make 120 | ``` 121 | * Pacman 122 | ```bash 123 | # Arch 124 | sudo pacman -S git gcc make 125 | ``` 126 | 1. Install dependencies for running and using Lmod: 127 | You will need to install these on all the nodes you intend to use with Lmod 128 | * DNF / YUM 129 | ```bash 130 | # Rocky (or similar RPM based systems: RHEL, Alma, CentOS Stream) 131 | sudo dnf install -y epel-release 132 | sudo dnf install -y tcl-devel tcl tcllib bc 133 | sudo dnf install -y lua lua-posix lua-term 134 | sudo dnf --enable-repo=devel install lua-devel 135 | ``` 136 | * APT 137 | ```bash 138 | # Ubuntu (or similar APT based systems) 139 | sudo apt update 140 | sudo apt install -y tcl tcl-dev lua5.3 lua-posix bc 141 | ``` 142 | * Pacman 143 | ```bash 144 | # Arch 145 | sudo pacman -S lua lua-filesystem lua-posix bc 146 | ``` 147 | 1. Compile, Build and Install Lmod 148 | The following instructions will be the same regardless of the system you are using. You will be using the Lmod repo from the Texas Advanced Computing Center at the University of Texas, to build and compile Lmod from source into your own `home` directory: 149 | ```bash 150 | # Clone the repository 151 | git clone https://github.com/TACC/Lmod.git 152 | 153 | # Navigate into the Lmod directory 154 | cd Lmod 155 | 156 | # Run the configuration script and install into you home directory 157 | ./configure --prefix=$HOME/lmod 158 | 159 | # Build and install Lmod 160 | make -j$(nproc) 161 | make install 162 | 163 | # If you are on Rocky 9.3 and receive an error about "lua.h", 164 | # You can install Lmod from the DNF / YUM package repos. 165 | ``` 166 | 167 | * `--prefix`: This directive instructs the `./configure` command, to install Lmod into a specific directory, where the `$HOME` variable is used as a shortcut for `/home/`. 168 | * `-j$(nproc)`: This directive instructs the `make` command to build and compile use the maximum number of processors on the system. 169 | 170 | > [!TIP] 171 | > You and your team are **STRONGLY** encouraged to review and make sure you understand the Compile, Build and Installation instructions for Lmod as these steps will apply to virtually all application benchmarks you will encounter in this competition. 172 | 173 | ## Lmod Usage 174 | 175 | With Lmod installed, you'll now have some new commands on the terminal. Namely, these are: `module `. The important ones for you to know and use are: `module avail`, `module list`, `module load` and `module unload`. These commands do the following: 176 | 177 | | Command | Operation | 178 | |-------------------------------|------------------------------------------------------| 179 | | `module avail` | Lists all modules that are available to the user. | 180 | | `module list` | Lists all modules that are loaded by the user. | 181 | | `module load ` | Loads a module to the user's environment. | 182 | | `module unload ` | Removes a loaded module from the user's environment. | 183 | 184 | Lmod also features a shortcut command `ml` which can perform all of the above commands: 185 | 186 | | Command | Operation | 187 | |---------------------|---------------------------------------------------| 188 | | `ml` | Same as `module list` | 189 | | `ml avail` | Same as `module avail` | 190 | | `ml ` | Same as `module load ` | 191 | | `ml -` | Same as `module unload ` | 192 | | `ml foo` | Same as `module load foo` | 193 | | `ml foo -bar` | Same as `module load foo` and `module unload bar` | 194 | 195 | > [!NOTE] 196 | > Some installed packages will automatically add environment modules to the Lmod system, while others will not and will require you to manually add definitions for them. For example, the `Intel oneAPI Toolkits` package that we will install from source later in this tutorial will have automatic configuration scripts to add module files to the system for loading via Lmod. 197 | 198 | # Running the High Performance LINPACK (HPL) Benchmark on Your Compute Node 199 | 200 | The High Performance LINPACK (HPL) benchmark is used to measure a system's floating point number processing power. The resulting score (in Floating Point Operations Per Second, or FLOPS for short) is often used to roughly quantify the computational power of an HPC system. HPL requires math libraries to perform its floating point operations as it does not include these by itself and it also requires an MPI installation for communication in order to execute in parallel across multiple CPU cores (and hosts). 201 | 202 | ## System Libraries 203 | 204 | A library is a collection of pre-compiled code that provides functionality to other software. This allows the re-use of common code (such as math operations) and simplifies software development. You get two types of libraries on Linux: `static` and `dynamic` libraries. 205 | 206 | * Static Libraries 207 | 208 | Static libraries are embedded into the binary that you create when you compile your software. In essence, it copies the library that exists on your computer into the executable that gets created at **compilation time**. This means that the resulting program binary is self-contained and can operate on multiple systems without them needing the libraries installed first. Static libraries are normally files that end with the `.a` extension, for "archive". 209 | 210 | Advantages here are that the program can potentially be faster, as it has direct access to the required libraries without having to query the operating system first, but disadavanges include the file size being larger and updating the library requires recompiling (and linking the updated library) the software. 211 | 212 | * Dynamic Libraries 213 | 214 | Dynamic libraries are loaded into a compiled program at **runtime**, meaning that the library that the program needs is **not** embedded into the executable program binary at compilation time. Dynamic libraries are files that normally end with the `.so` extension, for "shared object". 215 | 216 | Advantages here are that the file size can be much smaller and the application doesn't need to be recompiled (linked) when using a different version of the library (as long as there weren't fundamental changes in the library). However, it requires the library to be installed and made available to the program on the operating system. 217 | 218 | > [!NOTE] 219 | > Applications (such as HPL) can be configured to use static or dynamic libraries for its math and MPI communication, as mentioned above. 220 | 221 | * Message Passing Interface (MPI) 222 | 223 | MPI is a message-passing standard used for parallel software communication. It allows for software to send messages between multiple processes. These processes could be on the local computer (think multiple cores of a CPU or multiple CPUs) as well as on networked computers. MPI is a cornerstone of HPC. There are many implementations of MPI in software such as OpenMPI, MPICH, MVAPICH2 and so forth. To find out more about MPI, please read the following: [https://www.linuxtoday.com/blog/mpi-in-thirty-minutes.html](https://www.linuxtoday.com/blog/mpi-in-thirty-minutes.html) 224 | 225 | * Basic Linear Algebra Subprograms Libraries 226 | 227 | Basic Linear Algebra Subprograms (BLAS) libraries provide low-level routines for performing common linear algebra operations such as vector and matrix multiplication. These libraries are highly optimized for performance on various hardware architectures and are a fundamental building block in many numerical computing applications. 228 | 229 | ## Configure and Run HPL on Compute Node 230 | 231 | We need to install the statically `($(LIBdir)/libhpl.a)` and dynamically`($(LAdir)/libtatlas.so $(LAdir)/libsatlas.so)` linked libraries that HPL expects to have, as well as the software for MPI. The MPI implementation we're going to use here is OpenMPI and we will use the Automatically Tuned Linear Algebra Software (ATLAS) math library. 232 | 233 | > [!IMPORTANT] 234 | > Remember that since the MPI and BLAS libraries are dynamically linked, you need to ensure that ALL of our nodes that you expect to run HPL on have the expected MPI and BLAS libraries. 235 | > 236 | > If you've managed to successfully [build, compile and run HPL in tutorial 1]((../tutorial1/README.md#install-compile-and-run-high-performance-linpack-hpl-benchmark)), and you've managed to successfully configure your [NFS `home` directory export in tutorial 2](../tutorial2/README.md##network-file-system), then you may proceed. Otherwise you **must** discuss with, and seek advice from an instructor. 237 | 238 | 1. Install the necessary dependencies on your **compute node**: 239 | * DNF / YUM 240 | ```bash 241 | # RHEL, Rocky, Alma, Centos 242 | sudo dnf update -y 243 | sudo dnf install openmpi atlas openmpi-devel atlas-devel -y 244 | sudo dnf install wget nano -y 245 | ``` 246 | * APT 247 | ```bash 248 | # Ubuntu 249 | sudo apt update 250 | sudo apt install openmpi libatlas-base-dev 251 | sudo apt install wget nano 252 | ``` 253 | * Pacman 254 | ```bash 255 | # Arch 256 | sudo pacman -Syu 257 | sudo pacman -S base-devel openmpi atlas-lapack nano wget 258 | ``` 259 | 260 | 1. Configuring and Tuning HPL 261 | 262 | The `HPL.dat` file (in the same directory as `xhpl`) defines how the HPL benchmark solves a large dense linear array of double precision floating point numbers. Therefore, selecting the appropriate parameters in this file can have a considerable effect on the GFLOPS score that you obtain. The most important parameters are: 263 | * `N` which defines the length of one of the sides of the 2D array to be solved. It follows therefore: 264 | * ***"Problem Size"*** is proportional to `N x N`, 265 | * ***"Runtime"*** is proportional to `N x N`, 266 | * ***"Memory Usage"*** is proportional to `N x N`. 267 | 268 |

P x Q Matrix Decomposition

269 | The image depicts an example of P by Q partitioning of an HPL matrix in 6 processes. In this case they've been decomposed into 2 x 3. The image is from a journal article publication, [Gaining asynchrony by using hybrid UPC SMPSs](https://www.researchgate.net/publication/228524393_Gaining_asynchrony_by_using_hybrid_UPCSMPSs) 270 | 271 | We can observe that if you we to *double* `N`, your run would take **four** times as long. If you **tippled** `N`, your run would use **nine times as much** memory. If you made `N` **ten times larger**, your run would use **hundred times** more memory, and would take **hundred times** as long to run. 272 | * `NB` defines the block (or chunk) size into which the array is divided. The optimal value is determined by the CPU architecture such that the block fits in cache. For best performance `N` should be a multiple of `NB`. 273 | * `P x Q` define the domains (in two dimensions) for how the array is partitioned on a distributed memory system. Therefore `P x Q` typically should equate more or less to the number of MPI ranks, or number of nodes, or number of NUMA domains. For example, if you have 4 single CPU nodes, the permutations for `P` and `Q` include [1, 4] and [2, 2]. Similarly, if you have 4 dual socket nodes, the permutations for `P` and `Q` include [1,8], [2, 4], etc... 274 | 275 | 1. Prepare your environment to rerun your `xhpl` binary on your **compute node** 276 | 277 | Make sure to open an additional ssh session to your compute node, so that you can monitor your CPU utilization using `top # preferably btop / htop`. 278 | 279 | ```bash 280 | # Export the path to the OpenMPI Library 281 | export PATH=/usr/lib64/openmpi/bin:$PATH 282 | 283 | # Edit your HPL.dat file with the following changes 284 | cd ~/hpl/bin/ 285 | nano HPL.dat 286 | ``` 287 | 288 | 1. Make the following changes to your `HPL.dat` file: 289 | ```conf 290 | 22000 Ns 291 | 164 NBs 292 | ``` 293 | 294 | 1. Finally, rerun `xhpl` and record your GFLOPS score: 295 | ```bash 296 | ./xhpl 297 | ``` 298 | > [!TIP] 299 | > You can find [online calculators](https://www.advancedclustering.com/act_kb/tune-hpl-dat-file/) that will generate an `HPL.dat` file for you *as a starting point*, but you will still need to do some tuning if you want to squeeze out maximum performance. 300 | 301 | # Building and Compiling OpenBLAS and OpenMPI Libraries from Source 302 | 303 | > [!CAUTION] 304 | > Compiling your entire application stack and tool-chains from source, can provide you with a tremendous performance improvement. Compiling applications from source _'can'_ take a very long time and can also be a very tricky process. For this reason the compilation of `gcc` is omitted for the competition. 305 | > 306 | > You are advised to skip this section if you have fallen behind the pace recommended by the course coordinators. Skipping this section will *NOT* stop you from completing the remainder of the tutorials. 307 | 308 | You now have a functioning HPL benchmark. However, using math libraries (BLAS, LAPACK, ATLAS) from a repository (`dnf`) will not yield optimal performance, because these repositories contain generic code compiled to work on all x86 hardware. If you were monitoring your compute during the execution of `xhpl`, you would have noticed that the OpenMPI and Atlas configurations restricted HPL to running with no more than two OpenMP threads. 309 | 310 | Code compiled specifically for HPC hardware can use instruction sets like `AVX`, `AVX2` and `AVX512` (if available) to make better use of the CPU. A (much) higher HPL result is possible if you compile your math library (such as ATLAS, GOTOBLAS, OpenBLAS or Intel MKL) from source code on the hardware you intend to run the code on. 311 | 312 | 1. Install dependencies 313 | ```bash 314 | # DNF / YUM (RHEL, Rocky, Alma, Centos Stream) 315 | sudo dnf group install "Development Tools" 316 | sudo dnf install gfortran git gcc wget 317 | 318 | # APT (Ubuntu) 319 | sudo apt install build-essential hwloc libhwloc-dev libevent-dev gfortran wget 320 | 321 | # Pacman 322 | sudo dnf install base-devel gfortran git gcc wget 323 | ``` 324 | 325 | 1. Fetch and Compile OpenBLAS Source Files 326 | ```bash 327 | # Fetch the source files from the GitHub repository 328 | git clone https://github.com/xianyi/OpenBLAS.git 329 | cd OpenBLAS 330 | 331 | # Tested against version 0.3.26, you can try an build `develop` branch 332 | git checkout v0.3.26 333 | 334 | # You can adjust the PREFIX to install to your preferred directory 335 | make 336 | make PREFIX=$HOME/opt/openblas install 337 | ``` 338 | 339 | 1. Fetch, Unpack and Compile OpenMPI Source Files 340 | ```bash 341 | # Fetch and unpack the source files 342 | wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.gz 343 | tar xf openmpi-4.1.4.tar.gz 344 | cd openmpi-4.1.4 345 | 346 | # Pay careful attention to tuning options here, and ensure they correspond 347 | # to your compute node's processor. 348 | # 349 | # If you are unsure, you can replace the `cascadelake` architecture option 350 | # with `native`, however you are expected to determine your compute node's 351 | # architecture using `lscpu` or similar tools. 352 | # 353 | # Once again you can adjust the --prefix to install to your preferred path. 354 | CFLAGS="-Ofast -march=cascadelake -mtune=cascadelake" ./configure --prefix=$HOME/opt/openmpi 355 | 356 | # Use the maximum number of threads to compile the application 357 | make -j$(nproc) 358 | make install 359 | ``` 360 | 361 | 1. Compile and Configure HPL 362 | ```bash 363 | # Copy the Makefile `Make.` that you'd previously prepared 364 | # and customize it to utilize the OpenBLAS and OpenMPI libraries that 365 | # you have just compiled. 366 | cd ~/hpl 367 | cp Make. Make.compile_BLAS_MPI 368 | nano Make.compile_BLAS_MPI 369 | ``` 370 | 371 | 1. Edit the platform identifier *(architecture)*, MPI and BLAS paths, and add compiler optimization flags: 372 | ```conf 373 | ARCH = compile_BLAS_MPI 374 | 375 | MPdir = $(HOME)/opt/openmpi 376 | MPinc = -I$(MPdir)/include 377 | MPlib = $(MPdir)/lib/libmpi.so 378 | 379 | LAdir = $(HOME)/opt/openblas 380 | LAinc = 381 | LAlib = $(LAdir)/lib/libopenblas.a 382 | 383 | CC = mpicc 384 | CCFLAGS = $(HPL_DEFS) -O3 -march=cascadelake -mtune=cascadelake -fopenmp -fomit-frame-pointer -funroll-loops -W -Wall 385 | LDFLAGS = -O3 -fopenmp 386 | 387 | LINKER = $(CC) 388 | ``` 389 | 390 | 1. You can now compile your new HPL: 391 | ```bash 392 | # You will also need to temporarily export the following environment 393 | # variables to make OpenMPI available on the system. 394 | 395 | export MPI_HOME=$HOME/opt/openmpi 396 | export PATH=$MPI_HOME/bin:$PATH 397 | export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH 398 | 399 | # Remember that if you make a mistake and need to recompile, first run 400 | # make clean arch=compile_BLAS_MPI 401 | 402 | make arch=compile_BLAS_MPI 403 | ``` 404 | 405 | 1. Edit HPL to take advantage of your custom compiled MPI and Math Libraries 406 | Verify that a `xhpl` executable binary was in fact produced and configure your `HPL.dat` file with reference to the [Official HPL Tuning Guide](https://netlib.org/benchmark/hpl/tuning.html): 407 | ```bash 408 | cd bin/compile_BLAS_MPI 409 | 410 | # As a starting point when running HPL on a single node, with a single CPU 411 | # Try setting Ps = 1 and Qs = 1, and Ns = 21976 and NBs = 164 412 | nano HPL.dat 413 | ``` 414 | 415 | 1. Finally, you can run your `xhpl` binary with custom compiled libraries. 416 | ```bash 417 | # There is no need to explicitly use `mpirun`, nor do you have to specify 418 | # the number of cores by exporting the `OMP_NUM_THREADS`. 419 | # This is because OpenBLAS is multi-threaded by default. 420 | 421 | ./xhpl 422 | ``` 423 | 424 | > [!TIP] 425 | > Remember to open a new ssh session to your compute node and run either `top # preferably htop / btop`. Better yet, if you are running `tmux` in your current session, open a new tmux window using `C-b c` then ssh to your compute node from there, and you can cycle between the two tmux windows using `C-b n`. 426 | 427 | Join the [Discussion](https://github.com/chpc-tech-eval/chpc24-scc-nmu/discussions/61) by replying to the thread with a screenshot of your compute node's CPU threads hard at work. 428 | 429 | # Intel oneAPI Toolkits and Compiler Suite 430 | 431 | Intel oneAPI Toolkits provide a comprehensive suite of development tools that span various programming models and architectures. These toolkits help developers optimize their applications for performance across CPUs, GPUs, FPGAs, and other accelerators, visit [Intel oneAPI Toolkits](https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html) for more information. 432 | 433 | ## Configure and Install Intel oneAPI Base and HPC Toolkits 434 | 435 | > [!CAUTION] 436 | > The Intel oneAPI Base and HPC Toolkits can provide considerable improvements of your benchmarking results. However, they can be tricky to install and configure. You are advised to skip this section if you have fallen behind the pace recommended by the course coordinators. Skipping this section will *NOT* stop you from completing the remainder of the tutorials. 437 | 438 | You will need to install and configure Intel's oneAPI Base Toolkit which includes Intel's optimized Math Kernel Libraries and Intel's C/C++ Compilers. Additionally, you will also need to install Intel's HPC Toolkit which extends the functionality of the oneAPI Base Toolkit and includes Intel's optimized FORTRAN and MPI Compilers. 439 | 440 | You will be making use of the **2024-2** versions of the Intel oneAPI and HPC Toolkits. 441 | 442 | 1. *Optionally* the following prerequisites and install dependencies, to make use of Intel's VTune Profiler for a graphical user interface. 443 | ```bash 444 | # DNF / YUM (RHEL, Rocky, Alma, CentOS Stream) 445 | sudo dnf install libdrm gtk3 libnotify xdg-utils libxcb mesa-libgbm at-spi2-core 446 | 447 | # APT (Ubuntu) 448 | sudo apt install libdrm2 libgtk-3-0 libnotify4 xdg-utils libxcb-dri3-0 libgbm1 libatspi2.0-0 449 | 450 | # Pacman (Arch) 451 | sudo pacman -S libdrm gtk3 libnotify xdg-utils libxcb mesa-libgbm at-spi2-core 452 | ``` 453 | 1. Download the offline installers into your `HOME` directory 454 | * Intel oneAPI Base Toolkit 455 | ```bash 456 | wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9a98af19-1c68-46ce-9fdd-e249240c7c42/l_BaseKit_p_2024.2.0.634_offline.sh 457 | ``` 458 | 459 | * Intel oneAPI HPC Toolkit 460 | ```bash 461 | wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/d4e49548-1492-45c9-b678-8268cb0f1b05/l_HPCKit_p_2024.2.0.635_offline.sh 462 | ``` 463 | 464 | 1. Use `chmod` to make the scripts executable 465 | ```bash 466 | # First make the Basekit executable 467 | chmod +x l_BaseKit_p_2024.2.0.634_offline.sh 468 | 469 | # Then make the HPCkit executable 470 | chmod +x l_HPCKit_p_2024.2.0.635_offline.sh 471 | ``` 472 | 1. Run the installation script using the following command line parameters: 473 | * `-a`: List of arguments to follow... 474 | * `--cli`: Executing the installer on a Command Line Interface. 475 | * `--eula accept`: Agree to accept the end user license agreement. 476 | More details about the [Command Line Arguments](https://www.intel.com/content/www/us/en/docs/oneapi/installation-guide-linux/2024-2/install-with-command-line.html) can be found within Intel's installation guide. 477 | 478 | These must be run separately and you will need to navigate through a number of CLI text prompts and accept the end-user license agreement. 479 | ```bash 480 | # Run Intel oneAPI Basekit installation script 481 | ./l_BaseKit_p_2024.2.0.634_offline.sh -a --cli --eula accept 482 | ``` 483 | 484 | Should there be any missing dependencies, use your systems' Package manager to install them 485 | ```bash 486 | # Run Intel oneAPI HPCkit installation script 487 | ./l_HPCKit_p_2024.2.0.635_offline.sh -a --cli --eula accept 488 | ``` 489 | 1. Configure your Environment to use Intel oneAPI Toolkits 490 | You can either use the `setvars.sh` configuration script or modulefiles: 491 | * To have your environment automaticaly prepared for use with Intel's oneAPI Toolkit append the following line either to your `/etc/profile` or your `~/.bashrc` or your `~/.profile` or run the command every time you login to your node 492 | ```bash 493 | source ~/intel/oneapi/setvars.sh 494 | ``` 495 | * If you managed to successfully configure Lmod, then you can make use of Intel oneAPI modulefile configuration script: 496 | ```bash 497 | # Navigate to the location of your Intel oneAPI installation 498 | cd ~/intel/oneapi/ 499 | 500 | # Execute the modulefiles setup script 501 | ./modulefiles-setup.sh 502 | 503 | # Return to the top level of your $HOME directory and 504 | # configure Lmod to make use of the newly created modules 505 | # Alternatively, this line can be appended to /etc/profile or your .bashrc 506 | ml use $HOME/modulefiles 507 | 508 | # Make sure the newly created modules are available to use and have been correclty configured 509 | ml avail 510 | ``` 511 | 512 | > [!IMPORTANT] 513 | > You will need to configure your environment each time you login to a new shell, as is the case when you use `mpirun` over multiple nodes. You will be shown how to do this automatically when you run HPL over multiple nodes. 514 | 515 | You have successfully installed the Intel oneAPI Base and HPC Toolkits, including Intel Compiler Suite and Math Kernel Libraries. 516 | 517 | ## Configuring and Running HPL with Intel oneAPI Toolkit and MKL 518 | 519 | After you've successfully completed the previous section, you will be ready to recompile HPL with Intel's `icx` compiler and `mkl` math kernel libraries. 520 | 521 | 1. Copy and Edit the `Make.Linux_Intel64` 522 | 523 | From your `~/hpl` folder, with a properly configured environment, copy and edit the configuration 524 | ```bash 525 | # Copy a setup configuration script to use as a template 526 | cp setup/Make.Linux_Intel64 ./ 527 | 528 | # Edit the configuration file to make use of your Intel oneAPI Toolkit 529 | nano Make.Linux_Intel64 530 | ``` 531 | 532 | 1. Configure your `Make.Linux_Intel64` 533 | 534 | Ensure that you make the following changes and amendments: 535 | ```conf 536 | CC = mpiicx 537 | OMP_DEFS = -qopenmp 538 | CCFLAGS = $(HPL_DEFS) -O3 -w -ansi-alias -z noexecstack -z relro -z now -Wall 539 | ``` 540 | 541 | 1. Compile your HPL Binary using the Intel oneAPI Toolkit 542 | ```bash 543 | make arch=Linux_Intel64 544 | ``` 545 | 546 | 1. Reuse your `HPL.dat` from when you compiled OpenMPI and OpenBLAS from source. 547 | 548 | > [!TIP] 549 | > Remember to use tmux to open a new tmux window, `C-b c`. You can cycle between the tmux windows using `C-b n`. 550 | 551 | # LinPACK Theoretical Peak Performance 552 | 553 | It is useful to know what the theoretical FLOPS performance (RPeak) of your hardware is when trying to obtain the highest benchmark result (RMax). RPeak can be derived from the formula: 554 | 555 | **RPeak = CPU Frequency [GHz] x Num CPU Cores x OPS/cycle** 556 | 557 | Newer CPU architectures allow for 'wider' instruction sets which execute multiple instructions per CPU cycle. The table below shows the floating point operations per cycle of various instruction sets: 558 | 559 | | CPU Extension | Floating Point Operations per CPU Cycle | 560 | |---------------|-----------------------------------------| 561 | | SSE4.2 | 4 | 562 | | AVX | 8 | 563 | | AVX2 | 16 | 564 | | AVX512 | 32 | 565 | 566 | You can determine your CPU model as well as the instruction extensions supported on your **compute node(s)** with the command: 567 | 568 | ```bash 569 | lscpu 570 | ``` 571 | 572 | For model name, you should see something along the lines "Intel Xeon Processor (Cascadelake)", 573 | 574 | You can determine the maximum and base frequency of your CPU model on the Intel Ark website. Because HPL is a demanding workload, assume the CPU is operating at its base frequency and **NOT** the boost/turbo frequency. You should have everything you need to calculate the RPeak of your cluster. Typically an efficiency of at least 75% is considered adequate for Intel CPUs (RMax / RPeak > 0.75). 575 | 576 | ## Top500 List 577 | 578 | The [TOP500 list](https://top500.org/lists/top500/2024/06/) is a project that ranks and details the 500 most powerful supercomputers in the world. The ranking is based on the High-Performance Linpack (HPL) benchmark, which measures a system's floating point computing power. 579 | 580 | 1. Go the the Top500 List and compare your results 581 | 582 | Populate the following table by recording your Rmax from HPL results, and calculating your expected Rpeak value. 583 | 584 | | Rank | System | Threads | Rmax (GFlops/s) | Rpeak (GFlops/s) | 585 | |------|-------------------------------------------------|-----------|-----------------------|--------------------------| 586 | | 1 | Frontier - HPE - United States | 8 699 904 | 1206 x 106 | 1714.81 x 106 | 587 | | | | | | | 588 | | 2 | | | | | 589 | | 3 | | | | | 590 | | | Head node | 2 | | | 591 | | | Compute node using head node `xhpl` binary | | | | 592 | | | Compute node using custom compiled MPI and BLAS | | | | 593 | | | Compute node using Intel oneAPI Toolkits | | | | 594 | | | Across two compute nodes | | | | 595 | 596 | > [!IMPORTANT] 597 | > You do **NOT** need to try and Rank you VM's HPL performance. Cores and threads are used interchangeably in this context. Following the recommended configuration and guides, your head node has one CPU package with two compute cores (or threads). Continuing this same analogy, your compute node has one CPU with six cores (or threads). 598 | 599 | # Spinning Up a Second Compute Node Using a Snapshot 600 | 601 | At this point you are ready to run HPL on your cluster with two compute nodes. From your OpenStack workspace, navigate to `Compute` → `Instances` and create a snapshot from your compute node. 602 | 603 | Launch a new instance, as you did in [Tutorial 1](../tutorial1/README.md#launch-a-new-instance) and [Tutorial 2](../tutorial2/README.md#spinning-up-a-compute-node-on-sebowaopenstack) only this time you'll be using the snapshot that you have just created as boot source. 604 | 605 |

OpenStack create instance from Snapshot.

606 | 607 | Pay careful attention to the hostname, network and other configuration settings that may be specific to and may conflict with your initial node. Once your two compute nodes have been successfully deployed, are accessible from the head node and added to your MPI `hosts` file, you can continue with running HPL across multiple nodes. 608 | 609 | ## Running HPL Across Multiple Nodes 610 | 611 | Everything is now in place for you to run HPL across your two compute nodes. You must ensure that all libraries and dependencies are satisfied across your cluster. You must also ensure that your passwordless SSH is properly configured. Your NFS mounted `/home` directory must be properly configured. 612 | 613 | * Configuring OpenMPI Hosts File 614 | 615 | You must configure a `hosts` (or `machinefile`) file which contains the IP addresses or hostnames of your compute nodes. 616 | ```conf 617 | # The slots value indicates the number of processes to run on each node. 618 | # Adjust this number based on the number of CPU cores available on each node. 619 | compute01 slots=1 620 | compute02 slots=1 621 | ``` 622 | 623 | * Runtime and Environment Configuration Options for `mpirun` 624 | 625 | You compute nodes each have a single CPU with multiple OpenMP threads. It is critical that your `environment` is correctly configured to you to run HPL across your two compute nodes. 626 | 627 | * Navigate to the directory where your HPL executable and `HPL.dat` file are located. Use `mpirun` to run HPL across the nodes specified in the hosts file 628 | * Edit your `~/.profile` to set environment variables when `mpirun` creates a new shell 629 | * Execute `mpirun` 630 | ```bash 631 | mpirun -np 2 --hostfile hosts ./xhpl 632 | ``` 633 | # HPC Challenge 634 | 635 | HPC Challenge (or HPCC) is benchmark suite which contains 7 micro-benchmarks used to test various performance aspects of your cluster. HPCC includes HPL which it uses to access FLOPs performance. Having successfully compiled and executed HPL, the process is fairly straight forward to setup HPCC (it uses the same Makefile structure). 636 | 637 | 1. Download HPCC from https://icl.utk.edu/hpcc/software/index.html 638 | 639 | 1. Extract the file, then enter the `hpcc/` sub-directory. 640 | 641 | 1. Copy and modify the `Makefile.` as your did for the HPL benchmark 642 | 643 | 1. Compile HPCC from the base directory using 644 | ```bash 645 | make arch= 646 | ``` 647 | 1. Edit the `hpccinf.txt` file 648 | 649 | HPCC replies on the input parameter file `hpccinf.txt` (same as `HPL.dat`). Run HPCC as you did HPL. 650 | 651 | 1. Prepare and format your output 652 | 653 | Run the [format.pl script](resources/format.pl) with to format your benchmark results into a readable format. Compare your HPL score with your standalone HPL. 654 | ```bash 655 | # You may need to install perl 656 | ./format.pl -w -f hpccoutf.txt 657 | ``` 658 | Have the output `hpccoutf.txt` and your `Make.` ready for the instructors to view on request. 659 | 660 | # Application Benchmarks and System Evaluation 661 | 662 | HPC applications are widely used in scientific research and systems evaluation or benchmarking to address complex computational problems. These applications span various fields, including computational chemistry, computational fluid dynamics, cosmology / astrophysics, quantum mechanics, weather forecasting, genomics, to name a few... 663 | 664 | These applications are integral to advancing scientific research, enabling researchers to solve complex problems that are otherwise computationally prohibitive. They are also essential for evaluating and benchmarking the performance of high-performance computing systems, ensuring that they meet the demands of cutting-edge research and industrial applications. 665 | 666 | You will now build, compile, install and run a few such examples. 667 | 668 | ## GROMACS (ADH Cubic) 669 | 670 | GROMACS is a versatile package to perform molecular dynamics, i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles. It is primarily designed for biochemical molecules like proteins, lipids and nucleic acids that have a lot of complicated bonded interactions, but since GROMACS is extremely fast at calculating the nonbonded interactions (that usually dominate simulations) many groups are also using it for research on non-biological systems, such as polymers. 671 | 672 | Detailed installation instructions can be found at: http://manual.gromacs.org/current/install-guide/index.html, but here's a general installation overview: 673 | 674 | 1. Ensure you have an up-to-date `cmake` available on your system. 675 | 676 | 2. You will also require a compiler such as the GNU `gcc`, Intel `icc` or other, and **MPI (OpenMPI, MPICH, Intel MPI or other)** be installed on system. Your **PATH** & **LD_LIBRARY_PATH** environment variables should be set up to reflect this. 677 | 678 | 3. Compile GROMACS **with MPI support** from source using `cmake`. 679 | 680 | The benchmark **(adh_cubic)** should complete within a few minutes and has a small memory footprint, it is intended to demonstrate that your installation is working properly. The metric which will be used to assess your performance is the **ns/day** (number of nanoseconds the model is simulated for per day of computation), quoted at the end of the simulation output. **Higher is better**. 681 | 682 | Ensure that your GROMACS /**bin** directory is exported to your **PATH**. You should be able to type `gmx_mpi --version` in your terminal and have the application information displayed correctly. The first task is to pre-process the input data into a usable format, using the `grompp` tool: 683 | 684 | ```bash 685 | gmx_mpi grompp -f pme_verlet.mdp -c conf.gro -p topol.top -o md_0_1.tpr 686 | 687 | #export PATH and LD_LIBRARY_PATH 688 | mpirun gmx_mpi mdrun -nsteps 5000 -s md_0_1.tpr -g gromacs.log 689 | ``` 690 | 691 | Then execute the script from you head node, which will in turn launch the simulation using MPI and write output to the log file `gromacs_log`. 692 | 693 | You may modify the `mpirun` command to optimise performance (significantly) but in order to produce a valid result, the simulation must run for **5,000 steps**. Quoted in the output as: 694 | 695 | ```text 696 | "5000 steps, 10.0 ps." 697 | ``` 698 | 699 | > [!NOTE] 700 | > Please be able to present the instructors with the output of `gmx_mpi --version`. Also be able to present the instructors with your Slurm batch script and `gromacs_log` files for the **adh_cubic** benchmark. 701 | 702 | ## LAMMPS (Lennard-Jones) 703 | 704 | [LAMMPS](https://docs.lammps.org) (Large-scale Atomic/Molecular Massively Parallel Simulator) is a classical molecular dynamics simulation code designed for simulating particles in a variety of fields including materials science, chemistry, physics, and biology. It was originally developed at Sandia National Laboratories and is now maintained by a community of developers. LAMMPS runs on single processors or in parallel using message-passing techniques and a spatial-decomposition of the simulation domain. 705 | 706 | The purpose of this benchmark is to demonstrate to you that there are often multiple way to build and compile many applications. 707 | 708 | 1. Configure prerequisites and install dependencies 709 | * DNF / YUM 710 | ```bash 711 | # RHEL, Rocky, Alma, CentOS Stream 712 | sudo dnf groupinstall 'Development Tools' -y 713 | sudo dnf install cmake git -y 714 | sudo dnf install fftw-devel libjpeg-devel libpng-devel libtiff-devel libX11-devel libXext-devel libXrender-devel -y 715 | ``` 716 | * APT 717 | ```bash 718 | # Ubuntu 719 | sudo apt install build-essential cmake git -y 720 | sudo apt install libfftw3-dev libjpeg-dev libpng-dev libtiff-dev libx11-dev libxext-dev libxrender-dev -y 721 | ``` 722 | * Pacman 723 | ```bash 724 | # Arch 725 | sudo pacman -S base-devel cmake git -y 726 | sudo pacman -S fftw libjpeg-turbo libpng libtiff libx11 libxext libxrender -y 727 | ``` 728 | 1. Clone, build and compile LAMMPS with `make` 729 | 730 | Building LAMMPS with traditional Makefiles requires that you have a `Makefile.` file appropriate for your system in either the `src` folder. 731 | ```bash 732 | # Ensure that the correct paths are exported 733 | 734 | git clone -b stable https://github.com/lammps/lammps.git 735 | cd lammps/src 736 | 737 | # List the different make options 738 | make 739 | 740 | # Build a serial LAMMPS executable using GNU g++ 741 | # Remember to monitor top / htop / btop in another tmux pane 742 | make serial 743 | 744 | # Build a parallel LAMMPS executable with MPI 745 | # If you were frustrated at how long the previous make build took, 746 | # try to build and compile using the -j switch 747 | make mpi 748 | ``` 749 | 1. Copy the executable binaries to the benchmarks folder 750 | ```bash 751 | cp lmp_serial ../bench 752 | cp lmp_mpi ../bench 753 | ``` 754 | 755 | 1. Execute the Lennard Jones benchmarks 756 | ```bash 757 | cd ../bench 758 | 759 | # Verify that only one thread is utilized 760 | ./lmp_serial -in in.lj 761 | 762 | # Verify the number of OpenMP threads utilized 763 | export OMP_NUM_THREADS= 764 | mpirun -np lmp_mpi -in in.lj 765 | ``` 766 | 1. Rerun your binaries against the Rhodopsin Structure benchmark 767 | 768 | The Lennard Jones benchmark might be too short for proper evaluation. These small bencharks are often used for an installation validation test. 769 | ```bash 770 | # Save the output for submission 771 | ./lmp_serial < in.rhodo > lmp_serial_rhodo.out 772 | mpirun -np lmp_mpi -in in.rhodo > lmp_mpi_rhodo.out 773 | ``` 774 | 775 | > [!IMPORTANT] 776 | > The following section is included here for illustrative purposes. If you feel that you are falling behind in the competition, you may read through this section without completing it. Limited instructions will be provided, and you will be required to take decisions in terms of choice of compiler, MPI implementation, FFTW library. This will be good practice for what benchmarks *might* look like in the Nationals Round of the Student Cluster Competition. 777 | > 778 | > 1. Build LAMMPS with GCC, OpenMP and OpenMPI using CMake 779 | > * In addition to a choice of `gcc`, `MPI` implementation and an `FFTW` library, you'll need to also install `cmake`. 780 | > * If you're using the same checkout as before, you need to purge your `src` directory 781 | > ```bash 782 | > cd lammps/src 783 | > 784 | > # Remove conflicting files from the previous build, uninstall all packages 785 | > # make no-all purge 786 | > ``` 787 | > * Configure the build with CMake, then compile and install 788 | > ```bash 789 | > cmake ../cmake -D BUILD_MPI=on -D BUILD_OMP=on -D CMAKE_C_COMPILER=gcc -D CMAKE_CXX_COMPILER=g++ -D MPI_C_COMPILER=mpicc -D MPI_CXX_COMPILER=mpicxx 790 | > 791 | > make -j$(nproc) 792 | > 793 | > make DESTDIR=/ install 794 | > ``` 795 | > * Rerun the benchmarks 796 | > ```bash 797 | > export OMP_NUM_THREADS= 798 | > mpirun -np ./lmp -in 799 | > ``` 800 | 801 | ## Qiskit (Quantum Volume) 802 | 803 | IBM's Qiskit is an open-source [Software Development Kit (SDK)](https://www.ibm.com/quantum/qiskit) for working with quantum computers at the level of circuits, pulses, and algorithms. It provides tools for creating and manipulating quantum programs and running them on prototype quantum devices on IBM Quantum Platform or on simulators on a local computer. 804 | 805 | [Qiskit-Aer](https://github.com/Qiskit/) is an extension to the Qiskit SDK for using high performance computing resources to simulate quantum computers and programs. It provides interfaces to run quantum circuits with or without noise using a number of various simulation methods. *Qiskit-Aer* supports leveraging *MPI* to improve the performance of simulation. 806 | 807 | **Quantum Volume (QV)** is a single-number metric that can be measured using a concrete protocol on near-term quantum computers of modest size. The QV method quantifies the largest random circuit of equal width and depth that the computer successfully implements. Quantum computing systems with high-fidelity operations, high connectivity, large calibrated gate sets, and circuit rewriting tool chains are expected to have higher quantum volumes. Simply put, Quantum Volume is a single number meant to encapsulate the performance of today’s quantum computers, like a classical computer’s transistor count. 808 | 809 | For this benchmark, we will be providing you with the details of the script that you will need to write yourself, or [download](resources/qv_experiment.py) from the competition GitHub repository in order to successfully conduct the (Quantum Volume Experiment)(https://qiskit.org/ecosystem/experiments/dev/manuals/verification/quantum_volume.html). 810 | 811 | 1. Configure and install dependencies 812 | You will be using [Python Pip - PyPI](https://pypi.org/project/pip/) to configure and install Qiskit. `pip` is the official tool for installing and using Python packages from various indexes. 813 | * DNF / YUM 814 | ```bash 815 | # RHEL, Rocky, Alma, CentOS Stream 816 | sudo dnf install python python-pip 817 | ``` 818 | * APT 819 | ```bash 820 | # Ubuntu 821 | sudo apt install python python-pip 822 | ``` 823 | * Pacman 824 | ```bash 825 | # Arch 826 | sudo pacman -S python python-pip 827 | ``` 828 | 1. Create and Activate a New Virtual Environment 829 | 830 | Separate your python projects and ensure that they exist in their own, clean environments: 831 | 832 | ```bash 833 | python -m venv QiskitAer 834 | source QiskitAer/bin/activate 835 | ``` 836 | 837 | 1. Install `qiskit-aer` 838 | ```bash 839 | pip install qiskit-aer 840 | ``` 841 | 842 | 1. Save the following in a Python script `qv_experiment.py`: 843 | 844 | ```python 845 | from qiskit import * 846 | from qiskit.circuit.library import * 847 | from qiskit_aer import * 848 | import time 849 | import numpy as np 850 | def quant_vol(qubits=15, depth=10): 851 | sim = AerSimulator(method='statevector', device='CPU') 852 | circuit = QuantumVolume(qubits, depth, seed=0) 853 | circuit.measure_all() 854 | circuit = transpile(circuit, sim) 855 | 856 | start = time.time() 857 | result = sim.run(circuit, shots=1, seed_simulator=12345).result() 858 | time_val = time.time() - start 859 | 860 | # Optionally return and print result for debugging 861 | # Bonus marks available for reading the simulation time directly from `result` 862 | return time_val 863 | ``` 864 | 865 | 1. Parameterize the following variables for the QV experiment 866 | 867 | These are used to generate the QV circuits and run them on a backend and on an ideal simulator: 868 | * `qubits`: number or list of physical qubits to be simulated for the experiment, 869 | * `depth`: meaning the number of discrete time steps during which the circuit can run gates before the qubits decohere. 870 | * `shots`: used for sampling statistics, number of repetitions of each circuit. 871 | 872 | 1. Run the benchmark by executing the script you've just written: 873 | ```bash 874 | $ python qv_experiment.py 875 | ``` 876 | 877 | 1. Deactivate the Python virtualenv 878 | ```bash 879 | deactivate 880 | ``` 881 | -------------------------------------------------------------------------------- /tutorial3/resources/An-example-of-P-by-Q-partitioning-of-a-HPL-matrix-in-6-processes-2x3-decomposition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial3/resources/An-example-of-P-by-Q-partitioning-of-a-HPL-matrix-in-6-processes-2x3-decomposition.png -------------------------------------------------------------------------------- /tutorial3/resources/MultiThreaded_HPL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial3/resources/MultiThreaded_HPL.png -------------------------------------------------------------------------------- /tutorial3/resources/format.pl: -------------------------------------------------------------------------------- 1 | #! /usr/bin/perl 2 | 3 | # 4 | # Usage: hpccoutf.pl -a -f hpccoputf.txt To show all parameters 5 | # hpccoutf.pl -w -f hpccoputf.txt To show web parameters 6 | # 7 | 8 | use strict; 9 | #use diagnostics; 10 | use Getopt::Std; 11 | $Getopt::Std::STANDARD_HELP_VERSION = 1; 12 | our ( $opt_a, $opt_w, $opt_f, $value, $count, $key ) = 0; 13 | getopts("awf:"); 14 | 15 | unless ( $opt_a || $opt_w && $opt_f ) { 16 | print "\n"; 17 | print "Usage: $0 -a -f hpccoutf.txt For all parameters\n"; 18 | print " $0 -w -f hpccoutf.txt For web parameters\n"; 19 | exit; 20 | } 21 | 22 | $/ = undef; 23 | open HPPCOUTF, $opt_f or die $!; 24 | my $file = ; 25 | my %hpccoutf = $file =~ /^(\w+)=(\d.*)$/mg; 26 | close HPPCOUTF; 27 | 28 | 29 | my @walkorder = ( 30 | 'HPL_Tflops', 'PTRANS_GBs', 31 | 'MPIRandomAccess_GUPs', 'MPIFFT_Gflops', 32 | 'StarSTREAM_Triad*CommWorldProcs', 'StarSTREAM_Triad', 33 | 'StarDGEMM_Gflops', 'RandomlyOrderedRingBandwidth_GBytes', 34 | 'RandomlyOrderedRingLatency_usec' ); 35 | 36 | my @walkunits = ( 37 | 'Tera Flops per Second', 'Tera Bytes per Second', 38 | 'Giga Updates per Second', 'Tera Flops per Second', 39 | 'Tera Bytes per Second', 'Giga Bytes per Second', 40 | 'Giga Flops per Second', 'Giga Bytes per second', 41 | 'micro-seconds'); 42 | 43 | my %crosswalk = ( 44 | HPL_Tflops => 'G-HPL', 45 | PTRANS_GBs => 'G-PTRANS', 46 | MPIRandomAccess_GUPs => 'G-RandomAccess', 47 | MPIFFT_Gflops => 'G-FFT', 48 | 'StarSTREAM_Triad*CommWorldProcs' => 'EP-STREAM Sys', 49 | CommWorldProcs => 'MPI Processes', 50 | StarSTREAM_Triad => 'EP-STREAM Triad', 51 | StarDGEMM_Gflops => 'EP-DGEMM', 52 | RandomlyOrderedRingBandwidth_GBytes => 'RandomRing Bandwidth', 53 | RandomlyOrderedRingLatency_usec => 'RandomRing Latency' 54 | ); 55 | 56 | if ( $opt_a ) { show_all(); } 57 | if ( $opt_w ) { show_web(); } 58 | 59 | ### Show all parameters from hpcc output file 60 | sub show_all { 61 | foreach $key ( sort keys %hpccoutf ) { 62 | print $key . ': ' . $hpccoutf{"$key"} . "\n"; 63 | } 64 | } 65 | 66 | ### Show web parameters from hpcc output file 67 | sub show_web { 68 | print "\n"; 69 | foreach $key ( @walkorder ) { 70 | $value = ''; 71 | if ( $key eq 'StarSTREAM_Triad*CommWorldProcs') { 72 | $value = $hpccoutf{'StarSTREAM_Triad'} * $hpccoutf{'CommWorldProcs'} / 1000; 73 | write; 74 | } elsif ( $key eq 'PTRANS_GBs' or $key eq 'MPIFFT_Gflops' ) { 75 | $value = $hpccoutf{$key} / 10000; 76 | write; 77 | } else { 78 | $value = $hpccoutf{$key}; 79 | write; 80 | } 81 | $count++; 82 | } 83 | print '--------------------------------------------------------------------------------------------------'."\n"; 84 | } 85 | 86 | format STDOUT_TOP = 87 | -------------------------------------------------------------------------------------------------- 88 | HPCCOUTF NAME WEB NAME VALUE UNITS 89 | -------------------------------------------------------------------------------------------------- 90 | . 91 | 92 | format STDOUT = 93 | @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<< @#######.#### @<<<<<<<<<<<<<<<<<<<<<< 94 | $key, $crosswalk{$key}, $value, $walkunits[$count] 95 | . 96 | -------------------------------------------------------------------------------- /tutorial3/resources/lj.in: -------------------------------------------------------------------------------- 1 | units lj 2 | atom_style atomic 3 | boundary p p p 4 | 5 | lattice fcc 0.8442 6 | region box block 0 10 0 10 0 10 7 | create_box 1 box 8 | create_atoms 1 box 9 | 10 | mass 1 1.0 11 | velocity all create 1.44 87287 loop geom 12 | 13 | pair_style lj/cut 2.5 14 | pair_coeff 1 1 1.0 1.0 2.5 15 | 16 | neighbor 0.3 bin 17 | neigh_modify every 20 delay 0 check no 18 | 19 | fix 1 all nve 20 | thermo 100 21 | run 5000 22 | -------------------------------------------------------------------------------- /tutorial3/resources/openstack_instance_snapshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial3/resources/openstack_instance_snapshot.png -------------------------------------------------------------------------------- /tutorial3/resources/qv_experiment.py: -------------------------------------------------------------------------------- 1 | from qiskit import * 2 | from qiskit.circuit.library import * 3 | from qiskit_aer import * 4 | import time 5 | import numpy as np 6 | def quant_vol(qubits=15, depth=10): 7 | sim = AerSimulator(method='statevector', device='CPU') 8 | circuit = QuantumVolume(qubits, depth, seed=0) 9 | circuit.measure_all() 10 | circuit = transpile(circuit, sim) 11 | 12 | start = time.time() 13 | result = sim.run(circuit, shots=1, seed_simulator=12345).result() 14 | time_val = time.time() - start 15 | # Optionally return and print result for debugging 16 | # Bonus marks available for reading the simulation time directly from `result` 17 | return time_val 18 | -------------------------------------------------------------------------------- /tutorial4/resources/circleci_create_organization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/circleci_create_organization.png -------------------------------------------------------------------------------- /tutorial4/resources/circleci_create_project00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/circleci_create_project00.png -------------------------------------------------------------------------------- /tutorial4/resources/circleci_create_project01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/circleci_create_project01.png -------------------------------------------------------------------------------- /tutorial4/resources/circleci_create_project02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/circleci_create_project02.png -------------------------------------------------------------------------------- /tutorial4/resources/circleci_create_project03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/circleci_create_project03.png -------------------------------------------------------------------------------- /tutorial4/resources/circleci_environment_variables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/circleci_environment_variables.png -------------------------------------------------------------------------------- /tutorial4/resources/circleci_successful_deploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/circleci_successful_deploy.png -------------------------------------------------------------------------------- /tutorial4/resources/github_create_new_repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/github_create_new_repo.png -------------------------------------------------------------------------------- /tutorial4/resources/github_manage_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/github_manage_access.png -------------------------------------------------------------------------------- /tutorial4/resources/openstack_application_creds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/openstack_application_creds.png -------------------------------------------------------------------------------- /tutorial4/resources/terraform_apply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/terraform_apply.png -------------------------------------------------------------------------------- /tutorial4/resources/terraform_install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/terraform_install.png -------------------------------------------------------------------------------- /tutorial4/resources/terraform_install_init.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/terraform_install_init.png -------------------------------------------------------------------------------- /tutorial4/resources/terraform_plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/terraform_plan.png -------------------------------------------------------------------------------- /tutorial4/resources/terraform_statefile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chpc-tech-eval/scc/010688c3eac5ee66700cdb036a03ce9ff7b5df81/tutorial4/resources/terraform_statefile.png --------------------------------------------------------------------------------