Bagikan melalui


Evaluasi Model pada Windows

Saat ini, CNTK menyediakan pustaka di C++, C#/.NET, Python, dan Java untuk memuat dan mengevaluasi model pada Windows. Mulai dari v2.1, CNTK juga mendukung Universal Windows Platform (UWP).

Menggunakan C#/.NET Managed API

Pustaka CNTK menyediakan pustaka terkelola (.NET) untuk evaluasi model CNTK pada CPU dan GPU menggunakan C# dan bahasa .NET lainnya. Paket NuGet CNTK. CPUOnly dirancang untuk eksekusi pada CPU, dan CNTK. GPU dirancang untuk eksekusi pada perangkat dengan GPU NVIDIA. Silakan lihat halaman Paket NuGet tentang detail cara menginstal Paket NuGet Pustaka CNTK. Harap dicatat bahwa Visual Studio 2017 diperlukan dan platform target di properti proyek harus X64.

CNTK Library Managed API memungkinkan Anda memuat dan mengevaluasi model yang telah dilatih sebelumnya pada perangkat tertentu (CPU atau GPU). Ini juga menyediakan berbagai cara untuk membantu Anda menyiapkan data input dan output dalam format vektor satu panas atau CSC yang padat dan jarang. Data input dapat berupa satu sampel, batch beberapa sampel, urutan sampel, atau batch urutan dengan panjang variabel. Deskripsi terperinci tentang format batch dan urutan dapat ditemukan di halaman Konsep CNTK. Setelah evaluasi, API menyediakan metode yang nyaman untuk mendapatkan hasil.

Panduan Pemrograman C#/.NET

Langkah-langkah biasa untuk evaluasi model menggunakan CNTK Library Managed API meliputi:

  1. Instal paket NuGet yang sesuai (CPU atau GPU tergantung pada penggunaan) ke Anda. Detail dijelaskan dalam Paket CNTK NuGet.
  2. Muat model menurut Function.Load(). Nilai yang dikembalikan adalah instans yang Function mengacu pada model yang dimuat.
  3. Jika diperlukan, dapatkan input dan output model yang dimuat dengan memanggil properti Arguments, Output atau Outputs instans Fungsi yang dikembalikan oleh Load(). Input dan output direpresentasikan sebagai Variable. Informasi lebih lanjut tentang setiap input atau output individu, misalnya Name atau Shape dapat ditemukan dengan memanggil properti Variabel yang sesuai.
  4. Untuk setiap input, siapkan data input untuk evaluasi. Bergantung pada penggunaan, data input mungkin terdiri dari satu sampel, batch beberapa sampel, urutan sampel, atau batch urutan dengan panjang variabel. Mengenai penyimpanan, data input dapat dalam format padat, vektor satu panas, atau format CSC jarang. Objek Value digunakan untuk mewakili data input dengan konten dan format yang berbeda. CNTK API menyediakan metode yang berbeda untuk dengan mudah membuat objek Nilai dari data pengguna biasa.
    • CreateBatch() membuat objek Nilai yang berisi batch sampel tunggal atau beberapa.
    • CreateSequence() membuat objek Nilai yang berisi urutan dengan beberapa sampel. Dimungkinkan untuk menentukan apakah urutan ini adalah urutan baru atau kelanjutan dari urutan sebelumnya pada indeks yang sama dalam daftar urutan dari panggilan sebelumnya ke metode ini.
    • CreateBatchOfSequences() membuat objek Nilai yang berisi batch urutan. Setiap urutan memiliki panjang sampel variabel. Semua metode di atas mendukung format CSC yang padat, vektor satu panas, atau jarang.
  5. Evaluate() Panggil metode untuk menjalankan evaluasi. Parameter arguments mendefinisikan Variabel input dan Nilai terkaitnya, dan outputs menentukan Variabel output. Jika objek Nilai dari variabel output adalah null, Pustaka CNTK mengalokasikan penyimpanan aktual untuk Nilai output. Saat dikembalikan, Evaluate() menyimpan hasil evaluasi ke dalam objek Nilai yang terkait dengan variabel output.
  6. GetDenseData()/GetOneHotData() Panggil metode Nilai output untuk mendapatkan hasil dalam format data biasa. Ini menyalin data yang disimpan dalam objek Nilai ke dalam buffer sebagai daftar urutan dengan sampel panjang variabel, baik dalam format padat atau format vektor satu panas (dukungan untuk format jarang akan segera ditambahkan).

CNTK Library Managed API dijelaskan di halaman CNTK Library C#/.NET Managed API .

Evaluasi beberapa permintaan secara paralel

CNTK mendukung evaluasi beberapa permintaan secara paralel. Karena menjalankan evaluasi pada instans model yang sama tidak aman untuk utas, diperlukan terlebih dahulu untuk membuat beberapa instans model dengan memanggil Clone() dengan ParameterCloningMethod.Share, dan kemudian setiap utas menggunakan instans model terpisah untuk evaluasi. Menunjukkan EvaluateMultipleImagesInParallelAsync() cara mengevaluasi permintaan bersamaan menggunakan CNTK C#/.NET Managed API.

Jalankan evaluasi secara asinkron

CNTK C# API tidak memiliki metode asinkron untuk Evaluate(), karena evaluasinya adalah operasi terikat CPU (Silakan lihat [artikel ini] (https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/) untuk penjelasan terperinci). Namun, diinginkan untuk menjalankan evaluasi secara asinkron dalam beberapa kasus penggunaan, misalnya offloading untuk responsivitas, kami menunjukkan dalam contoh EvaluationSingleImageAsync() cara mencapainya dengan menggunakan metode EvaluateAsync()ekstensi .

Mengevaluasi lapisan menengah

CNTK C# API mampu mengevaluasi lapisan perantara dalam grafik model. Untuk itu, lapisan yang diinginkan dapat ditemukan dengan namanya, dan lapisan perantara dapat dievaluasi. Contoh EvaluateIntermediateLayer() dalam C# menunjukkan cara mengevaluasi lapisan menengah dalam model.

Mengevaluasi output dari beberapa simpul

CNTK dapat mengevaluasi beberapa simpul dalam grafik model dengan menggabungkan outputnya ke dalam satu simpul. Contoh EvaluateCombinedOutputs() dalam C# menunjukkan cara mengevaluasi beberapa output.

Contoh C#

CNTKLibraryCSEvalExamples menunjukkan cara mengevaluasi model di C# menggunakan paket CNTK Library NuGet. Silakan lihat halaman Contoh Evaluasi untuk membuat dan menjalankan contoh.

Jika Anda tidak ingin menggunakan Paket NuGet, Anda dapat menambahkan Cntk.Core.Managed-<VERSION>.dll sebagai referensi ke proyek Anda. Cntk.Core.Managed DLL dan semua DLL dependen dapat ditemukan dalam paket rilis biner CNTK pada halaman Rilis CNTK. Pastikan bahwa jalur ke Cntk.Core.Managed DLL dan dependensinya (lihat daftar di akhir halaman ini) disertakan dalam jalur pencarian DLL untuk aplikasi Anda.

Menggunakan C++

CNTK Library C++ API mendukung evaluasi model dalam aplikasi C++. Aplikasi desktop standar dan aplikasi Universal Windows Platform didukung. Visual Studio 2017 diperlukan dan platform target dalam properti proyek harus X64.

Paket CNTK NuGet CNTK. CPUOnly dan CNTK. GPU berisi C++ CNTK Library untuk menggunakan CNTK dalam aplikasi desktop. Untuk menggunakan CNTK di Universal Windows Platform, silakan instal CNTK. UWP. CPUOnly. Dengan menggunakan paket NuGet, konfigurasi tentang direktori sertakan dan pustaka secara otomatis ditambahkan ke properti proyek Anda. Build Debug dan Rilis didukung. Halaman Paket NuGet menjelaskan cara mendapatkan dan menginstal Paket CNTK NuGet.

Panduan Pemrograman C++

Langkah-langkah berikut menjelaskan cara menggunakan Pustaka C++ CNTK untuk evaluasi model.

  1. Tautkan Cntk.Core-<VERSION>.lib pustaka impor ke dalam aplikasi. Langkah ini dapat dihilangkan jika Anda menggunakan paket NuGet. Untuk aplikasi UWP, nama pustakanya adalah Cnkt.Core_app-<Version>.lib.
  2. Sertakan file header evaluasi "CNTKLibrary.h".
  3. Muat model dengan CNTK::Function::Load(). Objek Fungsi yang dikembalikan mewakili grafik komputasi model.
  4. Siapkan data untuk setiap variabel input. Anda dapat menggunakan CNTK::Value::CreateBatch(), CNTK::Value::CreateSequence(), atau CNTK::Value::CreateBatchOfSequences() untuk membuat objek Nilai dari data input Anda yang mewakili batch sampel, urutan sampel, atau batch urutan sampel masing-masing.
  5. Panggil CNTK::Function::Evaluate() evaluasi. mengharapkan Evaluate() sebagai input unordered_map untuk variabel input dan nilai input, dan unordered_map untuk variabel output dan nilai output. Objek nilai output bisa menjadi null yang berarti bahwa Pustaka CNTK mengalokasikan penyimpanan aktual untuk nilai output ini. Saat dikembalikan, objek Nilai yang terkait dengan variabel output berisi hasil evaluasi.
  6. Dapatkan data output dari hasil evaluasi. Gunakan CNTK::Value::CopyVariableValueTo() untuk menyalin data yang disimpan dalam objek Nilai ke dalam buffer sebagai daftar urutan dengan panjang sampel variabel.

Untuk evaluasi bersamaan dari beberapa permintaan, CNTK::Function::Clone() harus dipanggil sebelum Evaluasi(). Menunjukkan ParallelEvaluationExample() cara mengevaluasi beberapa permintaan secara paralel menggunakan CNTK C++ Library API.

Untuk detail tentang C++ CNTK Library API untuk evaluasi, silakan lihat halaman Antarmuka Evaluasi CNTK Library C++ .

Contoh C++

C++ mencontohkan CNTKLibraryCPPEvalCPUOnlyExamples dan CNTKLibraryCPPEvalGPUExamples mengilustrasikan pola penggunaan di atas. UWPImageRecognition berisi contoh menggunakan pustaka CNTK UWP untuk evaluasi model. Halaman Contoh Evaluasi menyediakan langkah-langkah terperinci tentang membuat dan menjalankan contoh.

Atau, Anda dapat menggunakan C++ CNTK Library tanpa Paket NuGet. Anda bisa mendapatkan Cntk.Core-<VERSION>.lib (atau Cntk.Core_app-<Version>.lib) dan semua DLL dependen dari halaman Rilis CNTK atau membangunnya dari kode sumber CNTK. Anda juga perlu mengonfigurasi jalur sertakan dan pustaka untuk menunjuk ke direktori yang benar, dan memastikan bahwa konfigurasi build (Debug atau Rilis) Pustaka CNTK sama dengan pengaturan proyek Anda (Jika tidak, Anda akan mendapatkan pengecualian yang tidak terduga). Paket rilis CNTK hanya berisi build rilis biner.

Mengirim Pustaka CNTK dengan aplikasi Windows Anda

Pustaka CNTK mengharuskan Paket Visual C++ Redistributable untuk Visual Studio 2017 diinstal pada sistem tempat aplikasi Anda akan dijalankan. Dan platform target dalam properti proyek harus X64.

Halaman ini menjelaskan bagaimana file biner CNTK diberi nama.

Untuk aplikasi C++ desktop, DLL berikut perlu didistribusikan dengan aplikasi Anda.

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

Jika Anda menggunakan C#/.NET Managed Library, di samping DLL yang disebutkan di atas, Anda juga perlu menyertakan DLL berikut:

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

Untuk menggunakan GPU, Anda perlu menyertakan DLL terkait NVIDIA CUDA berikut:

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

Catatan

Diubah dalam CNTK versi 2.1.

Paket CNTK NuGet dikirim dengan cuDNN 6 (cudnn64_6.dll).

Semua DLL ini dapat ditemukan di versi rilis biner CNTK, lihat halaman Rilis CNTK.

Untuk aplikasi UWP, DLL berikut perlu didistribusikan dengan aplikasi Anda. Anda dapat menemukan DLL ini dalam paket CNTK.UWP.CPUOnlyNuget .

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

Menggunakan Python

Anda dapat menggunakan Python untuk mengevaluasi model yang telah dilatih sebelumnya. Contoh dapat ditemukan di sini.

Menggunakan Java

CNTK juga menyediakan API untuk mengevaluasi model dalam aplikasi Java. Harap dicatat bahwa CNTK Java API masih bersifat eksperimental dan dapat berubah.

Contoh Java menunjukkan cara mengevaluasi model CNN menggunakan Java API.

Untuk menggunakan Pustaka Java CNTK, tambahkan cntk.jar file ke classpath proyek Java Anda. Jika Anda bekerja dengan IDE, Anda harus menambahkan ini sebagai jar yang tidak dikelola. File cntk.jar dapat ditemukan di paket rilis biner CNTK (di folder cntk\cntk\java). Anda juga dapat membangun cntk.jar dari sumber CNTK. Harap atur java.library.path juga ke direktori yang berisi Cntk.Core.JavaBinding-<Version>.dll, dan pastikan bahwa direktori yang berisi DLL biner CNTK berada di jalur pencarian DLL sistem Anda, misalnya dengan menambahkan direktori ke variabel lingkungan PATH. Harap dicatat bahwa Anda juga perlu menginstal Paket Visual C++ Redistributable untuk Visual Studio 2017. Jika Anda mendapatkan UnsatisfiedLinkErrors di Java, biasanya karena direktori tidak berada di jalur pencarian DLL (atau dalam urutan yang salah).

Pustaka Java saat ini dibangun dan diuji dengan Oracle JDK 8 64-bit.