Solucionar problemas
Esta página coleta algumas das armadilhas mais frequentes que os usuários encontram.
Durante o treinamento do meu classificador binário, sempre vejo um ClassificationError de 0 mesmo a partir da primeira minibatch
ClassificationError só funciona corretamente para problemas de várias classes. Para classificação binária, 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.
O treinamento do modelo geralmente tem uma minibatchSize
propriedade definida em seu arquivo de configuração CNTK. Ao avaliar o modelo usando CNTK.exe, verifique se o minibatchSize
modelo é apropriado. Para determinar rapidamente se essa propriedade está causando o problema, defina a propriedade como um valor baixo (por exemplo minibatchSize=2
) no arquivo de configuração do comando de avaliação. (cf. Problema nº 468)
Estou recebendo SegFault no Linux com redes profundas (como ResNet152).
Talvez você não tenha tamanho de pilha suficiente. O BrainScript requer muita pilha. Execute o comando: ulimit -s 65536. Isso definirá o tamanho da pilha como 64 MB.
Durante a avaliação, o seguinte erro é visto: Prestes a lançar a exceção 'cuDNN falha 8: CUDNN_STATUS_EXECUTION_FAILED; GPU=0; hostname=haha; expr=err'
Defina a propriedade minibatchSize como um valor menor (por exemplo minibatchSize=2
).
Quando compilo CNTK usando o VS2013/VS2015, vejo um erro do compilador, o que há de errado?
Você deve atualizar Visual Studio 2017. Veja aqui: Configurando CNTK no Windows
Habilitei o Leitor de Imagens com suporte zip e obtém o erro "Plug-in não encontrado: 'Cntk.Deserializers.Image-.dll' (nome antigo 'ImageReader.dll')" ao executar testes de unidade do Leitor de Imagem ou tentar usar o leitor. O que pode estar errado?
Verifique se você instalou corretamente zlib e libzip.
Acabei de baixar e instalar CNTK pacote binário e quero executar um trabalho, mas obter erros estranhos, como bibliotecas CUDA ausentes.
Verifique cuidadosamente o que você tem na sua PATH
. Especialmente, se for um computador de desenvolvimento compartilhado . Geralmente, isso é causado por versões mais antigas (anteriores) de componentes de CNTK ou CNTK que podem ser acessados por meio do PATH configurado.
No Windows instalei uma nova versão do driver NVIDIA e agora CNTK compilação falhará com os erros como ..\Common\BestGpu.cpp(24): fatal error C1083: Cannot open include file: 'nvml.h': No such file or directory
Você selecionou Executar uma opção de instalação limpa no Instalador de Driver NVIDIA. Isso resulta na remoção do GDK (Kit de Implantação de GPU) . Para reparar o sistema, execute as seguintes etapas:
- Iniciar o instalador cuda
- Selecionar instalação personalizada (avançada)
- Desmarque todas as opções de instalação, exceto o Kit de Implantação de GPU
- Isso selecionará automaticamente a opção Driver de Gráficos – é esperado. Deixe-o selecionado
- Continuar com a instalação do CUDA
- Após a instalação bem-sucedida do CUDA, inicie a instalação da versão desejada do Driver de Gráficos
- Selecionar instalação personalizada (avançada)
- Verifique se executar uma instalação limpaNÃO está selecionada e prossiga com a instalação
O tempo inicial de leitura leva muito tempo ou estou recebendo uma das seguintes exceções: "Falha na chamada do sistema operacional ou operação sem suporte neste sistema operacional" ou "EXCEÇÃO ocorreu: falha 1 do CUSPARSE" ou um Segfault com AllocationFailureHandler na pilha.
Um motivo 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 randomização padrão (ou seja, ilimitada). Tente executar sua carga de trabalho com um valor explícito randomizationWindow
, o que limitará a quantidade de dados de entrada armazenados em cache na memória. Para fazer isso, adicione os seguintes parâmetros à seção reader
de configuração (usando 10000
como exemplo, você 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 usar a biblioteca Eval C# Cntk.Eval.Wrapper.dll (nome antigo EvalWrapper.dll) no aplicativo Web do Azure como o seguinte: "Não foi possível carregar arquivo ou assembly 'algumas DLLs CNTK', ou uma exceção System.Runtime.InteropServices.SEHException ou "InternalServiceFault: Componente externo gerou uma exceção".
Primeiro, verifique se todas as DLLs de dependência CNTK estão implantadas no aplicativo Web do Azure.
Em seguida, você precisa definir seu aplicativo Web do Azure para usar a VM de 64 bits. Para permitir que o aplicativo Web do Azure carregue CNTK DLLs não gerenciadas, você deve alterar a variável PATH adicionando o seguinte código no Application_Start()
método emglobal.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 um modelo em um WebApi do Azure" para obter etapas detalhadas.
Posso criar meu aplicativo usando Cntk.Eval-.lib/dll, mas tenho uma exceção semelhante àquelas abaixo durante a execução
Uma exceção sem tratamento do tipo 'Microsoft.MSR. CNTK. Extensibility.Managed.CNTKRuntimeException' ocorreu em Cntk.Wrapper-.dll
Informações adicionais: configparameters: parâmetro obrigatório ausente: unknown:modelPath
As possíveis razões são:
- Configuração de build diferente (versão ou depuração) entre seu aplicativo e o
Cntk.Eval-<VERSION>.lib/dll
. Se você criar seu aplicativo em versão, vincule-se à versão de lançamento doCntk.Eval-<VERSION>.dll
. O mesmo para a configuração de depuração. Esse erro ocorre geralmente para o aplicativo C++. - Diferentes GCC versões do compilador no Linux: a
Cntk.Eval
biblioteca no Linux é criada com GCC 5.4. Se você usar uma versão de GCC diferente para seu aplicativo, poderá ver o erro acima - O modelPath está incorreto. Atualmente, o modelPath precisa ser especificado como um caminho completo. No exemplo CSEvalClient, o caminho relativo é combinado com o diretório de trabalho atual para criar o caminho completo. E o CreateNetwork() deve ser passado uma cadeia de caracteres que contém o atributo "modelPath=" especificando o caminho do arquivo do modelo. Atualmente, não há suporte para a unidade mapeada para modelpath.
Recebo o seguinte resultado com CNTKTextFormat-Reader -- AVISO: Esgotado todas as entradas esperadas para a sequência atual ao ler um valor de ponto flutuante no deslocamento
O leitor ctf requer que cada linha bem formada deve terminar com um "Feed de Linha" \n ou símbolos de \r\n "Retorno de Carro, Feed de Linha" (incluindo a última linha do arquivo).