Resolução de problemas
Esta página recolhe algumas das armadilhas mais frequentes que os utilizadores encontram.
Durante o treino do meu classificador binário vejo sempre um Classificador de Classificação de 0, mesmo a partir da primeira minibatch
O ClassificationError só funciona corretamente para problemas de multiclasse. Para classificação binária, por favor, use esta receita simples
Embora o modelo tenha sido treinado com um conjunto maior do que o conjunto de avaliação, CNTK fica sem memória durante a avaliação.
Treinar o modelo geralmente tem uma minibatchSize
propriedade definida no seu ficheiro de configuração CNTK. Ao avaliar o modelo utilizando CNTK.exe, certifique-se de que o minibatchSize
mesmo é adequado. Para determinar rapidamente se esta propriedade está a causar o problema, defina a propriedade para um valor baixo (por exemplo minibatchSize=2
) no ficheiro de configuração para o comando de avaliação. (cf. Emissão nº 468)
Estou a receber o SegFault no Linux com redes profundas (como o ResNet152).
Pode não ter o tamanho da pilha suficiente. BrainScript requer muita pilha. Executar o comando: ulimit-s 65536. Isto irá definir o tamanho da sua pilha para 64 MB.
Durante a avaliação é visto o seguinte erro: Prestes a lançar a exceção 'falha cuDNN 8: CUDNN_STATUS_EXECUTION_FAILED ; GPU=0; hostname=haha; expr=err'
Defina a propriedade minibatchSize para um valor menor (por exemplo). minibatchSize=2
Quando compilo CNTK usando VS2013/VS2015, vejo um erro do compilador, o que se passa?
Tem de atualizar Visual Studio 2017. Veja aqui: Configuração CNTK na Windows
Eu capacitei o Leitor de Imagem com suporte zip e recebo "Plugin não encontrado: 'Cntk.Deserializers.Image-.dll' (nome antigo 'ImageReader.dll')" ao executar testes da unidade Image Reader ou tentar utilizar o leitor. O que pode estar errado?
Verifique se instalou corretamente zlib e libzip.
Acabei de descarregar e instalar CNTK pacote binário e quero gerir um emprego, mas tenho erros estranhos, como faltar às bibliotecas da CUDA.
Por favor, verifique cuidadosamente o que tem na sua PATH
. Especialmente, se for uma máquina de desenvolvimento partilhada . Muitas vezes isto é causado por versões mais antigas (anteriores) de CNTK ou CNTK componentes que são alcançáveis através do PATH configurado.
No Windows instalei uma nova versão do controlador NVIDIA e agora CNTK construir falha com os erros como ..\Common\BestGpu.cpp(24): fatal error C1083: Cannot open include file: 'nvml.h': No such file or directory
Selecionou Realizar uma opção de instalação limpa no Instalador do Controlador NVIDIA. Isto resulta na remoção do Kit de Implantação da GPU (GDK). Para reparar o sistema, execute os seguintes passos:
- Lançar instalador CUDA
- Selecione instalação personalizada (avançada)
- Desescolh todas as opções de instalação, com exceção do Kit de Implantação da GPU
- Isto irá selecionar automaticamente a opção Do Controlador gráfico - espera-se. Deixe-o selecionado
- Proceda à instalação cuda
- Após o sucesso da instalação cuda lançar a instalação da versão desejada do Condutor gráfico
- Selecione instalação personalizada (avançada)
- Certifique-se de que a Realização de uma instalação limpaNÃO é selecionada e proceda com a instalação
O tempo de leitura inicial demora muito tempo ou estou a receber uma das seguintes exceções: "Chamada de SO falhou ou operação não suportada neste SISTEMA" ou "EXCEÇÃO ocorreu: falha cusparse 1" ou um Segfault com AllocationFailureHandler na pilha.
Uma razão possível aqui é a pressão de memória excessiva causada pelo carregamento de todo o conjunto de dados na memória com a janela de aleatoriedade padrão (ou seja, ilimitada). Por favor, tente executar a sua carga de trabalho com um valor explícito randomizationWindow
, que irá limitar a quantidade de dados de entrada em cache na memória. Para isso, adicione os seguintes parâmetros à sua reader
secção de configuração (usando 10000
como exemplo, pode escolher qualquer valor que se encaixe na memória e garanta uma boa aleatoriedade):
randomize=true
randomizationWindow=10000 #(assuming that 10K samples << total available memory)
Recebo erros ao utilizar Cntk.Eval.Wrapper.dll de biblioteca Eval C# (nome antigo EvalWrapper.dll) na aplicação web Azure como o seguinte: "Não podia carregar ficheiros ou montagem 'alguns DLLs CNTK', ou um sistema de exceção.Runtime.InteropServices.SEHException, ou "InternalServiceFault: Componente externo lançou uma exceção."
Em primeiro lugar, certifique-se de que todos os DLLs de dependência CNTK são implantados na aplicação web Azure.
Em seguida, você tem que definir a sua aplicação web Azure para usar VM de 64 bits. Para permitir que a aplicação web Azure carregue CNTK DLLs não geridos, deve alterar a variável PATH adicionando o seguinte código no Application_Start()
método em global.asax
:
string pathValue = Environment.GetEnvironmentVariable("PATH");
string domainBaseDir = AppDomain.CurrentDomain.BaseDirectory;
string cntkPath = domainBaseDir + @"bin\";
pathValue += ";" + cntkPath;
Environment.SetEnvironmentVariable("PATH", pathValue);
Consulte a página "Avaliar uma modelo numa página Azure WebApi" para obter etapas detalhadas.
Posso construir a minha aplicação usando Cntk.Eval-.lib/dll, mas tenho uma exceção semelhante às que estão abaixo enquanto corre
Uma exceção não manipulada do tipo 'Microsoft.MSR. CNTK. Extensibilidade.Managed.CNTKRuntimeException' ocorreu em Cntk.Wrapper-.dll
Informações adicionais: configparameters: parâmetro obrigatório em falta: desconhecido:modeloPa
As razões possíveis são:
- Configuração de construção diferente (release ou depurar) entre a sua aplicação e a
Cntk.Eval-<VERSION>.lib/dll
. Se construir a sua aplicação em versão, por favor ligue-se contra a versão de lançamento deCntk.Eval-<VERSION>.dll
. O mesmo para a configuração do depurg. Este erro acontece normalmente para a aplicação C++. - Diferentes GCC versões de compilador em Linux: A
Cntk.Eval
biblioteca em Linux é construída com GCC 5.4. Se utilizar uma versão GCC diferente para a sua aplicação, poderá ver o erro acima - O modeloPath está incorreto. Atualmente, o modelPath tem de ser especificado como um caminho completo. No exemplo CSEvalClient, o caminho relativo é combinado com o atual diretório de trabalho para construir todo o caminho. E a CreateNetwork() deve ser passada uma cadeia contendo o atributo "modelPath=" especificando o caminho do ficheiro do modelo. Atualmente, a unidade mapeada não é suportada para o modelpath.
Obtê o seguinte resultado com CNTKTextFormat-Reader -- AVISO: Esgotado toda a entrada esperada para a sequência atual enquanto leio um valor de ponto flutuante no offset
O leitor CTF exige que cada linha bem formada termine com um \n "Feed de Linha" ou símbolos de \r\n de "Transporte", "Feed de linha" (incluindo a última linha do ficheiro).