From 2eca8205404467fa83c61aed420f6df59c99b415 Mon Sep 17 00:00:00 2001 From: Odair M <odairmario45@gmail.com> Date: Mon, 26 Sep 2022 18:45:37 -0300 Subject: [PATCH] feat(Acesso): add how access and copy files doc build(Makefile,gitignore): Add struct of watch function on makefile, add 'nohup.out' on .gitignore feat(Html): Add favicon icon on html pages refactor(Access-page): Refactor the access page, rename sections and add some examples feat(Statics): Add static files, like favicon.svg, diagrams, and others feat(Overview-page): Add initial overview page feat(Quickstart-page): Add initial quickstart --- .gitignore | 1 + Makefile | 3 + diagrams/hpc-jobs | 1 + source/_static/favicon.png | Bin 0 -> 30261 bytes source/_static/hpc-favicon.svg | 4 + source/_static/hpc-slurm.svg | 4 + source/conf.py | 4 +- source/index.rst | 13 +-- source/pages/acesso.rst | 165 ++++++++++++++++++++++++++++++++- source/pages/overview.rst | 158 +++++++++++++++++++++++++++++++ source/pages/quickstart.rst | 113 ++++++++++++++++++++++ 11 files changed, 456 insertions(+), 10 deletions(-) create mode 100644 diagrams/hpc-jobs create mode 100644 source/_static/favicon.png create mode 100644 source/_static/hpc-favicon.svg create mode 100644 source/_static/hpc-slurm.svg create mode 100644 source/pages/overview.rst create mode 100644 source/pages/quickstart.rst diff --git a/.gitignore b/.gitignore index a007fea..504ee82 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ build/* +nohup.out diff --git a/Makefile b/Makefile index d0c3cbf..6042928 100644 --- a/Makefile +++ b/Makefile @@ -18,3 +18,6 @@ help: # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +#watch: +#@while inotifywait -r -q -e create,modify,delete --include '\.rst|md|png|jpg|svg' $(SOURCEDIR); do; make html; done; diff --git a/diagrams/hpc-jobs b/diagrams/hpc-jobs new file mode 100644 index 0000000..1ac190d --- /dev/null +++ b/diagrams/hpc-jobs @@ -0,0 +1 @@ +<mxfile host="app.diagrams.net" modified="2022-09-27T22:00:31.155Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" etag="iGI_iD0u3cRXg2_oZUu0" version="20.2.7" type="device" pages="2"><diagram id="W15Z6vlzwkSuKQkNdcMc" name="Page-1">3VjLdpswEP0aL9NjEGCyTO20WfSRc7xoupRhALUCESFiu1/fkRHmGdtN7ZM2G1tzNXpw58548ITM081HSfPkswiBT+xpuJmQxcS2HWeGnxrYVsDMJhUQSxZWkNUAS/YLDDg1aMlCKDqOSgiuWN4FA5FlEKgORqUU665bJHj31JzGMACWAeVD9BsLVVKhvj1r8DtgcVKfbHnX1UxKa2fzJEVCQ7FuQeR2QuZSCFWN0s0cuOau5qVa9+GZ2f3FJGTqlAWxnc6uaEq/zGkhH6Lr6dfbr1dmlyfKS/PAE9vjuN/7SOC2eGu1NVR4j6WoJ66KXaBu0MHycoz1+2YeR7H+npO7+3m920rWMBcxy3BdJkJRz+Klq+MqF8PX/mR7nTAFy5wG2l6jztApUSlHy8IhLfIq9BHbQKivyDifCy7kbjkJKfhRgHihpPgJrRkv8GEV7Y98Aqlg8yy/1j5qqHYQKSi5RRezgJg4G6HbjrHXLdkYKGkppsaoEWq837iJJQ5MOP8gtPZIaHu8Qhbe6BxBK+C0KFjQJVaKMgs1o4spWrBh6sHM6PF3jb9zjbXYtNwWW2NUR0I4SLIeq3gtUcoAjktVURmDOuBHxqPUCoM7EoYak8CpYk/d647FxpxwL9guT4wI3J4KHKcX3uoxzap2tvY2svyenPo6qXgYbLSTyv6xX64edygWDOLSmEKqRMQio/y2QXtyaXw+CZEb3fwApbamytNSia7eUBNy+1DrSBstjWmzEdnOqlWmi4fZ1PLOqzpyouqccdWdLKe/SnVyuSq+LFcpK4rJnExuiNA/5IAfZYofP8Tq1ALeKEOH+Ug571dvF/zQGavevr0innee6m3NevnmDsu3ZY8UDu9S9Xt2gMWX5tdoBbcPl/B/MCmdE5PSe82kvD5YQTORvdWSeWp0/NeMjjMomUteSl3WiiCBsOQg9QGD9vWxBFzQjyz29rkeJrChGD/0y0EyvCnIBr2vIfuUGoidbB2fkXD1amQUgReMdrjh7Ho1bTqxv+twneMt7miNvFiP6w2iiK8VMGx0u2l2jPsjXPsBjHO98l3HPRPXrt3jejrk2jvQx56dan+UavIWqXbd16XasgasXuKno09+l+QQIlruil/rLdEcjcgHpp9pd3SBlV4N3yN3sHGzzvwqOP0fuvL6lr2Ucd5gyhDrYtUJzeY/surttvmjkdz+Bg==</diagram><diagram id="gG9U-3tXi59px22t3YMS" name="Page-2">jZNRj5swDMc/DY9DLen1useW9XYPt2lStZ22lyklBrIlOAvmSvfp55RQik4nTULC+dnGzt8mEbntP3rp6k+owCTZQvWJ+JBk2XKVZUl4Fuo8kPv1egCV1yoGTeCg/0KEi0g7raCdBRKiIe3msMCmgYJmTHqPp3lYiWZe1ckKXoFDIc1r+qwV1QPdZPcTfwRd1WPl5fr94LFyDI43aWup8HSDxD4RuUekwbJ9DiaIN+oy5D284b025qGh/0lov3/9Vtvd/u5Z0Y/Tz8/bX38e38VhvEjTxQvHZuk8KsB9u2Bqe5Fq9wKeNAv0JI9gvmCrSWPD/iMSoeUAExw7WfyuPHaNytGgZ7+CUnaGbr6wNboKmYSOqWzdMMBS98A97y4FtyNdjITtmiiMfxsumz204Jz2NVouVMm0EK1Ju9L59OjZW6K3bYgiyUXZsKC05HcuDk/pZiVWYgll6pqKC0Q1uD/o35R5eR0ebz2gBfJnDokJYpx3XHhxF8+naX3EOspc36xOttnEtY0rW12/PU019D8MdjxOC3Tx3fyGYv8P</diagram></mxfile> \ No newline at end of file diff --git a/source/_static/favicon.png b/source/_static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1fe5d50295b29171359e35ba0eda0265c81e76c GIT binary patch literal 30261 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 S4;UC27(8A5T-G@yGywpC3(`IS literal 0 HcmV?d00001 diff --git a/source/_static/hpc-favicon.svg b/source/_static/hpc-favicon.svg new file mode 100644 index 0000000..5db9fc6 --- /dev/null +++ b/source/_static/hpc-favicon.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Do not edit this file with editors other than diagrams.net --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="363px" height="289px" viewBox="-0.5 -0.5 363 289" content="<mxfile host="app.diagrams.net" modified="2022-09-27T22:00:42.926Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" version="20.2.7" etag="7dh8qETLRTQd4icRR5wY" type="device"><diagram id="yK9j9OKbyVstAMrRAv1-">jZPNboMwDICfhitqSdd1x5Z122GTJvWwc0oMREtwFMxK9/RzSihF06RJSDif7fg3icht/+ylq99QgUmyheoT8Zhk2XKVZUn4Fuo8kPv1egCV1yoaTeCgvyHCRaSdVtDODAnRkHZzWGDTQEEzJr3H09ysRDOP6mQFv8ChkOY3/dCK6oFusvuJv4Cu6jHycv0waKwcjWMlbS0Vnm6Q2Cci94g0SLbPwYTmjX0Z/J7+0F4T89DQfxziIL6k6WJtMS86j8Vyii6I2l66svsCT5p78SqPYN6x1aSxYf0RidCygQmKnSw+K49do3I06FmvoJSdoZsbtkZXwZPQMZWtG2ZV6h44vd0l4Haki5GwXBOFSW9DXdlTC85pX6PlQJVMC9GatCudT4+etSV62wYrkhyUBQtKS/7n4vCablZiJZZQpq6pOEDsBucH/Z8dXV7nxAsOaIH8mU2igxhHG3db3MXzadoUsY5trm+2JNts4obG7ayud08DDPkPMxyP065cdDcvTux/AA==</diagram></mxfile>"><defs/><g><image x="-0.5" y="-0.5" width="362" height="288" xlink:href="https://seppirhomologa.c3sl.ufpr.br/forms/static/media/C3SL.843431ef.png" preserveAspectRatio="none"/></g></svg> \ No newline at end of file diff --git a/source/_static/hpc-slurm.svg b/source/_static/hpc-slurm.svg new file mode 100644 index 0000000..e9fb9ce --- /dev/null +++ b/source/_static/hpc-slurm.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Do not edit this file with editors other than diagrams.net --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="559px" height="169px" viewBox="-0.5 -0.5 559 169" content="<mxfile host="app.diagrams.net" modified="2022-09-26T22:02:00.321Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" version="20.2.7" etag="I-gZAyppvIGZ3Q2KB6kD" type="device"><diagram id="eYs5X8eWtEGqjjVirQgy">3VjJbtswEP0aHVtYq+VjYifNoQUC+ND0SIsjiSktKhQVy/36khZprbGFxkmQAoGjGQ6392aeR7bc5bb6xlGe/mAYqOXMcGW5K8txbM9xLPU3w/vaE7qz2pFwgnVQ41iTP6CdJqwkGIpOoGCMCpJ3nRHLMohEx4c4Z7tuWMxod9ccJTBwrCNEh96fBItU38KZN/47IElqdraDRT2yRSZY36RIEWa7lsu9sdwlZ0zUT9tqCVSBZ3Cp592+MHo8GIdMTJmgiXhGtNR3s5yAyqnXMZMryAOKvb518FQyM/ClOHByJQPsIJe8Xjfj8ilR/5fu3f3SrLbhxk1ZQjI5L2OYmVF5vnq7OkRDc9zZ2aVEwDpHkbJ3MqdkUCq2VFq2fERFXrMckwqwOiKhdMko44fpLkYQxpH0F4Kz39AaCaIQNvFxy2fgAqoXobSPBMnMBrYFwfcyRE8wOaxz2vG0vWtliHalreQwPqRzMjku3NAmHzRz4yy6Iyz2IIQMX6nMl1ZEUVGQqIshZ2WGFXirmbSgIuJBj6jnX8r/1dfWqmqFrfbaqLcE3CudgpU8gk62CcQT0Nf3J8PcwtEfwdH4OFAkyHP3EGPg6h3uGTkkumbR79HoeT1+6vvoWe3K6i1kh7186BNdozBY6MD18dqT6PeGbEsW1tpkXKQsYRmiN423x3cT852xXBP/CELstfiiUrBuwki6+P7BJIIyWkmizCZLDpZJE1XoelE7mJY2/jBtwslpMzkfphab/3aSuS43W1IU1tK1rlymviBBfpRb+fHINlPVsqFW8XRGO/tS6UOIvTGpDJ2NGwSXkUp73qsNf6iVtjNS5MEFxDI4Adi/1sKoXDqn9fIdCygcFtDi4wpoflKuMpZ9Nn0agdd0qh+BbzgQqDUtuRKRIkoBlxS4WmvQmT2VICf0uZEdaq4eU6iQZEDG5cCJPBTwxntvXM4UxZFNmkF4BPCeIsUxBNFo84bni82s6Txe17x557u3UUW6RPu2GBAmm2MY9nDdmjgH8xlYwwjGYd2EvudfCFbf6cE6G8IanGjmXoOqKcEerO7/CKvvvx+s9gDAt5DvPs5dPDHEqDzIV+u9Rm8tPbdEHf+wdSFVWQzffA5uHWZPU3l75O3lA9tQc5xeeg/fBT5/erv2m6mGNJsfW+pXr+YnK/fmLw==</diagram></mxfile>"><defs/><g><rect x="4" y="44" width="80" height="80" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 84px; margin-left: 5px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 16px;">C3HPC<br />login nodo</font></div></div></div></foreignObject><text x="44" y="88" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">C3HPC...</text></switch></g><path d="M 84 84 L 137.63 84" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 142.88 84 L 135.88 87.5 L 137.63 84 L 135.88 80.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 264 84 L 307.63 84" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 312.88 84 L 305.88 87.5 L 307.63 84 L 305.88 80.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="144" y="54" width="120" height="60" rx="9" ry="9" fill="#d5e8d4" stroke="#82b366" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 84px; margin-left: 145px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 16px;">Submissão de um job</font></div></div></div></foreignObject><text x="204" y="88" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Submissão de um job</text></switch></g><path d="M 425.43 66.86 L 488.43 32.08" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 493.02 29.54 L 488.58 35.99 L 488.43 32.08 L 485.2 29.86 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 434 84 L 487.63 84" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 492.88 84 L 485.88 87.5 L 487.63 84 L 485.88 80.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 334 44 L 414 44 L 434 84 L 414 124 L 334 124 L 314 84 Z" fill="#ffe6cc" stroke="#d79b00" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 84px; margin-left: 315px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Slurm scheduler/<br />queue</div></div></div></foreignObject><text x="374" y="89" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">Slurm scheduler...</text></switch></g><rect x="494" y="4" width="60" height="50" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 29px; margin-left: 495px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">node2</div></div></div></foreignObject><text x="524" y="34" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">node2</text></switch></g><rect x="494" y="59" width="60" height="50" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 84px; margin-left: 495px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">node3</div></div></div></foreignObject><text x="524" y="89" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">node3</text></switch></g><path d="M 488.02 125.81 L 424.7 102.59" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 492.95 127.62 L 485.17 128.49 L 488.02 125.81 L 487.58 121.92 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="494" y="114" width="60" height="50" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 139px; margin-left: 495px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">node4</div></div></div></foreignObject><text x="524" y="144" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="16px" text-anchor="middle">node4</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/source/conf.py b/source/conf.py index f6d7901..b622b9d 100644 --- a/source/conf.py +++ b/source/conf.py @@ -29,7 +29,7 @@ intersphinx_mapping = { "sphinx": ("https://www.sphinx-doc.org/en/master/", None), } intersphinx_disabled_domains = ["std"] -sphinx_rtd_size_width = "100%" +#sphinx_rtd_size_width = "100%" templates_path = ["_templates"] @@ -43,6 +43,6 @@ language = "pt_BR" html_theme = "sphinx_rtd_theme" html_static_path = ["_static", "_static/c3sl_logo.svg"] html_logo = "_static/c3sl_logo.svg" - +html_favicon = "_static/favicon.png" # -- Options for EPUB output epub_show_urls = "footnote" diff --git a/source/index.rst b/source/index.rst index f39e701..569e9cb 100644 --- a/source/index.rst +++ b/source/index.rst @@ -11,6 +11,13 @@ Acesso ao cluster: ------------------ Para utilizar o cluster, é necessário requisitar uma conta, vinculada a um professor C3SL, responsável pelo seu uso. A requisição pode ser feita pelo email `c3hpc@c3sl.ufpr.br`. +.. toctree:: + :maxdepth: 2 + :caption: Documentação: + :glob: + + pages/* + Descrição do cluster: --------------------- .. include:: components/nodes.rst @@ -20,9 +27,3 @@ Descrição das filas: -------------------- .. include:: components/partitions.rst -.. toctree:: - :maxdepth: 2 - :caption: Documentação: - :glob: - - pages/* diff --git a/source/pages/acesso.rst b/source/pages/acesso.rst index b7d5e97..4f916a0 100644 --- a/source/pages/acesso.rst +++ b/source/pages/acesso.rst @@ -1,2 +1,163 @@ -Formas de acessar o cluster -=========================== +Formas de acessos +################# +Esta página destina a mostrar meios de interagir com o cluster do c3sl. Acessar remotamente o cluster e copiar arquivos do computador pessoal para o cluster e depois copiar arquivos do cluster para computador pessoal. + +.. contents:: :depth: 4 + +Acesso via ssh +************** +| A forma de acessar o cluster é por meio do protocolo de acesso ssh (secure shell). +| O nome do cluster para acesso é: c3hpc.c3sl.ufpr.br + +Acesso ssh linux +================ +A principal forma de utilizar o *ssh* no linux é por meio do terminal. + +*ssh* terminal linux +-------------------- +| Abra o terminal e digite o comando: ``ssh <login>@c3hpc.c3sl.ufpr.br``. +| Onde: + +- <login> é o seu usuário do cluster + +Exemplo de acesso por terminal linux +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: console + + odair:~/ $ ssh odair@c3hpc.c3sl.ufpr.br + Linux c3hpc 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64 + ================================================================================ + + Suporte: c3hpc@c3sl.ufpr.br + + =============================================================================== + Last login: Wed Aug 31 19:28:56 2022 from 2801:82:80ff:8001:216:ccff:feaa:77 + ➜ ~ + +Acesso ssh windows +================== +TODO + +Termius +------- +TODO + + +Copiar de arquivos para o cluster +********************************* +Para copiar arquivos para o cluster é possível utilizar os comandos: *scp* ou *rsync* + +Comando *scp* +============= +| O comando scp (secure copy) funciona da mesma maneira que o comando *cp* só que precisa passar o servidor para onde está copiando. + +| Para copiar um arquivo local para o cluster utilize o comando: +| ``scp <arquivo> <login>@c3hpc.c3sl.ufpr.br:~/<destino>`` +| Onde: + + * <arquivo> é o nome ou caminho para o arquivo que deseja copiar. + * <login> É o seu usuário no cluster. + * <destino> É o nome ou caminho de destino do arquivo no cluster. + +| Para copiar diretórios é necessário passar a opção *-r* +| ``scp -r <diretório> <login>@c3hpc.c3sl.ufpr.br:~/<destino>`` + +Exemplo de cópia com *scp* +-------------------------- +O exemplo a seguir mostra como copiar um arquivo ou diretório com scp para sua conta no cluster: + +.. code-block:: console + + [odair@zaros ~]$ scp -r experimentos/ odair@c3hpc.c3sl.ufpr.br:~/ + exp2 100% 0 0.0KB/s 00:00 + exp1 100% 0 0.0KB/s 00:00 + script.sh 100% 0 0.0KB/s 00:00 + [odair@zaros ~]$ + +Para copiar do cluster para sua máquina local é só inverter a ordem dos parametros: + +.. code-block:: console + + [odair@zaros ~]$ scp -r odair@c3hpc.c3sl.ufpr.br:~/experimentos resultados + [odair@zaros ~]$ ls resultados/ + exp1 exp2 script.sh + [odair@zaros ~]$ + +Comando *rsync* +=============== +| O comando rsync é mais robusto que o scp, e segue a mesma lógica de uso. +| Para copiar um arquivo local para o cluster use: +| ``rsync -avhHP <arquivo> <login>@c3hpc.c3sl.ufpr.br:~/<destino>`` +| Para copiar um arquivo remoto do cluster para a sua máquina utilize: +| ``rsync -avhHP <login>@c3hpc.c3sl.ufpr.br:/<arquivo> <destino>`` + +Onde: + +- ``<arquivo>`` É o nome ou caminho para o arquivo que deseja copiar. +- ``<login>`` É o seu usuário no cluster. +- ``<destino>`` É o nome ou caminho de destino do arquivo no cluster. + +Os parametros utilizados no comando do ``rsync`` significam: + +- ``-a`` Copiar tanto arquivo quanto diretório. +- ``-v`` Mostrar uma saída mais detalhada. +- ``-h`` Mostrar valores em unidades humanas, como MB, GB +- ``-H`` Copiar e manter hard-links. +- ``-P`` Mostrar o progresso durante a cópia + +Exemplo de cópia com comando *rsync* +------------------------------------ + +Copiando diretório local para o cluster + +.. code-block:: console + + [odair@zaros ~]$ rsync -avhHP experimentos_v2/ odair@c3hpc.c3sl.ufpr.br:~/experimentos_v2/ + sending incremental file list + created directory /home/odair/experimentos_v2 + ./ + exp1 + 0 100% 0,00kB/s 0:00:00 (xfr#1, to-chk=2/4) + exp2 + 0 100% 0,00kB/s 0:00:00 (xfr#2, to-chk=1/4) + script.sh + 0 100% 0,00kB/s 0:00:00 (xfr#3, to-chk=0/4) + + sent 233 bytes received 130 bytes 242,00 bytes/sec + total size is 0 speedup is 0,00 + [odair@zaros ~]$ + + +Copiando diretório remoto do cluster para máquina local + +.. code-block:: console + + [odair@zaros ~]$ rsync -avhHP odair@c3hpc.c3sl.ufpr.br:~/experimentos_v2/ resultados_2 + receiving incremental file list + created directory resultados_2 + ./ + exp1 + 0 100% 0,00kB/s 0:00:00 (xfr#1, to-chk=2/4) + exp2 + 0 100% 0,00kB/s 0:00:00 (xfr#2, to-chk=1/4) + script.sh + 0 100% 0,00kB/s 0:00:00 (xfr#3, to-chk=0/4) + + sent 88 bytes received 235 bytes 129,20 bytes/sec + total size is 0 speedup is 0,00 + [odair@zaros ~]$ ls resultados_2/ + exp1 exp2 script.sh + [odair@zaros ~]$ + +.. tip:: + + | Recomendo criar um alias no .bashrc ou .zshrc para comandos de cópias, uma sugestão de alias é: + | ``alias copy="rsync -ahH --info=progress2 --mkpath"`` + + | O parametro ``--mkpath`` cria subdiretórios no destino, caso ele não exista, consulte ``man rsync`` para mais informações + | Com esse alias basta fazer: + + | ``copy <arquivo> <login>@c3hpc.c3sl.ufpr.br:<destino>`` + | ``copy <login>@c3hpc.c3sl.ufpr.br:<arquivo> <destino>`` + diff --git a/source/pages/overview.rst b/source/pages/overview.rst new file mode 100644 index 0000000..74c638d --- /dev/null +++ b/source/pages/overview.rst @@ -0,0 +1,158 @@ +Visão geral do cluster +###################### +A visão geral do cluster pode ser entendido pelos conceitos básicos de como funciona cada componente. Essa página se destina apenas introduzir os conceitos, que serão aprofundados em outras páginas. + +.. contents:: :depth: 4 + +Fluxo de trabalho do HPC +************************ +O primeiro passo é entender como o cluster e executar programas em computadores de alto desempenho funciona. + + +.. figure:: ../_static/hpc-slurm.svg + :alt: Diagrama de funcionamento de computação de alto desempenho. + +O uso de HPC para realizar processamento paralelo e de alto desempenho consiste em: + +#. Copiar o experimento para o HPC +#. Acessar o nodo de acesso, representado na figura pelo quadrado azul +#. Submeter o experimento para o gerenciador de trabalho do HPC, no caso o slurm. Representado na figura pelo retangulo verde. +#. O gerenciador de trabalho do HPC vai colocar o trabalho na fila e assim que tiver recursos disponíveis o gerenciador vai executar o seu trabalho. Representado na figura losango laranja. +#. A execução do seu experimento será feito em algum nodo de processamento *computing node*, o nodo escolhido será de acordo com as especificações do seu experimento. Os nodos de processamentos são representado pelo quadrado vermelhos. + +Conceitos fundamentais +********************** + + +.. contents:: Os principais conceitos que precisam serem entendidos são: + :depth: 2 + :local: + + + +*Jobs* +====== + +Definição de jobs + +Partições +========= +| Partições *partitions* são as filas de trabalho do cluster. Um cluster pode ter várias partições, normalmente as partições representam uma divisão de recursos físicos ou lógicos. Por exemplo uma partição especial que contém somente servidoras com placas de videos. +| Para visualizar as partições utilize o comando ``sinfo`` + +Exemplo de ``sinfo``: Visualizando partições: +--------------------------------------------- + +.. code-block:: console + + odair@c3hpc:~$ sinfo + PARTITION AVAIL TIMELIMIT NODES STATE NODELIST + 1d up 1-00:00:00 9 idle node[2-7],proc[1-2],pti + 7d up 7-00:00:00 2 alloc vti[1-2] + 7d up 7-00:00:00 9 idle node[2-7],proc[1-2],pti + ... ... ... ... + cpu up 7-00:00:00 9 idle node[2-7],proc[1-2],pti + cpu-long up 30-00:00:0 9 idle node[2-7],proc[1-2],pti + maratona-testing up 15:00 9 idle node[2-7],proc[1-2],pti + maratona up 1-00:00:00 9 idle node[2-7],proc[1-2],pti + odair@c3hpc:~$ + +Filas +===== +| As filas mostram os trabalhos que estão em execução, aguardando recursos serem liberados para executar e trabalhos com falhas. O comando para visualizar as filas é: +| ``squeue`` + +Exemplo de ``squeue`` +--------------------- +.. code-block:: console + + odair@c3hpc:~$ squeue -l + Mon Sep 26 23:47:07 2022 + JOBID PARTITION NAME USER STATE TIME TIME_LIMI NODES NODELIST(REASON) + 12139 gpu exp2 odair RUNNING 3:01 7-00:00:00 1 pti + 12142 gpu exp2 odair RUNNING 3:01 7-00:00:00 1 pti + 12138 gpu exp2 odair RUNNING 3:04 7-00:00:00 1 pti + 12150 maratona exp4 odair PENDING 0:00 1-00:00:00 1 (Resources) + 12151 maratona exp4 odair PENDING 0:00 1-00:00:00 1 (Priority) + 12149 maratona exp4 odair RUNNING 1:57 1-00:00:00 4 node[6-7],proc[1-2] + 12148 maratona exp4 odair RUNNING 2:12 1-00:00:00 4 node[4-7] + 12147 maratona exp4 odair RUNNING 2:15 1-00:00:00 3 node[3-5] + 12144 maratona exp3 odair RUNNING 2:47 1-00:00:00 1 node3 + 12143 maratona exp3 odair RUNNING 2:50 1-00:00:00 1 node3 + odair@c3hpc:~$ + +No exemplo mostra trabalhos que estão sendo executados e os que não estão, além do motivo para não estar em execução. O comando ``squeue -l`` mostra de forma longa a saída. + +.. tip:: + | Recomenda-se adicionar o seguinte alias no seu ``.bashrc`` ou ``.zshrc``: + | ``alias sq="squeue -u ${USER}"`` + | Esse alias faz com que só mostre *jobs* do seu usuário e não mostra de outros usuários. + + +Módulos +======= +| O cluster possui diversos softwares com diversas versões, para lidar com vários softwares com muitas versões se utiliza um mecanismo de módulo, onde o usuário carrega um software na versão X apenas para a sessão dele. +| Utilize o comando `module avail` para mostrar todos os módulos disponíveis. A saída será algo do genero: + +Em alguns casos algumas bibliotecas só funcionam em versões especifica do ``python`` ou do ``cuda``. Para o exemplo veremos qual a versão padrão do python3 e mudara para versão 3.8.4. + +Mostrando módulos +----------------- +| Para mostrar todos os módulos disponível no cluster utilize o comando: +| ``module avail`` +| A saída deve ser algo semelhante ao exemplo abaixo: + +.. code-block:: console + + odair@c3hpc:~$ module avail + ----------------------- /usr/local/Modules/modulefiles -------------- + applications/bazel/0.11.1 libraries/gdrcopy/gcc-6.4.0 + applications/cmake/3.11.0 libraries/gdrcopy/gcc-7.3.0 + ... ... + interpreters/python/3.6.8 libraries/openblas/0.2.20-gcc-6.4.0 + interpreters/python/3.8.14 libraries/openblas/0.2.20-gcc-7.3.0 + libraries/boost/1.66.0-gcc-6.4.0 libraries/openmpi/4.0.0-gcc-6.4.0 + ... ... + libraries/cuda/10.1 tools/nvtop/1.0.0-cuda9.0 + libraries/cuda/11.0 use.own + + Key: + loaded modulepath + odair@c3hpc:~$ + +Carregando módulos +------------------ +| Para carregar um módulo utilize o comando: +| ``module load <modulo>`` +| Onde: ``<module>`` é o nome do módulo a ser carregado. + +Exemplo carregando python3 versão 3.8.14 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Para demostrar como funciona módulos iremos verificar a versão padrão do ``python3`` e carregar a versão ``3.8.14`` + +.. code-block:: console + + testem@c3hpc:~$ python3 --version # verifica versão do login node + Python 3.9.2 + testem@c3hpc:~$ srun python3 --version # verifica versão de um computer node + Python 3.9.2 + testem@c3hpc:~$ module load interpreters/python/3.8.14 # carrega python3 versão 3.8.14 + testem@c3hpc:~$ python3 --version # verifica versão do login node + Python 3.8.14 + testem@c3hpc:~$ srun python3 --version # verifica versão de um computer node + Python 3.8.14 + testem@c3hpc:~$ + +| Vejam que após executar o comando: +| ``module load interpreters/python/3.8.14`` +| A versão do python3 muda. Módulos são uteis principalmente quando se deseja utilizar diferentes versões de cuda e python. + +Descarregando módulo +-------------------- +| Para fazer o *unload* de um determinado módulo execute o comando: +| ``module unload <modulo>`` Onde ``modulo`` é o nome do módulo. + +Requisitando módulos e softwares +-------------------------------- +Para requisitar módulos, novas versões de softwares ou até mesmo a intalação de novas aplicações envie email para c3hpc@c3sl.ufpr.br. + diff --git a/source/pages/quickstart.rst b/source/pages/quickstart.rst new file mode 100644 index 0000000..18fb5e4 --- /dev/null +++ b/source/pages/quickstart.rst @@ -0,0 +1,113 @@ +Guia rápido de submissão +************************ +A submissão de *jobs* pode ser realizado por dois comandos do gerenciador do cluster: ``srun`` e ``sbatch``. O comando ``srun`` executa na linha de comando e é bloqueante, equanto o comando ``sbatch`` executa um arquivo de configuração e não é bloqueante. + +.. contents:: :depth: 4 + +Principais parametros de submissão: +=================================== + * ``-p|--partition nome`` Especifica o nome da partição que o *job* será executado. + * ``-t|--time tempo`` Especifica um tempo limite para a execução do job. Caso o tempo limite especificado seja maior que o tempo da partição, o job ficará com o estado pendente (PENDING), possivelmente para sempre. Formatos de tempo aceitos: “minutos”, “minutos:segundos”, “horas:minutos:segundos”, “dias-horas”, “dias-horas:minutos” e “dias-horas:minutos:segundos”. + * ``-c|--cpus-per-task`` Especifica a quantidade de core/threads o seu programa vai utilizar. + * ``--mem tamano unidade`` Especifica quantidade de memória seu programa vai utilizar. + * ``-n NUM_PROCESSOS`` Especifica o número de processos a serem iniciados. + * ``-N NUM_NODOS`` Especifica que deverão ser alocados pelo menos NUM_NODOS nodos para a execução do job, ou seja, cada nodo vai executar NUM_PROCESSOS dividido por NUM_NODOS. + * ``–job-name=NOME`` Especifica o nome do Job que será executado. Este nome irá aparecer juntamente com o id do job na listagem de jobs do sistema. + * ``-e`` Especifica o redirecionamento do stderr. Exemplo: + ``-e arquivoErros.txt`` + + * ``-o`` Especifica o redirecionamento do stdout. Caso -e não tenha sido especificado, stderr também será enviado para o arquivo especificado. Exemplo: + ``-o arquivoSaida.txt`` ou ``--output arquivoSaida.txt`` +Comando *srun* +============== +| O comando ``srun`` submete um *job* para o escalanodador, por padrão esse comando é bloqueante. A sintaxe do comando é: +| ``srun executavel`` + +Exemplo: Execução simples do *srun* +----------------------------------- +O exemplo submete o programa ``/cluster/tests/omp/omp`` para fila de execução do cluster e será executado quando tiver recursos disponíveis. + +.. code-block:: console + + testem@c3hpc:~$ srun /cluster/tests/omp/omp + Missing arguments + Usage: /cluster/tests/omp/omp [-n|--nprocs] <cpus> [-t|--time] <time> + Examples: + Example 1: short options: To Execute program with 4 threads during 10 seconds: + /cluster/tests/omp/omp -n 4 -t 10 + Example 2: long options: To Execute program with 8 threads during 15 seconds: + /cluster/tests/omp/omp --nprocs 8 --time 15 + srun: error: node4: task 0: Exited with exit code 2 + testem@c3hpc:~$ srun /cluster/tests/omp/omp --nprocs 4 -t 4 + Time 4 Nproc 4 + count: 258531857 + count: 260249707 + count: 262771821 + count: 262113384 + testem@c3hpc:~$ + +| Para especificar a quantidade de recurso que o *job* vai utilizar passe como argumentos antes do programa. +| ``srun <argumentos do srun> executavel`` + + + +Exemplo: Execução com argumentos *srun* +--------------------------------------- +No exemplo abaixo, o executável é um programa em *openMP* que lança 4 threads, mas o srun só disponibiliza duas threads para ser executado. Portanto para que as quatros threads tenham aceso a 4 nucleo de processamento é necessário passar o argumento ``--cpus-per-task 4``. + +.. code-block:: + + testem@c3hpc:~$ srun --cpus-per-task 2 --mem 16G --partition maratona /cluster/tests/omp/omp --nprocs 4 -t 60 + Time 60 Nproc 4 + count: 430357224 + count: -63444304 + count: -21866144 + count: -33171848 + testem@c3hpc:~$ + + +Comando *sbatch* +================ +| O comando *sbatch* recebe como argumento um arquivo com as especificações do *jobs* que será executado. Sbatch é Uma opção mais comum é a utilização de um script, que contém as informações sobre o jobs que serão executados. No script, as opções de execução podem ser definidas utilizando-se o prefixo ``#SBATCH`` antes da opção. +| ``#SBATCH --time=1`` + +Abaixo, um exemplo de script que roda a aplicação “meuPrograma” que está dentro do diretório bin. A aplicação irá executar por no máximo 7 dias e é solicitado 1 nodo para a execução. + +.. code-block:: bash + #!/bin/sh + #SBATCH -p 7d + #SBATCH -t 7-00:00:00 + #SBATCH -n 1 + srun $HOME/meuPrograma + +| Para submeter o script, salve-o como meuscript.sh, e execute-o utilizando o comando sbatch. Muitos dos parâmetros do comando srun também são válidos para o sbatch. Os parâmetros passados ao sbatch irão sobrescrever os parâmetros existentes dentro do script sendo executado. Exemplo do comando: +| ``sbatch -o saida.txt meuscript.sh`` + + + +Modelo de arquivo *sbatch* +--------------------------- +.. code-block:: bash + + #!/bin/bash + #SBATCH -t 1-10:00:00 + #SBATCH --cpus-per-task=NUM_CPUS_POR_PROCESSO + #SBATCH -o ARQUIVO_DE_SAIDA + #SBATCH --job-name=NOME_JOB + #SBATCH -p PARTICAO_ONDE_SERA_EXECUTADO + #SBATCH -n NUM_DE_PROCESSOS + #SBATCH -N NUM_NODOS_NECESSARIOS + srun $HOME/meuPrograma parametro1Programa parametro2Programa + +| É possível sobrescrever os valores que estão no scripts pela linha de comando. Exemplo: +| ``sbatch -o saida.txt -t 5-00:00:00 meuscript.sh`` +| Note que o comando acima sobrescreve o parâmetro -t que já está presente no meuscript.sh. Isso fará com que o parâmetro no meuscript.sh seja ignorado, sendo assim, ao executar a linha acima, o tempo limite para a execução será de 5 dias. No entanto, recomenda-se que todos os parâmetros estejam dentro do script e que estes não sejam sobrecarregados pelo sbatch para facilitar a localização de erros e múltiplas execuções de um mesmo script. + +Cancelando *jobs* +================= +| Para cancelar um job que está rodando ou que está na fila para execução, utilize o comando scancel. Modo de uso: +| ``scancel jobId`` + +.. note:: + O **jobid** pode ser obitido através do comando **squeue** + -- GitLab