PyTorch Lightning 1.0: de 0 a 600k

Lightning revela la API final, un nuevo sitio web y un adelanto de nuestra nueva plataforma nativa para entrenar modelos a escala en la nube.

(19 de octubre de 2020)

Trabajamos duro en los últimos meses para ajustar nuestra API y pulir nuestra docs , grabando tutoriales , y finalmente es el momento de compartir con ustedes toda la V1.0.0 de PyTorch Lightning. ¿Quiere la respuesta relámpago para escalar modelos en la nube? sigue leyendo.

El ADN del relámpago

La investigación de la IA ha evolucionado mucho más rápido de lo que cualquier marco puede seguir. El campo del aprendizaje profundo está en constante evolución, principalmente en complejidad y escala. Lightning proporciona una experiencia de usuario diseñada para el mundo de las interacciones complejas de modelos mientras se abstraen todos los detalles distractores de la ingeniería, como el entrenamiento de múltiples GPU y múltiples TPU, detención anticipada, registro, etc.

Frameworks como PyTorch fueron diseñados para una época en la que la investigación de inteligencia artificial se centraba principalmente en arquitecturas de red, un nn.Module que puede definir la secuencia de operaciones.

VGG16

Y estos frameworks hacen un trabajo increíble al proporcionar todas las piezas para armar modelos extremadamente complejos para investigación o producción. Pero tan pronto como los modelos comienzan a interactuar entre sí, como un GAN, BERT o un codificador automático, ese paradigma se rompe, y la inmensa flexibilidad, pronto se convierte en un modelo estándar que es difícil de mantener a medida que un proyecto escala.

A diferencia de los marcos anteriores, PyTorch Lightning se diseñó para encapsular una colección de modelos que interactúan juntos , lo que llamamos sistemas de aprendizaje profundo. Lightning está diseñado para los casos de investigación y producción más complicados del mundo actual, donde muchos modelos interactúan entre sí mediante reglas complicadas.

Sistema AutoEncoder

El segundo principio clave de PyTorch Lightning es que el hardware y el código «científico» deben ser apartado. Lightning evolucionó para aprovechar la computación masiva a escala sin mostrar ninguna de esas abstracciones al usuario. Al hacer esta separación, obtienes nuevas habilidades que no eran posibles antes de , como depurar su trabajo de 512 GPU en su computadora portátil usando CPU sin necesidad de cambiar su código.

Por último, Lightning se creó con la visión de convertirse en un marco impulsado por la comunidad .

La creación de buenos modelos de aprendizaje profundo requiere una gran cantidad de experiencia y trucos que hacen que el sistema funcione. En todo el mundo, cientos de ingenieros y doctores increíbles implementan el mismo código una y otra vez. Lightning ahora tiene una comunidad de contribuyentes en crecimiento de más de 300 de las personas de aprendizaje profundo más talentosas, que eligen asignar lo mismo energía y hacer exactamente las mismas optimizaciones, pero en su lugar miles de personas se benefician de sus esfuerzos.

Novedades de 1.0.0

Lightning 1.0.0 indica una final API.

Esto significa que los principales proyectos de investigación que dependen de Lightning pueden estar tranquilos sabiendo que su código no se romperá ni cambiará en el futuro.

Investigación + Producción

La fuerza central de Lightning es habilitar el estado del arte La investigación de IA se realizará a gran escala. Es un marco diseñado para que los investigadores profesionales prueben las ideas más difíciles en los recursos informáticos más grandes sin perder flexibilidad.

Nos complace anunciar que Lightning 1.0.0 ahora es también , por lo que es trivial implementar estos modelos a escala. Todo el código Lightning asegura que todo se pueda exportar a onnx y torchscript fácilmente.

Entonces , esto significa que su equipo de científicos de datos, investigadores, etc. ahora puede SER las personas que también poner modelos en producción. No necesitan grandes equipos de ingenieros de aprendizaje automático.

Esta es una de las principales razones por las que empresas líderes están utilizando Lightning: como una forma de ayudarlas a reducir drásticamente el tiempo de producción sin perder la flexibilidad necesaria para la investigación. .

Y esto es precisamente lo que hace nuestra oferta corporativa: Grid AI es nuestro plataforma nativa para entrenar modelos a escala en la nube. Grid permite a cualquiera que cree modelos de aprendizaje profundo iterar en computación masiva y luego implementar instantáneamente estos modelos en un entorno escalable capaz de manejar el tráfico más grande que podría generar en un sistema de aprendizaje profundo.

Regístrese en acceso temprano aquí .

tren de cuadrícula

Sitio web

También notará que hemos centralizado todos los publicaciones de blog , tutoriales en video a la velocidad del rayo , proyectos comunitarios y otros recursos en nuestro nueva página de inicio para mostrar todo lo relacionado con Lightning.

Métricas

pytorch\_lightning.metrics es una API de métricas creada para facilitar el desarrollo y uso de métricas en PyTorch y PyTorch Lightning. La API actualizada proporciona un método incorporado para calcular la métrica en múltiples GPU (procesos) para cada paso, mientras que al mismo tiempo almacena estadísticas que le permiten calcular la métrica al final de una época, sin tener que preocuparse por ninguna. de las complejidades asociadas con el backend distribuido.

Se ha probado rigurosamente para todos los casos extremos e incluye una lista cada vez mayor de implementaciones métricas comunes, como Precisión , Precision , Recall , Fbeta , MeanSquaredError , y más.

Cómo use .log en LightningModule

Para implementar su métrica personalizada, simplemente realice una subclase de la clase Metric base e implemente la Métodos \_\_init\_\_(), update() y compute(). Todo lo que necesita hacer es llamar a add\_state() correctamente para implementar una métrica personalizada con DDP. reset() se llama en variables de estado métricas agregadas mediante add\_state().

Optimización manual vs automática

Con Lightning no necesita preocuparse sobre cuándo habilitar / deshabilitar graduaciones, hacer una pasada hacia atrás o actualizar optimizadores Siempre que devuelva una pérdida con un gráfico adjunto del paso\_de\_entrenamiento, Lightning automatizará la optimización.

Sin embargo, para ciertas investigaciones como GAN, aprendizaje por refuerzo o algo con múltiples optimizadores o un ciclo interno, puede desactivar la optimización automática y controlar completamente el ciclo de entrenamiento usted mismo.

Primero, desactive la optimización automática:

trainer = Trainer(automatic\_optimization=False)

¡Ahora eres el propietario del bucle del tren!

Logging

Lightning hace que la integración con los registradores sea muy simple; simplemente llame al método log() en cualquier lugar en su LightningModule, y enviará la cantidad registrada al registrador de su elección. Usamos Tensorboard por defecto, pero puede elegir cualquier registrador compatible que desee.

Dependiendo de dónde .log() se llama desde, Lightning determina automáticamente cuándo debe tener lugar el registro (en cada paso o en cada época), pero, por supuesto, puede anular el comportamiento predeterminado utilizando manualmente on\_step y on\_epoch opciones. La configuración de on\_epoch=True acumulará los valores registrados durante toda la época de entrenamiento.

Flujo de datos

Dejamos de utilizar EvalResult y TrainResult a favor de simplificar el flujo de datos y desacoplar el registro de los datos en los ciclos de entrenamiento y validación.

Cada ciclo (entrenamiento, validación, test) tiene tres ganchos que puede implementar:

  • x\_step
  • x\_step\_end
  • x\_epoch\_end

Para ilustrar cómo fluyen los datos, usaremos el ciclo de entrenamiento (es decir, x = entrenamiento)

outs = []
for batch in data:
out = training\_step(batch)
outs.append(out)training\_epoch\_end(outs)

Todo lo que devuelva en training\_step se puede utilizar como entrada para training\_epoch\_end.

Lo mismo ocurre con los pasos de validación y prueba: todo lo devuelto en validation\_step o test\_step se pueden usar como entrada para {validation/test}\_step\_end o {validation/test}\_epoch\_end.En el caso de que utilice modos distribuidos DP o DDP2 (es decir, dividir un lote en GPU), use x\_step\_end para agregar manualmente (o no lo implemente para permitir que los relámpagos se agregado para usted).

Puntos de control

Lightning ahora guarda automáticamente un punto de control para usted en su directorio de trabajo actual, con el estado de su última época de entrenamiento. Esto asegura que pueda reanudar el entrenamiento en caso de que se interrumpa.

Puede personalizar el comportamiento de los puntos de control para monitorear cualquier cantidad de su entrenamiento o pasos de validación. Por ejemplo, si desea actualizar sus puntos de control en función de su pérdida de validación:

  1. Calcule cualquier métrica u otra cantidad que desee supervisar, como la pérdida de validación.
  2. Registro la cantidad utilizando el método log(), con una clave como val\_loss.
  3. Inicializando la

    ModelCheckpoint callback, y establezca monitor para que sea la clave de su cantidad.

  4. Pase la devolución de llamada a checkpoint\_callback Bandera de entrenador.

Lea acerca de todos los cambios de API, incluidas muchas correcciones de errores, en nuestras notas de la versión .

Gracias

No estaríamos celebrando la V1.0.0 sin el increíble trabajo de nuestro brillante equipo central que trabaja las 24 horas del día para obtener cada pequeño detalle correctamente, el apoyo constante de Equipo de PyTorch y, por supuesto, los miembros de nuestra comunidad. Nos gustaría agradecer personalmente a todos los que contribuyeron con RR.PP. o los revisaron, enviaron comentarios y problemas, respondieron en nuestro foro o en nuestra comunidad slack. ¡Este es para todos ustedes!

regístrate aquí

¿Quieres aprender más sobre los rayos? Vaya a nuestro sitio web , lea los documentos o únase nuestra primera reunión virtual: Pregúntame cualquier cosa con William Falcon , creador de Lightning! La reunión tendrá lugar el 21 de octubre de 2020 a la 1 p.m. EST, así que traiga su almuerzo o cena y venga a conocer más sobre las nuevas funciones, la cuadrícula o cualquier otra cosa que siempre quiso saber pero que nunca preguntó. Regístrese aquí .