Поделиться через


Диагностика

Эта страница собирает некоторые из наиболее частых ошибок, с которыми сталкиваются пользователи.

Во время обучения двоичного классификатора я всегда вижу классификатор ClassificationError 0 даже из первого мини-бата

ClassificationError работает правильно только для многоклассовых проблем. Для двоичной классификации используйте этот простой рецепт

Хотя модель была обучена с большим набором, чем набор вычислений, CNTK заканчивается памятью во время оценки.

Обучение модели обычно имеет minibatchSize набор свойств в файле конфигурации CNTK. При оценке модели с помощью CNTK.exe убедитесь, что она minibatchSize подходит. Чтобы быстро определить, вызывает ли это свойство проблему, задайте для свойства низкое значение (например minibatchSize=2, ) в файле конфигурации для команды оценки. (cf. Issue #468)

Я получаю SegFault в Linux с глубокими сетями (например, ResNet152).

Возможно, у вас недостаточно размера стека. Для BrainScript требуется много стека. Выполните команду: ulimit -s 65536. При этом размер стека будет равным 64 МБ.

Во время eval возникает следующая ошибка: о том, как создать исключение cuDNN failure 8: CUDNN_STATUS_EXECUTION_FAILED ; GPU=0; hostname=haha; expr=err'

Задайте для свойства minibatchSize меньшее значение (например minibatchSize=2, ).

При компиляции CNTK с помощью VS2013/VS2015 возникает ошибка компилятора, что не так?

Необходимо обновить Visual Studio 2017 г. См. здесь: настройка CNTK на Windows

Я включил средство чтения изображений с поддержкой ZIP и получает сообщение "Подключаемый модуль не найден: "Cntk.Deserializers.Image-.dll" (старое имя "ImageReader.dll")" при выполнении модульных тестов средства чтения изображений или попытке использовать средство чтения изображений. Что может быть неправильно?

Убедитесь, что вы правильно установили zlib и libzip.

Я только что скачал и установил CNTK двоичный пакет и хочет запустить задание, но получить странные ошибки, например отсутствующие библиотеки CUDA.

Пожалуйста, внимательно проверьте, что у вас есть в вашем PATH. Особенно, если это общий компьютер разработки. Часто это вызвано более старыми (предыдущими) версиями CNTK или CNTK компонентов, доступных с помощью настроенного ПУТИ.

На Windows я установил новую версию драйвера NVIDIA, и теперь CNTK сборка завершается сбоем с такими ошибками, как ..\Common\BestGpu.cpp(24): fatal error C1083: Cannot open include file: 'nvml.h': No such file or directory

Вы выбрали параметр "Выполнить чистую установку " в установщике драйверов NVIDIA. Это приведет к удалению пакета развертывания GPU (GDK). Чтобы восстановить систему, выполните следующие действия.

  • Запуск установщика CUDA
  • Выбор настраиваемой установки (дополнительно)
  • Отмените выбор всех параметров установки, кроме комплекта развертывания GPU
  • При этом автоматически выбирается параметр "Драйвер графики " — ожидается. Оставьте его выбранным
  • Продолжить установку CUDA
  • После успешной установки CUDA запустите установку требуемой версии графического драйвера
  • Выбор настраиваемой установки (дополнительно)
  • Убедитесь, что невыбрана чистая установка и продолжить установку

Начальное время чтения занимает очень много времени , или я получаю одно из следующих исключений: "Сбой вызова ОС или операция не поддерживается в этой ОС" или "ИСКЛЮЧЕНИЕ произошло: сбой CUSPARSE 1" или Segfault с AllocationFailureHandler в стеке.

Одна из возможных причин заключается в чрезмерном нехватке памяти, вызванной загрузкой всего набора данных в памяти с окном случайной выборки по умолчанию (т. е. без ограничений). Попробуйте запустить рабочую нагрузку с явным randomizationWindow значением, которое ограничивает объем входных данных, кэшированных в памяти. Для этого добавьте следующие параметры reader в раздел конфигурации (например 10000 , можно выбрать любое значение, которое соответствует памяти и обеспечивает хорошую случайность):

   randomize=true
   randomizationWindow=10000 #(assuming that 10K samples << total available memory)

При использовании библиотеки Eval C# Cntk.Eval.Wrapper.dll (старое имя EvalWrapper.dll) в веб-приложении Azure возникают такие ошибки: "Не удалось загрузить файл или сборку "некоторые библиотеки DLL CNTK", или исключение System.Runtime.InteropServices.SEHException или "InternalServiceFault: Внешний компонент создал исключение.".

Сначала убедитесь, что все библиотеки DLL зависимостей CNTK развертываются в веб-приложении Azure. Затем необходимо настроить веб-приложение Azure для использования 64-разрядной виртуальной машины. Чтобы разрешить веб-приложению Azure загружать CNTK неуправляемые библиотеки DLL, необходимо изменить переменную PATH, добавив в метод global.asaxследующий код:Application_Start()

    string pathValue = Environment.GetEnvironmentVariable("PATH");
    string domainBaseDir = AppDomain.CurrentDomain.BaseDirectory;
    string cntkPath = domainBaseDir + @"bin\";
    pathValue += ";" + cntkPath;
    Environment.SetEnvironmentVariable("PATH", pathValue);

Подробные инструкции см. на странице "Оценка модели на веб-странице Azure WebApi".

Я могу создать приложение с помощью Cntk.Eval-.lib/dll, но при запуске возникло исключение, аналогичное приведенным ниже.

Необработанное исключение типа Microsoft.MSR. CNTK. Расширяемость.Managed.CNTKRuntimeException произошла в Cntk.Wrapper-.dll

Дополнительные сведения: configparameters: обязательный параметр отсутствует: unknown:modelPath

Возможны следующие причины:

  • Другая конфигурация сборки (выпуск или отладка) между приложением Cntk.Eval-<VERSION>.lib/dllи . Если вы создаете приложение в выпуске, обратитесь по ссылке на версию Cntk.Eval-<VERSION>.dllвыпуска . То же самое для конфигурации отладки. Эта ошибка обычно возникает для приложения C++.
  • Разные версии компилятора GCC в Linux: Cntk.Eval библиотека в Linux создается с помощью GCC 5.4. Если для приложения используется другая версия GCC, может появиться указанная выше ошибка.
  • МодельPath неправильная. В настоящее время модельPath должна быть указана как полный путь. В примере CSEvalClient относительный путь объединяется с текущим рабочим каталогом для создания полного пути. И CreateNetwork() должен передавать строку, содержащую атрибут modelPath=, указывающий путь к файлу модели. В настоящее время сопоставленный диск не поддерживается для моделиpath.

Я получаю следующий результат с CNTKTextFormat-Reader - ПРЕДУПРЕЖДЕНИЕ: исчерпаны все входные данные, ожидаемые для текущей последовательности при чтении значения с плавающей запятой при смещение

Для чтения CTF требуется, чтобы каждая хорошо сформированная строка заканчивалась символами \n или "Возврат каретки, канал строки" \r\n символов (включая последнюю строку файла).