<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>HPC, Virtualization and Random Thoughts</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/gmarchetti/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/gmarchetti/feed.xml</link>
    <description />
    <lastBuildDate>Thu, 09 Mar 2017 02:41:58 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>AI goes mainstream in the insurance industry</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/ai-goes-mainstream-in-the-insurance-industry</link>
      <pubDate>Thu, 09 Mar 2017 02:41:57 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/?p=1405</guid>
      <description><![CDATA[An interesting post from Milliman notes how machine learning techniques are gaining favour in...]]></description>
      <content:encoded><![CDATA[An interesting post from <a href="https://blog.integrate-solutions.com/artificial-intelligence-insurance-part-1-ai-action/">Milliman</a> notes how machine learning techniques are gaining favour in actuarial workloads.

See https://blog.integrate-solutions.com/artificial-intelligence-insurance-part-1-ai-action/

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Milliman - Another Aspect</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/milliman-another-aspect</link>
      <pubDate>Sun, 12 Jul 2015 23:19:25 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2015/07/12/milliman-another-aspect/</guid>
      <description><![CDATA[Milliman&#39;s story has several facets, as they have been using Azure extensively.&nbsp;
Please...]]></description>
      <content:encoded><![CDATA[<p>Milliman&#39;s story has several facets, as they have been using Azure extensively.&nbsp;</p>
<p>Please check Ashish&#39;s post for more interesting details</p>
<p><span>&nbsp;</span><a href="https://blogs.msdn.com/b/ashish/archive/2015/07/12/milliman-going-big-in-the-cloud-with-microsoft.aspx">https://blogs.msdn.com/b/ashish/archive/2015/07/12/milliman-going-big-in-the-cloud-with-microsoft.aspx</a></p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>Milliman - an Azure Case Study</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/milliman-an-azure-case-study</link>
      <pubDate>Sun, 12 Jul 2015 23:08:54 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2015/07/12/milliman-an-azure-case-study/</guid>
      <description><![CDATA[Milliman &ndash; Cloud Innovators in the Life Insurance Industry
Milliman is a great example of a...]]></description>
      <content:encoded><![CDATA[<p><b><span style="text-decoration:underline;">Milliman &ndash; Cloud Innovators in the Life Insurance Industry</span></b></p>
<p><a href="https://www.milliman.com/?rb">Milliman</a> is a great example of a company leveraging Azure extensively and in very innovative ways. In this post I have asked Paul Maher, CTO - Integrate &amp; MG-ALFA, to share some insights on the work his team are doing with <a href="https://www.integrate-solutions.com/?utm_source=milliman&amp;utm_medium=website&amp;utm_content=hp-ad&amp;utm_campaign=integrate">Integrate&trade;</a> <i>(their flagship Cloud solution delivered to the Life Insurance Market)</i>.</p>
<p><b>Quoting Paul Maher:</b></p>
<p>&quot;Integrate is an end-to-end, revolutionary cloud-based system for the life insurance market. Built on the Microsoft Azure platform, it reimagines the relationships between people, process and technology.</p>
<p>Integrate clients are able to run large actuarial jobs on-demand year round, benefiting from the Azure platform&rsquo;s scale and extensibility in a pay-as-you-go business model.</p>
<p>By using Integrate with Azure, Milliman was able to unlock the potential of human capital to drive business, not simply manage it. Integrate, offered as a SaaS solution, and eliminates the need for costly on-premises infrastructure. It also benefits from cloud platform capabilities such as compute power and storage, as well as feature-rich services such as Azure Data Factory and HDInsight.</p>
<p><b><span style="text-decoration:underline;">Benefits of Azure</span></b></p>
<ul>
<li><b>Speeds time-to-market: </b>By taking advantage of Azure and its associated services, we have been able to accelerate the development and&nbsp;time-to-market of the Integrate solution. The Azure platform has been a familiar and intuitive environment for our development team to build the Integrate solution.<b></b></li>
<li><b>Provides massive scalability on demand:</b> We fulfill our client&rsquo;s large computational requirements by taking advantage of Azure&rsquo;s ability to scale up or down as needed, in a pay-as-you-go pricing model.<b></b></li>
<li><b>Reduces IT costs and management:</b> With the Integrate cloud-based solution, Milliman clients pay only for the processing and storage capabilities they need, without having to deploy, manage, and upgrade hardware. With Azure, companies avoid large capital expenses, because the Integrate solution can access high-performance computing resources on demand at a small fraction of what it would cost to own and operate those resources.<b></b></li>
<li><b>Supports data management and reporting: </b>Azure Data Factory and HDInsight has provided the capabilities needed to support data management, data manipulation, and reporting requirements for our clients.</li>
<li><b>Delivers security and reliability:</b> Security and reliability are major concerns for financial services companies. That is why Azure, which is run in Microsoft data centers, is a good choice for an industry solution. Azure is an enterprise-grade platform with attendant security and reliability. And, because Microsoft has datacenters worldwide, information can be hosted in jurisdictions</li>
</ul>
<p>Azure was instrumental in helping us deliver a robust, dynamic risk management solution that stretches the boundaries of what is possible in enterprise computing. With the Microsoft cloud, we have the capabilities and resources needed to rapidly bring an innovative, industry-changing solution to market. As a result, insurance companies worldwide can benefit from sophisticated financial modeling and big data analytics at nominal cost&rdquo;.</p>
<p><b>&nbsp;</b></p>
<p><b>For further information, please use the following resources:</b></p>
<ul>
<li><a href="https://www.milliman.com/?rb">Milliman website</a></li>
<li><a href="https://www.integrate-solutions.com/?utm_source=milliman&amp;utm_medium=website&amp;utm_content=hp-ad&amp;utm_campaign=integrate">Integrate website</a></li>
<li><a href="https://customers.microsoft.com/Pages/CustomerStory.aspx?recid=20096">Integrate Customer Story</a></li>
</ul>
<p>Paul Maher began at a small actuarial firm in the U.K., building pension software, and transitioned to IT roles and leadership positions at Microsoft, KPMG, and others prior to joining Milliman in 2013. He has a passion for building software solutions that help solve challenging business problems. <a href="https://www.linkedin.com/profile/view?id=6598184&amp;authType=NAME_SEARCH&amp;authToken=04CM&amp;locale=en_US&amp;srchid=65981841436697597496&amp;srchindex=1&amp;srchtotal=226&amp;trk=vsrp_people_res_photo&amp;trkInfo=VSRPsearchId%3A65981841436697597496%2CVSRPtargetId%3A6598184%2CVSRPcmpt%3Aprimary%2CVSRPnm%3Atrue">Contact Paul at LinkedIn</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>CentOS cluster in Azure - Part 1</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/centos-cluster-in-azure-part-1</link>
      <pubDate>Tue, 26 May 2015 13:03:00 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2015/05/26/centos-cluster-in-azure-part-1/</guid>
      <description><![CDATA[I have been working on Azure Resource Manager templates for a while. They are an interesting way to...]]></description>
      <content:encoded><![CDATA[<p>I have been working on <a href="https://msdn.microsoft.com/en-us/library/azure/dn835138.aspx">Azure Resource Manager </a>templates for a while. They are an interesting way to describe and deploy complex configurations in Azure. In particular, I have developed a template to deploy a CentOS 6.5 cluster. It will soon be published in the main <a href="https://github.com/Azure/azure-quickstart-templates">Azure repository</a> on github, but if you are interested you can find it in <a href="https://github.com/gmarchet/azure-quickstart-templates/tree/master/CentOS-2nics-lb-cluster">my repository</a>. Note that it is set up to deploy once pulled into the main Azure one. You&#39;ll have to clone it and edit azuredeploy.json to change the location of deploy.sh if you want to use it before then.</p>
<p>This template deploys a 2-10-node cluster using the ARM &quot;copy&quot; feature. Each node has 2 network cards:&nbsp;</p>
<ul>
<li>The first one is on a &quot;public&quot; subnet.</li>
<li>The second one is on a &quot;private&quot; subnet.</li>
</ul>
<p>The public subnet is fronted by a load-balancer with one dynamically assigned public IP address and as many NAT ports as there are nodes, starting from port 50000. The template also asks for a dns name and a location for the ip address. Thus, if you want to connect to node 0, you&#39;ll type:</p>
<ul>
<li>ssh &lt;user&gt;@&lt;name&gt;.&lt;location&gt;.cloudapp.azure.com -p 50000</li>
</ul>
<p>The private network is intended for cluster communications only.</p>
<p>The template also configures:</p>
<ul>
<li>A storage account where all the virtual hard disks are stored.</li>
<li>A virtual network where the private and public subnet reside.</li>
</ul>
<p>The template invokes a custom bash script that configures the second network card on CentOS nodes. By default the second card is recognized but the network stack is not set up.</p>
<p>The limit on the number of nodes is artificial. Alas, ARM does not support arithmetic operators yet, so one has to list all the possible NAT ports for the load-balancer configuration. I listed 10. Feel free to add more and you&#39;ll be able to increase the number of nodes. Also, if not all nodes require external connections, you can have as many nodes as the current subnet limit.</p>
<p>In part 2 I will add:</p>
<p>- Shared storage for all the nodes using azure file shares.</p>
<p>- A script to set up opengrid and mpi.</p>]]></content:encoded>
    </item>
    <item>
      <title>DFS in Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/dfs-in-azure</link>
      <pubDate>Tue, 17 Feb 2015 15:17:26 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2015/02/17/dfs-in-azure/</guid>
      <description><![CDATA[Often we want to use Azure&#39;s scalable storage to deploy file servers. For geographically...]]></description>
      <content:encoded><![CDATA[<p style="padding:0;margin:0;">Often we want to use Azure&#39;s scalable storage to deploy file servers. For geographically distributed infrastructures, it makes sense to establish a distributed file system (DFS) that spans across regions, both for availability and reach.&nbsp;</p>
<p style="padding:0;margin:0;">Here is a summary of the steps required to do so:</p>
<p></p>
<ol>
<li style="padding-top:0px;padding-right:0px;padding-bottom:0px;margin-top:0px;margin-right:0px;margin-bottom:0px;">Create a vnet in each desired datacenter, ideally with at least 2 subnets (1 for the domain controllers, another for the file servers) + 1 for the gateway</li>
<li>Establish cross-premise connectivity in Azure, for instance as explained in&nbsp;<a href="https://msdn.microsoft.com/en-us/library/azure/dn690122.asp">https://msdn.microsoft.com/en-us/library/azure/dn690122.asp</a></li>
<li>Deploy domain controllers on the relevant subnets in both datacenters. Make sure that the dns option in the vnet configurations points to both domain controllers in the appropriate order (dc1, dc2 on vnet1 - dc2, dc1 on vnet2).<ol>
<li>It is recommended that you assigned a fixed ip to the domain controllers / dns servers. You will need Powershell to do that as explained in<a href="/controlpanel/blogs/posteditor.aspx/&amp;nbsp;https:/msdn.microsoft.com/en-us/library/azure/dn630228.aspx">&nbsp;https://msdn.microsoft.com/en-us/library/azure/dn630228.aspx</a>.</li>
</ol></li>
<li>Deploy servers on the relevant subnets and join them to the domain.</li>
<li>Add at least a data volume each to the servers to host the file shares. If you are planning to replicate its content using dfs-r, it may make sense to put the volume on a locally redundant storage account.</li>
<li>Log into each server and, in &ldquo;configure local server&rdquo;, add the DFS namespace and DFS replication features.<ol>
<li>Alternatively, you could use Powershell desired configuration to deploy servers with those features enabled. See&nbsp;<a href="https://blogs.msdn.com/b/powershell/archive/2014/08/07/introducing-the-azure-powershell-dsc-desired-state-configuration-extension.aspx">https://blogs.msdn.com/b/powershell/archive/2014/08/07/introducing-the-azure-powershell-dsc-desired-state-configuration-extension.aspx</a>&nbsp;</li>
</ol></li>
<li>In the dfs management console on server 1, create a namespace.<ol>
<li>Select &ldquo;edit settings&rdquo; and assign full access to administrator, r/w to other users</li>
<li>Make sure that it is a domain-based namespace and &ldquo;2008 mode&rdquo; is enabled. Information about namespace roots is then replicated on namespace servers in the domain.</li>
</ol>
<p style="padding:0;margin:0;"></p>
</li>
<li>Add server 2 as a namespace server to the namespace you&#39;ve just created for availability.</li>
<li>Select &ldquo;new folder&rdquo; in the namespace.</li>
<li>Create a new file share hosted on the local data volume (e.g.\\server1\share1). Assign permissions as desired (e.g. admins full access and rest r/w).</li>
<li>Click on the share you&#39;ve just created and select &ldquo;replicate folder&rdquo;.</li>
<li>Add a target for the replication on server2 e.g. \\server2\share1</li>
<li>Create replication group as required, by following prompts.</li>
<li>You may also want to verify that replication works both ways by creating a share on server2 that is replicated to a target on server1.</li>
</ol>
<p>&nbsp;<img height="634" style="margin:5px;" width="1129" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/metablogapi/Slide1.PNG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03-metablogapi/Slide1.PNG" /></p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>How Many Cores for the Job?</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/how-many-cores-for-the-job</link>
      <pubDate>Mon, 29 Sep 2014 21:39:00 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2014/09/29/how-many-cores-for-the-job/</guid>
      <description><![CDATA[That is quite a common question. Experienced systems engineers have accumulated knowledge over the...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">That is quite a common question. Experienced systems engineers have accumulated knowledge over the years that they distill into a few rules of thumb, e.g.:</span></p>
<ul>
<li><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Given a certain hardware configuration, for software package A with an input size of X, on average you&#39;ll need Y cores.</span></li>
</ul>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">On Azure, the hardware configuration is known and you can deploy as many instances as your subscription allows. It would be useful to capture that knowledge in order to optimize our resource utilization. For instance, we can pass that estimated size to our node manager / autoscaler (e.g. in GeRes, HPC Pack or similar batch scheduler service), let it deploy the cluster and then automatically resize as required if the job turns our to be larger or smaller than estimated.</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Azure Machine Learning can be used to provide that initial estimate on the basis of historical utilization data. We&#39;ll build an</span><span style="font-family:arial, helvetica, sans-serif;font-size:small;">&nbsp;Azure ML service, submit a cue to it (e.g. the type of job to run) and get an estimate in return. The process to set it up can be summarized as follows:</span></p>
<ol>
<li><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Collect a representative data sample and save it in CSV format, e.g. {Type of Job, Input Size, N. of Cores required}.</span></li>
<li><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Build a workflow in Azure ML to train and score an appropriate regression model (several are on offer, e.g. linear, Bayesian, neural networks).</span></li>
<li><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Evaluate the regression models.</span></li>
<li><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Publish one (or more) as Azure ML service.</span></li>
<li><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Use the ML API to pass the cue and retrieve the estimate.</span></li>
<li><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Use the estimate to deploy the n. of nodes suggested, then let the autoscaler correct as required until the job ends</span></li>
<li><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Collect the usage data and feed back into the training workflow at the next opportunity.</span></li>
</ol>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Here is an example of such workflow in ML Studio:</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/evaluation%20workflow.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/evaluation-workflow.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/evaluation%20workflow.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/evaluation-workflow.png" border="0" alt=" " /></a></span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">It starts with a simple CSV file containing {Type of Job, Size of Input, N. of Cores Required}.&nbsp;</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">The &quot;project columns&quot; and &quot;metadata editor&quot; blocks are used to select the columns of interest (or remove empty ones), then change the data description. The job type in our case is a numeric value, but we really want to treat it as a category not to be computed, hence the change in metadata.</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">We split the data into two parts: one will be used to train the regression algorithm, another to score it, i.e. evaluate the efficacy of its predictions against a set of observed inputs / outputs.</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">We then initialize two regression models: a linear one and a neural network. This is not strictly necessary in this case. It is just a way to illustrate how you can test several models and then choose the one that provides better predictions. In order to train the models, we supply them with the same portion of the data.</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">The next step is to score the models, i.e. use them to predict the required n. of cores for the remaining input set, then compare the results against the sampled data. </span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Here is an example of the scored results for linear regression:</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/scored%20-%20linear%20regression.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/scored-_2D00_-linear-regression.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/scored%20-%20linear%20regression.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/scored-_2D00_-linear-regression.png" border="0" alt=" " /></a></span></p>
<p></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">... and for neural networks:</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/scored%20-%20neural%20networks.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/scored-_2D00_-neural-networks.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/scored%20-%20neural%20networks.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/scored-_2D00_-neural-networks.png" border="0" alt=" " /></a></span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Just by looking at the scatter plot we can see that the neural network is more accurate than simple linear regression.</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">The evaluation module confirms our finding (the first row in the table is for linear regression, the second one for neural networks):</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/evaluation%20results.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/evaluation-results.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/evaluation%20results.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/evaluation-results.png" border="0" alt=" " /></a></span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Now that we have established which technique fits the problem better, we&#39;ll save the trained model into our library and publish it as a service.</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Click on the &quot;Train Model&quot; block output and select &quot;Save as Trained Model&quot;:</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/save%20as%20trained%20model.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/save-as-trained-model.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/save%20as%20trained%20model.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/save-as-trained-model.png" border="0" alt=" " /></a></span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">With our trained model, we build a simple new workflow.</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/trained%20model.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/trained-model.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/trained%20model.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/trained-model.png" border="0" alt=" " /></a></span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">The &quot;Score Model&quot; block is the one that will provide us with estimates given previous history, so we publish its input and output ports as i/o ports for the prediction service.</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/input%20and%20output.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/input-and-output.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/57/03/input%20and%20output.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-57-03/input-and-output.png" border="0" alt=" " /></a></span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Finally we run the model again, check its results and if satisfied we publish it as a service.&nbsp;</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">In the process of publishing, an API key will be generated that we&#39;ll use to access the Azure ML REST API.&nbsp;</span></p>
<p><span style="font-family:arial, helvetica, sans-serif;font-size:small;">Here&#39;s some simple Python code to submit a cue and receive an estimate - in our case we submit a job type and receive an estimated number of cores:</span></p>
<p></p>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">import urllib2</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">import json&nbsp;</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">import ast</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">import sys</span></div>
<div></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">jobtype = sys.argv[1]</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">print &quot;Job Type: &quot;,jobtype</span></div>
<div></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">data = &nbsp;{</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;Id&quot;: &quot;score00001&quot;,</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;Instance&quot;: {</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;FeatureVector&quot;: {</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;Type of Job&quot;: jobtype,</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;Cores Required&quot;: &quot;0&quot;,</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;GlobalParameters&quot;: {</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></div>
<div></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">body = str.encode(json.dumps(data))</span></div>
<div></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">url = &#39;https://ussouthcentral.services.azureml.net/workspaces/be4da4afb11b4eeeac49eb4067e7a8e8/services/68bf2617df6c473595dcc87f66f62346/score&#39;</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">api_key = &#39;your api key&#39; # Replace this with the API key for the web service</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">headers = {&#39;Content-Type&#39;:&#39;application/json&#39;, &#39;Authorization&#39;:(&#39;Bearer &#39;+ api_key)}</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">req = urllib2.Request(url, body, headers)&nbsp;</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">response = urllib2.urlopen(req)</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">result = response.read()</span></div>
<div></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">s1=ast.literal_eval(result)</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">predicted = int(round(float(s1[2])))</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">print &quot;Predicted n. of cores: &quot;,predicted</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;">&nbsp;</span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;"><span style="font-family:arial, helvetica, sans-serif;">&nbsp;</span></span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;"><span style="font-family:arial, helvetica, sans-serif;">Add your own code liberally to interface your autoscaler (e.g. GeReS).</span><br /></span></div>
<div><span style="font-family:&#39;courier new&#39;, courier;font-size:small;"><span style="font-family:arial, helvetica, sans-serif;">&nbsp;</span></span></div>]]></content:encoded>
    </item>
    <item>
      <title>Generic Resource Scheduler for Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/generic-resource-scheduler-for-azure</link>
      <pubDate>Tue, 14 Jan 2014 20:27:22 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2014/01/14/generic-resource-scheduler-for-azure/</guid>
      <description><![CDATA[GeReS (Generic Resource Scheduler) for Windows Azure is now available as a beta release on...]]></description>
      <content:encoded><![CDATA[<p>GeReS (Generic Resource Scheduler) for Windows Azure is now available as a beta release on <a href="https://geres.codeplex.com" title="GeReS">Codeplex</a>.</p>
<p>It is a simple batch job manager written in C# (or Python for the older version).</p>
<p>Geres provides:</p>
<ul>
<li>Command line utilities (e.g. qsub, qlist, jobcancel, joblist) to queue tasks for computation, check on their status, cancel them.</li>
<li>3 task queues (highq, mediumq, lowq) in order of priority.</li>
<li>An agent to install on Azure VMs. It will pick tasks off the queues in that order and spawn the required processes.&nbsp;</li>
<li>A simple notifier application that monitors the status of tasks as reported by the agents.</li>
<li>An autoscaler, running as an extra-small PaaS worker role, which will deploy or remove worker VMs of the desired size based on waiting time for jobs in the queues.</li>
</ul>
<p>The agent will run as many tasks on a node as there are cores. If a task is marked &quot;exclusive&quot; at submission, it will be the only one to run. This is useful for those applications that consume most of the VM resources.</p>
<p>The agent is also responsible to update the status of the spawned processes: running, failed, completed or cancelled. When a node is idle for longer than a pre-configured time, the agent will queue it for removal.</p>
<p>The autoscaler only deploys or removes worker nodes - it does not keep track of task status.</p>
<p>Note that this distributed architecture has the advantage of being highly resilient when compared to a traditional &quot;head node&quot; running the scheduler and apportioning work.</p>
<p>The nodes can fail at any time and the incomplete jobs will pop back into the queues for other nodes to pick up.</p>
<p>The autoscaler can fail at any time and simply be restarted without affecting computations in process.</p>
<p>Azure storage tables and queues are used to handle and keep track of tasks. Service bus topics are used for notifications and commands. Geres benefits from their built-in redundancy and resilience.</p>
<p>For further details on the architecture, please read the release notes on Codeplex.</p>
<p>This short video will show you a typical usage scenario.</p>
<p>[View:https://www.youtube.com/watch?v=7OlpcS3A_OM&amp;feature=youtube_gdata:0:0]&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Python and Azure VMs</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/python-and-azure-vms</link>
      <pubDate>Thu, 13 Jun 2013 22:06:00 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2013/06/13/python-and-azure-vms/</guid>
      <description><![CDATA[I have been experimenting lately with the Azure SDK for Python, in particular with the service...]]></description>
      <content:encoded><![CDATA[<p>I have been experimenting lately with the Azure SDK for Python, in particular with the service management API. I found some points in the documentation that were unclear to me, so I am posting what I discovered in the process.</p>
<p>If you want to create a virtual machine, you need to:</p>
<ol>
<li>Create a cloud service of which the VM will be an instance</li>
<li>Select a vhd image for the machine, either from Microsoft catalog or one you created.</li>
<li>Indicate which blob in which storage account will store the vhd file of the VM</li>
<li>Create a configuration set containing machine metadata</li>
<li>Finally, deploy the VM</li>
</ol>
<p>Note that you'll need a management certificate to interface with the Azure Service Management Service. The documentation suggests using openssl to create one, which is fine on Linux and Mac, but not on Windows. On Windows, use makecert instead:</p>
<p style="font-family: Consolas, Courier, monospace; font-size: 14px; white-space: pre-wrap; word-wrap: normal; padding: 5px; margin: 0px; font-style: normal; font-weight: normal; overflow: auto; color: #000000; font-variant: normal; letter-spacing: normal; line-height: 21px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span style="font-family: 'courier new', courier; font-size: small;">makecert -sky exchange -r -n "CN=&lt;CertificateName&gt;" -pe -a sha1 -len 2048 -ss My "&lt;CertificateName&gt;.cer"</span></p>
<p>This will put the certificate into the current user's personal store and generate a .cer file for you to upload to Azure.</p>
<p>Also note that there is a bug in the Python SDK which affects the creation of endpoints. See&nbsp;<a href="https://github.com/WindowsAzure/azure-sdk-for-python/pull/83">https://github.com/WindowsAzure/azure-sdk-for-python/pull/83</a>&nbsp;for a description.</p>
<p>You will need to edit the init.py file as described on github.</p>
<p>You can do the rest in python:</p>
<p><span style="font-family: Courier; font-size: 10pt;">from azure import *<br />from azure.servicemanagement import *<br /><br />subscription_id = '&lt;enter your subscription id&gt;'<br /># The certificate comes from the local store, not from a .pem file on Windows</span></p>
<p><span style="font-family: Courier; font-size: 10pt;">certificate_path ="CURRENT_USER\\my\\&lt;enter your certificate name&gt;"</span></p>
<p><span style="font-size: 10pt;"><span style="font-family: Courier;"><br /># instantiate a service management service<br />sms = ServiceManagementService(subscription_id, certificate_path)</span></span></p>
<p><span style="font-family: Courier; font-size: 10pt;">#provide a service name and location</span></p>
<p><span style="font-family: Courier; font-size: 10pt;">name = '&lt;name of service you want&gt;'<br />location = 'West US'<br /><br /># You can either set the location or an affinity_group<br />sms.create_hosted_service(service_name=name, label=name,location=location)<br /><br /># Name of an os image as returned by list_os_images (catalog and yours)<br />image_name = '&lt;your image name&gt;.vhd'<br /><br /># Destination url://storage account/container/blob where the VM disk will be created<br />media_link = 'https://&lt;account name&gt;.blob.core.windows.net/vhds/'+name+'.vhd'<br /><br /># The documentation shows a Linux VM. Windows is more complicated.<br /># WindowsConfigurationSet contains metadata for a Windows VM<br />windows_config = WindowsConfigurationSet(&lt;machine name&gt;, '&lt;admin password&gt;')<br /># by default the api will look for domain credentials. if you want no domain:</span></p>
<p><span style="font-family: Courier; font-size: 10pt;">windows_config.domain_join = None<br /><br /># Here's the hard disk for the os</span></p>
<p><span style="font-family: Courier; font-size: 10pt;">os_hd = OSVirtualHardDisk(image_name, media_link)<br /><br /># Unless you specify endpoints, you won't be able to connect to the VM.</span></p>
<p><span style="font-family: Courier; font-size: 10pt;"># The documentation is unclear on the matter.</span></p>
<p><span style="font-family: Courier; font-size: 10pt;">endpoint_config = ConfigurationSet()<br />endpoint_config.configuration_set_type = 'NetworkConfiguration'<br /><br />endpoint1 = ConfigurationSetInputEndpoint(name = 'rdp', protocol = 'tcp', port = '33890', local_port = '3389', load_balanced_endpoint_set_name = None, enable_direct_server_return = False)<br />endpoint2 = ConfigurationSetInputEndpoint(name = 'web', protocol = 'tcp', port = '8080', local_port = '80', load_balanced_endpoint_set_name = None, enable_direct_server_return = False)<br /><br />#endpoints must be specified as elements in a list</span></p>
<p><span style="font-family: Courier; font-size: 10pt;">endpoint_config.input_endpoints.input_endpoints.append(endpoint1)<br />endpoint_config.input_endpoints.input_endpoints.append(endpoint2)<br /><br />#Finally you can deploy the VM</span></p>
<p><span style="font-family: Courier; font-size: 10pt;"><br />sms.create_virtual_machine_deployment(service_name=name,<br /> deployment_name=name,<br /> deployment_slot='production',<br /> label=name,<br /> role_name=name,<br /> system_config=windows_config,<br /> network_config = endpoint_config,<br /> os_virtual_hard_disk=os_hd,<br /> role_size='Small')</span></p>
<p style="color: #008; text-align: right;"><small><em>Powered by</em> <a href="https://www.qumana.com/">Qumana</a></small></p>]]></content:encoded>
    </item>
    <item>
      <title>Using CloudBlitz to Submit Jobs</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/using-cloudblitz-to-submit-jobs</link>
      <pubDate>Thu, 16 May 2013 14:22:00 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2013/05/16/using-cloudblitz-to-submit-jobs/</guid>
      <description><![CDATA[In the second post about Cloudblitz (https://cloudblitz.codeplex.com) we'll examine how to use it to...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">In the second post about Cloudblitz (<a href="https://cloudblitz.codeplex.com">https://cloudblitz.codeplex.com</a>) we'll examine how to use it to submit jobs to&nbsp;a deployed Azure cluster.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Keep in mind that in Microsoft's HPC scheduler implementation, jobs are just containers. They contain one or more tasks to be executed and have properties associated to them (e.g. credentials, priority).</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Such a container can be created empty, then filled with tasks and finally submitted for execution. If you have a look at the Create-InstallJob.ps1 script that comes with Cloudblitz, you'll see an example of that.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Let us suppose that you want to&nbsp;write a simple job submission script:</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">1.&nbsp;Import the Cloudblitz.Powershell module and get the hpc&nbsp;object types:</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">Import-MyModule -Name "CloudBlitz.Powershell" -Path $cmdletsPath<br />$hpcTypesPath = [System.IO.Path]::GetDirectoryName($cmdletsPath) + "\HpcSchedulerManagement.dll"<br />Add-Type -Path $hpcTypesPath -ErrorAction Stop</span></p>
<p><span style="color: #000000; font-family: arial,helvetica,sans-serif; font-size: small;">2. Provide the credentials for the jobs to be submitted</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;"># Fill in hpc scheduler credentials<br />&nbsp;$hpcCredentials = New-Object CloudBlitz.Powershell.Cmdlets.HpcSchedulerCredentials<br />&nbsp;$hpcCredentials.ClusterName = $ClusterName<br />&nbsp;$hpcCredentials.AdminLogin = $AdminLogin<br />&nbsp;$hpcCredentials.AdminPassword = $AdminPassword<br />&nbsp;$hpcCredentials.CertificateThumbprint = $mgmtcert.Thumbprint</span></p>
<p><span style="color: #000000; font-family: arial,helvetica,sans-serif; font-size: small;">Note that you&nbsp;will need&nbsp;the thumbprint of the certificate associated with the service at deployment. That is required because the powershell commandlets use&nbsp;the hpc scheduler&nbsp;REST API to communicate with the service.&nbsp;All the parameters can be passed on the command line&nbsp;or retrieved from the ConfigurationVariables.ps1 file that you edited before deployment.&nbsp;</span></p>
<p><span style="color: #000000; font-family: arial,helvetica,sans-serif; font-size: small;">3. Create an empty job container</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;"># Create the job on the scheduler<br />&nbsp;$Job = New-Object HpcSchedulerManagement.DataContracts.SchedulerJob<br />&nbsp;$Job.FailOnTaskFailure = $True<br />&nbsp;$Job.Name = "Job"+$(get-random 1000000)<br />&nbsp;$Job.Id = Add-SchedulerJob -Credentials $hpcCredentials -Job $Job -ErrorAction Stop</span></p>
<p><span style="color: #000000; font-family: arial,helvetica,sans-serif; font-size: small;">The first line creates an empty container, then we set some properties (e.g. random name) and finally we create the job on the hpc scheduler and retrieve its id.</span></p>
<p><span style="color: #000000; font-family: arial,helvetica,sans-serif; font-size: small;">4. Add tasks into the job container</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;"># Create the task<br />&nbsp;$Task = New-Object HpcSchedulerManagement.DataContracts.SchedulerTask<br />&nbsp;$Task.Name = "Task"+$(Get-Random 1000000)<br />&nbsp;$Task.CommandLine = $CommandLine<br />&nbsp;$Task.Id = Add-SchedulerTask -Credentials $hpcCredentials -JobId $Job.Id -Task $Task</span></p>
<p><span style="color: #000000; font-family: arial,helvetica,sans-serif; font-size: small;">As with the job, we create an empty object, set its properties, then add it to the job container whose id we retrieved before. Note that one of those properties is $Task.CommandLine, which takes a string. The string is an arbitrary command to be executed on the remote nodes. If you want to start a MPI job, it will look like</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">mpiexec &lt;mpi parameters&gt; &lt;your mpi&gt;.exe &lt;app parameters&gt;</span></p>
<p><br /><span style="font-family: arial,helvetica,sans-serif; font-size: small;">5. Submit the job for execution</span></p>
<p><span style="font-family: courier new,courier; font-size: small;"># Submit the job</span><br /><span style="font-family: courier new,courier; font-size: small;">&nbsp; Write-Host "Submitting the job"</span><br /><span style="font-family: courier new,courier; font-size: small;">&nbsp; Submit-SchedulerJob -Credentials $hpcCredentials -JobId $Job.Id</span></p>
<p><span style="font-family: courier new,courier; font-size: small;"># Wait for the job to complete</span><br /><span style="font-family: courier new,courier; font-size: small;">&nbsp; Write-Host "Waiting for job $($Job.Id) to complete"</span><br /><span style="font-family: courier new,courier; font-size: small;">&nbsp; $finalState = Wait-SchedulerJob -Credentials $hpcCredentials -JobId $Job.Id</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;Write-Host "Job $finalState"</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Note that you need not wait for the job to complete. Those lines just show a way to retrieve and display the final job state. Normally, you will submit, then query for status later with something like:</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">Get-schedulerjob -Credentials $hpcCredentials -JobId $JobId </span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">That line will retrieve the job object and also display all its properties (not just those set in these samples).</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">You can retrieve the whole list of jobs in the scheduler with:</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">Get-schedulerjobList -Credentials $hpcCredentials </span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">The job properties are those supported by&nbsp;Microsoft's HPC scheduler (<a href="https://msdn.microsoft.com/en-us/library/microsoft.hpc.scheduler.ischedulerjob_properties(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/microsoft.hpc.scheduler.ischedulerjob_properties(v=vs.85).aspx)</a>.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Let's see an example of those, retrieved using Get-SchedulerJob:</span><span style="color: #f5f5f5; font-family: Lucida Console; font-size: xx-small;"><span style="color: #f5f5f5; font-family: Lucida Console; font-size: xx-small;"><span style="color: #f5f5f5; font-family: Lucida Console; font-size: xx-small;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">d&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 8</span></span></span></p>
<p><span style="font-family: courier new,courier; font-size: small;">Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Job641676</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">UserName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : topguy</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">Project&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">RuntimeSeconds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MinCores&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 1</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MaxCores&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 1</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MinSockets&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 1</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MaxSockets&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 1</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MinNodes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 1</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MaxNodes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 1</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">UnitType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Core</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">RequestedNodes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">IsExclusive&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : False</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">RunUntilCanceled&nbsp;&nbsp;&nbsp; : False</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">NodeGroups&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">FailOnTaskFailure&nbsp;&nbsp; : True</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">AutoCalculateMax&nbsp;&nbsp;&nbsp; : True</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">AutoCalculateMin&nbsp;&nbsp;&nbsp; : True</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">Preemptable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : True</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MinMemory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MaxMemory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MinCoresPerNode&nbsp;&nbsp;&nbsp;&nbsp; : 0</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">MaxCoresPerNode&nbsp;&nbsp;&nbsp;&nbsp; : 0</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">SoftwareLicense&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">OrderBy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">ClientSource&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : AzureRestServiceAgent</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">Progress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 100</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">ProgressMessage&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">TargetResourceCount : 0</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">ExpandedPriority&nbsp;&nbsp;&nbsp; : 2000</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">ServiceName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">NotifyOnStart&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : False</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">NotifyOnCompletion&nbsp; : False</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">EmailAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">Priority&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Normal</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">Password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">JobTemplate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Default</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">JobType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">RequeueCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 0</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">AutoRequeueCount&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">RequestCancel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">Owner&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : topguy</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">SubmitTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 5/15/2013 11:20:47 PM</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">CreateTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 5/15/2013 11:20:46 PM</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">StartTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 5/15/2013 11:20:48 PM</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">EndTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 5/15/2013 11:20:50 PM</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">State&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Finished</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">HoldUntil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">HasRuntime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : False</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">CanGrow&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : True</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">CanShrink&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : True</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">PreviousState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Running</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">ChangeTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 5/15/2013 11:20:50 PM</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">ExcludedNodes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :</span></p>
<p><span style="font-family: courier new,courier; font-size: small;">AllocatedNodes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">You will typically want&nbsp;to set at job submission&nbsp;MinCores and MaxCores (min. and max n. of cores required, default is 1). Note that properties are inherited by the tasks, unless overridden by those set at the task level (<a href="https://msdn.microsoft.com/en-us/library/microsoft.hpc.scheduler.ischedulertask_properties(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/microsoft.hpc.scheduler.ischedulertask_properties(v=vs.85).aspx)</a>. For MPI jobs the&nbsp;number of cores is fixed&nbsp;at submission, so MinCores=MaxCores.</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Cloudblitz: A Tool to Deploy HPC Clusters in Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/gmarchetti/cloudblitz-a-tool-to-deploy-hpc-clusters-in-azure</link>
      <pubDate>Mon, 13 May 2013 11:31:00 GMT</pubDate>
      <dc:creator><![CDATA[gmarchetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/gmarchetti/2013/05/13/cloudblitz-a-tool-to-deploy-hpc-clusters-in-azure/</guid>
      <description><![CDATA[I'm happy to announce the availability of Cloudblitz, a tool (framework) to deploy HPC clusters in...]]></description>
      <content:encoded><![CDATA[<p>I'm happy to announce the availability of Cloudblitz, a tool (framework) to deploy HPC clusters in Azure programmatically via Powershell, then submit&nbsp;jobs to them&nbsp;via Powershell as well.</p>
<p>You can find it at <a href="https://cloudblitz.codeplex.com">https://cloudblitz.codeplex.com</a></p>
<p>The tool builds on the HPC scheduler for Azure and the Powershell commandlets for Azure to solve a common problem, i.e. provide a scriptable way to create and interact with an Azure PaaS cluster. I refer you to the Codeplex page for the complete description and documentation. In this blog post, I'll cover how to build it and use it.</p>
<p>1. Make sure that you download and install all the dependencies listed on the codeplex page.</p>
<p>2. Download and extract the source code in its own directory.</p>
<p>3. Open a Visual Studio 2012 command prompt as administrator (dear old cmd.exe)</p>
<p>4. Go to the "BuildScripts" directory and run <em>BuildCloudBlitz.</em><em>cmd.</em> This will build the required modules and copy the results in a "Packages" directory.</p>
<p>5. Open a Windows Azure Powershell prompt as administrator. Go to the CloudBlitz.ClusterTemplate directory</p>
<p>6. Edit the ServiceDefinition.csdef file (it is just an XML file). In particular note:</p>
<p><em>&lt;WorkerRole name="ComputeNode" vmsize="Small"&gt;</em></p>
<p><em>...</em></p>
<p><em>&lt;WebRole name="HeadNode" vmsize="Small"&gt;</em></p>
<p>Choose your VM size and type it in. In general, a small head node is sufficient (the head node does NOT run SQL, rather it uses SQL Azure,&nbsp;which&nbsp;reduces its memory requirements). If you're planning to run thousands of tasks at a time, go for a large instance.</p>
<p>7. Go to the CloudBlitz.Powershell\Scripts directory</p>
<p>8. Edit the ConfigurationVariables.ps1 file. In particular note:</p>
<p><em>$subscriptionName = "&lt;your subscription name&gt;"</em><br /><em>$subscriptionId = "&lt;your subscription id&gt;"</em><br /><em>$administratorName = "&lt;admin name for the hpc cluster&gt;"</em><br /><em>$systemPassword = "&lt;admin password for hpc cluster&gt;"</em><br /><em>$certificateFileNameRoot="&lt;name of certificate&gt;"</em><br /><em>$deploymentName="&lt;name of service&gt;"</em><br /><em>$deployLocation="&lt;data center location&gt;"</em><br /><em>$HeadNodeInstanceCount = 1</em><br /><em>$ComputeNodeInstanceCount = &lt;n. of desired compute nodes&gt;</em><br /><em>$removePreviousDeploymentAndService = $true</em></p>
<p>9. Run <em>InstallAndExportCertificate.</em>ps1 This will create a .cer and a .pfx self-signed certificate file, install it in the local user certificate store.</p>
<p>10. Via the Azure portal, upload the .cer file as a management certificate.</p>
<p>11. Run the <em>DeployDeployerRole.ps1</em> script. It will upload the packages, create an azure worker role that deploys a hpc cluster as per configuration, then remove the deployer role.&nbsp;Such a temporary role is necessary to avoid any firewall and connectivity issues. Most people will have ports 80 and 443 open for http and https. The&nbsp;Azure HPC scheduler&nbsp;deployment also requires a connection to SQL Azure on port 1433, which is normally closed. By letting the temporary role&nbsp;manage the process, such connections are all internal to Azure.</p>
<p>You can now connect to your cluster.cloudapp.net via RDP and start submitting jobs in the "traditional" way via the job manager or the command line.</p>
<p>Alternatively, you can use&nbsp;the set of powershell commandlets we developed&nbsp;from your workstation. They will be the subject of the next blog post :-)</p>
<p>&nbsp;&nbsp;</p>
<p></p>
<p><em></em></p>
<p></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>