Este repositório contém a implementação de um servidor para aprendizado federado (Federated Learning), focado no recebimento, agregação e envio de pesos de modelos neurais em um ambiente distribuído.
atlantico-server/
├── novoServidor.py # Script central que roda todos as funcionalidades
├── metrics/ # Saída dos gráficos dos resultados contidos na pasta 'parse'
├── parse/ # Aqui coloca-se o resultado do processo federativo para cálculo das métricas
└── weights/ # Pasta que contém o output dos pesos recebidos e do processo federativo
- Recebimento de pesos de múltiplos clientes ESP32
- Agregação de modelos através de média ponderada
- Envio de pesos globais agregados aos dispositivos
- Orquestração de rodadas de treinamento federado
- Geração de visualizações e métricas de desempenho
- Análise comparativa entre diferentes dispositivos e rodadas
- Python 3.13 (tecnicamente pode rodar em 3.8 ou superior)
- Bibliotecas:
paho-mqttseabornnumpymatplotlib
- Broker MQTT
Instale as dependências através do pip:
pip install paho-mqtt matplotlib seaborn numpy
Caso esteja utilizando um ambiente virtual, ative-o antes de executar a instalação:
python -m venv venv
Certifique-se de ter um broker MQTT executando (por exemplo, Mosquitto):
# Instalar o Mosquitto (Ubuntu/Debian)
sudo apt-get install mosquitto mosquitto-clients
# Iniciar o serviço
sudo systemctl start mosquitto
python3 server.py
Ao executar o servidor, você terá acesso aos seguintes comandos:
- federate: Inicia um processo completo de aprendizado federado
- parse: Analisa os dados armazenados e gera visualizações gráficas
- send: Agrega os modelos disponíveis e envia aos dispositivos (comando manual de debug e teste)
- request: Solicita o envio de modelos dos dispositivos conectados (comando manual de debug e teste)
- listen: Inicia um servidor que apenas escuta e salva mensagens recebidas (comando de debug e teste)
Armazena os modelos recebidos dos dispositivos e os pesos agregados:
[cliente].json: Modelos recebidos de dispositivos individuaisaggregated_weights.json: Modelo agregado após cada rodada
Durante um processo federativo, uma pasta com timestamp é criada (ex: 2023-05-08_15-30-00/), contendo subpastas numeradas para cada rodada.
Local onde arquivos JSON de métricas são colocados para análise. O formato esperado inclui:
- Métricas de desempenho (accuracy, precision, recall, etc)
- Informações de temporização do treinamento
- Detalhes do dataset e configuração do modelo
Destino dos gráficos gerados pela função parse, incluindo:
plot_average_[metrica].png: Evolução da média de métricas por rodadaheatmap_[metrica].png: Mapa de calor comparando dispositivosmodel_architecture_[arquitetura].png: Visualização da rede neural- outros arquivos e métricas estão disponíveis
- O broker MQTT deve estar em execução antes de iniciar o servidor
- Para aprendizado federado completo, os dispositivos devem estar conectados antes de iniciar
- Recomenda-se verificar as configurações do broker MQTT para evitar desconexões por timeout
- Para análises dos dados, utilize a opção
parseapós finalizar um ciclo de aprendizado federado, depois de copiar o resultado do processo federado da pastaweightsaté a pastaparse