Partager via


Évaluer un modèle dans un WebApi Azure à l’aide d’EvalDll

Nous allons vous guider vers les étapes requises pour déployer un modèle CNTK sur Azure et envoyer des demandes web au point de terminaison Azure pour évaluer les données sur le modèle déployé. Nous allons créer cette fonctionnalité sous forme de WebApi, mais nous nous concentrerons sur les fonctionnalités Azure les plus basiques. Reportez-vous à la documentation Azure plus avancée pour en savoir plus sur toutes les capacités avancées, c’est-à-dire le passage de paramètre, etc.

Configuration requise

Comme nous utilisons actuellement VS2015 pour générer CNTK, nous nous concentrons sur cette version de Visual Studio.

Fonctionnalité de développement web pour Visual Studio

Vous devez activer les fonctionnalités Web-Development dans Visual Studio. Vous pouvez voir si cette fonctionnalité est activée (et activer si nécessaire) en exécutant à nouveau le programme d’installation vs (Control Panel -> Program and Features -> Microsoft Visual Studio 201xcliquez avec le bouton droit et sélectionnez Change pour appeler le programme d’installation VS)

Azure SDK

Le Kit de développement logiciel (SDK) Azure pour .NET doit être installé sur votre machine de développement. La page de téléchargement est la suivante : Téléchargement du Kit de développement logiciel (SDK) Azure

Compte Azure.

Étant donné que nous allons héberger le modèle CNTK sur Azure, vous aurez besoin d’un compte Azure. Si vous disposez d’un abonnement MSDN ou Visual Studio, ce compte sera suffisant pour héberger votre modèle pour ce didacticiel. CNTK nécessite une machine virtuelle 64 bits pour héberger, un compte Azure gratuit n’inclut pas cette fonctionnalité et ne suffit pas.

Initialement, nous allons développer WebApi localement, puis le charger dans notre instance Azure. Vous serez donc en mesure de suivre la majorité des étapes, même sans accès à Azure.

Commençons

Nous avons déjà créé un blueprint de projet appelé EvalDll_AzureTutorial. Ce projet fait partie du dépôt CNTK GitHub et se trouve dans le dossier Examples\Evaluation\LegacyEvalDll\EvalDll_AzureTutorial.

Notez que l’exemple de projet utilise CNTK API EvalDll. Pour les utilisateurs qui utilisent un modèle entraîné avec Python, utilisez l’API bibliothèque CNTK. Le tutoriel sur l’utilisation de CNTK bibliothèque se trouve dans Évaluer un modèle dans Azure WebApi à l’aide de l’API gérée par CNTK bibliothèque

Nous vous recommandons de commencer à partir de cette solution, car nous avons déjà ajouté tout le code dont nous avons besoin. Pour obtenir l’intégralité, voici la liste des opérations pour créer le projet de didacticiel :

  • Nous avons commencé par créer un projet/solution dans VisualStudio à partir de File->New->Project->Visual C#->Web->ASP.NET WebApplication: EvalDll_AzureTutorial. Nous avons choisi un modèle d’application API Azure, ajouté des références à l'« API web » et nous avons assuré qu’il est hébergé localement (PAS encore hébergé dans le cloud).

  • Ensuite, nous avons effectué les modifications de code suivantes pour générer le projet de didacticiel :

    • Dans valueController.cs, nous avons ajouté quelques directives requises à l’aide de directives

    • Remplacement du code dans public async Task<IEnumerable<string>> Get() lequel appeler notre fonction d’évaluation CNTK

    • Ajout de la fonction public async Task<string[]> EvaluateCustomDNN(string imageUrl). Nous avons adopté cette fonction à partir de nos exemples CNTK Eval (méthode EvaluateImageClassificationModel du référentiel CNTK dans le fichierExamples\Evaluation\LegacyEvalDll\CSEvalClient\Program.cs)

    • Ajout du fichier CNTKImageProcessing.cs pour ajouter une fonctionnalité de redimensionnement bitmap. Cela provient du référentiel CNTK dans Examples\Evaluation\ImageExtension\CNTKImageProcessing.cs l’espace de noms et le nom de la classe

    • Le répertoire des fichiers binaires créés dans notre solution doit être ajouté à l’environnement PATH de l’application. Cela est nécessaire, car notre projet inclut des DLL natives et ceux-ci sont chargés uniquement s’ils sont accessibles dans le chemin de recherche standard. Nous avons ajouté le code suivant dans la Application_Start() méthode dans global.asax:

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

Hébergement de WebApi localement

Il s’agit des modifications que nous avons effectuées jusqu’à présent. Nous devons toujours obtenir les CNTK fonctionnalités Dval incluses dans le projet et avoir besoin d’un modèle pour évaluer.

Ajoutez la fonctionnalité eval CNTK au projet. Ceci est disponible en tant que package NuGet. Dans VS select Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution..., choisissez nuget.org comme source en ligne, recherchez CNTK et installez la dernière version du package (Microsoft.Research.CNTK.*).

NuGet

Maintenant, nous avons besoin d’un modèle pour évaluer. Téléchargez le ResNet_18.model et enregistrez-le dans le répertoire CNTK\Models de la solution. Le fichier modèle doit également être inclus dans la solution (Project -> Add existing Item)

CNTK nécessite un environnement d’exécution 64 bits. Assurez-vous que dans le Configuration Manager que le projet est compilé pour la plateforme x64. En outre, webApi que nous créons doit être hébergé dans une instance 64 bits d’IIS. Vous pouvez appliquer cela en sélectionnant « Utiliser la version 64 bits de IIS Express pour les sites web et les projets » dansTools -> Options -> Project and Solutions -> WebProjects

Project

À ce stade, vous avez effectué toutes les étapes nécessaires pour exécuter le modèle localement sur votre ordinateur. Dans Visual Studio appuyez sur F5 pour exécuter le projet. Cela ouvre un navigateur Internet sur le site web par défaut et affiche un message d’erreur. Cela doit être attendu depuis que nous avons créé un WebApi et non un site web. Nous appelons facilement webApi implémenté en modifiant l’adresse dans le navigateur en :

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

Cela appelle la Get() méthode dans le ValuesController-Class qui appelle à son tour la méthode EvaluateCustomDNN() et retourne un résultat à votre navigateur web

local

Hébergement de WebApi sur Azure

Avec cela, nous avons accompli la première partie de notre mission, maintenant nous avons besoin de cette fonctionnalité hébergée dans Azure! Dans le menu Build de votre projet, sélectionnez la Publish commande. Choisir Microsoft Azure App Service comme cible de publication

Azure

Dans la boîte de dialogue AppService, vous devez vous connecter avec votre compte et sélectionner l’abonnement et le groupe de ressources appropriés. Veillez à choisir un groupe de ressources qui prend en charge les machines virtuelles 64 bits (le groupe de ressources « gratuit » n’est pas suffisant pour cela). Au cours des étapes de publication finales, vous devez choisir une configuration x64 dans le menu Paramètre. Il est nécessaire de publier également les composants binaires natifs de CNTK sur Azure

AzureSettings

Une fois que vous avez publié votre modèle et que vous appelez votre WebApi publié dans le navigateur, vous verrez un message d’erreur. Ouvrez le Portail Azure et assurez-vous que votre WebApi est en cours d’exécution sur une plateforme 64 bits (modifier et « enregistrer » le paramètre si nécessaire, cela redémarre également votre instance de machine virtuelle dans Azure).

Azure64Settings

Une fois que vous avez effectué ces modifications, vous serez en mesure d’appeler WebApi sous http://<yourwebapp>.azurewebsites.net/api/values

AzureSettings

Ce projet vous a montré comment intégrer les fonctionnalités eval CNTK à l’aide d’EvalDll dans un WebApi Azure et configurer Azure pour exécuter les fichiers binaires eval CNTK. Dans une étape suivante, vous pouvez maintenant ajouter de nouvelles API pour fournir dynamiquement des données à la fonction eval ou charger la nouvelle version du modèle. Il s’agit de tâches de développement WebApi/Azure, et vous devez consulter la documentation Azure pour cela.