From 93bee5db2694db5a275418453a54554e06ac5da5 Mon Sep 17 00:00:00 2001 From: Daniel Hartl Date: Fri, 16 Jun 2017 08:50:05 -0700 Subject: [PATCH 1/4] Add R sample --- samples/R/iris-caret/SampleRequest.txt | 1 + samples/R/iris-caret/sample.R | 30 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 samples/R/iris-caret/SampleRequest.txt create mode 100644 samples/R/iris-caret/sample.R diff --git a/samples/R/iris-caret/SampleRequest.txt b/samples/R/iris-caret/SampleRequest.txt new file mode 100644 index 0000000..ddb7d05 --- /dev/null +++ b/samples/R/iris-caret/SampleRequest.txt @@ -0,0 +1 @@ +{ "SepalLength": 1, "SepalWidth": 2, "PetalLength": 3, "PetalWidth": 4 } \ No newline at end of file diff --git a/samples/R/iris-caret/sample.R b/samples/R/iris-caret/sample.R new file mode 100644 index 0000000..7718813 --- /dev/null +++ b/samples/R/iris-caret/sample.R @@ -0,0 +1,30 @@ +# import bundleService +source('https://raw.githubusercontent.com/danhartl/Machine-Learning-Operationalization/master/utils/BundleService.R') + + + +library(caret) +data(iris) +set.seed(12345) +inTrain<-createDataPartition(iris$Species,p=0.7,list=FALSE) +training<-iris[inTrain,] +testing<-iris[-inTrain,] + +irisModel<-train(Species~.,method="rpart",data=iris) + +init <- function() { + library(caret) +} + +predictIris <- function(SepalLength, SepalWidth, PetalLength, PetalWidth) { + input <- data.frame(Sepal.Length = c(SepalLength), Sepal.Width = c(SepalWidth), Petal.Length = c(PetalLength), Petal.Width = c(PetalWidth)) + result <<- as.character(predict(model, input)) +} + +bundleService( + init, + predictIris, + list(model = irisModel), + inputs = list(SepalLength = "numeric", SepalWidth = "numeric", PetalLength = "numeric", PetalWidth = "numeric"), + outputs = list(result = "character"), + outputFolder = "d:\\temp\\service3") From 395405a751b2bca127b802fd03b98308df192844 Mon Sep 17 00:00:00 2001 From: Daniel Hartl Date: Fri, 16 Jun 2017 13:34:00 -0700 Subject: [PATCH 2/4] Incorporate files in README.md --- samples/R/iris-caret/{sample.R => README.md} | 35 ++++++++++++++++++-- samples/R/iris-caret/SampleRequest.txt | 1 - 2 files changed, 32 insertions(+), 4 deletions(-) rename samples/R/iris-caret/{sample.R => README.md} (65%) delete mode 100644 samples/R/iris-caret/SampleRequest.txt diff --git a/samples/R/iris-caret/sample.R b/samples/R/iris-caret/README.md similarity index 65% rename from samples/R/iris-caret/sample.R rename to samples/R/iris-caret/README.md index 7718813..938077b 100644 --- a/samples/R/iris-caret/sample.R +++ b/samples/R/iris-caret/README.md @@ -1,7 +1,18 @@ -# import bundleService -source('https://raw.githubusercontent.com/danhartl/Machine-Learning-Operationalization/master/utils/BundleService.R') +# Operationalizing R Models in AzureML + +## Setup + +Create AzureML cluster +``` +az ml env setup -k +``` +## Create Bundle + +```R +# import bundleService +source('https://raw.githubusercontent.com/danhartl/Machine-Learning-Operationalization/master/utils/BundleService.R') library(caret) data(iris) @@ -10,8 +21,12 @@ inTrain<-createDataPartition(iris$Species,p=0.7,list=FALSE) training<-iris[inTrain,] testing<-iris[-inTrain,] +# train model + irisModel<-train(Species~.,method="rpart",data=iris) +# define operationalization functions + init <- function() { library(caret) } @@ -27,4 +42,18 @@ bundleService( list(model = irisModel), inputs = list(SepalLength = "numeric", SepalWidth = "numeric", PetalLength = "numeric", PetalWidth = "numeric"), outputs = list(result = "character"), - outputFolder = "d:\\temp\\service3") + outputFolder = "/tmp") + +``` + +## Deploy + +``` +az ml service create realtime -n myservice1 -r mrs -f service.json -d init -d run -d model +``` + +## Test + +``` +az ml service run realtime -n myservice1 -d '{ "SepalLength": 1.1, "SepalWidth": 2.2, "PetalLength": 3.3, "PetalWidth": 4.4 }' +``` \ No newline at end of file diff --git a/samples/R/iris-caret/SampleRequest.txt b/samples/R/iris-caret/SampleRequest.txt deleted file mode 100644 index ddb7d05..0000000 --- a/samples/R/iris-caret/SampleRequest.txt +++ /dev/null @@ -1 +0,0 @@ -{ "SepalLength": 1, "SepalWidth": 2, "PetalLength": 3, "PetalWidth": 4 } \ No newline at end of file From c4c9c5bf481a8be3f295cdba3544c47cb8854c39 Mon Sep 17 00:00:00 2001 From: Daniel Hartl Date: Fri, 16 Jun 2017 14:08:42 -0700 Subject: [PATCH 3/4] Update swagger section --- samples/R/iris-caret/README.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/samples/R/iris-caret/README.md b/samples/R/iris-caret/README.md index 938077b..bb174a0 100644 --- a/samples/R/iris-caret/README.md +++ b/samples/R/iris-caret/README.md @@ -55,5 +55,30 @@ az ml service create realtime -n myservice1 -r mrs -f service.json -d init -d ru ## Test ``` -az ml service run realtime -n myservice1 -d '{ "SepalLength": 1.1, "SepalWidth": 2.2, "PetalLength": 3.3, "PetalWidth": 4.4 }' +az ml service run realtime -n myservice1 -d '{ "SepalLength": 4.7, "SepalWidth": 3.2, "PetalLength": 1.3, "PetalWidth": 0.2 }' +``` + +## Generate client code + +You can download the swagger.json metadata from /swagger.json + +Store it in a file and you can use [autorest](https://www.nuget.org/packages/AutoRest) to generate the client code: + +``` +.\AutoRest.exe -input 'swagger.json' -ClientName Service -CodeGenerator CSharp -Namespace 'AzureML' -OutputDirectory '/tmp' +``` + +With this you can create a sample C# application + +``` +internal class Program +{ + private static void Main(string[] args) + { + var service = new Service(new Uri("")); + + var webServiceResult = service.RunMLService(new InputParameters(4.7, 3.2, 1.3, 0.2)); + Console.WriteLine(webServiceResult.OutputParameters.Result); + } +} ``` \ No newline at end of file From bef3909e5ea295f026fe9cc2fa7a4ba6532449ac Mon Sep 17 00:00:00 2001 From: Daniel Hartl Date: Fri, 16 Jun 2017 14:09:42 -0700 Subject: [PATCH 4/4] Update code highlighting --- samples/R/iris-caret/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/R/iris-caret/README.md b/samples/R/iris-caret/README.md index bb174a0..ba8c20c 100644 --- a/samples/R/iris-caret/README.md +++ b/samples/R/iris-caret/README.md @@ -70,7 +70,7 @@ Store it in a file and you can use [autorest](https://www.nuget.org/packages/Aut With this you can create a sample C# application -``` +```csharp internal class Program { private static void Main(string[] args)