CNTK ライブラリ マネージド API を使用して Azure WebApi のモデルを評価する
Azure Machine Learning コマンド ラインを使用してデプロイする
CNTK モデルを Azure にデプロイし、Web API を介してデプロイされたモデルを実行できる方法の 1 つは、Azure Machine Learning へのコマンド ライン インターフェイスを使用することです。 方法については、ここをクリックしてください。
ASP.NET を使用してデプロイする
Azure に CNTK モデルをデプロイし、デプロイされたモデルに対してデータを評価するために Azure エンドポイントに Web 要求を送信するために必要な手順について説明します。 この機能は WebApi の形式で構築しますが、最も基本的な Azure 機能に焦点を当てます。 より高度な Azure ドキュメントを参照して、すべての高度な機能 (パラメーターの渡しなど) について学習してください。
必要条件
現在、VS2017 を使用して 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 にアクセスしなくても、ほとんどの手順に従うことができるようになります。
始めましょう
CNTKAzureTutorial01 というプロジェクト ブループリントが既に作成されています。 このプロジェクトは CNTK GitHub リポジトリの一部であり、フォルダー Examples\Evaluation\CNTKAzureTutorial01
にあります。
サンプル プロジェクトでは CNTK ライブラリ マネージド API が使用されていることに注意してください。 EvalDll API を使用するユーザーは、モデルを評価するために CNTK EvalDLL API を使用してください。 EvalDll の使用に関するチュートリアルについては、EvalDll を使用した Azure WebApi でのモデルの評価に関するページを参照してください。
必要なすべてのコードが既に追加されているため、このソリューションから開始することをお勧めします。 完全のために、チュートリアル プロジェクトを作成する操作の一覧を次に示します。
VisualStudio で CNTKAzureTutorial01 から
File->New->Project->Visual C#->Web->ASP.NET WebApplication
新しいプロジェクト/ソリューションを作成することから始めました。 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\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 をローカルでホストする
これまでに行った変更は次のとおりです。 まだプロジェクトに含まれている CNTK Eval 機能を取得し、評価するモデルが必要です。
CNTK Eval 機能をプロジェクトに追加します。 これは NuGet パッケージとして使用できます。 VS の選択 Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution...
で、オンライン ソースとして選択 nuget.org
し、最新の CNTK
パッケージ バージョン (CNTK.GPU
または CNTK.CPUOnly
) を検索してプロジェクトにインストールします。
次に、評価するモデルが必要です。 ResNet20_CIFAR10_CNTK.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
この時点で、マシンでモデルをローカルに実行するために必要なすべての手順を実行しました。 Visual Studio で、プロジェクトを実行するために押します F5
。 これにより、既定の Web サイトでインターネット ブラウザーが開き、エラー メッセージが表示されます。 これは、WebApi を作成し、Web サイトを作成していないためです。 ブラウザーのアドレスを次に変更することで、実装された WebApi を簡単に呼び出すことができます。
http://localhost:<portnumber>/api/values
これにより、ValuesController-Class内のメソッドが呼び出 Get()
され、そのメソッド EvaluateCustomDNN()
が呼び出され、結果が Web ブラウザーに返されます。
Azure での WebApi のホスト
これにより、ミッションの最初の部分を完了しました。これで、この機能が Azure でホストされている必要があります。
プロジェクトの [ビルド] メニューからコマンドを Publish
選択します。 発行先として選択 Microsoft Azure App Service
する
AppService ダイアログでは、アカウントでログインし、適切なサブスクリプションとリソース グループを選択する必要があります。 必ず、64 ビット仮想マシンをサポートするリソース グループを選択してください ("無料" リソース グループでは不十分です)。 最後の発行手順では、[設定] メニューで x64 構成を選択する必要があります。 これは、CNTK のネイティブ バイナリ コンポーネントを Azure に発行する場合にも必要です。
モデルを発行し、発行した WebApi をブラウザーで呼び出すと、エラー メッセージが表示されます。 Azure portalを開き、WebApi が 64 ビット プラットフォームで実行されていることを確認します (必要に応じて設定を変更して '保存' します。これにより、Azure の仮想マシン インスタンスも再起動されます)。
これらの変更を実行すると、WebApi を呼び出すことができます。 http://<yourwebapp>.azurewebsites.net/api/values
このプロジェクトでは、CNTK Library Managed API を使用して CNTK Eval 機能を Azure WebApi に統合し、CNTK eval バイナリを実行するように Azure をセットアップする方法について説明しました。 次の手順では、新しい API を追加して、eval 関数にデータを動的に提供したり、新しいモデル バージョンをアップロードしたりできるようになりました。 これらは WebApi/Azure 開発タスクであり、これについては Azure のドキュメントを参照する必要があります。