CNTK 라이브러리 관리 API를 사용하여 Azure WebApi에서 모델 평가

Azure Machine Learning 명령줄을 통해 배포

Azure에 CNTK 모델을 배포하고 Web API를 통해 배포된 모델을 실행할 수 있는 한 가지 방법은 Azure Machine Learning에 대한 명령줄 인터페이스를 사용하는 것입니다. 방법을 알아보려면 여기 를 클릭하십시오.

ASP.NET 통해 배포

Azure에 CNTK 모델을 배포하고 배포된 모델에 대해 데이터를 평가하기 위해 Azure 엔드포인트에 웹 요청을 보내는 데 필요한 단계를 안내합니다. WebApi 형식으로 이 기능을 빌드하지만 가장 기본적인 Azure 기능에 중점을 두겠습니다. 고급 Azure 설명서를 참조하여 모든 고급 기능(예: 매개 변수 전달 등)에 대해 알아보세요.

요구 사항

현재 VS2017을 사용하여 CNTK를 빌드하고 있으므로 이 버전의 Visual Studio에 중점을 두고 있습니다.

Visual Studio용 웹 개발 기능

Visual Studio에서 Web-Development 기능을 사용하도록 설정해야 합니다. VS 설치 관리자를 다시 실행하여 이 기능이 활성화되었는지(필요한 경우 사용하도록 설정) 확인할 수 있습니다(Control Panel -> Program and Features -> Microsoft Visual Studio 201x마우스 오른쪽 단추를 클릭하고 VS 설치 관리자를 호출하려면 선택 Change ).

Azure SDK

.NET용 Azure SDK를 개발 머신에 설치해야 합니다. 이에 대한 다운로드 페이지는 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이 포함되어 있고 표준 검색 경로에 연결할 수 있는 경우에만 로드되므로 이 작업이 필요합니다. 메서드에 다음 코드를 Application_Start() 추가했습니다.global.asax

         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.GPU또는CNTK.CPUOnly)을 검색 CNTK 하여 프로젝트에 설치합니다.

Nuget

이제 평가할 모델이 필요합니다. ResNet20_CIFAR10_CNTK.model을 다운로드하고 프로젝트 폴더 아래의 디렉터리에 CNTK\Models 저장합니다. 모델 파일도 솔루션에 포함되어야 합니다(Project -> Add existing Item).

CNTK에는 64비트 런타임 환경이 필요합니다. Configuration Manager 프로젝트가 x64 플랫폼용으로 컴파일되었는지 확인합니다. 또한 만드는 WebApi는 IIS의 64비트 인스턴스에서 호스트되어야 합니다. 에서 "웹 사이트 및 프로젝트에 64비트 버전의 IIS Express 사용"을 선택하여 이를 적용할 수 있습니다.Tools -> Options -> Project and Solutions -> WebProjects

Project

이 시점에서 컴퓨터에서 모델을 로컬로 실행하는 데 필요한 모든 단계를 수행했습니다. Visual Studio에서 프로젝트를 실행하려면 누릅니 F5 다. 그러면 기본 웹 사이트에서 인터넷 브라우저가 열리고 오류 메시지가 표시됩니다. 웹 사이트가 아닌 WebApi를 만들었기 때문에 예상되는 작업입니다. 브라우저에서 주소를 다음과 같이 변경하여 구현된 WebApi를 쉽게 호출합니다.

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

이 메서드는 ValuesController-Class 메서드를 호출 Get() 합니다. 그러면 메서드 EvaluateCustomDNN() 를 호출하고 웹 브라우저에 결과를 반환합니다.

로컬

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에서 CNTK 라이브러리 관리 API를 사용하여 CNTK Eval 기능을 통합하고 Azure를 설정하여 CNTK eval 이진 파일을 실행하는 방법을 보여 했습니다. 다음 단계에서는 이제 새 API를 추가하여 eval-function에 데이터를 동적으로 제공하거나 새 모델 버전을 업로드할 수 있습니다. WebApi/Azure 개발 작업이며 이에 대한 Azure 설명서를 참조해야 합니다.