dmlls / jizt-tfg

Servicio de Resumen de Textos con AI en la Nube (versión TFG).
https://dmlls.github.io/jizt-tfg-website/
GNU General Public License v3.0
13 stars 3 forks source link

[Kubernetes] Gestión de los modelos de generación de resúmenes #59

Closed dmlls closed 3 years ago

dmlls commented 3 years ago

Los modelos de codificación y resumen de texto pueden llegar a tener un gran tamaño (del orden de GBs). Dado que los diferentes pods correspondientes a un modelo, p. ej. T5-large, van a utilizar todos ese mismo modelo, parece contraproducente que cada pod tenga su propia copia del mismo.

Una posible opción a explorar son los volúmenes de Kubernetes, que permiten establecer un espacio de memoria externo a los contenedores (p. ej., en el propio disco del servidor) al que pueden acceder de forma compartida (requiere una correcta configuración).

dmlls commented 3 years ago

Tras un análisis detenido de la documentación de Kubernetes correspondiente a los volúmenes, las opciones que mejor se ajustan a nuestro caso parecen ser:

Tras considerar las ventajas e inconvenientes de cada una de estas opciones, se ha decidido que la opción más adecuada es almacenar los modelos a través de un persistentVolumeClaim por los siguientes dos motivos principales:

dmlls commented 3 years ago

La forma en la que se va a trabajar va a ser la siguiente:

  1. Se implementará un PersistentVolume (PV) que incluirá los detalles de conexión con el Google Compute Engine (GCE) persistent disk (PD). El GCE PersistentDisk habrá sido proveído previamente con el modelo de Hugging Face que será utilizado para generar los resúmenes(p. ej. t5-large).
  2. A continuación, se implementará el PersistentVolumeClaim (PVC), el cual se asociará (bound) con el PersistentVolume. Se trata de una abstracción que permite que el PersistentVolumeClaim esté completamente desacoplado del sistema de almacenamiento subyacente (en nuestro caso GCE PersistentDisk).
  3. Finalmente, los pods correspondientes al encoder y al motor de resumen se vincularán con el PesistentVolumeClaim para poder acceder a los modelos almacenados en GCE PersistentDisk).

Como podemos ver, en el caso de que se cambiara de storage provider, solo habría que modificar el componente PersistentVolume para que se refiriera a la nueva localización del volumen (el cual podría ser AWS EBS, Azure Disk, CSI, o nuestro propio servidor con Glusterfs instalado, por ejemplo).

De esta forma, logramos separar la computación del almacenamiento.

La siguiente imagen ilustra los puntos indicados anteriormente (fuente):

PersistentVolumes

Adicionalmente, este vídeo proporciona una visión general pero instructiva de las diferentes estrategias de almacenamiento en Kubernetes.