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 kamiMenambahkan fungsi
public async Task<string[]> EvaluateCustomDNN(string imageUrl)
. Kami mengadopsi fungsi ini dari sampel CNTK Eval kami (metodeEvaluateImageClassificationModel
dari repositori CNTK dalam fileExamples\Evaluation\CSEvalClient\Program.cs
)Menambahkan file
CNTKImageProcessing.cs
untuk menambahkan fungsionalitas Mengubah ukuran Bitmap. Ini berasal dari repositori CNTK keExamples\Evaluation\ImageExtension\CNTKImageProcessing.cs
namespace layanan dan nama kelasDirektori 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 dalamApplication_Start()
metode diglobal.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.
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
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
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
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
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).
Setelah Anda melakukan perubahan ini, Anda akan dapat memanggil Anda WebApi di bawah http://<yourwebapp>.azurewebsites.net/api/values
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.