Charlar | Estado de compilación de Windows | Estado de compilación de Linux |
---|---|---|
Microsoft Cognitive Toolkit (https://cntk.ai) es un conjunto de herramientas unificado de aprendizaje profundo que describe las redes neuronales como una serie de pasos computacionales a través de un gráfico dirigido. En este gráfico dirigido, los nodos hoja representan valores de entrada o parámetros de red, mientras que otros nodos representan operaciones matriciales sobre sus entradas. CNTK permite a los usuarios realizar y combinar fácilmente tipos de modelos populares, como DNN de avance, redes convolucionales (CNN) y redes recurrentes (RNN/LSTM). Implementa el aprendizaje de descenso de gradiente estocástico (SGD, retropropagación de errores) con diferenciación y paralelización automáticas en múltiples GPU y servidores. CNTK ha estado disponible bajo una licencia de código abierto desde abril de 2015. Esperamos que la comunidad aproveche CNTK para compartir ideas más rápidamente mediante el intercambio de código de trabajo de código abierto.
Si prefiere utilizar los bits CNTK más recientes del maestro, utilice uno de los paquetes nocturnos de CNTK:
Puede aprender más sobre cómo usar y contribuir a CNTK con los siguientes recursos:
Querida comunidad,
Con nuestras contribuciones continuas a ONNX y ONNX Runtime, hemos facilitado la interoperación dentro del ecosistema del marco de IA y el acceso a capacidades de inferencia multiplataforma de alto rendimiento tanto para modelos de aprendizaje automático tradicionales como para redes neuronales profundas. En los últimos años hemos tenido el privilegio de desarrollar proyectos clave de aprendizaje automático de código abierto, incluido Microsoft Cognitive Toolkit, que ha permitido a sus usuarios aprovechar los avances de toda la industria en aprendizaje profundo a escala.
La versión 2.7 de hoy será la última versión principal de CNTK. Es posible que tengamos algunas versiones menores posteriores para corregir errores, pero se evaluarán caso por caso. No hay planes para el desarrollo de nuevas funciones después de esta versión.
La versión CNTK 2.7 es totalmente compatible con ONNX 1.4.1 y animamos a aquellos que buscan poner en funcionamiento sus modelos CNTK a aprovechar ONNX y ONNX Runtime. En el futuro, los usuarios pueden seguir aprovechando las innovaciones en evolución de ONNX a través de la cantidad de marcos que las respaldan. Por ejemplo, los usuarios pueden exportar de forma nativa modelos ONNX desde PyTorch o convertir modelos de TensorFlow a ONNX con el convertidor TensorFlow-ONNX.
Estamos increíblemente agradecidos por todo el apoyo que hemos recibido de contribuyentes y usuarios a lo largo de los años desde el lanzamiento inicial de código abierto de CNTK. CNTK ha permitido que tanto los equipos de Microsoft como los usuarios externos ejecuten cargas de trabajo complejas y de gran escala en todo tipo de aplicaciones de aprendizaje profundo, como los avances históricos en el reconocimiento de voz logrados por los investigadores de Microsoft Speech, los creadores del marco.
A medida que ONNX se emplea cada vez más en modelos utilizados en productos de Microsoft como Bing y Office, nos dedicamos a sintetizar las innovaciones de la investigación con las rigurosas demandas de producción para hacer avanzar el ecosistema.
Por encima de todo, nuestro objetivo es hacer que las innovaciones en el aprendizaje profundo en todas las pilas de software y hardware sean lo más abiertas y accesibles posible. Trabajaremos arduamente para incorporar tanto las fortalezas existentes de CNTK como las nuevas investigaciones de vanguardia a otros proyectos de código abierto para ampliar verdaderamente el alcance de dichas tecnologías.
Con gratitud,
-- El equipo de la CNTK
Este proyecto ha adoptado el Código de conducta de código abierto de Microsoft. Para obtener más información, consulte las preguntas frecuentes sobre el Código de conducta o comuníquese con [email protected] si tiene alguna pregunta o comentario adicional.
Puedes encontrar más noticias en el feed oficial del proyecto.
2019-03-29. CNTK 2.7.0
Para configurar el entorno de compilación y ejecución en Windows:
Para configurar el entorno de compilación y ejecución en Linux usando Docker, cree una imagen de Docker Unbuntu 16.04 usando Dockerfiles aquí. Para otros sistemas Linux, consulte Dockerfiles para configurar bibliotecas dependientes para CNTK.
Los modelos CNTK con bucles recursivos se pueden exportar a modelos ONNX con operaciones de escaneo.
Para exportar modelos de más de 2 GB en formato ONNX, use cntk.Function API: save(self, filename, format=ModelFormat.CNTKv2, use_external_files_to_store_parameters=False) con 'format' establecido en ModelFormat.ONNX y use_external_files_to_store_parameters establecido en True. En este caso, los parámetros del modelo se guardan en archivos externos. Los modelos exportados se utilizarán con archivos de parámetros externos al realizar la evaluación del modelo con onnxruntime.
2018-11-26.
Netron ahora admite la visualización de archivos .model
CNTK v1 y CNTK v2.
2018-09-17. CNTK 2.6.0
Se ha actualizado la implementación de la convolución grupal en CNTK. La implementación actualizada deja de crear un subgráfico para la convolución de grupo (mediante corte y empalme) y, en su lugar, utiliza las API cuDNN7 y MKL2017 directamente. Esto mejora la experiencia tanto en términos de rendimiento como de tamaño del modelo.
Como ejemplo, para una operación de convolución de un solo grupo con los siguientes atributos:
Los números de comparación para este nodo único son los siguientes:
Primer encabezado | Ejecutivo de GPU. tiempo (en milisegundos, promedio de 1000 ejecuciones) | Ejecutivo de CPU. tiempo (en milisegundos, promedio de 1000 ejecuciones) | Tamaño del modelo (en formato KB, CNTK) |
---|---|---|---|
Implementación antigua | 9.349 | 41.921 | 38 |
Nueva implementación | 6.581 | 9.963 | 5 |
Aceleración/ahorro Aprox. | 30% Aprox. | 65-75% Aprox. | 87% |
Se ha actualizado la implementación de convolución secuencial en CNTK. La implementación actualizada crea una capa de convolución secuencial separada. A diferencia de la capa de convolución normal, esta operación también convoluciona en el eje dinámico (secuencia) y se aplica filter_shape[0] a ese eje. La implementación actualizada admite casos más amplios, como cuando la zancada > 1 para el eje de secuencia.
Por ejemplo, una convolución secuencial sobre un lote de imágenes en blanco y negro de un canal. Las imágenes tienen la misma altura fija de 640, pero cada una con un ancho de longitud variable. El ancho se representa entonces mediante un eje secuencial. El relleno está habilitado y los pasos tanto para el ancho como para el alto son 2.
>>> f = SequentialConvolution((3,3), reduction_rank=0, pad=True, strides=(2,2), activation=C.relu)
>>> x = C.input_variable(**Sequence[Tensor[640]])
>>> x.shape
(640,)
>>> h = f(x)
>>> h.shape
(320,)
>>> f.W.shape
(1, 1, 3, 3)
Hay un cambio importante en los operadores profundidad_a_espacio y espacio_a_profundidad . Estos se han actualizado para que coincidan con la especificación ONNX, específicamente se ha cambiado la permutación de cómo se coloca la dimensión de profundidad como bloques en las dimensiones espaciales, y viceversa. Consulte los ejemplos de documentos actualizados para estas dos operaciones para ver el cambio.
Se agregó soporte para operaciones trigonométricas Tan
y Atan
.
Se agregó soporte para el atributo alpha
en ELU op.
Se actualizaron los algoritmos de relleno automático de Convolution
para producir relleno simétrico con el mejor esfuerzo en la CPU, sin afectar los valores finales de salida de convolución. Esta actualización aumenta la variedad de casos que podría cubrir la API de MKL y mejora el rendimiento, por ejemplo, ResNet50.
Hay un cambio importante en la propiedad de argumentos en la API de Python de CNTK. El comportamiento predeterminado se ha actualizado para devolver argumentos en orden Python en lugar de en orden C++. De esta manera, devolverá los argumentos en el mismo orden en que se introducen en las operaciones. Si aún desea obtener argumentos en orden C++, simplemente puede anular la opción global. Este cambio solo debería afectar las siguientes operaciones: Times, TransposeTimes y Gemm (interno).
LogSoftMax
para utilizar una implementación numéricamente más estable.BatchNormalization
de CNTK para exportar/importar a las últimas especificaciones.DepthToSpace
y SpaceToDepth
para que coincidan con las especificaciones de ONNX en la permutación de cómo se coloca la dimensión de profundidad como dimensión de bloque.alpha
en ELU
ONNX op.Convolution
y Pooling
. A diferencia de antes, estas operaciones no exportan una operación Pad
explícita en ninguna situación.ConvolutionTranspose
. Atributos como output_shape
, output_padding
y pads
son totalmente compatibles.StopGradient
de CNTK como opción no operativa.Hardmax
/ Softmax
/ LogSoftmax
.Select
exportación de operaciones.MatMul
op.Gemm
op.MeanVarianceNormalization
de CNTK a la última especificación.LayerNormalization
de CNTK a las últimas especificaciones.PRelu
de CNTK a las últimas especificaciones.Gather
op exportación/importación de CNTK a las últimas especificaciones.ImageScaler
de CNTK a las últimas especificaciones.Reduce
ops export/import de CNTK a las últimas especificaciones.Flatten
de CNTK a las últimas especificaciones.Unsqueeze
op.size
tiene la semántica de diámetro, no de radio. Se agregó validación si el tamaño del kernel LRN es mayor que el tamaño del canal.Min
/ Max
actualizada para manejar entradas variadas.La biblioteca Cntk.Core.Managed se ha convertido oficialmente a .Net Standard y admite aplicaciones .Net Core y .Net Framework tanto en Windows como en Linux. A partir de esta versión, los desarrolladores de .Net deberían poder restaurar paquetes CNTK Nuget utilizando el nuevo archivo de proyecto de estilo .Net SDK con el formato de administración de paquetes configurado en PackageReference.
El siguiente código C# ahora funciona tanto en Windows como en Linux:
>>> var weightParameterName = "weight";
>>> var biasParameterName = "bias";
>>> var inputName = "input";
>>> var outputDim = 2;
>>> var inputDim = 3;
>>> Variable inputVariable = Variable.InputVariable(new int[] { inputDim }, DataType.Float, inputName);
>>> var weightParameter = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, weightParameterName);
>>> var biasParameter = new Parameter(new int[] { outputDim }, DataType.Float, 0, device, biasParameterName);
>>>
>>> Function modelFunc = CNTKLib.Times(weightParameter, inputVariable) + biasParameter;
Por ejemplo, simplemente agregar una cláusula ItemGroup en el archivo .csproj de una aplicación .Net Core es suficiente: >>> >>> >>> >>> netcoreapp2.1 >>> x64 >>> >>> >>> >>> >>> >>> >>>
2018-04-16. CNTK 2.5.1
Vuelva a empaquetar CNTK 2.5 con bibliotecas de terceros incluidas en los paquetes (paquetes de rueda de Python)
2018-03-15. CNTK 2.5
Cambie el formato de salida de los detalles del generador de perfiles para que sea chrome://tracing
Habilite la sincronización por nodo. Ejemplo de trabajo aquí
import cntk as C
C . debugging . debug . set_node_timing ( True )
C . debugging . start_profiler () # optional
C . debugging . enable_profiler () # optional
#<trainer|evaluator|function> executions
< trainer | evaluator | function > . print_node_timing ()
C . debugging . stop_profiler ()
Ejemplo de vista de detalles del generador de perfiles en chrome://tracing
Mejoras en el rendimiento de inferencia de CPU usando MKL
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
1BitSGD incorporado a CNTK
1BitSGD
ahora está disponible con licencia CNTK (licencia MIT) en Source/1BitSGD/
1bitsgd
se fusionó con el objetivo de gpu existenteNueva función de pérdida: softmax jerárquico
Capacitación distribuida con múltiples alumnos
Operadores
MeanVarianceNormalization
.Corrección de errores
CNTKBinaryFormat
al cruzar el límite de barrido.mpi=no
cntk.convert
en misc.converter.py
, que impide la conversión de redes complejas.ONNX
ONNX.checker
.OptimizedRNNStack
de CNTK (solo LSTM).MeanVarianceNormalization
.Identity
experimental.LayerNormalization
de CNTK usando la operación ONNX MeanVarianceNormalization
.Concat
de CNTK.LeakyReLu
(el argumento 'alfa' se revirtió al tipo doble).Varios
find_by_uid()
en cntk.logging.graph
.2018-02-28. CNTK apoya la construcción nocturna
Si prefiere utilizar los bits CNTK más recientes del maestro, utilice uno de los paquetes nocturnos de CNTK.
Alternativamente, también puede hacer clic en la insignia de compilación correspondiente para acceder a la página de compilación nocturna.
2018-01-31. CNTK 2.4
Reflejos:
OP
top_k
: en el paso hacia adelante calcula los valores k superiores (más grandes) y los índices correspondientes a lo largo del eje especificado. En el paso hacia atrás, el gradiente se distribuye hacia los k elementos superiores (un elemento que no está en los k superiores obtiene un gradiente cero).gather
ahora admite un argumento de eje.squeeze
y expand_dims
para eliminar y agregar fácilmente ejes únicoszeros_like
y ones_like
. En muchas situaciones, puede confiar en que CNTK transmita correctamente un 0 o 1 simple, pero a veces necesita el tensor real.depth_to_space
: reorganiza elementos en el tensor de entrada desde la dimensión de profundidad en bloques espaciales. El uso típico de esta operación es para implementar convolución de subpíxeles para algunos modelos de superresolución de imágenes.space_to_depth
: reorganiza los elementos en el tensor de entrada desde las dimensiones espaciales a la dimensión de profundidad. Es en gran medida lo inverso de DepthToSpace.sum
: cree una nueva instancia de función que calcule la suma de tensores de entrada por elementos.softsign
: cree una nueva instancia de función que calcule el signo suave por elementos de un tensor de entrada.asinh
: cree una nueva instancia de función que calcule el asinh por elementos de un tensor de entrada.log_softmax
: cree una nueva instancia de función que calcule los valores normalizados de logsoftmax de un tensor de entrada.hard_sigmoid
: cree una nueva instancia de función que calcule los valores normalizados hard_sigmoid de un tensor de entrada.element_and
, element_not
, element_or
, element_xor
operaciones lógicas de elementosreduce_l1
: calcula la norma L1 del elemento del tensor de entrada a lo largo de los ejes proporcionados.reduce_l2
: Calcula la norma L2 del elemento del tensor de entrada a lo largo de los ejes proporcionados.reduce_sum_square
: calcula la suma cuadrada del elemento del tensor de entrada a lo largo de los ejes proporcionados.image_scaler
: Alteración de la imagen escalando sus valores individuales.ONNX
Reshape
para manejar InferredDimension
.producer_name
y producer_version
a los modelos ONNX.auto_pad
ni pads
en ONNX Conv
op.Pooling
InputVariable
con un solo eje por lotes.Transpose
op para que coincida con las especificaciones actualizadas.Conv
, ConvTranspose
y Pooling
ops para que coincidan con las especificaciones actualizadas.Operadores
Convolution
cambiará para grupos > 1. Se espera una implementación más optimizada de la convolución de grupo en la próxima versión.Convolution
.Convolución binaria de haluro
Cntk.BinaryConvolution.so/dll
que se puede usar con el módulo netopt
. La biblioteca contiene operadores de convolución binarios optimizados que funcionan mejor que los operadores de convolución binarizados basados en Python. Para habilitar Halide en la compilación, descargue la versión Halide y configure la variable de entorno HALIDE_PATH
antes de comenzar una compilación. En Linux, puedes usar ./configure --with-halide[=directory]
para habilitarlo. Para obtener más información sobre cómo utilizar esta función, consulte How_to_use_network_optimization.Vea más en las Notas de la versión. Obtenga el lanzamiento en la página de lanzamientos de CNTK.