Skip to content
Snippets Groups Projects
Commit 42988685 authored by Odair M.'s avatar Odair M.
Browse files

WIP: version 2 doc

parent d6908142
No related branches found
No related tags found
No related merge requests found
# with overline, for parts
* with overline, for chapters
= for sections
- for subsections
^ for subsubsections
" for paragraphs
......@@ -3,27 +3,32 @@
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
####################
C3HPC - Cluster C3SL
====================
####################
O C3SL possui um computador de alto desempenho (HPC), também conhecido como um cluster, para utilização em computação científica e de alta performance. O cluster foi adquirido com recursos provenientes de projetos de P&D do C3SL e é utilizado por diversos docentes e alunos do grupo.
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
:maxdepth: 3
:caption: Documentação:
:glob:
pages/*
pages/basic.rst
pages/architecture.rst
pages/application.rst
pages/advanced.rst
Descrição do cluster:
---------------------
=====================
.. include:: components/nodes.rst
Descrição das filas:
--------------------
====================
.. include:: components/partitions.rst
Acesso
######
Acesso ao cluster
*****************
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
......@@ -37,20 +38,20 @@ Exemplo de acesso por terminal Linux
➜ ~
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:
......@@ -65,7 +66,7 @@ Comando *scp*
| ``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
......@@ -86,7 +87,7 @@ Para copiar do cluster para sua máquina local é só inverter a ordem dos parâ
[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>``
......@@ -108,7 +109,7 @@ Os parâmetros utilizados no comando do ``rsync`` significam:
- ``-P`` Mostrar o progresso durante a cópia
Exemplo de cópia com comando *rsync*
------------------------------------
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Copiando diretório local para o cluster:
......
Mecanismos internos
###################
##########
Aplicações
##########
.. toctree::
:maxdepth: 1
:caption: Aplicações
ml.rst
Arquitetura do cluster
######################
################
Primeiros passos
################
.. toctree::
:maxdepth: 1
:caption: Primeiros passos
acesso.rst
overview.rst
quickstart.rst
===============
Framework Keras
===============
Estudo de caso de como executar aplicações que utilizam framework **keras** no cluster C3HPC.
Keras é um framework de *machine learning* escrito emcima do tensorflow.
.. contents::
:depth: 1
:local:
Preparando ambiente
-------------------
O primeiro passo consiste em preparar um ambiente para executar experimentos que utilize o framework
keras. Os seguintes pacotes são requeridos que sejam instalado pelo usuário:
* tensorflow-gpu
* keras
| Crie um diretório para o seu experimento:
.. code-block:: shell
:name: example-create-direcotry-env
:caption: Crie um diretório para o experimento.
mkdir -p <directory> && cd <directory>
Onde `<directory>` corresponde ao nome do diretório do seu experimento.
Exemplo:
.. code-block:: shell
:caption: Exemplo de criar um diretório para o experimento
:name: example-create-direcotry-env
[odair@c3hpc:~ ]$ mkdir -p deepdream && cd deepdream
[odair@c3hpc:~/deepdream ]$
Inicie um ambiente python para o experimento e instale os pacotes:
* tensorflow-gpu
* keras
Os seguintes gerenciadores de ambiente estão disponiveis:
.. contents::
:depth: 1
:local:
Gerenciador de ambiente Pipenv
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
O gerenciador de ambiente `pipenv` é preferível para gerenciar ambientes python.
Criar o ambiente
""""""""""""""""
Para criar ambiente python com `pipenv` use o comando `pipenv shell` que vai criar o ambiente e
ativar ele.
**Exemplo:**
.. code-block:: shell
:caption: Criando e ativando o gerenciador de ambiente pipenv
:name: pipenv-create-env
[odair@c3hpc:~/deepdream ]$ pipenv shell
Creating a virtualenv for this project...
Pipfile: /home/odair/deepdream/Pipfile
Using /usr/bin/python3 (3.9.2) to create virtualenv...
⠴ Creating virtual environment...created virtual environment CPython3.9.2.final.0-64 in 352ms
creator Venv(dest=/home/odair/.local/share/virtualenvs/deepdream-djfpP2vq, clear=False, no_vcs_ignore=False, global=False, describe=CPython3Posix)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/odair/.local/share/virtualenv)
added seed packages: pip==20.3.4, pkg_resources==0.0.0, setuptools==44.1.1, wheel==0.34.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
✔ Successfully created virtual environment!
Virtualenv location: /home/odair/.local/share/virtualenvs/deepdream-djfpP2vq
Creating a Pipfile for this project...
Launching subshell in virtual environment...
. /home/odair/.local/share/virtualenvs/deepdream-djfpP2vq/bin/activate
[odair@c3hpc:~/deepdream ]$ . /home/odair/.local/share/virtualenvs/deepdream-djfpP2vq/bin/activate
deepdream[odair@c3hpc:~/deepdream ]$
Quando executa `pipenv shell` ele cria o ambiente e inicia ele, veja que no exemplo
`pipenv-create-env`_ ele cria o ambiente com a versão do python que está instalado no nodo de login,
c3hpc, para utilizar outra versão é necessário carregar a versão do python que deseja e iniciar o
ambiente com `pipenv --python <versao>`
**Exemplo:**
.. code-block:: shell
:caption: Criando e ativando ambiente python com versão especifica
:name: pipenv-create-env-specific
[odair@c3hpc:~/deepdream ]$ module load python/3.6.8
[odair@c3hpc:~/deepdream ]$ pipenv shell --python 3.6.8
Creating a virtualenv for this project...
Pipfile: /home/odair/deepdream/Pipfile
Using /cluster/interpreters/python/3.6.8/bin/python3.6m (3.6.8) to create virtualenv...
⠧ Creating virtual environment...created virtual environment CPython3.6.8.final.0-64 in 206ms
creator Venv(dest=/home/odair/.local/share/virtualenvs/deepdream-djfpP2vq, clear=False, no_vcs_ignore=False, global=False, describe=CPython3Posix)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/odair/.local/share/virtualenv)
added seed packages: pip==20.3.4, pkg_resources==0.0.0, setuptools==44.1.1, wheel==0.34.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
✔ Successfully created virtual environment!
Virtualenv location: /home/odair/.local/share/virtualenvs/deepdream-djfpP2vq
Creating a Pipfile for this project...
Launching subshell in virtual environment...
. /home/odair/.local/share/virtualenvs/deepdream-djfpP2vq/bin/activate
[odair@c3hpc:~/deepdream ]$ . /home/odair/.local/share/virtualenvs/deepdream-djfpP2vq/bin/activate
deepdream [odair@c3hpc:~/deepdream ]$
Iniciar o ambiente
""""""""""""""""""
Para iniciar um ambiente python com pipenv utilize o comando `pipenv shell`.
**Exemplo:**
.. code-block:: shell
:caption: iniciando um ambiente python com pipenv
:name: pipenv-start-env
[odair@c3hpc:~/deepdream ]$ pipenv shell
Launching subshell in virtual environment...
. /home/odair/.local/share/virtualenvs/deepdream-djfpP2vq/bin/activate
[odair@c3hpc:~/deepdream ]$ . /home/odair/.local/share/virtualenvs/deepdream-djfpP2vq/bin/activate
deepdream [odair@c3hpc:~/deepdream ]$
É possível executar código python sem que esteja dentro do ambiente, com o comando `pipenv run
<file>` o pipenv vai iniciar o ambiente, executar código contido em `file` e sair do ambiente.
Instalar pacotes
""""""""""""""""
Para instalar pacotes com `pipenv` utilize o comando `pipenv install <pacotes>`, onde `<pacotes>`
é a listas de pacotes python a ser instalado no ambiente. No caso de estudo é necessário instalar
dois pacotes, então segue o exemplo:
**Exemplo:**
.. code-block:: shell
:caption: instalação de pacote com pipenv
:name: pipenv-install-package
deepdream [odair@c3hpc:~/deepdream ]$ pipenv install keras tensorflow-gpu
Installing keras...
Adding keras to Pipfile's [packages]...
✔ Installation Succeeded
Installing tensorflow-gpu...
Adding tensorflow-gpu to Pipfile's [packages]...
✔ Installation Succeeded
Pipfile.lock not found, creating...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Locking [dev-packages] dependencies...
Updated Pipfile.lock (c53080)!
Installing dependencies from Pipfile.lock (c53080)...
deepdream [odair@c3hpc:~/deepdream ]$
Desativar o ambiente
""""""""""""""""""""
Para sair do ambiente python existem as seguintes formas:
* `ctrl-d`
* `exit`
.. note::
Ao executar um experimento com `sbatch` é necessário que o ambiente esteja ativado ou seja ativado
dentro do arquivo do `sbatch`
Gerenciador de ambiente Anaconda3
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Gerenciador de ambiente Virtual env
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Estudo de caso: redes geradoras **DeepDream**
---------------------------------------------
Para representar o framework `keras` foi escolhido um exemplo contido na documentação oficial do
keras: `DeepDream`. **DeepDream** é uma técnica de imagem feito com redes neurais geradoras.
.. note::
O código fonte e como funciona não é relevante para nosso objetivo, que é demostrar como executar
experimentos que utilizam framework keras no cluster. Então faça o download do código fonte e
daremos uma rapida olhada
Execução em CPU
---------------
Execução em GPU
---------------
Analise de desempenho
---------------------
Dicas e recomendações
---------------------
****************
Machine learning
****************
.. toctree::
:maxdepth: 1
:caption: Primeiros passos
keras.rst
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.
......@@ -21,7 +22,7 @@ O uso de HPC para realizar processamento paralelo e de alto desempenho consiste
#. 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:
......@@ -31,7 +32,7 @@ Conceitos fundamentais
*Jobs*
======
------
Quando submete um programa para executar em um computador de processamento chamamos de jobs. Um jobs pode ter os seguintes estados:
......@@ -39,12 +40,12 @@ Quando submete um programa para executar em um computador de processamento chama
* 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
......@@ -61,12 +62,12 @@ Exemplo de ``sinfo``: Visualizando partições:
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
......@@ -93,14 +94,14 @@ No exemplo mostra trabalhos que estão sendo executados e os que não estão, al
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:
......@@ -124,13 +125,13 @@ Mostrando módulos
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
......@@ -151,11 +152,11 @@ Para demostrar como funciona verificaremos a versão padrão do ``python3`` e ca
| 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.
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á.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment