次の方法で共有


EvalDll を使用して Azure WebApi のモデルを評価する

Azure にCNTK モデルをデプロイし、デプロイされたモデルに対してデータを評価するための Web 要求を Azure エンドポイントに送信するために必要な手順について説明します。 この機能は WebApi の形式で構築しますが、最も基本的な Azure 機能に焦点を当てます。 より高度な Azure ドキュメントを参照して、すべての高度な機能 (パラメーターの渡しなど) について学習してください。

要件

現在、VS2015 を使用してCNTKを構築しているため、このバージョンのVisual Studioに焦点を当てています。

Visual Studioの Web 開発機能

Visual StudioでWeb-Development機能を有効にする必要があります。 この機能が有効になっている (必要に応じて有効にする) かどうかを確認するには、VS インストーラーをもう一度実行します (Control Panel -> Program and Features -> Microsoft Visual Studio 201x右クリックして選択 Change して VS インストーラーを呼び出します)。

Azure SDK

Azure SDK for .NET は、開発用コンピューターにインストールする必要があります。 このダウンロード ページは次のとおりです。 Azure SDK のダウンロード

Azure アカウント

Azure でCNTK モデルをホストするため、Azure アカウントが必要になります。 MSDN または Visual Studio サブスクリプションをお持ちの場合、このチュートリアルでモデルをホストするには、そのアカウントで十分です。 CNTKホストするには 64 ビット仮想マシンが必要です。無料の Azure アカウントにはこの機能が含まれていないので、十分ではありません。

最初に、WebApi をローカルで開発し、これを Azure インスタンスにアップロードします。 そのため、Azure にアクセスしなくても、ほとんどの手順に従うことができるようになります。

始めましょう

EvalDll_AzureTutorialというプロジェクト ブループリントが既 作成されています。 このプロジェクトは、CNTK GitHub リポジトリの一部であり、フォルダーExamples\Evaluation\LegacyEvalDll\EvalDll_AzureTutorialにあります。

サンプル プロジェクトでは EvalDll API CNTK使用されることに注意してください。 Python でトレーニングされたモデルを使用するユーザーは、CNTKライブラリ API を使用してください。 CNTK ライブラリの使用に関するチュートリアルについては、「CNTK ライブラリ マネージ API を使用して Azure WebApi のモデルを評価する」を参照してください。

必要なすべてのコードが既に追加されているため、このソリューションから開始することをお勧めします。 完全のために、チュートリアル プロジェクトを作成する操作の一覧を次に示します。

  • VisualStudio File->New->Project->Visual C#->Web->ASP.NET WebApplicationで新しいプロジェクト/ソリューションを作成することから始めたのは、:EvalDll_AzureTutorial。 Azure API アプリ テンプレートを選択し、'Web API' への参照を追加し、ローカルでホストされていることを確認しました (まだクラウドでホストされていません )。

  • 次に、次のコード変更を実行して、チュートリアル プロジェクトをビルドしました。

    • ValueController.cs では、いくつかの必須の using ディレクティブを追加しました

    • CNTK評価関数を実際に呼び出すためにコードpublic async Task<IEnumerable<string>> Get()を置き換えた

    • 関数 public async Task<string[]> EvaluateCustomDNN(string imageUrl)を追加しました。 CNTK Eval サンプルからこの関数を採用しました (ファイルExamples\Evaluation\LegacyEvalDll\CSEvalClient\Program.cs内のCNTK リポジトリからのメソッドEvaluateImageClassificationModel)

    • ビットマップサイズ変更機能を追加するファイル CNTKImageProcessing.cs を追加しました。 これは、CNTKリポジトリExamples\Evaluation\ImageExtension\CNTKImageProcessing.csから名前空間とクラス名に由来しています

    • ソリューションで作成されたバイナリのディレクトリをアプリケーションの環境に PATH 追加する必要があります。 これは、プロジェクトにネイティブ DLL が含まれており、標準の検索パスに到達可能な場合にのみ読み込まれるため、必須です。 メソッドglobal.asaxに次のコードをApplication_Start()追加しました。

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

WebApi をローカルでホストする

これまでに行った変更は次のとおりです。 プロジェクトに含まれる Eval CNTK機能を取得し、評価するモデルが必要です。

CNTK Eval 機能をプロジェクトに追加します。 これは、NuGet パッケージとして使用できます。 VS の選択 Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution...で、オンライン ソースとして選択 nuget.org し、最新の CNTK パッケージ バージョン (Microsoft.Research.CNTK.*) を検索してインストールします。

NuGet

次に、評価するモデルが必要です。 ResNet_18.model をダウンロードし、ソリューションのディレクトリCNTK\Modelsに保存します。 モデル ファイルもソリューションに含める必要があります (Project -> Add existing Item)

CNTKには、64 ビットランタイム環境が必要です。 Configuration Managerで、プロジェクトが x64 プラットフォーム用にコンパイルされていることを確認します。 さらに、作成する WebApi は、IIS の 64 ビット インスタンスでホストされている必要があります。 これを適用する場合は、[Web サイトとプロジェクトに 64 ビット バージョンのIIS Expressを使用する] を選択します。Tools -> Options -> Project and Solutions -> WebProjects

Project

この時点で、マシンでモデルをローカルに実行するために必要なすべての手順を実行しました。 Visual Studioキーを押F5してプロジェクトを実行します。 これにより、既定の Web サイトでインターネット ブラウザーが開き、エラー メッセージが表示されます。 これは、WebApi を作成し、Web サイトを作成していないためです。 ブラウザーのアドレスを次に変更することで、実装された WebApi を簡単に呼び出すことができます。

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

これにより、ValuesController-Class内のメソッドが呼び出 Get() され、そのメソッド EvaluateCustomDNN() が呼び出され、結果が Web ブラウザーに返されます。

local

Azure での WebApi のホスト

これにより、ミッションの最初の部分を完了しました。これで、この機能が Azure でホストされている必要があります。 プロジェクトの [ビルド] メニューからコマンドを Publish 選択します。 発行先として選択 Microsoft Azure App Service する

Azure

AppService ダイアログでは、アカウントでログインし、適切なサブスクリプションとリソース グループを選択する必要があります。 必ず、64 ビット仮想マシンをサポートするリソース グループを選択してください ("無料" リソース グループでは不十分です)。 最後の発行手順では、[設定] メニューで x64 構成を選択する必要があります。 これは、CNTKのネイティブ バイナリ コンポーネントを Azure に発行する場合にも必要です。

AzureSettings

モデルを発行し、発行した WebApi をブラウザーで呼び出すと、エラー メッセージが表示されます。 Azure portalを開き、WebApi が 64 ビット プラットフォームで実行されていることを確認します (必要に応じて設定を変更して '保存' します。これにより、Azure の仮想マシン インスタンスも再起動されます)。

Azure64Settings

これらの変更を実行すると、WebApi を呼び出すことができます。 http://<yourwebapp>.azurewebsites.net/api/values

AzureSettings

このプロジェクトでは、Azure WebApi で EvalDll を使用して CNTK Eval 機能を統合し、CNTK eval バイナリを実行するように Azure をセットアップする方法について説明しました。 次の手順では、新しい API を追加して、eval 関数にデータを動的に提供したり、新しいモデル バージョンをアップロードしたりできるようになりました。 これらは WebApi/Azure 開発タスクであり、これについては Azure のドキュメントを参照する必要があります。