Rozwiązywanie problemów
Ta strona zbiera niektóre z najczęstszych pułapek napotykanych przez użytkowników.
Podczas trenowania klasyfikatora binarnego zawsze widzę błąd klasyfikacji 0 nawet z pierwszego minibatcha
Funkcja ClassificationError działa prawidłowo tylko w przypadku problemów wieloklasowych. W przypadku klasyfikacji binarnej użyj tego prostego przepisu
Mimo że model został wytrenowany z większym zestawem niż zestaw oceny, CNTK zabraknie pamięci podczas oceny.
Trenowanie modelu zwykle ma właściwość ustawioną minibatchSize
w pliku konfiguracji CNTK. Podczas oceniania modelu przy użyciu CNTK.exe upewnij się, że jest ona odpowiednia minibatchSize
. Aby szybko określić, czy ta właściwość powoduje problem, ustaw właściwość na niską wartość (np. minibatchSize=2
) w pliku konfiguracji polecenia ewaluacyjnego. (cf. Problem nr 468)
Otrzymuję aplikację SegFault w systemie Linux z głębokimi sieciami (takimi jak ResNet152).
Być może nie masz wystarczającego rozmiaru stosu. Język BrainScript wymaga dużej ilości stosu. Uruchom polecenie: ulimit -s 65536. Spowoduje to ustawienie rozmiaru stosu na 64 MB.
Podczas eval jest wyświetlany następujący błąd: O zgłaszaniu wyjątku "błąd cuDNN 8: CUDNN_STATUS_EXECUTION_FAILED ; PROCESOR GPU=0 ; hostname=haha; expr=err'
Ustaw właściwość minibatchSize na mniejszą wartość (np. minibatchSize=2
).
Podczas kompilowania CNTK przy użyciu programu VS2013/VS2015 widzę błąd kompilatora, co jest nie tak?
Należy uaktualnić Visual Studio 2017 r. Zobacz tutaj: Konfigurowanie CNTK na Windows
Podczas uruchamiania testów jednostkowych czytnika obrazów lub próby użycia czytnika obrazów wystąpił błąd "Nie znaleziono wtyczki: "Cntk.Deserializers.Image-.dll" (stara nazwa "ImageReader.dll") podczas uruchamiania testów jednostkowych czytnika obrazów. Co może być złe?
Sprawdź, czy poprawnie zainstalowano bibliotekę zlib i libzip.
Właśnie pobrano i zainstalowano CNTK pakiet binarny i chcę uruchomić zadanie, ale występują dziwne błędy, takie jak brakujące biblioteki CUDA.
Sprawdź dokładnie, co masz w pliku PATH
. Szczególnie jeśli jest to współużytkowana maszyna deweloperowa. Często jest to spowodowane przez starsze (poprzednie) wersje CNTK lub CNTK składników, które są osiągalne za pośrednictwem skonfigurowanej ścieżki.
Na Windows zainstalowano nową wersję sterownika NVIDIA, a teraz CNTK kompilacja kończy się niepowodzeniem z błędami, takimi jak ..\Common\BestGpu.cpp(24): fatal error C1083: Cannot open include file: 'nvml.h': No such file or directory
Wybrano opcję Wykonaj czystą instalację w Instalatorze sterowników FIRMY NVIDIA. Spowoduje to usunięcie zestawu wdrażania procesora GPU (GDK). Aby naprawić system, wykonaj następujące kroki:
- Uruchamianie instalatora CUDA
- Wybierz instalację niestandardową (zaawansowaną)
- Usuń zaznaczenie wszystkich opcji instalacji, z wyjątkiem zestawu wdrażania procesora GPU
- Spowoduje to automatyczne wybranie opcji Sterownik grafiki — jest to oczekiwane. Pozostaw zaznaczoną opcję
- Kontynuuj instalację CUDA
- Po pomyślnym zakończeniu instalacji CUDA uruchom instalację żądanej wersji sterownika graficznego
- Wybierz instalację niestandardową (zaawansowaną)
- Upewnij się, że nie wybranoopcji Wykonaj czystą instalację i kontynuuj instalację
Początkowy czas odczytu trwa bardzo długo lub otrzymuję jeden z następujących wyjątków: "Wywołanie systemu operacyjnego nie powiodło się lub operacja nieobsługiwana w tym systemie operacyjnym" lub "Wystąpił wyjątek: błąd CUSPARSE 1" lub segfault z funkcją AllocationFailureHandler w stosie.
Jedną z możliwych przyczyn jest nadmierne wykorzystanie pamięci spowodowane ładowaniem całego zestawu danych w pamięci z domyślnym (tj. nieograniczonym) oknem losowania. Spróbuj uruchomić obciążenie z jawną randomizationWindow
wartością, która ograniczy ilość danych wejściowych buforowanych w pamięci. Aby to zrobić, dodaj następujące parametry do reader
sekcji konfiguracji (na 10000
przykład możesz wybrać dowolną wartość, która mieści się w pamięci i zapewnia dobrą losowość):
randomize=true
randomizationWindow=10000 #(assuming that 10K samples << total available memory)
Występują błędy podczas korzystania z biblioteki Eval C# Cntk.Eval.Wrapper.dll (stara nazwa EvalWrapper.dll) w aplikacji internetowej platformy Azure, podobnie jak w następujący sposób: "Nie można załadować pliku lub zestawu "niektóre biblioteki DLL CNTK" lub wyjątek System.Runtime.InteropServices.SEHException lub "InternalServiceFault: składnik zewnętrzny zgłosił wyjątek".
Najpierw upewnij się, że wszystkie biblioteki DLL zależności CNTK są wdrażane w aplikacji internetowej platformy Azure.
Następnie musisz ustawić aplikację internetową platformy Azure tak, aby korzystała z 64-bitowej maszyny wirtualnej. Aby umożliwić aplikacji internetowej platformy Azure ładowanie CNTK niezarządzanych bibliotek DLL, należy zmienić zmienną PATH, dodając następujący kod w metodzie w Application_Start()
metodzie :global.asax
string pathValue = Environment.GetEnvironmentVariable("PATH");
string domainBaseDir = AppDomain.CurrentDomain.BaseDirectory;
string cntkPath = domainBaseDir + @"bin\";
pathValue += ";" + cntkPath;
Environment.SetEnvironmentVariable("PATH", pathValue);
Aby uzyskać szczegółowe instrukcje, zobacz stronę "Oceń model w interfejsie WebApi platformy Azure".
Mogę skompilować aplikację przy użyciu biblioteki Cntk.Eval-.lib/dll, ale wystąpił wyjątek podobny do poniższych podczas uruchamiania
Nieobsługiwany wyjątek typu "Microsoft.MSR". CNTK. Rozszerzenie.Managed.CNTKRuntimeException wystąpiło w Cntk.Wrapper-.dll
Dodatkowe informacje: configparameters: brak wymaganego parametru: unknown:modelPath
Możliwe przyczyny:
- Inna konfiguracja kompilacji (wydanie lub debugowanie) między aplikacją a programem
Cntk.Eval-<VERSION>.lib/dll
. Jeśli skompilujesz aplikację w wersji, połącz się z wersją wydania .Cntk.Eval-<VERSION>.dll
Tak samo w przypadku konfiguracji debugowania. Ten błąd występuje zwykle w przypadku aplikacji C++. - Różne wersje kompilatora
Cntk.Eval
GCC w systemie Linux: biblioteka w systemie Linux jest kompilowana z GCC 5.4. Jeśli używasz innej wersji GCC dla aplikacji, może zostać wyświetlony powyższy błąd - Ścieżka modelu jest niepoprawna. Obecnie parametr modelPath musi być określony jako pełna ścieżka. W przykładzie CSEvalClient ścieżka względna jest połączona z bieżącym katalogiem roboczym w celu utworzenia pełnej ścieżki. Ponadto element CreateNetwork() musi zostać przekazany ciąg zawierający atrybut "modelPath=" określający ścieżkę pliku modelu. Obecnie zamapowany dysk nie jest obsługiwany dla ścieżki modelu.
Otrzymuję następujący wynik z CNTKTextFormat-Reader - OSTRZEŻENIE: Wyczerpano wszystkie dane wejściowe oczekiwane dla bieżącej sekwencji podczas odczytywania wartości zmiennoprzecinkowej na przesunięcie
Czytnik CTF wymaga, aby każdy dobrze sformułowany wiersz musiał kończyć się znakiem "Kanał liniowy" \n lub "Powrót karetki, Kanał informacyjny wiersza" \r\n symbole (w tym ostatni wiersz pliku).