Como Meta ha arrojado nuevos e innovadores productos que aprovechan la IA generativa (Genai), debemos asegurarnos de que los componentes de infraestructura subyacentes evolucionen unido con ella. La aplicación de conocimiento y optimizaciones de infraestructura nos ha permitido adaptarnos a los requisitos cambiantes del producto, entregando un mejor producto en el camino. En última instancia, nuestros sistemas de infraestructura deben equilibrar nuestra aprieto de cursar experiencias de ingreso calidad con la aprieto de ejecutar la sostenibilidad de los sistemas.
Dividir el tráfico de inferencia de Genai en un inquilino WWW dedicado, que permite la configuración especializada de tiempo de ejecución y calentamiento, nos ha permitido cumplir con los dos objetivos al tiempo que ofrece una perfeccionamiento del 30% en la latencia.
https://www.youtube.com/watch?v=qbiqvby3lqg
Quien somos
Como equipo de la Fundación Web, operamos el nivel web monolítico de Meta, ejecutando Cortar. El equipo está compuesto de Ingenieros interfuncionales que se aseguran de que la infraestructura detrás del nivel web esté saludable y proporcionadamente diseñada. Salimos a la respuesta a los incidentes, trabajamos en algunas de las áreas más complejas de la infraestructura y ayudamos a construir lo que necesitemos para prolongar el sitio felizmente en funcionamiento.
Para conquistar esto, hemos establecido una serie de mejores prácticas para ser un «buen ciudadano» del nivel compartido. Necesitamos asegurarnos de que todas las solicitudes cumplan con estas pautas para evitar que los problemas se derramen y afecten los productos de otros equipos. Una regla central es el tiempo de ejecución de la solicitud: acotar una solicitud a 30 segundos de ejecución. Esto es una consecuencia del HHVM (Hiphop Potencial Machine) tiempo de ejecución—El solicitud tiene un hilo de trabajador correspondiente, del cual hay un número finito. Para respaldar que siempre haya subprocesos disponibles para satisfacer solicitudes entrantes, necesitamos equilibrar los medios disponibles en cada host con su rendimiento esperado. Si las solicitudes tardan demasiado, habrá menos hilos disponibles para procesar nuevas solicitudes, lo que lleva a la desatiendo de disponibilidad visible para el agraciado.
El paisaje cambiante
Clásicamente, los servidores web de Meta están optimizados para servir solicitudes de front-end: recuperar páginas web y servir consultas GraphQL. La latencia de estas solicitudes generalmente se mide en cientos de milisegundos a segundos (sustancialmente por debajo del linde de 30 segundos), lo que permite a los hosts procesar aproximadamente 500 consultas por segundo.
Encima, un servidor web pasará aproximadamente dos tercios de su tiempo haciendo entrada/salida (E/S), y el tercio restante haciendo trabajo de CPU. Este hecho ha influido en el diseño del idioma de hack, que admite asincioun tipo de multitarea cooperativa, y todas las bibliotecas centrales respaldan estas primitivas para aumentar el rendimiento y disminuir la cantidad de tiempo que la CPU está inactiva, esperando la E/S.
Genai Products, especialmente LLM, tienen un conjunto diferente de requisitos. Estos son impulsados por el flujo de inferencia central: el maniquí avala con una corriente de tokens que puede tardar segundos o minutos en completarse. Un agraciado puede ver esto como un chatbot «escribir» una respuesta. Este no es un propósito para hacer que nuestros productos parezcan más amigables; ¡Es la velocidad a la que piensan nuestros modelos! A posteriori de que un agraciado envíe una consulta al maniquí, debemos comenzar a transmitir estas respuestas al agraciado lo más rápido posible. Encima de eso, la latencia total de la solicitud ahora es sustancialmente más larga (medida en segundos). Estas propiedades tienen dos mercancía en la infraestructura: sobrecarga mínima en la ruta crítica ayer de gritar al LLM, y una larga duración para el resto de la solicitud, la mayoría de las cuales se gasta esperando E/S. (Ver Figuras 1 y 2 a continuación).


Una serie de optimizaciones
Este cambio en los requisitos permitió a Web Foundation reexaminar las reglas para ejecutar el nivel web monolítico. Luego lanzamos un inquilino web dedicado (una implementación independiente de www) que permitió la configuración personalizada, que podríamos sintonizar mejor las micción de la carga de trabajo.
Tiempo de aplazamiento de solicitud
Primero, ejecutar en un nivel web retirado nos permitió aumentar el linde de tiempo de ejecución para las solicitudes de Genai. Este es un cambio directo, pero nos permitió aislar el tráfico de más tiempo para evitar impactos adversos en el resto del nivel de producción. De esta modo, podemos evitar las solicitudes de tiempo si la inferencia lleva más de 30 segundos.
Dimensionamiento
Ejecutar solicitudes para medios más largos hay una disponibilidad escasa de hilos de trabajadores (que, recuerden, plano 1: 1 con solicitudes procesadas). Cubo que los servidores web tienen una cantidad finita de memoria, podemos dividir la memoria total apto por el linde de memoria por solicitud para obtener un número mayor de solicitudes activas; Esto a su vez nos dice cuántas solicitudes podemos ejecutar simultáneamente. Terminamos funcionando con aproximadamente 1000 hilos en hosts de Genai, en comparación con un par de cientos de servidores web normales.
Jit cache y «jumpstart
HHVM es un idioma interpretado preciso a tiempo (JIT), lo que significa que la primera vez que se ejecuta una función dada, la máquina debe compilarla en el código de máquina de nivel inferior para la ejecución. Encima, una técnica convocatoria Avance Permite que un servidor web sembra su personalidad JIT con expectativas de un servidor previamente calentado. Al permitir que los hosts de Genai usen perfiles de comienzo de brinco desde el nivel web principal, podemos acelerar enormemente la ejecución, incluso si la superposición del código no es idéntica.
Solicitar calentamiento
HHVM además admite la ejecución de solicitudes ficticias al inicio del servidor, que podemos ejecutar, y luego podemos descartar los resultados. La intención aquí es calentar los cachés sin código adentro del servidor web. Los títulos de configuración y la información del descubrimiento de servicios normalmente se obtienen en límite la primera vez que son necesarias y luego almacenan en personalidad adentro del servidor web. Al obtener y juntar en personalidad esta información en solicitudes de calentamiento, evitamos que nuestros usuarios observen la latencia de estas ganancias iniciales.
Tráfico de sombras
Finalmente, Meta usa mucho tiempo en tiempo existente para controlar los despliegos de características, lo que significa que los perfiles de JumpStart consumidos en el momento de la inicio podrían no cubrir todo futuro rutas de código El servidor ejecutará. Para prolongar la cobertura en el estado inmóvil, además agregamos el sombreado de solicitud, por lo que podemos asegurarnos de que los cambios de activación aún estén cubiertos en el personalidad JIT.