Este repositório contém o código, os scripts de submissão e as ferramentas de análise de dados referentes ao artigo "Otimização de operações de E/S em aplicações científicas de aprendizado de máquina guiadas pelo Drishti".
O estudo foca na mitigação de gargalos de Entrada/Saída (I/O) no treinamento de Redes Neurais Operatórias (FNO) e U-Net, utilizando o benchmark PDEBench em ambientes de Computação de Alto Desempenho (HPC).
Este repositório inclui uma versão local do PDEBench.
- Dependências Nativas: Para informações detalhadas sobre as dependências originais da física e matemática do benchmark, consulte a documentação oficial do PDEBench.
- Modificações Realizadas: O código do PDEBench contido neste repositório foi modificado em relação ao original. As alterações foram feitas especificamente nos data loaders (
pdebench/models/fno/epdebench/models/unet/) para:- Instrumentar a fase de treinamento e extrair métricas de execução usando o Darshan DXT.
- Implementar estratégias de otimização de E/S, incluindo Alinhamento de Requisições (4KB), MPI-IO Coletivo e Buffering.
Para reproduzir este ambiente e executar os scripts de treinamento e análise, é necessário configurar o ambiente Python e as ferramentas de HPC.
O monitoramento de E/S e a geração de recomendações dependem do Darshan e do Drishti. Ambas as ferramentas não fazem parte do ambiente Python (Conda) e foram instaladas e compiladas localmente na máquina, seguindo rigorosamente as diretrizes de suas respectivas documentações oficiais.
É necessário ter o Miniconda ou Anaconda instalado para as dependências de Machine Learning.
-
Clone este repositório:
git clone [https://github.com/SEU_USUARIO/NOME_DO_REPOSITORIO.git](https://github.com/SEU_USUARIO/NOME_DO_REPOSITORIO.git) cd NOME_DO_REPOSITORIO -
Recrie o ambiente Conda a partir do arquivo de requisitos:
conda env create -f environment.yml conda activate nome_do_ambiente
O fluxo de trabalho deste repositório é dividido em execução no cluster (Slurm) e processamento de logs. Abaixo está a descrição do que cada script principal faz:
jobs/submit_workflow.sh: Script principal de orquestração. Ele dispara as rotinas de treinamento no gerenciador de filas Slurm, iterando sobre as variações físicas (ex: coeficientes do Advection e Burgers) e as estratégias de E/S.jobs/train.sh: O job script do Slurm submetido aos nós computacionais. Ele configura as variáveis de ambiente do Darshan (ex:DXT_ENABLE_IO_TRACE=1,LD_PRELOAD) e executa o código Python modificado do PDEBench alocando recursos de GPU (ex: RTX 4090).
extract-darshan-logs.py: Interage com os arquivos.darshangerados pela execução. Ele extrai os traços binários do DXT e os converte em um formato tabular legível para análise temporal e de vazão (throughput).process-all-logs.py: Consolida os dados extraídos de múltiplas rodadas do Darshan/Slurm. Útil para varrer diretórios de outputs e unificar os tempos de E/S e gargalos apontados.process-all-models.py: Lê os resultados de predição gerados pelo PDEBench (métricas numéricas como MSE, nRMSE e MaxError) para garantir a integridade convergencial da rede neural após as otimizações de E/S. Gera os arquivos CSV (ex:Evaluation_Summary_Per_Optimization.csv).
article/create-graph.py: Consome os arquivos.csvconsolidados e gera as figuras vetoriais em formato PDF (ex:comparacao-otimizacoes-FNO.pdf) utilizadas na seção de Resultados do artigo.
Este trabalho foi desenvolvido por pesquisadores do Instituto de Informática da Universidade Federal do Rio Grande do Sul (UFRGS):
- Arthur A. da Silva (
aasilva@inf.ufrgs.br) - Thiago Araújo (
tsaraujo@inf.ufrgs.br) - Cristiano A. Künas (
cakunas@inf.ufrgs.br) - Philippe O. A. Navaux (
navaux@inf.ufrgs.br)