Machine Learning Tools Powerhouse with Azure RemoteApp


Wouldn’t it be nice to have all your Machine Learning (ML) tools available wherever you are, and on any device?  Azure RemoteApp is built exactly for that. While traveling, I usually carry my Surface Pro 3 that does not have any ML tools,  and at home I have my monster ThinkPad W350 with all the ML tools,  as well as an iMac to work on all the cool Open Source and Mac-friendly Microsoft software. I would like to use my ML tools on-the-go from airplanes to boring meetings. In this article, I will describe the process of creating a custom Azure RemoteApp template with your favorite Machine Learning tools installed, and then streaming these tools to any device. Ready for the ride?


  1. Azure Subscription with Access to RemoteApp
  2. Knowledge of creating Azure Virtual Machines

Which Virtual Machine to use?

The RemoteApp team has created a “Windows Remote Desktop Session Host” server image for your convenience to quickly get started with the right configuration required by a RemoteApp custom template. If you want to start from scratch, here are more details.

Login to Azure portal and create a new “Windows Remote Desktop Session Host” VM


Below is the VM configuration I used for this exercise.


Installing Machine Learning Software

Once the VM is ready, login to the VM and install your favorite Machine Learning client tools. I installed the following ones:

  • Python
  • Anaconda
  • R
  • R Studio
  • Notepad++, SublimeText (for text editing if required).

You can install more of your favorite tools if you like.

Start Menu Requirement

After installation is complete, add the installed software to the Start Menu by right-clicking and selecting “Pin to Start Menu”.  RemoteApp will pick up the software listed in the Start Menu.

My Start Menu looks like this.


Validating Image

Next, the RemoteApp team has created a nice tool called “ValidateRemoteAppImage” for validating the VM for RemoteApp publishing. This tool is available on the Desktop of the “Windows Remote Desktop Session Host” VM image.

Double-click the tool to validate the VM (as shown below). If there are errors, fix them as suggested.


Capturing the Image

RemoteApp requires captured VM images to publish, deploy, and stream the applications. Follow the procedure listed here to capture the VM image. Make sure you generalize and shutdown during sysprep as shown below.


After the image is shutdown, click the capture button from the Azure drawer menu for the VM.



After the image is captured, the VM will be deleted and the image will appear in the Images section of the portal


Adding Image to the RemoteApp Template library

Next, we need to let the RemoteApp know that we want to use this VM image for creating our collection. Go to the Template Images section of RemoteApps and click on “Upload or Import a Template Image”.


Next, click on “Import an image from your Virtual Machine library”


On the “Import a Template Image” page, select the VM image you created earlier.


On the next screen, give your VM Template image a name and select the location. After successful import, the template will be listed in the “Template Images” section of RemoteApp.


Creating a Remote App Cloud Collection

The custom VM template portion of the exercise is now complete. Create a new RemoteApp collection as shown below


In the Template Image dropdown, you will see your VM image listed. Please specify your preferred name, region, and plan (Standard Recommended for Machine Learning Tools) for the collection. The collection should get listed in the “RemoteApp Collections” section of the portal.


Publishing Applications

Remember those apps that you added to the start menu earlier? We need to publish those to RemoteApp individually. On the RemoteApp Collection page, click “Publish remoteapp programs” and select the apps you want to publish.



Adding Users

Next, to add users, click on “Configure user access” and add the identities of the users. For more information on supported user identities, please refer to the following link.

Running the Remote App

Our Remote App is now ready, lets start using it. Download the RemoteApp client from

For Mac users, the website will automatically redirect you to the Mac App Store for downloading “Microsoft Remote Desktop” app. The Microsoft Remote Desktop App has a menu item for Azure RemoteApp.

Install and login to the Azure Remote App client using one of the user access accounts you created earlier. On successful login, you should see the apps you published in the Azure RemoteApp console.


Running the Apps

Double-click on any of these tools to run on any supported device. Let’s start with Anaconda, a scientific Python distribution.

NLTK Dispersion Plot

Start Anaconda command prompt and type python to enter Python’s interactive environment. NLTK is packaged with Anaconda distribution, but you still need to download the required corpora for testing. As shown below, download all the NLTK corpora using NLTK downloader.



Note the Download directory. Every user has a specific directory on the RemoteApp VM. There is nothing magic going on behind the scenes. The RemoteApp infrastructure runs an instance of the VM template we created and then streams the published apps to the end-user. Every permitted user gets an account and shares the same VM instance.


Once the NLTK downloading is complete, we can start testing it.

Import the NLTK book corpora from the command prompt as shown below.

>>> from import *
*** Introductory Examples for the NLTK Book ***
Loading text1, ..., text9 and sent1, ..., sent9
Type the name of the text or sentence to view it.
Type: 'texts()' or 'sents()' to list the materials.
text1: Moby Dick by Herman Melville 1851
text2: Sense and Sensibility by Jane Austen 1811
text3: The Book of Genesis
text4: Inaugural Address Corpus
text5: Chat Corpus
text6: Monty Python and the Holy Grail
text7: Wall Street Journal
text8: Personals Corpus
text9: The Man Who Was Thursday by G . K . Chesterton 1908

Next, let’s create a dispersion plot of certain words against specific corpora. text4 is the US Presidential inaugural address corpora, so lets try to find out common words spoken by all the presidents.

>>> text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America", "dream", "independence", "government", "democrat", "republican"])


From the figure above, you can derive interesting insights from the textual content. If you run the same words against another corpora, what would the dispersion plot look like? 

For more information on NLTK, please visit

R Text Analytics

Now let’s try R, another popular language with Data Scientists. In this exercise, lets try to build a pie chart of the types of client applications used for tweeting “#microsoft”. I have used the sample from the twitteR package documentation (Source:  )

Start R Studio and install twitteR package from Tools > Install Packages



Setting up Twitter Client

Use this link for setting up and accessing Twitter API using the twitteR client. Once the client is setup and tested, we will call the APIs as listed below for building our pie chart. In R Studio, type the following.

> r_tweets<-searchTwitter("#microsoft",n=3000)
> sources<-sapply(r_tweets,function(x)x$getStatusSource())
> head(sources)
[1] "<a href=\"\" rel=\"nofollow\">Twitter Web Client</a>"
[2] "<a href=\"\" rel=\"nofollow\">IFTTT</a>"              
[3] "<a href=\"\" rel=\"nofollow\">Twitter Web Client</a>"
[4] "<a href=\"\" rel=\"nofollow\"></a>"              
[5] "<a href=\"\" rel=\"nofollow\">Twitter Web Client</a>"
[6] "<a href=\"\" rel=\"nofollow\">Twitter Web Client</a>"
> sources<-gsub("</a>","",sources)
> sources<-strsplit(sources,">")
> sources<-sapply(sources,function(x)ifelse(length(x)>1,x[2],x[1]))
> head(sources)
[1] "Twitter Web Client" "IFTTT"              "Twitter Web Client" ""          
[5] "Twitter Web Client" "Twitter Web Client"
> source_table=table(sources)
> pie(source_table[source_table>50])





RemoteApp is one of the killer apps for Azure. It will save you significant amount of time and money just by moving your desktop apps to a service consumption model. It's not just the cost that’s driving the adoption, but also its scale and reach. RemoteApp will be available in all the Azure datacenters around the world. Imagine building this service yourself from scratch with similar scale and global reach. The scenario mentioned in this article is just scratching the surface of enhancing worker productivity through Azure RemoteApp.

References and Resources


Text Analytics using R 

twitteR documentation 

RemoteApp Resources


Creating a RemoteApp Template Image

Creating Cloud Collection 

Creating Custom Image

Creating Hybrid Collection 

Azure Remote App Forum

Azure RemoteApp forum.

Azure RemoteApp Documentation

Skip to main content