
Notas sobre TensorFlow
Índice
- Introducción
- Elementos
- Arquitectura
- Referencias
Introducción
La pregunta obligada es siempre ¿qué es TensorFlow? En muchos lugares preguntan por gente que sepa usarla, pero a veces bajo una equivocada concepción. En breve, TensorFlow es una interfaz para expresar algoritmos de aprendizaje automático (machine learning) y una implementación para ejecutar dichos algoritmos.
El propósito de TensorFlow es que en una amplia variedad de sistemas heterogéneos, desde dispositivos móviles como teléfonos y tabletas hasta sistemas distribuidos a gran escala de cientos de máquinas y miles de dispositivos computacionales (como tarjetas de procesamiento gráfico), un procedimiento de cómputo expresado en TensorFlow pueda ejecutarse con poco o ningún cambio. Se ha utilizado para realizar investigaciones y para implementar sistemas de aprendizaje automático en la producción de más de una docena de áreas de ciencias de la computación y otros campos, incluido el reconocimiento de voz, la visión por computador, la robótica, la recuperación de información, el procesamiento del lenguaje natural, la extracción de información geográfica y el descubrimiento computacional de medicamentos.
Como se indicó, existen muchas concepciones equivocadas o parcialmente completas acerca de lo que es TensorFlow. El sistema es flexible y puede utilizarse para expresar una amplia variedad de algoritmos, incluidos aquellos de inferencia y entrenamiento para modelos de redes neuronales profundas. La API de TensorFlow y una implementación de referencia se lanzaron como un paquete de código abierto bajo la licencia de Apache 2.0 en noviembre de 2015 y están disponibles en www.tensorflow.org.
Orígenes
Google, Inc. inició un proyecto llamado Google Brain en 2011 para explorar el uso de redes neuronales profundas (deep learning neural networks) a gran escala, tanto para investigación como para su uso en diversos productos de Google. Como parte del trabajo inicial en este proyecto, se construyó DistBelief, la primera generación de un sistema de inferencia distribuido escalable. TensorFlow es una segunda generación de este producto.
Utilizando un modelo similar a un flujo de datos, TensorFlow toma los cálculos descritos y
los mapea en una amplia variedad de hardware diferente, que va desde la ejecución de inferencia en teléfonos móviles (Android y iOS), pasando por sistemas modificados de entrenamiento e inferencia que utilizan máquinas individuales que contienen una o varias tarjetas GPU, hasta equipos de gran escala con cientos de máquinas especializadas o miles de GPU.
Elementos
En TensorFlow el cómputo se expresa mediante gráficos de flujo de datos con estado. TensorFlow permite a los clientes expresar fácilmente varios tipos de paralelismo mediante la replicación y la ejecución simultánea de un gráfico de flujo de datos de un modelo central, con muchos dispositivos computacionales diferentes, todos colaborando para actualizar un conjunto de parámetros compartidos u otro estado. Cambios modestos en la descripción del cálculo permiten lograr una amplia variedad de enfoques de paralelismo diferentes y probarse con poco esfuerzo.
Un cálculo de TensorFlow es descrito por una gráfica dirigida, que se compone de un conjunto de nodos. La gráfica representa un flujo de datos que expresa dicho cálculo (de forma similar al modelo de cómputo paralelo dataflow), con extensiones para permitir que algunos tipos de nodos mantengan y actualicen su estado persistente y para ramificaciones y estructuras de control en bucle dentro del gráfico.
En una gráfica TensorFlow, cada nodo tiene cero o más entradas y cero o más salidas, y representa la creación de instancias de una operación. Valores que fluyen a lo largo de arcos (aristas, bordes) normales son tensores. Arreglos de dimensionalidad arbitraria son el elemento subyacente que se especifica o infiere en el tiempo de construcción de gráficas. Aristas especiales, llamadas dependencias de control, pueden existir también en la gráfica pero en ellas no hay datos que fluyan a lo largo de tales bordes, pero indican que el nodo de origen para la dependencia de control debe terminar de ejecutarse antes del destino para que la dependencia de control comience a ejecutarse. Ya que el modelo incluye un estado mutable, dependencias de control pueden ser utilizadas directamente por los clientes para hacer cumplir lo anterior. La implementación de TensorFlow también a veces inserta dependencias de control para hacer cumplir los pedidos entre operaciones independientes, como una forma de controlar el uso de recursos del computador o garantizar la secuencia de operaciones.
Operaciones y kernels
Una operación tiene un nombre y representa un cálculo abstracto (por ejemplo, «multiplicación de matriz» o «sumar»). Una operación puede tener atributos, y todos los atributos deben proporcionarse o inferirse en el momento de la construcción del gráfico para instanciar un nodo para realizar la operación. Un uso común de los atributos es hacer operaciones polimórficas.
sobre diferentes tipos de elementos tensoriales (por ejemplo, la suma de dos tensores del tipo float contra la suma de dos tensores del tipo int32). Un kernel es una implementación particular de una operación que se puede ejecutar en un tipo particular de dispositivo (por ejemplo, CPU
o GPU). Un binario TensorFlow define los conjuntos de operaciones y núcleos disponibles a través de un mecanismo de registro, y este conjunto puede extenderse al vincular operaciones adicionales o definiciones y registros del kernel.
Sesiones
Los programas de los clientes interactúan con el sistema TensorFlow creando una sesión. Para crear una gráfica de cálculo, la interfaz de sesión soporta un método Extend para aumentar la gráfica gestionada por la sesión con nodos y bordes adicionales (la gráfica inicial cuando se crea una sesión está vacía). La otra operación primaria admitida por la interfaz de sesión es Run, que toma un conjunto de nombres de salida que deben computarse, así como un conjunto opcional de tensores para alimentar la gráfica en lugar de ciertas salidas de nodos.
Usando los argumentos de Run, TensorFlow puede calcular la cerradura transitiva de todos los nodos que deben ejecutarse en orden para calcular los resultados solicitados, y luego puede
hacer arreglos para ejecutar los nodos apropiados en un orden que respete sus dependencias.
Variables
En la mayoría de los cálculos, una gráfica se ejecuta varias veces. La mayoría de los tensores no sobreviven más allá de una sola ejecución de la gráfica. Sin embargo, una variable es un tipo especial de operación que devuelve un identificador (handle) a un tensor mutable persistente que sobrevive a través de las ejecuciones de una gráfica. Handles de estos tensores mutables persistentes se pueden pasar a un puñado de operaciones especiales, como Assign y AssignAdd
(equivalente a +=) que muta el tensor referenciado.
En las aplicaciones de aprendizaje automático de TensorFlow, los parámetros del modelo normalmente se almacenan en tensores mantenidos en variables, y se actualizan como parte de la ejecución del gráfico de entrenamiento para el modelo.
Arquitectura
Los componentes principales en un sistema TensorFlow son los
clientes (clients), quienes usan la interfaz de sesión para comunicarse con un maestro (master), y uno o más trabajadores de procesos (worker processes). Cada worker process es responsable de arbitrar el acceso a uno o más dispositivos computacionales (como los núcleos de CPU o tarjetas GPU) y para ejecutar nodos de la gráfica en esos dispositivos como lo indique el maestro.
Implementaciones locales y distribuidas de TensorFlow existen acorde al contexto computacional. La implementación local se utiliza cuando el cliente, el maestro y el trabajador se ejecutan en una sola máquina como un solo proceso del sistema operativo (posiblemente con varios dispositivos, si, por ejemplo, la máquina tiene muchas tarjetas GPU instaladas). El distribuido comparte la mayor parte del código con el local, pero la amplía con soporte para un entorno donde el cliente, el maestro y los trabajadores pueden estar en diferentes procesos en diferentes máquinas. En un entorno distribuido, estas tareas son contenedores en trabajos gestionados por un sistema de planificación.
Dispositivos
Los dispositivos (devices) son el corazón computacional de TensorFlow. Cada trabajador es responsable de uno o más dispositivos, y cada dispositivo es de un tipo y posee un nombre. Los nombres se componen de piezas que identifican el tipo de dispositivo, el índice del dispositivo dentro del trabajador y algún otro valor (por ejemplo, la identificación del trabajo, la tarea del trabajador, equipo, etcétera).
Tensores
Un tensor (en lo que a esta implementación se refiere) es una matriz multidimensional de cierto tipo. Una variedad de tipos de elementos tensoriales diferentes es soportada, incluidos enteros con y sin signo en tamaño desde 8 a 64 bits, flotantes IEEE y de doble precisión, un tipo de número complejo y un tipo de cadena (una matriz de bytes arbitraria). El almacenamiento es soportado por un administrador específico para el dispositivo en el que reside el tensor. El alojamiento de los tensores es referenciado por conteo y así, es desalojado cuando no quedan referencias..
Referencias
- Martín Abadi et al., «TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems«, ArXiv, web. Reviewed: 2016.03.16; Consulted: 2018.12.27. URL: https://arxiv.org/abs/1603.04467v2.
- https://www.oreilly.com/ideas/machine-learning-a-quick-and-simple-definition
|
© Todos los derechos reservados. Dr. Eduardo René Rodríguez Avila |
Creación: 2018.12.27 Última actualización: 2024.04.05 |
|||
| El contenido de este sitio puede ser copiado y reproducido libremente mientras no sea alterado y se cite su origen. Marcas y productos registrados son citados por referencia y sin fines de lucro o dolo. Todas las opiniones son a título personal del o los autores de éstas y, salvo sea expresado de otro modo, deben considerarse como registro y expresión de la experiencia de uso de aquello que es tratado. Para conocer más sobre la posición de privacidad y responsabilidad de lo que se presenta en este sitio web y como ha sido obtenido, consulte la declaración al respecto. | |||||

