CNTK v2.6 Notas de lançamento

Destaques desta versão

  • .Suporte líquido
  • Convolução de grupo eficiente.
  • Melhoria da convolução sequencial.
  • Mais operadores e melhoria dos existentes.
  • Atualização de funcionalidades ONNX para suporte ONNX 1.2.2.
  • Mais ops apoiados por conversor ONNX.
  • Correções de insetos.

Convolução eficiente do grupo

A implementação da convolução do grupo em CNTK foi atualizada. A implementação atualizada afasta-se da criação de um sub-gráfico para a convolução de grupos (utilizando o corte e o splicing), e em vez disso utiliza as APIs cuDNN7 e MKL2017 diretamente. Isto melhora a experiência tanto em termos de desempenho como modelo tamanho.

Como exemplo, para uma única operação de convolução de grupo com os seguintes atributos:

  • Tensor de entrada (C, H, W) = (32, 128, 128)
  • Número de canais de saída = 32 (multiplicador de canais é 1)
  • Grupos = 32 (convolução de profundidade)
  • Tamanho do kernel = (5, 5)

Os números de comparação deste nó são os seguintes:

Primeiro Cabeçalho Executivo da GPU. tempo (em milisco., 1000 run avg.) Executivo da CPU. tempo (em milisco., 1000 run avg.) 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/poupança Aprox. 30% aprox. 65-75% Aprox. 87%

Convolução Sequencial

A implementação da convolução sequencial em 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 envolve-se também no eixo dinâmico(sequência) e filter_shape[0] é aplicado a esse eixo. A implementação atualizada suporta casos mais amplos, como o passo > 1 para o eixo da sequência.

Por exemplo, uma convolução sequencial sobre um lote de imagens a preto e branco de um canal. As imagens têm a mesma altura fixa de 640, mas cada uma com largura de comprimentos variáveis. A largura é então representada pelo eixo sequencial. O estofamento está ativado, e os passos para a 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)

Operadores

depth_to_space e space_to_depth

Há uma mudança de rutura nos operadores de depth_to_space e space_to_depth . Estes foram atualizados para corresponder à especificação ONNX, especificamente a permutação para a forma como a dimensão de profundidade é colocada como blocos nas dimensões espaciais, e vice-versa, foi alterada. Consulte os exemplos de doc atualizados para estas duas ops para ver a mudança.

Tan e Atan

Apoio adicional às operações trigonométricas Tan e Atan.

ELU

Suporte adicional para alpha atributo em ELU op.

Convolução

Algoritmos de enchimento automático atualizados para Convolution produzir estofos simétricos no melhor esforço na CPU, sem afetar os valores finais de saída de convolução. Esta atualização aumenta o leque de casos que podem ser cobertos pela API MKL e melhora o desempenho, por exemplo, ResNet50.

Ordem de argumentos predefinidos

Há uma mudança de rutura na propriedade de argumentos em CNTK API python. O comportamento predefinido foi atualizado para devolver os argumentos em ordem python em vez de em ordem C++. Desta forma, devolverá os argumentos da mesma ordem que são alimentados em operações. Se ainda desejar obter argumentos na ordem C++, pode simplesmente anular a opção global. Esta alteração deve afetar apenas as seguintes operações: Times, TransposeTimes e Gemm (interna).

Correções de erros

  • Doc atualizado para camada de convolução para incluir argumentos de grupo e dilatação.
  • Adicionou uma melhor validação de entrada para a convolução do grupo.
  • Atualizado LogSoftMax para utilizar uma implementação mais numericamente estável.
  • Fixo Coleto o valor de gradiente incorreto da Operação.
  • Validação adicionada para nó 'Nenhum' na substituição do clone python.
  • Validação adicionada para o eixo do canal de enchimento em convolução.
  • Adicionado CNTK madeir de lótus padrão nativo para corrigir o erro "Tente usar o DefaultLogger" ao carregar alguns modelos ONNX.
  • Adicionou uma inicialização adequada para ONNX TypeStrToProtoMap.
  • Teste de python atualizado para lidar com diferentes formatos de impressão para a versão mais recente numpy (versão >= 1.14).
  • Pooling Fixo (CPU) para produzir valores de saída corretos quando o núcleo central estiver em células de entrada acolchoadas.

ONNX

Atualizações

  • Atualizado CNTK de importação/exportação ONNX para usar especificações ONNX 1.2.
  • Grande atualização da forma como os eixos de lote e sequência são tratados na exportação e importação. Como resultado, os cenários complexos e os casos de borda são tratados com precisão.
  • Atualizado CNTK ONNX BatchNormalization op exportação/importação para especificações mais recentes.
  • Adicionado modelo domínio à exportação modelo ONNX.
  • Melhor reporte de erros durante a importação e exportação de modelos ONNX.
  • Atualizado DepthToSpace e SpaceToDepth ops para combinar as especificações ONNX na permutação para a forma como a dimensão de profundidade é colocada como dimensão do bloco.
  • Apoio adicional à exportação de alpha atributos no ELU OP ONNX.
  • Grande revisão para Convolution e Pooling exportar. Ao contrário de antes, estas operações não exportam uma operação explícita Pad em qualquer situação.
  • Grande revisão para exportação ConvolutionTranspose e importação. Atributos como output_shape, output_paddinge pads são totalmente suportados.
  • Apoio adicional para CNTK como StopGradient não-op.
  • Suporte ONNX adicionado para topK op.
  • Suporte ONNX adicionado para operações de sequência: sequence.slice, sequence.first, sequence.last, sequence.reduce_sum, sequence.reduce_max, sequence.softmax. Para estas operações, não há necessidade de expandir a especificação ONNX. CNTK exportador ONNX apenas constrói gráficos equavalentes computatórios para estas operações de sequência.
  • Adicionado suporte completo para a operação Softmax.
  • Feito CNTK operações de transmissão compatíveis com a especificação ONNX.
  • Lidar com to_batch, to_sequence, unpack_batch, sequence.desembalar as operações em CNTK exportador ONNX.
  • Testes ONNX para exportar caixas de teste ONNX para outros kits de ferramentas para executar e validar.
  • Importação/exportação fixaHardmaxLogSoftmax/Softmax/.
  • Apoio adicional à Select exportação de op.
  • Apoio adicional à importação/exportação para várias operações trigonométricas.
  • Suporte CNTK atualizado para a operação ONNXMatMul.
  • Suporte CNTK atualizado para a operação ONNXGemm.
  • Atualizado CNTK ONNX MeanVarianceNormalization op exportação/importação para especificações mais recentes.
  • Atualizado CNTK ONNX LayerNormalization op exportação/importação para especificações mais recentes.
  • Atualizado CNTK ONNX PRelu op exportação/importação para especificações mais recentes.
  • Atualizado CNTK ONNX Gather op exportação/importação para especificações mais recentes.
  • Atualizado CNTK ONNX ImageScaler op exportação/importação para especificações mais recentes.
  • Atualizado CNTK onnx Reduce ops exportação/importação para especificações mais recentes.
  • Atualizado CNTK ONNX Flatten op exportação/importação para especificações mais recentes.
  • Adicionado CNTK suporte para a operação ONNXUnsqueeze.

Bug ou pequenas correções:

  • LRN atualizado para combinar com a especificação ONNX 1.2 onde o size atributo tem a semântica de diâmetro, não raio. Validação adicionada se o tamanho do núcleo LRN for maior do que o tamanho do canal.
  • Implementação atualizada Min/Max das importações para lidar com entradas variadas.
  • Corrigiu possível corrupção de ficheiros ao ressaltar em cima do ficheiro onnx existente modelo.

.Suporte líquido

A biblioteca Cntk.Core.Managed foi oficialmente convertida para .Net Standard e suporta aplicações .Net Core e .Net Framework em ambos os Windows e Linux. A partir desta versão, os desenvolvedores .Net devem ser capazes de restaurar CNTK pacotes Nuget utilizando novo ficheiro de projeto estilo .Net SDK com formato de gestão de pacotes definido para PackageReference.

O seguinte código C# funciona agora em Windows e 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 ficheiro .csproj de uma aplicação .Net Core é suficiente: >>>>>>>>>>>>netcoreapp2.1>>> x64>>>>>>>>>>>>>>>>>>>>>

Bug ou pequenas correções:

  • Fixo c# string e char para problemas de conversão nativos wstring e wchar UTF em Linux.
  • Conversões de caracteres multibytes e largos fixos através da base de código.
  • Mecanismo de pacote Nuget fixo para embalar para .Net Standard.
  • Corrigi um problema de fuga de memória na classe Valor em API N em que o Dispose não foi chamado à destruição de objetos.