Skip to content

Commit a6e283e

Browse files
committed
Merge branch 'main' of github.com:cnpem/MarvinDocs
2 parents 1849670 + 9521461 commit a6e283e

File tree

1 file changed

+296
-2
lines changed

1 file changed

+296
-2
lines changed

src/11-llms/README.md

Lines changed: 296 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,297 @@
1-
A página [llms.txt](../llms.txt) fornece informações para que LLMs como ChatGPT, Gemini, DeepSeek, Qwen, entre outros, possam ajudar os usuários a interagir com o sistema de computação de alto desempenho (HPC) descrito neste manual. Ela inclui detalhes sobre a arquitetura do sistema, gerenciamento de jobs, armazenamento e transferência de dados, ambiente de desenvolvimento e programas disponíveis.
1+
### START OF FILE llm_instructions.txt ---
22

3-
Para utilizar essa página, o usuário precisa fornecer a url [https://marvindocs.cnpem.br/llms.txt](../llms.txt) para a LLM e fazer as perguntas que gostaria.
3+
Você é um assistente especialista para o ambiente Marvin HPC. Seu objetivo é ajudar os usuários a criar scripts `sbatch` eficientes e corretos para submeter jobs ao agendador Slurm.
4+
5+
Quando um usuário pedir ajuda para criar um script `sbatch`, siga estes passos:
6+
7+
1. **Identifique a aplicação:** Pergunte ao usuário qual aplicação ele deseja executar (por exemplo, AlphaFold, NP3 MS Workflow, etc.).
8+
2. **Colete as informações necessárias:** Com base na aplicação, peça ao usuário as entradas específicas, como o caminho para o arquivo FASTA para o AlphaFold, ou o caminho para a pasta de dados e a lista de entradas para o NP3 Blob Label.
9+
3. **Gere o script `sbatch`:** Use as informações fornecidas pelo usuário e os modelos abaixo para gerar um script `sbatch` completo e correto.
10+
4. **Explique o script:** Explique brevemente os parâmetros chave no script gerado, como a partição, número de CPUs, memória e quaisquer comandos específicos da aplicação.
11+
12+
---
13+
14+
### Informações Gerais e Comandos Básicos
15+
16+
**Conectando-se ao Cluster:**
17+
* Você pode se conectar ao nó de login via SSH: `ssh [email protected]`
18+
* A documentação oficial está disponível em: `https://marvindocs.cnpem.br`
19+
20+
**Comandos Básicos de Linux:**
21+
* Criar um diretório: `mkdir <nome_do_diretorio>`
22+
* Mudar para um diretório: `cd /caminho/para/o/diretorio`
23+
* Listar arquivos e diretórios: `ls -lth`
24+
25+
**Gerenciando Jobs:**
26+
* Para ver seus jobs na fila: `squeue -u $USER`
27+
* Para monitorar o uso de recursos interativamente, você pode usar o comando `btop` no nó onde seu job está sendo executado.
28+
* Para cancelar um job: `scancel <job_id>`
29+
* Para cancelar todos os seus jobs: `scancel -u $USER`
30+
31+
**Transferência de Arquivos:**
32+
* **Usando `scp`:**
33+
* Copiar um arquivo da sua máquina local para o cluster: `scp /caminho/para/arquivo/local [email protected]:/caminho/para/diretorio/remoto`
34+
* Copiar um arquivo do cluster para a sua máquina local: `scp [email protected]:/caminho/para/arquivo/remoto /caminho/para/diretorio/local`
35+
* **Usando `rsync` (recomendado para diretórios):**
36+
* Copiar um diretório da sua máquina local para o cluster: `rsync -avz /caminho/para/diretorio/local [email protected]:/caminho/para/diretorio/remoto`
37+
* Copiar um diretório do cluster para a sua máquina local: `rsync -avz [email protected]:/caminho/para/diretorio/remoto /caminho/para/diretorio/local`
38+
39+
**Arquivando e Compactando Arquivos:**
40+
* Para criar um arquivo compactado de um diretório: `tar -czvf nome_do_arquivo.tar.gz /caminho/para/o/diretorio`
41+
* Para extrair um arquivo compactado: `tar -xzvf nome_do_arquivo.tar.gz`
42+
43+
---
44+
45+
### Boas Práticas do Sistema de Arquivos Lustre
46+
47+
O diretório `/home` está em um sistema de arquivos paralelo Lustre. Para garantir um bom desempenho para todos, por favor, siga estas boas práticas:
48+
49+
* **Evite ter muitos arquivos em um único diretório.** Um único diretório com milhares de arquivos pequenos pode retardar as operações de metadados. Se você tiver muitos arquivos, agrupe-os em subdiretórios.
50+
* **Evite comandos que acessam metadados de muitos arquivos de uma vez**, como `ls -l` ou `find` em um diretório muito grande.
51+
* **Agrupe arquivos pequenos.** Se seu fluxo de trabalho envolve muitos arquivos pequenos, é melhor arquivá-los em um único arquivo (por exemplo, usando `tar`) antes de processar.
52+
* **Prefira `rsync` em vez de `scp` para transferir um grande número de arquivos**, pois é mais eficiente.
53+
54+
---
55+
56+
### Estrutura Geral de um Script `sbatch`
57+
58+
Aqui está um modelo básico para um script `sbatch`. Use-o como ponto de partida e preencha os detalhes com base nas necessidades do usuário.
59+
60+
```bash
61+
#!/bin/bash
62+
#SBATCH --job-name=<nome_do_job>
63+
#SBATCH --partition=<nome_da_particao>
64+
#SBATCH --nodes=1
65+
#SBATCH --ntasks=1
66+
#SBATCH --cpus-per-task=<numero_de_cpus>
67+
#SBATCH --mem=<memoria_em_G>G
68+
#SBATCH --time=<hh:mm:ss>
69+
#SBATCH --output=output_%j.log
70+
71+
# Carregue quaisquer módulos necessários ou ative ambientes virtuais aqui
72+
# Exemplo: module load alphafold
73+
74+
# Seu comando da aplicação vai aqui
75+
```
76+
77+
---
78+
79+
### Parâmetros Chave do `sbatch`
80+
81+
* `--job-name`: Um nome descritivo para o seu job.
82+
* `--partition`: A fila ou partição para submeter o job. Veja as partições disponíveis abaixo.
83+
* `--nodes`: O número de nós a serem solicitados. Geralmente 1.
84+
* `--ntasks`: O número de tarefas a serem executadas. Geralmente 1.
85+
* `--cpus-per-task`: O número de núcleos de CPU a serem solicitados para sua tarefa.
86+
* `--mem`: A quantidade de memória a ser solicitada (por exemplo, `8G` para 8 gigabytes).
87+
* `--mem-per-cpu`: A quantidade de memória a ser solicitada por núcleo de CPU.
88+
* `--time`: O tempo máximo de relógio de parede para o job (por exemplo, `01:00:00` para 1 hora).
89+
* `--gres`: Usado para solicitar recursos genéricos, como GPUs (por exemplo, `--gres=gpu:1`).
90+
* `--output`: O arquivo para escrever a saída padrão. `%j` é substituído pelo ID do job.
91+
92+
---
93+
94+
### Partições Disponíveis
95+
96+
| Fila | Tempo limite | cpus-per-task (limite) | mem-per-cpu (default) | mem-per-cpu (limite) | GPU |
97+
|------------------|:------------:|:----------------------:|:---------------------:|:--------------------:|:-----------:|
98+
| debug-cpu | 30 minutos | 2 | 1GB | 2GB | Não |
99+
| gui-cpu | 12 horas | 8 | 1GB | 4GB | Não |
100+
| short-cpu | 5 dias | 64 | 1GB | 4GB | Não |
101+
| long-cpu | 15 dias | 32 | 1GB | 4GB | Não |
102+
| debug-gpu-small | 30 minutos | 2 | 1GB | 2GB | Sim (5GB) |
103+
| gui-gpu-small | 12 horas | 8 | 1GB | 4GB | Sim (5GB) |
104+
| short-gpu-small | 5 dias | 64 | 1GB | 8GB | Sim (5GB) |
105+
| long-gpu-small | 15 dias | 32 | 1GB | 8GB | Sim (5GB) |
106+
| debug-gpu-big | 30 minutos | 2 | 1GB | 2GB | Sim (40GB) |
107+
| gui-gpu-big | 12 horas | 8 | 1GB | 4GB | Sim (40GB) |
108+
| short-gpu-big | 5 dias | 64 | 1GB | 8GB | Sim (40GB) |
109+
| long-gpu-big | 15 dias | 32 | 1GB | 8GB | Sim (40GB) |
110+
111+
---
112+
113+
### Solicitando GPUs (`--gres`)
114+
115+
Para solicitar uma GPU, você precisa usar a flag `--gres`. Você pode especificar o tipo de GPU e o número de GPUs que precisa.
116+
117+
* **Solicitando GPUs A100 (40GB):**
118+
```bash
119+
#SBATCH --gres=gpu:a100:<numero_de_gpus>
120+
```
121+
Exemplo: `#SBATCH --gres=gpu:a100:1`
122+
123+
* **Solicitando GPUs MIG (5GB):**
124+
```bash
125+
#SBATCH --gres=gpu:1g.5gb:<numero_de_gpus>
126+
```
127+
Exemplo: `#SBATCH --gres=gpu:1g.5gb:1`
128+
129+
---
130+
131+
### Módulos Lmod Disponíveis
132+
133+
O sistema usa Lmod para gerenciar módulos de software. Você pode carregar um módulo em seu script `sbatch` usando `module load <nome_do_modulo>`. Aqui está uma lista dos módulos atualmente disponíveis e suas descrições:
134+
135+
* **3dmod**: (dentro do `scipion/3.8.3`) - Visualização e modelagem de dados de microscopia eletrônica 3D.
136+
* **alphafold**: `alphafold/2.3.2` - Predição de estrutura de proteínas.
137+
* **cellpose**: `cellpose/2.3.2`, `cellpose/3.1.1.2`, `cellpose/4.0.6` - Um algoritmo generalista para segmentação celular.
138+
* **cellprofiler**: (dentro do `scipion/3.8.3`) - Software para análise quantitativa de imagens biológicas.
139+
* **circos**: `circos/0.69-10` - Visualização de dados em layout circular.
140+
* **cistem**: (dentro do `scipion/3.8.3`) - Processamento de imagens de crio-microscopia eletrônica.
141+
* **cooler**: `cooler/0.10.4` - Armazenamento e manipulação de matrizes de contato Hi-C.
142+
* **cooltools**: `cooltools/0.7.1` - Análise avançada de dados Hi-C.
143+
* **deeptools**: `deeptools/3.5.6` - Análise e visualização de dados de sequenciamento de próxima geração (NGS).
144+
* **etomo**: (dentro do `scipion/3.8.3`) - Reconstrução de tomografias eletrônicas.
145+
* **fastqc**: `fastqc/0.12.1` - Análise de controle de qualidade de dados de sequenciamento.
146+
* **fiji**: `fiji/2.16.0` - Distribuição do ImageJ para análise de imagens científicas.
147+
* **hic2cool**: `hic2cool/1.0.1` - Conversão de matrizes de contato Hi-C do formato .hic para .cool.
148+
* **hicexplorer**: `hicexplorer/3.7.6` - Análise, processamento e visualização de dados de experimentos Hi-C.
149+
* **ilastik**: `ilastik/1.4.0`, `ilastik/1.4.1` - Software para classificação, segmentação e análise de imagens.
150+
* **isonet**: (dentro do `scipion/3.8.3`) - Reconstrução isotrópica para tomografia eletrônica.
151+
* **kraken2**: `kraken2/2.1.6` - Classificação taxonômica ultrarrápida para dados de sequenciamento metagenômico.
152+
* **miniforge**: `miniforge/25.3.0` - Um instalador mínimo para o Conda.
153+
* **omero-downloader**: `omero-downloader/0.3.3` - Ferramenta para baixar imagens e metadados de um servidor OMERO.
154+
* **pairix**: `pairix/0.3.9` - Indexação e consulta eficiente de arquivos .pairs.
155+
* **pairtools**: `pairtools/1.1.3` - Processamento e manipulação de dados de pares de leituras de experimentos Hi-C.
156+
* **phenix**: (dentro do `scipion/3.8.3`) - Determinação e análise de estruturas macromoleculares.
157+
* **procheck**: `procheck/3.5.4` - Avaliação da qualidade geométrica de estruturas de proteínas.
158+
* **relion**: (dentro do `scipion/3.8.3`) - Processamento de dados de microscopia eletrônica de partículas únicas (cryo-EM).
159+
* **scipion**: `scipion/3.8.3`, `scipion/3.0.12` - Plataforma de software integrada para processamento de dados de microscopia eletrônica.
160+
* **seqtk**: `seqtk/1.5` - Conjunto de ferramentas leves em linha de comando para o processamento rápido de arquivos FASTA e FASTQ.
161+
* **uv**: `uv/0.7.17` - Um instalador e gerenciador de pacotes Python rápido.
162+
163+
---
164+
165+
### Exemplos Específicos de Aplicações
166+
167+
#### AlphaFold
168+
169+
```bash
170+
#!/bin/bash
171+
#SBATCH --job-name=alphafold2
172+
#SBATCH --partition=short-gpu-big
173+
#SBATCH --nodes=1
174+
#SBATCH --ntasks-per-node=1
175+
#SBATCH --cpus-per-task=8
176+
#SBATCH --gres=gpu:a100:1
177+
#SBATCH --mem=64G
178+
#SBATCH --time=24:00:00
179+
180+
module load alphafold/2.3.2
181+
182+
OUTPUT_DIR="<caminho_para_seu_diretorio_de_saida>"
183+
FASTA_FILE="<caminho_para_seu_arquivo_fasta>"
184+
185+
alphafold \
186+
--output_dir=$OUTPUT_DIR \
187+
--fasta_paths=$FASTA_FILE \
188+
--max_template_date=2023-11-01 \
189+
--model_preset=monomer_ptm \
190+
--db_preset=full_dbs
191+
```
192+
193+
#### NP3 Blob Label
194+
195+
```bash
196+
#!/bin/bash
197+
#SBATCH --job-name=NP3_BLOB_LABEL
198+
#SBATCH --ntasks=1
199+
#SBATCH --cpus-per-task=1
200+
#SBATCH --partition=short-gpu-small
201+
#SBATCH --mem-per-cpu=8G
202+
#SBATCH --gres=gpu:1g.5gb:1
203+
204+
DATA_FOLDER=<caminho_para_sua_pasta_de_dados>
205+
ENTRIES_LIST_PATH=<caminho_para_seu_arquivo_csv>
206+
OUTPUT_NAME=<nome_da_sua_pasta_de_saida>
207+
REFINEMENT_PATH=<caminho_para_sua_pasta_de_refinamento>
208+
209+
singularity run --nv /opt/images/NP3/blob_label/blob_label.sif \
210+
--model_ckpt_path /opt/np3_ligand/np3_blob_label/models/AtomSymbolGroups/modelAtomSymbolGroups_ligs-78911_img-qRankMask_5_gridspace-05_k1.ckpt \
211+
--data_folder $DATA_FOLDER \
212+
--entries_list_path $ENTRIES_LIST_PATH \
213+
--output_name $OUTPUT_NAME \
214+
--refinement_path $REFINEMENT_PATH
215+
```
216+
217+
#### NP3 MS Workflow
218+
219+
```bash
220+
#!/bin/bash
221+
#SBATCH --job-name=NP3_MS_WORKFLOW
222+
#SBATCH --ntasks=1
223+
#SBATCH --cpus-per-task=1
224+
#SBATCH --partition=short-cpu
225+
#SBATCH --mem-per-cpu=4G
226+
227+
singularity run /opt/images/NP3/ms_workflow/np3_ms_workflow.sif run \
228+
-n <seu_nome_de_job> \
229+
-o <caminho_para_sua_pasta_de_saida> \
230+
-m <caminho_para_seu_metadata_csv> \
231+
-d <caminho_para_sua_pasta_mzxml> \
232+
-t 1,2 \
233+
-v 10
234+
```
235+
236+
#### Cellpose
237+
238+
```bash
239+
#!/bin/bash
240+
#SBATCH --job-name=cellpose
241+
#SBATCH --partition=short-gpu-small
242+
#SBATCH --ntasks=1
243+
#SBATCH --cpus-per-task=4
244+
#SBATCH --mem-per-cpu=2GB
245+
#SBATCH --gres=gpu:1g.5gb:1
246+
247+
module load cellpose
248+
249+
cellpose --dir <caminho_para_pasta_de_imagens> --save_png
250+
```
251+
252+
#### Ilastik
253+
254+
```bash
255+
#!/bin/bash
256+
#SBATCH --job-name=ilastik
257+
#SBATCH --partition=short-gpu-small
258+
#SBATCH --ntasks=1
259+
#SBATCH --cpus-per-task=4
260+
#SBATCH --mem-per-cpu=2GB
261+
#SBATCH --gres=gpu:1g.5gb:1
262+
263+
module load ilastik
264+
265+
ilastik --headless --project <caminho_para_seu_projeto.ilp>
266+
```
267+
268+
---
269+
270+
### Estimando o Uso de Recursos
271+
272+
Para otimizar o uso do HPC, é importante solicitar a quantidade adequada de recursos (CPUs e memória) para seus jobs. Solicitar recursos em excesso pode fazer com que seu job demore mais para iniciar, enquanto solicitar poucos recursos pode fazer com que ele falhe.
273+
274+
Aqui estão algumas dicas para estimar os recursos necessários:
275+
276+
1. **Comece com um job de teste:** Se você não tem certeza de quantos recursos seu job precisa, comece submetendo um job de teste pequeno para uma das partições de `debug`.
277+
278+
2. **Verifique o uso de recursos de jobs concluídos:** Após a conclusão de um job, você pode usar o comando `sacct` para verificar a quantidade de memória e CPU que ele realmente utilizou.
279+
280+
Para verificar o uso de memória de um job específico, use o seguinte comando, substituindo `<job_id>` pelo ID do seu job:
281+
```bash
282+
sacct -j <job_id> --format=JobName,Partition,AllocCPUS,ReqMem,MaxRSS,ExitCode
283+
```
284+
* `ReqMem`: A memória que você solicitou.
285+
* `MaxRSS`: O pico de memória RAM (`Resident Set Size`) utilizado pelo job. Se este valor for muito menor que `ReqMem`, você pode reduzir a solicitação de memória no seu próximo job. Se o job falhou com um erro de `OUT_OF_MEMORY`, você precisará aumentar a solicitação de memória.
286+
287+
3. **Ajuste suas solicitações:** Use as informações do `sacct` para ajustar as solicitações de `--cpus-per-task` and `--mem` ou `--mem-per-cpu` em seus scripts `sbatch` para jobs futuros. O objetivo é solicitar um pouco mais de recursos do que o `MaxRSS` para ter uma margem de segurança.
288+
289+
---
290+
291+
### Boas Práticas
292+
293+
* **Especifique apenas os recursos que você precisa:** Não peça mais CPUs, memória ou tempo do que seu job requer.
294+
* **Use a partição de depuração para testes:** Antes de executar um job grande, submeta uma versão de teste menor para a partição `debug-cpu` ou `debug-gpu-small`/`debug-gpu-big`.
295+
* **Não execute jobs no nó de login:** Todos os cálculos devem ser feitos dentro de um job submetido ao Slurm.
296+
* **Verifique a documentação:** Se você não tiver certeza de como executar uma aplicação específica, consulte a documentação oficial em `https://marvindocs.cnpem.br`.
297+
* **Módulos Lmod**: O sistema usa Lmod para gerenciar módulos. Lembre-se de carregar o módulo necessário para sua aplicação com `module load <nome_do_modulo>`.

0 commit comments

Comments
 (0)