Amazon S3, el servicio de almacenamiento en la nube de AWS, es una pieza fundamental para muchas empresas que requieren durabilidad y disponibilidad de datos a gran escala. En un esfuerzo por mejorar la eficiencia y fiabilidad de S3, AWS desarrolló en 2021 una nueva arquitectura de nodo de almacenamiento llamada ShardStore. Este nuevo sistema de almacenamiento, implementado en Rust, representaba una evolución significativa en el diseño de almacenamiento y en la validación de datos, incorporando métodos formales ligeros para garantizar su corrección.
Hoy os vamos a contar un poco más sobre esta arquitectura y por qué puede beneficiar a tus modelos LLMs.
¿Por qué Rust?
Rust fue elegido debido a su habilidad para manejar concurrencia y garantizar seguridad de memoria sin sacrificar rendimiento. La implementación en Rust permite una manipulación directa de bajo nivel, necesaria para optimizar el rendimiento en un sistema de almacenamiento masivo. Este lenguaje también facilita el desarrollo de modelos de validación que aseguren la consistencia y durabilidad de los datos.
Arquitectura de ShardStore
ShardStore, a diferencia de arquitecturas anteriores, utiliza un árbol de fusión estructurado en registro (LSM Tree) para organizar los datos en el disco. Se trata de una estructura de datos usada en bases de datos y sistemas de almacenamiento para gestionar grandes volúmenes de escritura de forma eficiente. Es especialmente útil en sistemas que requieren un alto rendimiento para escrituras secuenciales en disco.
ShardStore introduce varias innovaciones de interés:
División en Shards y Chunks: Los datos se fragmentan en pequeñas porciones llamadas shards, que luego se dividen en chunks (subdivisiones aún menores). Cada chunk se almacena en extents, que son bloques de almacenamiento contiguos en disco, y su ubicación se rastrea mediante un árbol de índices.
Estrategia Append-Only: Los datos se escriben de forma secuencial en los extents mediante una política de solo-apend, minimizando la fragmentación y facilitando la recolección de basura. Este enfoque también reduce la amplificación de escritura, un factor clave para la longevidad y rendimiento de los SSD, el hardware previsto para ShardStore.
Separación de Claves y Valores: Inspirado en el diseño de WiscKey, ShardStore emplea un LSM Tree que almacena solo claves y punteros a los datos reales, ubicados en extents separados. Este diseño “sin valores” permite que el árbol LSM sea más compacto, reduciendo la carga de escritura y mejorando la velocidad de acceso, un ajuste perfecto para las características de acceso aleatorio de los SSD.
Validación con Métodos Formales Ligeros
Para asegurar la integridad de ShardStore, AWS ha incorporado métodos en su proceso de validación que no solo mejoran la detección de errores, sino que también automatizan la validación en cada cambio de código, garantizando que el sistema se comporte de acuerdo con especificaciones rigurosas. Las principales herramientas y enfoques incluyen:
Modelos de referencia ejecutables: Son especificaciones que definen el comportamiento esperado del sistema, escritas en Rust (el mismo lenguaje del sistema). Estos modelos son versiones simplificadas del sistema real (cubren alrededor del 1% del código total) y representan cómo debería comportarse ShardStore en condiciones ideales y sin errores.
Pruebas basadas en propiedades: Estas pruebas generan secuencias aleatorias de operaciones en la API de ShardStore, validando que el comportamiento del sistema sea consistente con el modelo de referencia en todas las ejecuciones.
Las pruebas se ejecutan automáticamente en el pipeline de integración continua y abarcan millones de combinaciones posibles. Cuando encuentran un fallo, se minimizan las pruebas fallidas para ayudar en la depuración, y se simulan condiciones específicas como fallas de E/S.
- Chequeo de consistencia en caso de fallos: Se introducen reinicios simulados y fallos en el disco para comprobar cómo ShardStore maneja las inconsistencias tras una caída del sistema, asegurando que siempre recupere los datos de manera coherente.
Pruebas y Validaciones
La validación en ShardStore cubre tres propiedades de corrección clave:
Consistencia en fallos secuenciales: Validación de que los datos en disco permanecen en un estado consistente tras un fallo en el sistema.
Equivalencia en ejecuciones concurrentes: Pruebas de intercalado de operaciones concurrentes, asegurando que el sistema se comporte de manera coherente y sin pérdida de datos en operaciones simultáneas.
Reclamación de espacio: Para gestionar el almacenamiento, ShardStore ejecuta una tarea de recolección de basura que identifica y libera los bloques no utilizados. Se probaron diferentes escenarios donde este proceso podría causar inconsistencias, utilizando el modelo de referencia para verificar su correcto funcionamiento.
Impacto de la Validación con Métodos Formales
La implementación de este modelo de validación y gracias a las pruebas automatizadas y al desarrollo iterativo de modelos de referencia, el equipo de AWS ha identificado y corregido fallos críticos relacionados con la concurrencia y consistencia antes de desplegar cambios. Hasta la fecha, se han prevenido al menos 16 errores graves, incluyendo problemas sutiles de consistencia en el caso de caídas y problemas de concurrencia que habrían sido difíciles de detectar con métodos de prueba tradicionales.
¿Cómo una arquitectura de este tipo puede beneficiar a los LLMs?
Los LLMs requieren acceso a grandes volúmenes de datos de entrenamiento y ejecución en tiempo real para ofrecer respuestas precisas y contextuales. Esto significa que, para funcionar de manera efectiva, necesitan sistemas de almacenamiento confiables y de alto rendimiento que puedan gestionar esta demanda de datos de forma escalable. Aquí es donde los LSM Trees juegan un papel fundamental:
-Eficiencia en la Gestión de Grandes Volúmenes de Datos: Los LSM Trees permiten que los datos se almacenen y recuperen de manera rápida y ordenada. En el caso de los LLMs, la eficiencia de almacenamiento y recuperación es esencial para reducir los tiempos de carga y entrenamiento, permitiendo que el modelo acceda a los datos que necesita sin comprometer el rendimiento.
-Durabilidad y Fiabilidad en el Almacenamiento: Un modelo de IA que utiliza datos incorrectos o inconsistentes puede generar resultados poco confiables. Los LSM Trees aseguran que los datos se mantengan consistentes y seguros a través de sus mecanismos de compactación y gestión de datos en disco. Esto es clave para que los LLMs funcionen sobre datos precisos y actualizados, garantizando que el modelo esté entrenado sobre una base de datos sólida.
-Escalabilidad para Altas Demandas de Datos: Dado que los LLMs requieren miles de millones de tokens de texto para entrenamiento y despliegue, el almacenamiento debe poder crecer con esta demanda. La arquitectura en niveles de los LSM Trees permite añadir capacidad sin reestructurar el sistema, adaptándose a las necesidades de almacenamiento de los LLMs sin perder eficiencia.
Conclusión
Como véis, la transición a ShardStore no solo representa un avance en el uso de Rust para sistemas de almacenamiento en AWS, sino también una apuesta por integrar métodos de validación robustos en el desarrollo de sistemas de misión crítica. La combinación de Rust y estos métodos garantiza que Amazon S3 continúe ofreciendo un almacenamiento fiable y escalable para sus clientes en todo el mundo.
Si queréis conocer más de esta arquitectura, os recomendamos el siguiente Whitepaper: https://www.amazon.science/publications/using-lightweight-formal-methods-to-validate-a-key-value-storage-node-in-amazon-s3
Top comments (0)