From fb7cdc83ca13e24b342cb997973273ce2759e3db Mon Sep 17 00:00:00 2001 From: Odair M <odairmario45@gmail.com> Date: Sun, 9 Oct 2022 00:13:19 +0000 Subject: [PATCH] feat(Acesso): add how access and copy files doc --- .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 | 166 ++++++++++++++++++++++++++++++++- source/pages/overview.rst | 161 ++++++++++++++++++++++++++++++++ source/pages/quickstart.rst | 113 ++++++++++++++++++++++ 11 files changed, 460 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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 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..7b333f7 100644 --- a/source/pages/acesso.rst +++ b/source/pages/acesso.rst @@ -1,2 +1,164 @@ -Formas de acessar o cluster -=========================== +Acesso +###### +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:: Formas de acesso + :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 parâmetros: + +.. 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 parâmetros 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..9629a01 --- /dev/null +++ b/source/pages/overview.rst @@ -0,0 +1,161 @@ +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 retângulo verde. +#. O gerenciador de trabalho do HPC colocará o trabalho na fila e assim que tiver recursos disponÃveis o gerenciador executará o *job* Representado na figura losango laranja. +#. A execução do seu experimento será feito em algum nodo de processamento *computing node*, o nodo escolhido será conforme as especificações do seu experimento. Os nodos de processamentos são representados pelo quadrado vermelhos. + +Conceitos fundamentais +********************** + + +.. contents:: Os principais conceitos que precisam serem entendidos são: + :depth: 2 + :local: + + + +*Jobs* +====== + +Quando submete um programa para executar em um computador de processamento chamamos de jobs. Um jobs pode ter os seguintes estados: + + * PENDING: está na fila para ser executado. + * RUNNING: está sendo executado + +Partições +========= +| Partições *partitions* podem serem vistas como 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 contém somente servidoras com placas de vÃdeos. +| 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 adicionar o seguinte alias no seu ``.bashrc`` ou ``.zshrc``: + | ``alias sq="squeue -u ${USER}"`` + | Esse, aliás 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 gênero: + +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Ãveis 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 verificaremos 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 instalação de novas aplicações envie e-mail para c3hpc@c3sl.ufpr.br. + diff --git a/source/pages/quickstart.rst b/source/pages/quickstart.rst new file mode 100644 index 0000000..4344a3d --- /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, enquanto o comando ``sbatch`` executa um arquivo de configuração e não é bloqueante. + +.. contents:: :depth: 4 + +Principais parâmetros 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 utilizará. + * ``--mem tamano unidade`` Especifica quantidade de memória seu programa 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 escalonador, 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* 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, as, quatro que as quatros threads tenham aceso a 4 núcleo 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á no 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 no 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 que todos os parâmetros estejam no 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