Udostępnij za pośrednictwem


Ocena modelu na Windows

Obecnie CNTK udostępnia biblioteki w językach C++, C#/.NET, Python i Java do ładowania i oceniania modeli na platformie Windows. Począwszy od wersji 2.1, CNTK obsługuje również platforma uniwersalna systemu Windows (UWP).

Korzystanie z zarządzanego interfejsu API języka C#/.NET

Biblioteka CNTK udostępnia zarządzaną bibliotekę (.NET) do oceny modeli CNTK procesora CPU i procesora GPU przy użyciu języka C# i innych języków platformy .NET. CNTK pakietu NuGet. Procesor CPUOnly jest przeznaczony do wykonywania na procesorze CPU i CNTK. Procesor GPU jest przeznaczony do wykonywania na urządzeniach z procesorem GPU firmy NVIDIA. Zapoznaj się ze stroną pakiet NuGet zawierającą szczegółowe informacje na temat sposobu instalowania pakietów NuGet biblioteki CNTK. Należy pamiętać, że Visual Studio 2017 jest wymagana, a platforma docelowa we właściwości projektu powinna mieć wartość X64.

Interfejs API zarządzany przez bibliotekę CNTK umożliwia ładowanie i ocenianie wstępnie wytrenowanych modeli na określonych urządzeniach (procesor CPU lub procesor GPU). Zapewnia również różne sposoby przygotowania danych wejściowych i wyjściowych w gęstym, gorącym wektorze lub rozrzednionym formacie CSC. Dane wejściowe mogą być pojedynczą próbką, partią wielu próbek, sekwencją próbek lub partią sekwencji o zmiennej długości. Szczegółowy opis dotyczący formatu wsadowego i sekwencji można znaleźć na stronie CNTK Concepts (Pojęcia). Po przeprowadzeniu oceny interfejs API udostępnia wygodne metody uzyskiwania wyników.

Przewodnik programowania w języku C#/.NET

Typowe kroki oceny modelu przy użyciu interfejsu API zarządzanego biblioteki CNTK obejmują:

  1. Zainstaluj odpowiedni pakiet NuGet (procesor CPU lub procesor GPU w zależności od użycia). Szczegóły są opisane w pakiecie CNTK NuGet.
  2. Załaduj model według function.Load(). Zwrócona Function wartość to wystąpienie odwołujące się do załadowanego modelu.
  3. W razie potrzeby uzyskaj dane wejściowe i wyjściowe załadowanego modelu, wywołując właściwości Argumentslub OutputOutputs wystąpienie funkcji zwrócone przez funkcję Load(). Dane wejściowe i wyjściowe są reprezentowane jako Variable. Dalsze informacje o poszczególnych danych wejściowych lub wyjściowych, np. Name lub Shape można je znaleźć, wywołując odpowiednie właściwości zmiennej.
  4. Dla każdego danych wejściowych przygotuj dane wejściowe do oceny. W zależności od użycia dane wejściowe mogą składać się z jednej próbki, partii wielu próbek, sekwencji próbek lub partii sekwencji o zmiennej długości. Jeśli chodzi o magazyn, dane wejściowe mogą być w formacie gęstym, wektorem z gorącą gorącą lub rozrzednionym formatem CSC. Obiekt Value jest używany do reprezentowania danych wejściowych z inną zawartością i formatami. Interfejs API CNTK udostępnia różne metody łatwego tworzenia obiektu Value na podstawie zwykłych danych użytkownika.
    • CreateBatch() Tworzy obiekt Value zawierający partię pojedynczych lub wielu przykładów.
    • CreateSequence() Tworzy obiekt Value zawierający sekwencję z wieloma przykładami. Można określić, czy ta sekwencja jest nową sekwencją, czy kontynuacją poprzedniej sekwencji w tym samym indeksie na liście sekwencji z poprzedniego wywołania tej metody.
    • CreateBatchOfSequences() Tworzy obiekt Value zawierający partię sekwencji. Każda sekwencja ma zmienną długość próbek. Wszystkie powyższe metody obsługują zarówno gęsty, jeden-gorący wektor lub rozrzedniony format CSC.
  5. Wywołaj metodę , Evaluate() aby wykonać ocenę. Parametr arguments definiuje zmienne wejściowe i skojarzone z nimi wartości oraz outputs definiuje zmienne wyjściowe. Jeśli obiekt Value zmiennej wyjściowej to null, CNTK Biblioteka przydziela rzeczywisty magazyn dla wartości wyjściowej. Po powrocie funkcja Evaluate() zapisuje wyniki oceny w obiektach Value skojarzonych ze zmiennymi wyjściowymi.
  6. Wywołaj metodę GetDenseData()/GetOneHotData() wartości wyjściowej, aby uzyskać wyniki w formacie zwykłych danych. Kopiuje dane przechowywane w obiekcie Value do buforu jako listę sekwencji z próbkami o zmiennej długości, w formacie gęstym lub wektorowym z gorącą wartością (obsługa formatu rozrzednego zostanie wkrótce dodana).

Interfejs API zarządzanego biblioteki CNTK został opisany na stronie interfejsu API zarządzanego języka C#/.NET biblioteki CNTK.

Równoległa ocena wielu żądań

CNTK obsługuje równoległe ocenianie wielu żądań. Ponieważ uruchamianie oceny w tym samym wystąpieniu modelu nie jest bezpieczne wątkowo, należy najpierw utworzyć wiele wystąpień modelu przez wywołanie metody Clone() z elementem ParameterCloningMethod.Share, a następnie każdy wątek używa oddzielnego wystąpienia modelu do oceny. W tym artykule EvaluateMultipleImagesInParallelAsync() pokazano, jak oceniać współbieżne żądania przy użyciu interfejsu API zarządzanego CNTK C#/.NET.

Uruchamianie oceny asynchronicznie

CNTK interfejs API języka C# nie ma metody asynchronicznej dla funkcji Evaluate(), ponieważ ocena jest operacją związaną z procesorem CPU (zapoznaj się z [tym artykułem] (https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/), aby uzyskać szczegółowe wyjaśnienie). Jednak w niektórych przypadkach użycia należy uruchomić ocenę asynchronicznie, np. odciążanie czasu odpowiedzi, w przykładzie EvaluationSingleImageAsync() pokazano, jak to osiągnąć przy użyciu metody EvaluateAsync()rozszerzenia .

Ocena warstw pośrednich

CNTK interfejs API języka C# umożliwia ocenę warstwy pośredniej na wykresie modelu. W tym celu żądana warstwa może zostać znaleziona według jej nazwy, a warstwa pośrednia może zostać obliczona. Przykład EvaluateIntermediateLayer() w języku C# pokazuje, jak ocenić warstwę pośrednią w modelu.

Ocena danych wyjściowych z wielu węzłów

CNTK można ocenić wiele węzłów na grafie modelu, łącząc swoje dane wyjściowe w jeden węzeł. W przykładzie EvaluateCombinedOutputs() w języku C# pokazano, jak ocenić wiele danych wyjściowych.

Przykłady w języku C#

Plik CNTKLibraryCSEvalExamples pokazuje, jak ocenić model w języku C# przy użyciu pakietów NuGet biblioteki CNTK. Zobacz stronę Przykłady oceny , na potrzeby tworzenia i uruchamiania przykładów.

Jeśli nie chcesz używać pakietu NuGet, możesz dodać Cntk.Core.Managed-<VERSION>.dll go jako odwołanie do projektu. Biblioteki Cntk.Core.Managed DLL i wszystkie zależne biblioteki DLL można znaleźć w pakiecie wersji binarnej CNTK na stronie wydania CNTK. Upewnij się, że ścieżka do Cntk.Core.Managed biblioteki DLL i jej zależności (zobacz listę na końcu tej strony) znajdują się w ścieżce wyszukiwania bibliotek DLL dla aplikacji.

Korzystanie z języka C++

Interfejs API języka C++ biblioteki CNTK obsługuje ocenę modelu w aplikacjach języka C++. Obsługiwane są zarówno standardowe aplikacje klasyczne, jak i aplikacje platforma uniwersalna systemu Windows. Visual Studio 2017 jest wymagana, a platforma docelowa we właściwości projektu powinna mieć wartość X64.

Pakiet CNTK NuGet CNTK. PROCESOR CPUOnly i CNTK. Procesor GPU zawiera bibliotekę CNTK języka C++ do używania CNTK w aplikacjach klasycznych. Aby korzystać z CNTK w platforma uniwersalna systemu Windows, zainstaluj CNTK. UWP. PROCESOR CPUOnly. Przy użyciu pakietów NuGet konfiguracja katalogów dołączania i biblioteki jest automatycznie dodawana do właściwości projektu. Obsługiwane są zarówno kompilacje debugowania, jak i wydania. Na stronie pakiet NuGet wyjaśniono, jak pobrać i zainstalować pakiety CNTK NuGet.

Przewodnik programowania w języku C++

W poniższych krokach opisano sposób używania biblioteki CNTK języka C++ do oceny modelu.

  1. Połącz bibliotekę Cntk.Core-<VERSION>.lib importu z aplikacją. Ten krok można pominąć, jeśli używasz pakietu NuGet. W przypadku aplikacji platformy UNIWERSALNEJ systemu Windows nazwa biblioteki to Cnkt.Core_app-<Version>.lib.
  2. Dołącz plik nagłówka oceny "CNTKLibrary.h".
  3. Załaduj model według .CNTK::Function::Load() Zwrócony obiekt funkcji reprezentuje wykres obliczeniowy modelu.
  4. Przygotuj dane dla każdej zmiennej wejściowej. Można użyć metody CNTK::Value::CreateBatch(), CNTK::Value::CreateSequence()lub CNTK::Value::CreateBatchOfSequences() , aby utworzyć obiekt Value na podstawie danych wejściowych reprezentujących partię próbek, sekwencję próbek lub odpowiednio partię sekwencji próbek.
  5. Wezwanie CNTK::Function::Evaluate() do oceny. Oczekiwany Evaluate() jako dane wejściowe unordered_map dla zmiennych wejściowych i wartości wejściowych oraz unordered_map zmiennych wyjściowych i wartości wyjściowych. Obiekt wartości wyjściowej może oznaczaćnull, że CNTK Library przydziela rzeczywisty magazyn dla tej wartości wyjściowej. Po powrocie obiekty Value skojarzone ze zmiennymi wyjściowymi zawierają wyniki oceny.
  6. Pobieranie danych wyjściowych z wyników oceny. Służy CNTK::Value::CopyVariableValueTo() do kopiowania danych przechowywanych w obiekcie Value do buforu jako listy sekwencji o zmiennej długości próbek.

W przypadku współbieżnej oceny wielu żądań CNTK::Function::Clone() należy wywołać metodę przed evaluate(). W tym artykule ParallelEvaluationExample() pokazano, jak równolegle oceniać wiele żądań przy użyciu interfejsu API biblioteki języka C++ CNTK.

Aby uzyskać szczegółowe informacje na temat interfejsu API biblioteki CNTK języka C++ na potrzeby oceny, zapoznaj się ze stroną interfejsu oceny biblioteki CNTK języka C++.

Przykłady języka C++

Przykłady języka C++ CNTKLibraryCPPEvalCPUOnlyExamples i CNTKLibraryCPPEvalGPUExamples ilustrują powyższy wzorzec użycia. Biblioteka UWPImageRecognition zawiera przykład użycia biblioteki platformy UWP CNTK do oceny modelu. Strona Przykłady oceny zawiera szczegółowe kroki tworzenia i uruchamiania przykładów.

Alternatywnie możesz użyć biblioteki CNTK języka C++ bez pakietu NuGet. Możesz pobrać Cntk.Core-<VERSION>.lib (lub Cntk.Core_app-<Version>.lib) i wszystkie zależne biblioteki DLL ze strony CNTK Wydania lub skompilować je na podstawie kodu źródłowego CNTK. Należy również skonfigurować ścieżkę dołączania i biblioteki, aby wskazać prawidłowy katalog i upewnić się, że konfiguracja kompilacji (debugowanie lub wydanie) biblioteki CNTK jest taka sama jak w przypadku ustawienia projektu (w przeciwnym razie otrzymasz nieoczekiwane wyjątki). Pakiet wydania CNTK zawiera tylko kompilację wersji plików binarnych.

Wysyłanie biblioteki CNTK przy użyciu aplikacji Windows

biblioteka CNTK wymaga zainstalowania pakietu pakiet redystrybucyjny programu Visual C++ dla Visual Studio 2017 w systemie, w którym aplikacja będzie uruchamiana. A platforma docelowa we właściwości projektu powinna mieć wartość X64.

Na tej stronie opisano, jak nazwane są pliki binarne CNTK.

W przypadku aplikacji klasycznych języka C++ następujące biblioteki DLL muszą być dystrybuowane wraz z aplikacją.

  • Cntk.Core-<VERSION>.dll
  • Cntk.Math-<VERSION>.dll
  • libiomp5md.dll
  • mklml.dll

Jeśli używasz biblioteki zarządzanej C#/.NET, obok bibliotek DLL wymienionych powyżej należy dodatkowo uwzględnić następujące biblioteki DLL:

  • Cntk.Core.Managed-<VERSION>.dll
  • Cntk.Core.CSBinding-<VERSION>.dll

Do korzystania z procesora GPU oprócz uwzględnienia następujących bibliotek DLL powiązanych z procesorem NVIDIA CUDA:

  • cublas64_90.dll
  • cudart64_90.dll
  • cudnn64_7.dll
  • curand64_90.dll
  • cusparse64_90.dll
  • nvml.dll

Uwaga

Zmieniono w CNTK wersji 2.1.

CNTK NuGet pakiety są wysyłkowe z cuDNN 6 (cudnn64_6.dll).

Wszystkie te biblioteki DLL można znaleźć w CNTK wersji binarnej, zobacz stronę CNTK Wydania.

W przypadku aplikacji platformy UNIWERSALNEJ systemu Windows następujące biblioteki DLL muszą być dystrybuowane z aplikacją. Te biblioteki DLL można znaleźć w pakiecie CNTK.UWP.CPUOnlyNuget .

  • Cntk.Core_app-<VERSION>.dll
  • Cntk.Math_app-<VERSION>.dll
  • libopenblas.dll

Korzystanie z języka Python

Język Python umożliwia ocenę wstępnie wytrenowanego modelu. Przykłady można znaleźć tutaj.

Korzystanie z języka Java

CNTK udostępnia również interfejsy API do oceny modelu w aplikacji Java. Należy pamiętać, że interfejs API języka Java CNTK jest nadal eksperymentalny i może ulec zmianie.

W przykładzie języka Java pokazano, jak ocenić model CNN przy użyciu interfejsu API języka Java.

Aby użyć biblioteki języka Java CNTK, dodaj cntk.jar plik do classpath projektu Java. Jeśli pracujesz ze środowiskiem IDE, dodaj go jako niezarządzany plik jar. Plik cntk.jar można znaleźć w pakiecie wersji binarnej CNTK (w folderze cntk\cntk\java). Można również skompilować plik cntk.jar ze źródła CNTK. Ustaw java.library.path również katalog zawierający Cntk.Core.JavaBinding-<Version>.dllelement i upewnij się, że katalog zawierający CNTK binarnych bibliotek DLL znajduje się w ścieżce wyszukiwania bibliotek DLL systemu, np. dodając katalog do zmiennej środowiskowej PATH. Należy również zainstalować pakiet pakiet redystrybucyjny programu Visual C++ dla Visual Studio 2017. Jeśli korzystasz z języka Java, zazwyczaj jest to spowodowane tym, że katalog nie znajduje się UnsatisfiedLinkErrors w ścieżce wyszukiwania biblioteki DLL (lub w niewłaściwej kolejności).

Biblioteka Java jest obecnie kompilowana i testowana przy użyciu 64-bitowego zestawu Oracle JDK 8.