TensorFlow.js: aprendizaje automático para la web y más allá Smilkov et al., SysML’19
Si el aprendizaje automático y los modelos ML van a penetrar en todas nuestras aplicaciones y sistemas, entonces ‘ Es mejor ir a donde están las aplicaciones en lugar de al revés. Cada vez más, eso significa JavaScript, tanto en el navegador como en el servidor.
TensorFlow.js trae a TensorFlow y Keras al ecosistema de JavaScript, que admite aplicaciones basadas en navegador y Node.js. Además de la accesibilidad del programador y la facilidad de integración, ejecutar en el dispositivo significa que, en muchos casos, los datos del usuario nunca tienen que abandonar el dispositivo.
El cómputo en el dispositivo tiene una serie de beneficios, que incluyen privacidad de datos, accesibilidad y bajo costo. Aplicaciones interactivas de latencia.
TensorFlow.js no es solo para el modelo que sirve también puede ejecutar el entrenamiento con él. Desde su lanzamiento en marzo de 2018, la gente ha hecho muchas cosas creativas con él. Y como se ejecuta en el navegador, ¡todos estos son accesibles para usted con solo un clic! Algunos ejemplos:
Como ejemplo de escritorio, Node Clinic Doctor una herramienta de perfiles de rendimiento de código abierto Node.js, integró un modelo TensorFlow.js para separar los picos de uso de CPU causados por el usuario de los causados por Node.js internals.
TensorFlow.js también se envía con un repositorio oficial de modelos pre-entrenados :
Uno de los principales beneficios del ecosistema JS es la facilidad con la que el código JS y los recursos estáticos pueden ser compartido. TensorFlow.js aprovecha esto al alojar un repositorio oficial de modelos pre-entrenados útiles, sirviendo los pesos en un cubo de almacenamiento de Google Cloud disponible públicamente.
Los métodos de predicción del modelo están diseñados para que sean fáciles de usar, por lo que siempre toman JS nativos objetos como elementos DOM o matrices primitivas, y devuelven objetos JS que representan predicciones “amigables con los humanos”.
¡Esperemos que todo eso haya despertado tu apetito para explorar lo que TensorFlow.js tiene para ofrecer!
TensorFlow. js desde la perspectiva del usuario
TensorFlow.js ofrece dos niveles de API, ambos soportados en entornos de navegador y Node.js: la Ops API para operaciones de álgebra lineal de nivel inferior, y la Capas API para bloques de construcción de modelos de alto nivel y mejores prácticas.
La API de capas refleja a Keras lo más cerca posible, permitiendo a los usuarios construir un modelo al ensamblar un conjunto de predefinidos l ayers.
Esto permite una puerta de dos vías entre Keras y TensorFlow.js; los usuarios pueden cargar un modelo Keras pre-entrenado en TensorFlow.js, modificarlo, serializarlo y volver a cargarlo en Keras Python.
Este es un ejemplo de un programa TensorFlow.js que crea y entrena un modelo lineal de una sola capa: [19659017] // UN MODELO LINEAL CON UNA CAPA DE 1 DENSO
modelo const = tf.sequential ();
model.add (tf.layers.dense ({
unidades: 1, inputShape: [1]
}));
// ESPECIFICAR LA PÉRDIDA Y EL OPTIMIZADOR
model.compile ({
pérdida: ‘meanSquaredError’,
optimizador: ‘sgd’
});
// GENERAR DATOS SINTÉTICOS PARA ENTRENAR
const xs = tf.tensor2d ([1, 2, 3, 4][4, 1]);
const ys = tf.tensor2d ([1, 3, 5, 7][4, 1]);
// ENTRENAR EL MODELO UTILIZANDO LOS DATOS
model.fit (xs, ys) .then (() => {
// HACER INFERENCIA EN UN PUNTO DE DATOS NO VISTO Y
// IMPRIMIR EL RESULTADO
const x = tf.tensor2d ([5][1, 1]);
model.predict (x) .print ();
});
TensorFlow.js usa un motor de diferenciación eager que es más amigable para el desarrollador que los motores alternativos basados en gráficos.
En el modo eager, el cálculo ocurre inmediatamente cuando se realiza una operación llamada, lo que facilita la inspección de resultados imprimiendo o utilizando un depurador. Otro beneficio es que toda la funcionalidad del idioma del host está disponible mientras se ejecuta su modelo; los usuarios pueden usar Native if y mientras que en lugar de las API de flujo de control especializadas que son difíciles de usar y producen trazas de pila complicadas.
Las herramientas de depuración también salen de la caja con TensorFlow .js para ayudar a solucionar problemas comunes con el rendimiento y la estabilidad numérica.
El enfoque en la facilidad de uso también se muestra en los enfoques de asincronía y administración de memoria. Las operaciones son deliberadamente sincrónicas donde pueden ser, y asíncronas donde deben ser. Para la memoria WebGL, que debe liberarse explícitamente, la función de envoltorio tf.tidy ()
se encargará de esto por usted.
TensorFlow.js tiene varias implementaciones de back-end para obtener el mejor rendimiento posible del entorno de ejecución. Hay una implementación de JavaScript simple que se ejecutará en todas partes como una alternativa; una implementación basada en WebGL para navegadores; y una implementación del lado del servidor para Node.js que se enlaza directamente a la API C de TensorFlow. Los incrementos de velocidad en JS simple definitivamente valen la pena: los backends de CPU de WebGL y Node.js son dos órdenes de magnitud más rápidos en un MacBook Pro y tres órdenes de magnitud más rápidos cuando se usa una tarjeta gráfica más capaz en una computadora de escritorio. [19659006]
De acuerdo con los datos disponibles en WebGLStats.com, la implementación WebGL de TensorFlow debería poder ejecutarse en el 99% de los dispositivos de escritorio, el 98% de los dispositivos móviles con iOS y Windows y el 52% de los dispositivos Android. (Android se muestra más bajo debido a una larga cola de dispositivos antiguos sin hardware de GPU).
Debajo de las portadas
Existen varios desafíos relacionados con la creación de un entorno ML basado en JavaScript, entre los que se incluyen: la cantidad de entornos diferentes en los que se puede ejecutar JavaScript; extraer un buen rendimiento suficiente; problemas de compatibilidad entre navegadores; y su naturaleza de un solo hilo.
Un buen rendimiento para el aprendizaje automático en estos días significa GPU. Dentro del navegador, la forma de llegar a la GPU es a través de WebGL.
Para utilizar la GPU, TensorFlow.js usa WebGL, un estándar web multiplataforma que proporciona API de gráficos 3D de bajo nivel … (no hay explicaciones explícitas). soporte para GPGPU). Entre los tres backends de TensorFlow.js, el backend de WebGL tiene la mayor complejidad. Esta complejidad se justifica por el hecho de que es dos órdenes de magnitud más rápido que nuestro backend de CPU escrito en JS simple. El hecho de que WebGL pueda ser rediseñado para el cálculo numérico es lo que se habilitó fundamentalmente al ejecutar modelos ML del mundo real en el navegador.
Sin ningún soporte de GPGPU, TensorFlow.js tiene que asignar todo a las operaciones gráficas. Específicamente, explota los sombreadores de fragmentos que originalmente fueron diseñados para generar los colores de los píxeles que se representarán en la pantalla. Solo se usa actualmente el canal rojo “R”, con un tipo de textura gl.R32F
que evita la asignación de memoria para los canales verde, azul y alfa. Para facilitar la escritura del código OpenGL Shading Language (GLSL), bajo el capó, TensorFlow.js hace uso de un compilador de sombreado. El compilador separa los espacios lógicos y físicos para que pueda convertir el código en la forma más eficiente dados los límites de tamaño específicos del dispositivo de las texturas WebGL.
Dado que la eliminación y reasignación de texturas WebGL es relativamente costosa , las texturas se reutilizan a través de un ‘reciclador de texturas’. Para evitar condiciones de falta de memoria, las texturas de WebGL se paginarán a la CPU siempre que la cantidad total de memoria de GPU asignada supere un umbral.
El siguiente
Dos nuevos estándares web, WebAssembly y WebGPU, ambos tienen potencial para mejorar el rendimiento de TensorFlow.js. WebGPU es un estándar emergente para expresar la computación paralela de propósito general en la GPU, permitiendo kernels de álgebra lineal más optimizados que los que el backend de WebGL puede soportar hoy.
El trabajo futuro se centrará en mejorar el rendimiento, el progreso continuo en la compatibilidad de dispositivos (particularmente dispositivos móviles) ), y aumentando la paridad con la implementación de Python TensorFlow. También vemos la necesidad de proporcionar soporte para flujos de trabajo de aprendizaje de máquina completa, incluidos la entrada, salida y transformación de datos.
Original . Publicado de nuevo con permiso.
Relacionado: