diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..4c5b5e86481a4bd39266910010403f91359913d4 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (c) 2016-2018 Ohio Supercomputer Center + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/form.yml b/form.yml deleted file mode 100644 index afa259d891f04613e5fbcb46d7a21767de66ca4f..0000000000000000000000000000000000000000 --- a/form.yml +++ /dev/null @@ -1,100 +0,0 @@ ---- -cluster: - - "owens" - - "pitzer" -form: - - auto_modules_matlab - - auto_accounts - - bc_num_hours - - bc_num_slots - - num_cores - - node_type - - bc_vnc_resolution - - bc_email_on_started -attributes: - num_cores: - widget: "number_field" - label: "Number of cores" - value: 1 - help: | - Number of cores on node type (4 GB per core unless requesting whole - node). Leave blank if requesting full node. - min: 0 - max: 28 - step: 1 - bc_num_slots: "1" - bc_vnc_resolution: - required: true - node_type: - widget: select - label: "Node type" - help: | - - **Standard Compute** <br> - These are standard HPC machines. Owens has 648 of these nodes with 40 - cores and 128 GB of memory. Pitzer has 224 of these nodes with 40 cores and - 340 of these nodes with 48 cores. All pitzer nodes have 192 GB of RAM. Chosing "any" as the node type will decrease - your wait time. - - **GPU Enabled** <br> - These are HPC machines with GPUs. Owens has 160 nodes with 1 [NVIDIA Tesla P100 GPU] - and Pitzer has 74 nodes with 2 [NVIDIA Tesla V100 GPUs]. They have the same - CPU and memory characteristics of standard compute. However, Pitzer's 40 core machines - have 2 GPUs with 16 GB of RAM; and Pitzer's 48 core machines have 2 GPUs with 32 GB of RAM. - Dense GPU types have 4 GPUs with 16 GB of RAM. - - **Large Memory** <br> - These are HPC machines with very large amounts of memory. Owens has 16 hugemem nodes - with 48 cores and 1.5 TB of RAM. Pitzer has 4 hugemem nodes with 3 TB of RAM and 80 cores. - Pitzer also has 12 Largmem nodes which have 48 cores with 768 GB of RAM. - - [NVIDIA Tesla P100 GPU]: http://www.nvidia.com/object/tesla-p100.html - [NVIDIA Tesla V100 GPUs]: https://www.nvidia.com/en-us/data-center/v100/ - options: - - [ - "any", "any", - data-max-num-cores-for-cluster-owens: 28, - data-max-num-cores-for-cluster-pitzer: 48, - ] - - [ - "48 core", "any-48core", - data-max-num-cores-for-cluster-pitzer: 48, - data-option-for-cluster-owens: false, - ] - - [ - "40 core", "any-40core", - data-max-num-cores-for-cluster-pitzer: 40, - data-option-for-cluster-owens: false, - ] - - [ - "any gpu", "gpu", - data-max-num-cores-for-cluster-owens: 28, - data-max-num-cores-for-cluster-pitzer: 48, - ] - - [ - "40 core gpu", "gpu-40core", - data-max-num-cores-for-cluster-pitzer: 40, - data-option-for-cluster-owens: false, - ] - - [ - "48 core gpu", "gpu-48core", - data-max-num-cores-for-cluster-pitzer: 48, - data-option-for-cluster-owens: false, - ] - - [ - "largemem", "largemem", - data-min-num-cores-for-cluster-pitzer: 24, - data-max-num-cores-for-cluster-pitzer: 48, - data-option-for-cluster-owens: false, - ] - - [ - "hugemem", "hugemem", - data-min-num-cores-for-cluster-owens: 4, - data-max-num-cores-for-cluster-owens: 48, - data-min-num-cores-for-cluster-pitzer: 20, - data-max-num-cores-for-cluster-pitzer: 80, - ] - - [ - "debug", "debug", - data-max-num-cores-for-cluster-owens: 28, - data-max-num-cores-for-cluster-pitzer: 48, - data-option-for-cluster-owens: false, - data-option-for-cluster-pitzer: false, - ] diff --git a/form.yml.erb b/form.yml.erb new file mode 100644 index 0000000000000000000000000000000000000000..df3ef97588810a4da1bcf347ae61e101c1b53905 --- /dev/null +++ b/form.yml.erb @@ -0,0 +1,32 @@ +cluster: + - "karolina-slurm" + +form: + - job_name + - account + - custom_queue + - bc_num_hours + +attributes: + custom_queue: + label: "Partition" + widget: select + options: + - "<%= 'qcpu' %>" + - "<%= 'qcpu_exp' %>" + - "<%= 'qgpu' %>" + - "<%= 'qgpu_exp' %>" + + ntasks_per_node: + label: "NTasks Per Node" + widget: select + options: + - "<%= 1 %>" + + account: + label: "Project" + widget: select + options: + <%- User.new.groups.each do |group| %> + - "<%= group %>" + <%- end %> \ No newline at end of file diff --git a/info.md.erb b/info.md.erb new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/manifest.yml b/manifest.yml index 0841d1e2cfbebde315166da5104dfa6a36413e92..1bb580e4eedc48f45725265e9feacad8b84070fa 100644 --- a/manifest.yml +++ b/manifest.yml @@ -4,8 +4,8 @@ category: Interactive Apps subcategory: GUIs role: batch_connect description: | - This app will launch a [MATLAB] GUI on the [Owens cluster]. You will be able - to interact with the MATLAB GUI through a VNC session. + This app will launch a [MATLAB] GUI on the [Karolina] cluster. You will be able + to interact with the MATLAB GUI through a proxy-server. [MATLAB]: https://www.mathworks.com/products/matlab.html - [Owens cluster]: https://www.osc.edu/resources/technical_support/supercomputers/owens + [Karolina]: https://docs.it4i.cz/karolina/introduction/ diff --git a/submit.yml.erb b/submit.yml.erb index aa2d5441f703c8e9c3de23904f8ae7f4e76a6e4a..276aac35590f9ceb22f19574dfc26cc378eee6aa 100644 --- a/submit.yml.erb +++ b/submit.yml.erb @@ -1,51 +1,11 @@ -<%- - - err_msg = "You are not a member of the matlab group. Please email oschelp@osc.edu to request access to MATLAB." - raise(StandardError, err_msg) unless CurrentUser.group_names.include?('matlab') - - nodes = bc_num_slots.blank? ? 1 : bc_num_slots.to_i - - cores_lookup = { - "hugemem" => {"pitzer" => "80", "owens" => "48"}, - "largemem" => {"pitzer" => "48", "owens" => "28"}, - - "any" => {"pitzer" => "40", "owens" => "28"}, - "gpu" => {"pitzer" => "48", "owens" => "28"}, - - "any-48core" => {"pitzer" => "48", "owens" => "28"}, - "gpu-48core" => {"pitzer" => "48", "owens" => "28"}, - - "any-40core" => {"pitzer" => "40", "owens" => "28"}, - "gpu-40core" => {"pitzer" => "40", "owens" => "28"}, - } - - max_cores = cores_lookup[node_type][cluster] - ppn = num_cores.blank? ? max_cores : num_cores.to_i - - - case node_type - when "hugemem" - partition = bc_num_slots.to_i > 1 ? "hugemem-parallel" : "hugemem" - slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--partition", partition ] - when "gpu" - slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--gpus-per-node", "1" ] - when "any40-core" - slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--contstraint", "48core" ] - when "any48-core" - slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--contstraint", "48core" ] - when "gpu-48core" - slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--gpus-per-node", "1", "--constraint", "48core" ] - when "gpu-40core" - slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--gpus-per-node", "1", "--constraint", "40core" ] - else - slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}" ] - end -%> --- batch_connect: - template: vnc + template: "basic" script: native: - <%- slurm_args.each do |arg| %> - - "<%= arg %>" - <%- end %> + - "-A" + - "<%= account %>" + - "-p" + - "<%= custom_queue %>" + - "-J" + - "<%= job_name %>" \ No newline at end of file diff --git a/template/after.sh.erb b/template/after.sh.erb new file mode 100755 index 0000000000000000000000000000000000000000..4e1f39075c8d224c801bb032907ac6154fef8dcd --- /dev/null +++ b/template/after.sh.erb @@ -0,0 +1,9 @@ +# Wait for the Matlab server to start +echo "Waiting for Matlab server to open port ${port}..." +if wait_until_port_used "${host}:${port}" 600; then + echo "Discovered Matlab server listening on port ${port}!" +else + echo "Timed out waiting for Matlab server to open port ${port}!" + clean_up 1 +fi +sleep 2 \ No newline at end of file diff --git a/template/before.sh.erb b/template/before.sh.erb old mode 100644 new mode 100755 index e9323a3b3b6cbc666eb8f1b36c00c0373c59b5b6..8716887fc8309cdd610b487db9c0a8c73010fbfd --- a/template/before.sh.erb +++ b/template/before.sh.erb @@ -1,2 +1,18 @@ # Export the module function if it exists [[ $(type -t module) == "function" ]] && export -f module + +# Find available port to run server on +export port="$(find_port)" +export password="$(create_passwd 32)" + +export MWI_APP_HOST="0.0.0.0" +export MWI_APP_PORT=${port} +export MWI_BASE_URL="/node/${host}/${port}" + +export MWI_ENABLE_TOKEN_AUTH="True" +export MWI_AUTH_TOKEN="$password" + +export MATLAB_LOG_DIR=$TMPDIR +export MWI_LOG_LEVEL="INFO" + +export MLM_LICENSE_FILE="/apps/all/MATLAB/2023b/licenses/network.lic" \ No newline at end of file diff --git a/template/config/menus/xfce-applications.menu b/template/config/menus/xfce-applications.menu deleted file mode 100644 index 2bbf6bd0f016e1f6b28fbd3cf5ee26ae4915bba5..0000000000000000000000000000000000000000 --- a/template/config/menus/xfce-applications.menu +++ /dev/null @@ -1,20 +0,0 @@ -<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" - "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd"> - -<Menu> - <Name>Xfce</Name> - - <DefaultAppDirs/> - <DefaultDirectoryDirs/> - <DefaultMergeDirs/> - - <Include> - <All/> - </Include> - - <Layout> - <Filename>firefox.desktop</Filename> - <Filename>xfce4-terminal.desktop</Filename> - <Filename>Thunar.desktop</Filename> - </Layout> -</Menu> diff --git a/template/config/xfce4/terminal/terminalrc b/template/config/xfce4/terminal/terminalrc deleted file mode 100644 index b705be2d7657f6ec84546c9f7458ae1319891f84..0000000000000000000000000000000000000000 --- a/template/config/xfce4/terminal/terminalrc +++ /dev/null @@ -1,3 +0,0 @@ -[Configuration] -CommandLoginShell=TRUE -FontName=DejaVu Sans Mono 11 diff --git a/template/config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/template/config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml deleted file mode 100644 index 7ab1d6b1c0467cc61d65f42f7b4bdecb3aecefbf..0000000000000000000000000000000000000000 --- a/template/config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<channel name="xfce4-panel" version="1.0"> - <property name="configver" type="int" value="2"/> - <property name="panels" type="array"> - <value type="int" value="1"/> - <property name="panel-1" type="empty"> - <property name="position" type="string" value="p=6;x=99;y=24"/> - <property name="position-locked" type="bool" value="true"/> - <property name="size" type="uint" value="48"/> - <property name="length" type="uint" value="100"/> - <property name="length-adjust" type="bool" value="false"/> - <property name="plugin-ids" type="array"> - <value type="int" value="1"/> - <value type="int" value="3"/> - <value type="int" value="8"/> - <value type="int" value="4"/> - <value type="int" value="5"/> - </property> - <property name="mode" type="uint" value="0"/> - </property> - </property> - <property name="plugins" type="empty"> - <property name="plugin-3" type="string" value="tasklist"> - <property name="flat-buttons" type="bool" value="false"/> - <property name="show-handle" type="bool" value="true"/> - </property> - <property name="plugin-4" type="string" value="pager"/> - <property name="plugin-5" type="string" value="clock"> - <property name="digital-format" type="string" value="%r"/> - <property name="mode" type="uint" value="2"/> - </property> - <property name="plugin-8" type="string" value="separator"> - <property name="expand" type="bool" value="true"/> - <property name="style" type="uint" value="2"/> - </property> - <property name="plugin-1" type="string" value="applicationsmenu"> - <property name="show-generic-names" type="bool" value="true"/> - <property name="show-menu-icons" type="bool" value="true"/> - <property name="button-icon" type="string" value="fedora-logo-icon"/> - <property name="show-tooltips" type="bool" value="true"/> - </property> - </property> -</channel> diff --git a/template/script.sh.erb b/template/script.sh.erb old mode 100644 new mode 100755 index 75a09debd00cfbf6c1faf277202c930b50f11654..db883d360a651bbeb74c9edd75c2dc045c0b5c75 --- a/template/script.sh.erb +++ b/template/script.sh.erb @@ -1,47 +1,10 @@ -#!/usr/bin/env bash - -<%- gpu = context.node_type.include?("vis") -%> - -# Clean the environment -module purge - -# Set working directory to home directory -cd "${HOME}" - # -# Launch Xfce Window Manager and Panel +# Start Matlab server # -( - export SEND_256_COLORS_TO_REMOTE=1 - export XDG_CONFIG_HOME="<%= session.staged_root.join("config") %>" - export XDG_DATA_HOME="<%= session.staged_root.join("share") %>" - export XDG_CACHE_HOME="$(mktemp -d)" - export $(dbus-launch) - - module restore - set -x - xfwm4 --compositor=off --daemon --sm-client-disable - xsetroot -solid "#D3D3D3" - xfsettingsd --sm-client-disable - xfce4-panel --sm-client-disable -) & - -# -# Start MATLAB -# - -# Load the required environment -module load xalt/latest <%= context.auto_modules_matlab %> +# Clean the environment +module purge -# Launch MATLAB -<%- if gpu -%> -module load intel/16.0.3 virtualgl -module list -set -x -vglrun matlab -desktop -nosoftwareopengl -<%- else -%> -module list -set -x -matlab -desktop -<%- end -%> +ml MATLAB/R2023b +ml matlab-proxy/0.18.1-GCCcore-12.3.0 +matlab-proxy-app \ No newline at end of file diff --git a/view.html.erb b/view.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..f938494e605438e563b363423dfe331d38fad2c2 --- /dev/null +++ b/view.html.erb @@ -0,0 +1,10 @@ +<%- + base_url = "/node/#{host}/#{port}" +%> + +<form action="<%= base_url %>" target="_blank" > + <input type="hidden" name="mwi-auth-token" value="<%= password %>"> + <button class="btn btn-primary" type="submit"> + <i class="fa fa-cogs"></i> Connect to MATLAB + </button> +</form> \ No newline at end of file