Red de conocimiento informático - Conocimiento informático - Cómo evaluar Tensorflow y otros sistemas de aprendizaje profundo

Cómo evaluar Tensorflow y otros sistemas de aprendizaje profundo

Modelo de programación

El modelo de programación actual de TF es el cálculo simbólico. La idea general es utilizar la API simbólica para describir el cálculo a través del gráfico de flujo de cálculo, actualizar la lógica y luego realizar el cálculo enviando el gráfico de flujo de cálculo al servidor. La razón es que todos los cálculos deben describirse mediante gráficos de flujo de cálculo, lo que significa que lo principal escrito a través de la API de Python es Tensorflow, un nuevo lenguaje. Luego realice algunas interacciones durante la ejecución de la sesión. La principal ventaja de hacer esto es que la ejecución del gráfico de flujo de cálculo se puede optimizar más, porque el usuario solo especifica la relación de datos y lo que se necesita, cómo distribuir las variables intermedias del cálculo y si es necesario conservarlas. , todo lo cual se puede optimizar. Aquí es donde las bibliotecas se pueden optimizar más en comparación con Torch y numpy. Pero, por otro lado, la interacción con el lenguaje anfitrión original será relativamente limitada y será más difícil usar algunas características del lenguaje anfitrión (python) para escribir cosas como condiciones y reglas de actualización.

Como ingeniero, desde la perspectiva de optimizar el rendimiento, es fácil tender a describir todo simbólicamente y luego hacer la mayor optimización posible. Como investigador (Torch es de la Universidad de Nueva York), es más fácil preferir la flexibilidad y elegir una programación de estilo informático procedimental.

Admite mutación

En comparación con los lenguajes simbólicos actuales, la característica más importante de TF es que fortalece el gráfico de flujo de datos e introduce el concepto de mutación. Esta es la mayor diferencia entre TF y los marcos de programación simbólica, incluido Theano. La llamada mutación significa que el valor de una variable se puede cambiar durante el proceso de cálculo, y esta variable pasará a la siguiente iteración durante el proceso de cálculo. La mutación es algo que debe introducirse en los algoritmos de optimización del aprendizaje automático (aunque también se puede reemplazar con reemplazo inmutable, pero habrá problemas de eficiencia). El enfoque de Theano es introducir una declaración de actualización para manejar las mutaciones. TF eligió la ruta de cálculo puramente simbólica e introdujo actualizaciones directamente en el gráfico de flujo de datos. A juzgar por el documento técnico actual, también se admitirán condiciones y bucles. Esto casi convierte a TF en un lenguaje independiente en sí mismo. Sin embargo, esto requerirá especial cuidado en el diseño y uso final de la API. La introducción de mutaciones en el gráfico de flujo de datos traerá algunos problemas nuevos, como cómo manejar las dependencias entre escrituras.

Optimización detallada de las operaciones

Ésta es la ventaja de Google como recurso de una empresa. La mayoría de las operaciones de TF son operaciones detalladas, lo que puede brindar una mayor flexibilidad, pero a su vez, también requiere más gastos generales de optimización en el proyecto. Un enfoque más vago es admitir directamente operaciones comunes de grano grueso y agregar relativamente pocas operaciones de grano fino como ayuda. Esto básicamente puede reducir la sobrecarga causada por la optimización y la mayoría de los problemas se pueden resolver con relativa facilidad. Caffe2 y mxnet tomaron el camino de las operaciones de grano grueso y de las operaciones de grano fino por la misma razón. Esta es una opción más ligera hecha bajo limitaciones de recursos limitados.

Soporte distribuido

Actualmente, TF no ofrece soporte distribuido directamente. A juzgar por el documento técnico publicado, la tolerancia a fallas distribuida adopta una estrategia de reinicio de punto de control consistente, que no parece ser una tolerancia a fallas más sofisticada, pero es muy práctica. Se puede ver que la elección del sistema por parte de Google sigue siendo muy realista. De manera similar, también podemos reflexionar sobre los sistemas distribuidos actuales. Si el aprendizaje automático realmente necesita un mecanismo tolerante a fallas como el linaje es en realidad un gran signo de interrogación.

¿Está obsoleto Parameter Server?

Un punto mencionado en el documento técnico de TF es que PS se convierte directamente en parte del gráfico de flujo de cálculo debido a la abstracción del sistema, lo que debilita relativamente el estado de PS como sistema. La razón principal de esto es que el seguimiento de dependencias se ha fortalecido en el gráfico de flujo de cálculo, y una función importante del propio PS es completar el seguimiento de dependencias. Si observa detenidamente la implementación de kvstore en mxnet, encontrará que el código de integración de parámetros locales se completa casi por completo utilizando el motor de dependencia, lo que de hecho puede simplificar enormemente la implementación del código PS. Sin embargo, el propio PS, como abstracción, aún puede proporcionar algunas buenas soluciones de datos paralelos en términos de comunicación y coherencia de los datos. La dirección futura debería ser que varios sistemas estén más integrados. El propio PS también está directamente integrado en el motor de aprendizaje profundo como una primitiva en la programación dependiente y ya no existe como sistema anfitrión.

Relación entre sistemas actuales

TF es más similar a Theano en términos de modelo de programación, que básicamente cubre todas las funciones de Theano. Entre los nuevos marcos de programación recientes, dos de los más relevantes son caffe2 y mxnet.

El estilo de diseño de caffe2 es básicamente el mismo que el de TF, tomando la ruta del cálculo simbólico. La única diferencia es que admite operaciones de grano grueso. Esto también se mencionó anteriormente y está hecho para. ligero. En la actualidad, lo completa principalmente Yangqing, que puede considerarse como un TF liviano.

La idea de diseño de mxnet es una mezcla de computación simbólica y computación procedimental. La mutación no se introduce en la parte de cálculo simbólico, pero se permite que el cálculo simbólico se integre en el cálculo del proceso, las reglas de actualización se expresan a través del lenguaje anfitrión y las instrucciones para el cálculo del proceso y el cálculo simbólico se programan dinámicamente. Hacer esto requiere más requisitos para el motor de programación y también puede tener algunos efectos de eficiencia (el cálculo del proceso se ejecuta dinámicamente, tiene una sobrecarga de memoria dinámica y requiere menos optimización), pero si los principales cuellos de botella están ubicados razonablemente Vaya a cálculos simbólicos, y utilice cálculos de proceso más flexibles para hacer el resto, y el impacto final en la eficiencia no será particularmente grande.

Las ideas de estos dos sistemas en términos de programación de dependencia y optimización del sistema deberían ser básicamente las mismas que las de TF.

Qué elegir

Yo personalmente participé en el diseño de mxnet, por lo que es difícil responder esta pregunta de manera justa. Pero una cosa es segura: las ideas de optimización y diagramas de flujo computacional, así como la programación de dependencias y la optimización computacional serán los temas de la próxima generación de sistemas de aprendizaje profundo.

Algunas notas personales

El equipo de DMLC decidió unir tres proyectos para hacer mxnet en mayo. El diseño se completó en junio y la versión preliminar se estableció en septiembre. Personalmente, fui a G Brain para realizar una pasantía en julio después de participar en el diseño de mxnet y estuve expuesto a TF y cosas internas. Personalmente, diferentes diseños de proyectos requieren diferentes decisiones de diseño optimizadas basadas en las compensaciones de diferentes recursos humanos, objetivos (flexibilidad, eficiencia) y gustos. Esta es probablemente la diferencia entre el diseño y la implementación de mxnet, caffe2 y TF. No hay nada bueno o malo, sólo depende del gusto y las ideas de cada diseñador. Por esta razón, estoy convencido de que tomamos la decisión correcta y decidimos continuar ayudando al equipo mxnet hasta la etapa actual relativamente completa después de terminar la pasantía en septiembre. Es posible que Yangqing tenga más restricciones debido al trabajo, pero también espero que todos tengan la oportunidad de realizar su sistema ideal.