Bagikan melalui


Mengevaluasi model di Azure WebApi menggunakan CNTK Library Managed API

Menyebarkan melalui Baris Perintah Azure Machine Learning

Salah satu cara untuk menyebarkan model CNTK di Azure dan dapat menjalankan model yang disebarkan melalui API Web adalah melalui antarmuka baris perintah ke Azure Machine Learning. Klik di sini untuk mempelajari caranya.

Menyebarkan melalui ASP.NET

Kami akan memandu Anda ke langkah-langkah yang diperlukan untuk menyebarkan model CNTK di Azure dan mengirim permintaan web ke titik akhir Azure untuk mengevaluasi data terhadap model yang disebarkan. Kami akan membangun fungsionalitas ini dalam bentuk WebApi, tetapi fokus pada fungsionalitas Azure yang paling mendasar. Silakan merujuk ke dokumentasi Azure yang lebih canggih untuk mempelajari tentang semua kemampuan tingkat lanjut, yaitu meneruskan parameter dll.

Persyaratan

Karena saat ini kami menggunakan VS2017 untuk membangun CNTK, kami fokus pada versi Visual Studio ini.

Fitur Pengembangan Web untuk Visual Studio

Anda perlu mengaktifkan fitur Web-Development di Visual Studio. Anda dapat melihat apakah fitur ini diaktifkan (dan mengaktifkan jika perlu) dengan menjalankan alat penginstal VS lagi (Control Panel -> Program and Features -> Microsoft Visual Studio 201x, klik kanan dan pilih Change untuk memanggil alat penginstal VS)

Azure SDK

Azure SDK untuk .NET perlu diinstal pada komputer pengembangan Anda. Halaman unduhan untuk ini adalah: Unduhan Azure SDK

Akun Azure

Karena kami akan menghosting model CNTK di Azure, Anda akan memerlukan akun Azure. Jika Anda memiliki langganan MSDN atau Visual Studio, akun tersebut akan cukup untuk menghosting model Anda untuk tutorial ini. CNTK memerlukan komputer virtual 64-bit untuk dihosting, akun Azure gratis tidak menyertakan kemampuan ini dan tidak akan cukup.

Awalnya kami akan mengembangkan WebApi secara lokal dan kemudian mengunggah ini ke instans Azure kami. Jadi Anda akan dapat mengikuti sebagian besar langkah bahkan tanpa akses ke Azure.

Mari kita mulai

Kami sudah membuat cetak biru proyek yang disebut CNTKAzureTutorial01. Proyek ini adalah bagian dari repositori GitHub CNTK dan dapat ditemukan di folder Examples\Evaluation\CNTKAzureTutorial01.

Harap dicatat bahwa proyek sampel menggunakan CNTK Library Managed API. Bagi pengguna yang menggunakan EvalDll API, untuk mengevaluasi model, silakan gunakan CNTK EvalDLL API. Tutorial untuk menggunakan EvalDll dapat ditemukan di Mengevaluasi model di Azure WebApi menggunakan EvalDll

Kami sarankan Anda memulai dari solusi ini, karena kami sudah menambahkan semua kode yang kami butuhkan. Untuk kelengkapan di sini adalah daftar operasi untuk membuat proyek tutorial:

  • Kami mulai dengan membuat proyek/solusi baru di VisualStudio dari File->New->Project->Visual C#->Web->ASP.NET WebApplication: CNTKAzureTutorial01. Kami memilih templat Aplikasi Azure API, menambahkan referensi ke 'API Web' dan memastikannya dihosting secara lokal (BELUM dihosting di cloud – belum).

  • Kemudian kami melakukan perubahan kode berikut untuk membangun proyek tutorial:

    • Dalam ValueController.cs, kami menambahkan beberapa yang diperlukan menggunakan direktif

    • Mengganti kode di public async Task<IEnumerable<string>> Get() untuk benar-benar memanggil fungsi evaluasi CNTK kami

    • Menambahkan fungsi public async Task<string[]> EvaluateCustomDNN(string imageUrl). Kami mengadopsi fungsi ini dari sampel CNTK Eval kami (metode EvaluateImageClassificationModel dari repositori CNTK dalam file Examples\Evaluation\CSEvalClient\Program.cs)

    • Menambahkan file CNTKImageProcessing.cs untuk menambahkan fungsionalitas Mengubah ukuran Bitmap. Ini berasal dari repositori CNTK ke Examples\Evaluation\ImageExtension\CNTKImageProcessing.cs namespace layanan dan nama kelas

    • Direktori biner yang dibuat dalam solusi kami perlu ditambahkan ke PATH lingkungan aplikasi. Ini diperlukan karena proyek kami mencakup DLL asli, dan itu hanya dimuat jika dapat dijangkau di jalur pencarian standar. Kami menambahkan kode berikut dalam Application_Start() metode di global.asax:

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

Hosting WebApi secara lokal

Ini adalah perubahan yang kami lakukan sejauh ini. Kita masih perlu mendapatkan fungsionalitas Eval CNTK yang disertakan dalam proyek dan memerlukan model untuk dievaluasi.

Tambahkan fungsionalitas Eval CNTK ke proyek. Ini tersedia sebagai paket NuGet. Di VS pilih Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution..., pilih nuget.org sebagai sumber online, cari CNTK dan instal versi paket terbaru (CNTK.GPU atau CNTK.CPUOnly) ke proyek.

NuGet

Sekarang kita perlu model untuk dievaluasi. Unduh ResNet20_CIFAR10_CNTK.model dan simpan di direktori CNTK\Models di bawah folder proyek. File model juga perlu disertakan dalam solusi (Project -> Add existing Item)

CNTK memerlukan lingkungan runtime 64-bit. Pastikan dalam Configuration Manager bahwa proyek dikompilasi untuk platform x64. Selain itu, WebApi yang kita buat harus dihosting dalam instans IIS 64-bit. Anda dapat memberlakukan ini dengan memilih "Gunakan IIS Express versi 64 bit untuk situs web dan proyek" di Tools -> Options -> Project and Solutions -> WebProjects

Project

Pada titik ini Anda telah melakukan semua langkah yang diperlukan untuk menjalankan model secara lokal di komputer Anda. Di Visual Studio tekan F5 untuk menjalankan proyek. Ini akan membuka browser internet pada situs web default dan menampilkan pesan kesalahan. Ini diharapkan karena kami telah membuat WebApi dan bukan situs web. Kami dengan mudah memanggil WebApi yang diimplementasikan dengan mengubah alamat di browser menjadi:

http://localhost:<portnumber>/api/values

Ini akan memanggil Get() metode di ValuesController-Class yang pada gilirannya akan memanggil metode EvaluateCustomDNN() dan mengembalikan hasilnya ke browser web Anda

Lokal

Hosting WebApi di Azure

Dengan ini kami mencapai bagian pertama dari misi kami, sekarang kami membutuhkan fungsionalitas ini yang dihosting di Azure! Dari menu Build proyek Anda, pilih Publish perintah . Pilih Microsoft Azure App Service sebagai target penerbitan

Azure

Dalam dialog AppService, Anda harus masuk dengan akun Anda dan memilih grup langganan dan sumber daya yang sesuai. Pastikan untuk memilih grup sumber daya yang mendukung komputer virtual 64-bit (grup sumber daya 'gratis' tidak cukup untuk ini). Selama langkah-langkah penerbitan akhir, Anda harus memilih konfigurasi x64 di menu Pengaturan. Ini diperlukan untuk juga menerbitkan komponen biner asli CNTK ke Azure

AzureSettings

Setelah menerbitkan model dan memanggil WebApi yang diterbitkan di browser, Anda akan melihat pesan kesalahan. Buka portal Azure dan pastikan WebApi Anda berjalan pada platform 64-bit (ubah dan 'simpan' pengaturan jika diperlukan, ini juga akan menghidupkan ulang instans komputer virtual Anda di Azure).

Pengaturan Azure64

Setelah Anda melakukan perubahan ini, Anda akan dapat memanggil Anda WebApi di bawah http://<yourwebapp>.azurewebsites.net/api/values

AzureSettings

Proyek ini menunjukkan kepada Anda cara mengintegrasikan fungsionalitas Eval CNTK menggunakan CNTK Library Managed API di Azure WebApi dan menyiapkan Azure untuk menjalankan biner evaluasi CNTK. Pada langkah berikutnya, Anda sekarang dapat menambahkan API baru untuk memasok data secara dinamis ke fungsi evaluasi atau mengunggah versi model baru. Ini adalah tugas pengembangan WebApi/Azure, dan Anda harus merujuk ke dokumentasi Azure untuk ini.