Bater papo | Status de compilação do Windows | Status de compilação do Linux |
---|---|---|
O Microsoft Cognitive Toolkit (https://cntk.ai) é um kit de ferramentas unificado de aprendizado profundo que descreve redes neurais como uma série de etapas computacionais por meio de um gráfico direcionado. Neste gráfico direcionado, os nós folha representam valores de entrada ou parâmetros de rede, enquanto outros nós representam operações matriciais sobre suas entradas. O CNTK permite que os usuários realizem e combinem facilmente tipos de modelos populares, como DNNs feed-forward, redes convolucionais (CNNs) e redes recorrentes (RNNs/LSTMs). Ele implementa aprendizado de descida gradiente estocástica (SGD, retropropagação de erro) com diferenciação automática e paralelização em várias GPUs e servidores. O CNTK está disponível sob uma licença de código aberto desde abril de 2015. Esperamos que a comunidade aproveite o CNTK para compartilhar ideias mais rapidamente através da troca de código funcional de código aberto.
Se você preferir usar os bits CNTK mais recentes do master, use um dos pacotes noturnos CNTK:
Você pode aprender mais sobre como usar e contribuir com o CNTK com os seguintes recursos:
Querida comunidade,
Com nossas contribuições contínuas para o ONNX e o ONNX Runtime, facilitamos a interoperação dentro do ecossistema da estrutura de IA e o acesso a recursos de inferência de plataforma cruzada de alto desempenho para modelos tradicionais de ML e redes neurais profundas. Nos últimos anos, tivemos o privilégio de desenvolver projetos importantes de aprendizado de máquina de código aberto, incluindo o Microsoft Cognitive Toolkit, que permitiu que seus usuários aproveitassem os avanços de todo o setor em aprendizado profundo em escala.
A versão 2.7 de hoje será a última versão principal do CNTK. Poderemos ter alguns lançamentos secundários subsequentes para correção de bugs, mas estes serão avaliados caso a caso. Não há planos para desenvolvimento de novos recursos após esta versão.
A versão CNTK 2.7 tem suporte total para ONNX 1.4.1 e incentivamos aqueles que buscam operacionalizar seus modelos CNTK a aproveitar as vantagens do ONNX e do ONNX Runtime. No futuro, os usuários podem continuar a aproveitar as inovações em evolução do ONNX por meio do número de estruturas que o suportam. Por exemplo, os usuários podem exportar nativamente modelos ONNX do PyTorch ou converter modelos TensorFlow em ONNX com o conversor TensorFlow-ONNX.
Estamos extremamente gratos por todo o apoio que recebemos de colaboradores e usuários ao longo dos anos, desde o lançamento inicial de código aberto do CNTK. O CNTK permitiu que tanto as equipes da Microsoft quanto os usuários externos executassem cargas de trabalho complexas e em grande escala em todos os tipos de aplicativos de aprendizagem profunda, como avanços históricos no reconhecimento de fala alcançados pelos pesquisadores do Microsoft Speech, os criadores da estrutura.
Como o ONNX é cada vez mais empregado em modelos de atendimento usados em produtos Microsoft, como Bing e Office, nos dedicamos a sintetizar inovações de pesquisa com as rigorosas demandas de produção para fazer o ecossistema avançar.
Acima de tudo, nosso objetivo é tornar as inovações em aprendizagem profunda nas pilhas de software e hardware tão abertas e acessíveis quanto possível. Trabalharemos arduamente para trazer os pontos fortes existentes do CNTK e as novas pesquisas de ponta para outros projetos de código aberto para realmente ampliar o alcance de tais tecnologias.
Com gratidão,
- A equipe CNTK
Este projeto adotou o Código de Conduta de Código Aberto da Microsoft. Para obter mais informações, consulte as Perguntas frequentes sobre o Código de Conduta ou entre em contato com [email protected] com perguntas ou comentários adicionais.
Você pode encontrar mais novidades no feed oficial do projeto
29/03/2019. CNTK 2.7.0
Para configurar o ambiente de compilação e tempo de execução no Windows:
Para configurar o ambiente de compilação e tempo de execução no Linux usando o docker, crie a imagem do docker do Unbuntu 16.04 usando Dockerfiles aqui. Para outros sistemas Linux, consulte Dockerfiles para configurar bibliotecas dependentes para CNTK.
Modelos CNTK com loops recursivos podem ser exportados para modelos ONNX com operações de varredura.
Para exportar modelos maiores que 2 GB no formato ONNX, use a API cntk.Function: save(self, filename, format=ModelFormat.CNTKv2, use_external_files_to_store_parameters=False) com 'format' definido como ModelFormat.ONNX e use_external_files_to_store_parameters definido como True. Neste caso, os parâmetros do modelo são salvos em arquivos externos. Os modelos exportados devem ser usados com arquivos de parâmetros externos ao fazer a avaliação do modelo com onnxruntime.
26/11/2018.
Netron agora oferece suporte à visualização de arquivos .model
CNTK v1 e CNTK v2.
17/09/2018. CNTK 2.6.0
A implementação da convolução de grupo no CNTK foi atualizada. A implementação atualizada deixa de criar um subgráfico para convolução de grupo (usando fatiamento e emenda) e, em vez disso, usa APIs cuDNN7 e MKL2017 diretamente. Isso melhora a experiência tanto em termos de desempenho quanto de tamanho do modelo.
Por exemplo, para uma operação de convolução de grupo único com os seguintes atributos:
Os números de comparação para este único nó são os seguintes:
Primeiro cabeçalho | Executivo de GPU. tempo (em milissegundos, média de 1000 execuções) | Executivo da CPU. tempo (em milissegundos, média de 1000 execuções) | Tamanho do modelo (em KB, formato CNTK) |
---|---|---|---|
Implementação antiga | 9.349 | 41.921 | 38 |
Nova implementação | 6.581 | 9.963 | 5 |
Aceleração/economia Aprox. | 30% Aprox. | 65-75% Aprox. | 87% |
A implementação da convolução sequencial no CNTK foi atualizada. A implementação atualizada cria uma camada de convolução sequencial separada. Diferente da camada de convolução regular, esta operação também envolve no eixo dinâmico (sequência), e filter_shape[0] é aplicado a esse eixo. A implementação atualizada oferece suporte a casos mais amplos, como onde passo > 1 para o eixo de sequência.
Por exemplo, uma convolução sequencial sobre um lote de imagens em preto e branco de um canal. As imagens têm a mesma altura fixa de 640, mas cada uma com largura de comprimento variável. A largura é então representada pelo eixo sequencial. O preenchimento está ativado e os avanços para largura e altura são 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)
Há uma alteração significativa nos operadores de profundidade_para_espaço e espaço_para_profundidade . Eles foram atualizados para corresponder à especificação ONNX, especificamente a permutação de como a dimensão de profundidade é colocada como blocos nas dimensões espaciais e vice-versa foi alterada. Consulte os exemplos de documentos atualizados para essas duas operações para ver a mudança.
Adicionado suporte para operações trigonométricas Tan
e Atan
.
Adicionado suporte para atributo alpha
na operação ELU.
Algoritmos de preenchimento automático atualizados de Convolution
para produzir preenchimento simétrico com o melhor esforço na CPU, sem afetar os valores finais de saída de convolução. Esta atualização aumenta a gama de casos que podem ser cobertos pela API MKL e melhora o desempenho, por exemplo, ResNet50.
Há uma alteração significativa na propriedade de argumentos na API CNTK python. O comportamento padrão foi atualizado para retornar argumentos na ordem python em vez de na ordem C++. Dessa forma, ele retornará argumentos na mesma ordem em que são inseridos nas operações. Se você ainda deseja obter argumentos na ordem C++, você pode simplesmente substituir a opção global. Essa alteração deve afetar apenas as seguintes operações: Times, TransposeTimes e Gemm(internal).
LogSoftMax
atualizado para usar uma implementação numericamente mais estável.BatchNormalization
do CNTK para exportação/importação para as especificações mais recentes.DepthToSpace
e SpaceToDepth
atualizadas para corresponder às especificações ONNX na permutação de como a dimensão de profundidade é colocada como dimensão de bloco.alpha
na operação ELU
ONNX.Convolution
e Pooling
. Ao contrário de antes, essas operações não exportam uma operação Pad
explícita em nenhuma situação.ConvolutionTranspose
. Atributos como output_shape
, output_padding
e pads
são totalmente suportados.StopGradient
do CNTK como autônomo.Hardmax
/ Softmax
/ LogSoftmax
.Select
.MatMul
op.Gemm
op.MeanVarianceNormalization
do CNTK para as especificações mais recentes.LayerNormalization
do CNTK para as especificações mais recentes.PRelu
do CNTK atualizada para as especificações mais recentes.Gather
op exportação/importação do CNTK atualizado para as especificações mais recentes.ImageScaler
do CNTK atualizada para as especificações mais recentes.Reduce
a exportação/importação de operações para as especificações mais recentes.Flatten
do CNTK atualizada para as especificações mais recentes.Unsqueeze
.size
tem a semântica de diâmetro, não de raio. Adicionada validação se o tamanho do kernel LRN for maior que o tamanho do canal.Min
/ Max
atualizada para lidar com entradas variadas.A biblioteca Cntk.Core.Managed foi oficialmente convertida para .Net Standard e oferece suporte a aplicativos .Net Core e .Net Framework em Windows e Linux. A partir desta versão, os desenvolvedores .Net deverão ser capazes de restaurar pacotes CNTK Nuget usando o novo arquivo de projeto estilo .Net SDK com formato de gerenciamento de pacotes definido como PackageReference.
O seguinte código C# agora funciona no Windows e no 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 exemplo, simplesmente adicionar uma cláusula ItemGroup no arquivo .csproj de um aplicativo .Net Core é suficiente: >>> >>> >>> >>> netcoreapp2.1 >>> x64 >>> >>> >>> >>> >>> >>> >>>
16/04/2018. CNTK 2.5.1
Reembale o CNTK 2.5 com bibliotecas de terceiros incluídas nos pacotes (pacotes Python Wheel)
15/03/2018. CNTK 2.5
Altere o formato de saída dos detalhes do criador de perfil para chrome://tracing
Habilite o tempo por nó. Exemplo de trabalho aqui
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 ()
Exemplo de visualização de detalhes do criador de perfil em chrome://tracing
Melhorias no desempenho de inferência de CPU usando MKL
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
1BitSGD incorporado ao CNTK
1BitSGD
agora está disponível com licença CNTK (licença MIT) em Source/1BitSGD/
1bitsgd
foi mesclado com o destino GPU existenteNova função de perda: softmax hierárquico
Treinamento distribuído com vários alunos
Operadores
MeanVarianceNormalization
.Correções de bugs
CNTKBinaryFormat
ao cruzar o limite de varredurampi=no
cntk.convert
em misc.converter.py
, que impede a conversão de redes complexas.ONNX
ONNX.checker
.OptimizedRNNStack
do CNTK (apenas LSTM).MeanVarianceNormalization
.Identity
.LayerNormalization
do CNTK usando a operação ONNX MeanVarianceNormalization
.Concat
do CNTK.LeakyReLu
(argumento 'alpha' revertido para tipo double).Diversos
find_by_uid()
em cntk.logging.graph
.28/02/2018. CNTK suporta compilação noturna
Se você preferir usar os bits CNTK mais recentes do master, use um dos pacotes noturnos CNTK.
Como alternativa, você também pode clicar no emblema de construção correspondente para acessar a página de construção noturna.
31/01/2018. CNTK 2.4
Destaques:
OP
top_k
: na passagem direta, ele calcula os valores k superiores (maiores) e os índices correspondentes ao longo do eixo especificado. Na passagem para trás, o gradiente é espalhado para os k elementos superiores (um elemento que não está no topo k obtém um gradiente zero).gather
agora suporta um argumento de eixosqueeze
e expand_dims
para remover e adicionar facilmente eixos singletonzeros_like
e ones_like
. Em muitas situações, você pode confiar apenas no CNTK transmitindo corretamente um simples 0 ou 1, mas às vezes você precisa do tensor real.depth_to_space
: reorganiza os elementos no tensor de entrada da dimensão de profundidade em blocos espaciais. O uso típico desta operação é para implementar convolução de subpixel para alguns modelos de super-resolução de imagem.space_to_depth
: reorganiza os elementos no tensor de entrada das dimensões espaciais para a dimensão de profundidade. É em grande parte o inverso de DepthToSpace.sum
: crie uma nova instância de Function que calcula a soma elemento a elemento dos tensores de entrada.softsign
: Crie uma nova instância de Function que calcula o softsign elemento a elemento de um tensor de entrada.asinh
: Crie uma nova instância de Function que calcula o asinh elemento a elemento de um tensor de entrada.log_softmax
: Crie uma nova instância de Function que calcula os valores normalizados logsoftmax de um tensor de entrada.hard_sigmoid
: Crie uma nova instância de Function que calcula os valores normalizados hard_sigmoid de um tensor de entrada.element_and
, element_not
, element_or
, element_xor
operações lógicas elemento a elementoreduce_l1
: calcula a norma L1 do elemento do tensor de entrada ao longo dos eixos fornecidos.reduce_l2
: Calcula a norma L2 do elemento do tensor de entrada ao longo dos eixos fornecidos.reduce_sum_square
: calcula a soma quadrada do elemento do tensor de entrada ao longo dos eixos fornecidos.image_scaler
: Alteração da imagem dimensionando seus valores individuais.ONNX
Reshape
para lidar com InferredDimension
.producer_name
e producer_version
aos modelos ONNX.auto_pad
nem pads
é especificado na operação ONNX Conv
.Pooling
InputVariable
com apenas um eixo de lote.Transpose
para corresponder às especificações atualizadas.Conv
, ConvTranspose
e Pooling
para corresponder às especificações atualizadas.Operadores
Convolution
CNTK mudará para grupos > 1. Uma implementação mais otimizada da convolução de grupo é esperada na próxima versão.Convolution
.Convolução Binária Haleto
Cntk.BinaryConvolution.so/dll
que pode ser usada com o módulo netopt
. A biblioteca contém operadores de convolução binária otimizados que apresentam melhor desempenho do que os operadores de convolução binária baseados em Python. Para habilitar o Halide na compilação, baixe a versão do Halide e defina o ambiente HALIDE_PATH
como variável antes de iniciar uma compilação. No Linux, você pode usar ./configure --with-halide[=directory]
para habilitá-lo. Para obter mais informações sobre como usar esse recurso, consulte How_to_use_network_optimization.Veja mais nas Notas de Versão. Obtenha a versão na página de versões CNTK.