Este proyecto está diseñado para implementar un sistema de aprendizaje federado utilizando la biblioteca Flower (flwr) y PyTorch. A continuación se describe la estructura del proyecto, el flujo de ejecución y los pasos para ejecutar el sistema.
El proyecto se organiza en:
- Descripción: Script principal que coordina la ejecución del servidor y los clientes.
- Descripción: Inicia el servidor federado con la estrategia de agregación configurada.
- Descripción: Inicia múltiples instancias de clientes federados.
- Descripción: Implementa la lógica del cliente federado, incluyendo el entrenamiento del modelo y la comunicación con el servidor.
- Descripción: Define el modelo de red neuronal utilizado para el entrenamiento.
- Descripción: Funciones de utilidad comunes a varias estrategias.
- Descripción: Archivo de configuración que especifica los parámetros del modelo, entrenamiento, servidor y clientes.
-
Descripción: Carpeta que contiene el dataset utilizado en el proyecto.
diabetes_data.csv
: Dataset utilizado para predecir si un paciente tiene o no diabetes. Cada fila del archivo representa un paciente con varias características médicas y demográficas, y la columna objetivo indica la presencia o no de diabetes.
-
Descripción: Carpeta que contiene implementaciones de diferentes estrategias de agregación federada.
fedavg_strategy.py
: Implementación de la estrategia FedAvg (Referencia).fedprox_strategy.py
: Implementación de la estrategia FedProx (Referencia).fednova_strategy.py
: Implementación de la estrategia FedNova (Referencia).scaffold_strategy.py
: Implementación de la estrategia Scaffold (Referencia).custom_strategy.py
: Implementación de una estrategia híbrida de ponderación personalizada con la que se han obtenido los mejores resultados de media.
- Descripción: Carpeta que contiene scripts de evaluación de los modelos obtenidos tras el aprendizaje federado.
- Descripción: Carpeta que contiene los resultados de las exactitudes a lo largo de las rondas de los clientes y del modelo combinado.
-
Inicio del Servidor:
- El script
main.py
inicia el servidor federado constart_server.py
. El servidor se configura de acuerdo con la estrategia de agregación especificada enconfiguracion.yaml
.
- El script
-
Inicio de los Clientes:
- Luego de iniciar el servidor,
main.py
lanza el scriptstart_clients.py
para iniciar múltiples instancias de clientes. Cada cliente se conecta al servidor federado y participa en el proceso de entrenamiento.
- Luego de iniciar el servidor,
-
Entrenamiento y Evaluación:
- Cada cliente realiza el entrenamiento del modelo utilizando los datos particionados. Los clientes envían los parámetros del modelo entrenado al servidor.
- El servidor agrega los parámetros recibidos de todos los clientes usando la estrategia especificada (FedAvg, FedProx, FedNova) y actualiza el modelo global.
- Este proceso se repite en varias rondas de entrenamiento según el número de rondas definido en
configuracion.yaml
.
-
Agregación de Modelos:
- En cada ronda, el servidor recibe los parámetros del modelo de todos los clientes, los agrega utilizando la estrategia especificada, y guarda el modelo global. La estrategia de agregación puede incluir métodos como FedAvg (promedio de los parámetros), FedProx (con proximidad), o FedNova (normalización de gradientes).
-
Finalización del Entrenamiento:
- El proceso de entrenamiento y agregación se repite hasta completar el número de rondas definido en
configuracion.yaml
. Tras completar las rondas, el entrenamiento finaliza.
- El proceso de entrenamiento y agregación se repite hasta completar el número de rondas definido en
Para ejecutar el sistema de aprendizaje federado, sigue estos pasos:
-
Prepara el Entorno:
-
Asegúrate de tener todas las dependencias necesarias instaladas. Puedes instalar las dependencias utilizando el archivo
requirements.txt
. Ejecuta el siguiente comando en tu terminal:pip install -r requirements.txt
-
-
Configura el Archivo
configuracion.yaml
:- Ajusta los parámetros del modelo, entrenamiento, servidor y clientes según tus necesidades en el archivo
configuracion.yaml
.
- Ajusta los parámetros del modelo, entrenamiento, servidor y clientes según tus necesidades en el archivo
-
Inicia el Sistema:
-
Ejecuta el script principal con:
python main.py
-
Este comando iniciará el servidor y lanzará los clientes federados para comenzar el proceso de entrenamiento federado.
-
Este proyecto proporciona una base sólida para experimentar con el aprendizaje federado y puede ser extendido con nuevas estrategias, ajustes en el modelo y parámetros de entrenamiento.