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
eSpaceToDepth
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 noELU
OP ONNX. - Grande revisão para
Convolution
ePooling
exportar. Ao contrário de antes, estas operações não exportam uma operação explícitaPad
em qualquer situação. - Grande revisão para exportação
ConvolutionTranspose
e importação. Atributos comooutput_shape
,output_padding
epads
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 fixa
Hardmax
LogSoftmax
/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 ONNX
MatMul
. - Suporte CNTK atualizado para a operação ONNX
Gemm
. - 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 ONNX
Unsqueeze
.
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.