miércoles, 8 de agosto de 2012

How to: Windows Azure HPC Scheduler: Getting started & “Parametric Sweep” model

HPC

Muy buenas,

Después de unos cuantos días con este post el borrador, no quiero irme de vacaciones sin completarlo.

Una de las ventajas que ofrece el Cloud Computing es el alto procesamiento/rendimento, es decir, aprovechar la elasticidad que este nos ofrece para sacarle gran partido. Ya he comentado ciertos de estos aspectos en posts anteriores: Autoscalado, Caching I y Caching II, sin embargo, en este caso hablaremos de HPC (High Performance Computing). Microsoft ya dispone de esta tecnología en On-Premisse (Windows HPC Server 2008 R2) desde hace ya bastante tiempo, para Azure (a partir del SP1. La versión más reciente es la SP3), relativamente poco, y menos aún, si hablamos de tener todo en la nube, incluso el “Head Node”. La diferencia entre ambos, radica principalmente en el despliegue.

Antes de comenzar a trabajar con Windows Azure HPC, es necesario tener claros los conceptos en los que este se apoya (y que puede profundizar aquí):

1) La ventaja de utilizar HPC sobre Windows Azure nos permite pagar sólamente por lo que usamos (“Pay as you go”) y  Elasticidad.

2) Windows Azure HPC Scheduler: Cluster HPC completamente en Azure y cuya arquitectura es:

Azure-HPCimage

3) Modelos de aplicación:  Sabiendo que  Windows HPC SP3 soporta Jobs que permiten la integración de diferentes escenarios, y donde cada Job tiene sus propiedades, herramientas y APIs (con sus modelos de desarrollo y despliegue), los modelos de aplicación soportados son:

image image

4) Prerrequisitos

Para poder trabajar con Windows Azure HPC Scheduler son necesarios algunos prerrequisitos:

  1. Windows Azure SDK (v1.7)
  2. Windows Azure HPC Scheduler SDK (v1.7)
  3. HPC Pack 2008 R2 Client Utilities Redistributable Package with Service Pack 4. Necesario para interactuar con  el “Job Scheduler”
  4. [Opcional] HPC Pack 2008 R2 MS-MPI Redistributable Package with Service Pack 4 Ejecución de aplicaciones MPI sin tener que crear un cluster HPC.

IMPORTANTE: Me gustaría aclarar en este punto, que Windows Azure HPC no dispone de un portal propio para la adminstración del cluster HPC. Sin embargo, este se genera automáticamente durante el despliegue de la aplicación. Será necesario incluir un “Web Role” e insertar la instrucción “<VirtualApplication name=”Portal”… dentro de nuestro fichero “ServiceDefinition.csdef”  tal y como indico a continuación:

   1: <WebRole name="FrontEnd" vmsize="Small">
   2:     <Sites>
   3:       <Site name="Web">
   4:         <VirtualApplication name="Portal" physicalDirectory="C:\Program Files\Windows Azure HPC Scheduler SDK\v1.7\hpcportal" />
   5:         <Bindings>
   6:           <Binding name="HPCWebServiceHttps" endpointName="Microsoft.Hpc.Azure.Endpoint.HPCWebServiceHttps" />
   7:         </Bindings>
   8:       </Site>
   9:     </Sites>

Se trata simplememente de levantar el portal HPC que incluye el SDK HPC.


5) Configuración y Deploy en Azure PARAMETRIC SWEEP


5.1) En primper lugar, y partiendo del ejemplo Parametric Sweep, necesitaremos realizar algunos cambios para adaptarlo a las últimas versiones (“v1.7” tanto de “Windows Azure SDK” como de “Windows Azure HPC Scheduler SDK”):



5.2) El deploy de un entorno HPC requiere varios pasos y tener claros ciertos aspectos de preparación y configuración. Todos ellos podemos encontrarlos identificados aquí. Debido a todos estos pasos, como veremos en los ejemplos, no optaremos por la publicación estandar que ofrece Visual Studio.



Para este ejemplo, o cualquier otro, los pasos a seguir para la configuración y despliegue del HPC en Azure son siempre los mismos. Es más, cada una de nuestras nuevas aplicaciones que hagan uso de Windows Azure HPC podrían contener siempre un solution Folder llamado “Deployment” con los proyectos “AppConfigure” y “CertificateGenerator” encargados de la configuración y despliegue. Adicionalmente, también contaremos con un “Web Role” destinado al Portal según he comentado anteriormente.


Los pasos son los siguientes:



  • Abrir el el proyecto desde Visual Studio 2010 ó 2012 RC
  • Compilar la solución.
  • Haber generado un “Hosted Service” desdel el portal de azure. Para este ejemplo “elguerrehpc”.
  • Ejecutar del Proyecto “AppConfigure” e introducir los parámetros de configuración para la subscripción de Azure a utilizar
  • Configurar (“Configure”) y cuando esta haya finalizado, Publicar (“Publish”). Esta acción creará un Storage y una BBDD SQL Azure, ambos con el mismo nombre del host, “elguerrehpc” en nuestro caso.


image


5.3) Durante la publicación, entre los mensajes asociados al “progress bar”, aparecerá, “Coping HPC package to blog storage...”, que nos hará esperar unos cuantos minutos y, tras el, veremos este otro, “Creating Azure Deployment…”, lo que significa, que si vamos al portal de Azure veremos el progreso de creación de los tres nodos configurados: Head Node, Compute Node y Frontend.


image


5.4) Tras varios minutos, tendremos nuestro despliegue listo para que comience automáticamente la creación de los nodos y configuración del HPC en Azure.


Finalizado el despligue, podremos acceder a la url: https://elguerrehpc.cloudapp.net, donde accederemos a una pagina de bienvenida(nuestro Web Role) desde donde podremos realizar la conexión remota con el Head Node o acceder al portal de HPC Scheduler. Importante, siempre con HTTPS.


image


Para este enlace al portal, en la página “Default.aspx” de nuestro “Web Role” se ha incluido una instrucción similar a la siguiente y que se corresponde con la configuración indicada anteriormente en el punto (4):



<a href="~/portal" runat="server" ID="PortalButton1" >

De la misma manera, el link “remote desktop connection” habrá que generarlo explícitamente en la página “Default.aspx” aunque requiere de un poco más código que veremos en alguno de los ejemplos. No obstante, y como siempre, podremos acceder a través de Portal de Azure.


5.5) Mediante esta conexión remota  podremos acceder directamente a la VM donde comprobaremos:



image



image



image



image


6) Ejecución de un Job


Mediante el link https://elguerrehpc.cloudapp.net/portal, tendremos acceso directo al cluster que hemos configurado y desplegado sin tener que acceder a alguna de las maquinas virtuales en particular.


image


A partir de aquí, seguiremos los siguientes pasos:


Importante: Recuerda incluir un “*” en el paso 2, en “Commmand Line”.


6.1) Submission Pages


imageimageimageimage


image


6.2) New Job


image


imageimage


7) Resultado de la ejecución del Job


Una vez hemos realizado el “Submit” según el paso anterior, si accedemos al listado de “My Jobs” y seleccionamos “CPUSpinner” veremos que:



imageimage


imageimage


Si ahora dejamos sólo una instancia de Azure para el “Compute Node” la duración de ejecución del Job será del doble (30min para ser exactos, es decir 12min más), y a la inversa, es decir si subimos el número de instancias, el tiempo será menor.  De esta manera y extrapolando estos resultados a aplicaciones/procesos en el mundo reaal y con altos requerimientos en cuanto a los tiempos de ejecución, obtendríamos una ganancia que de otra forma sería casi imposible.


Aunque esto podemos conseguirlo con HPC en un datacenter en “On-Premise”, si el numero de máquinas necesarias fuera elevado, podríamos no disponer del hardware adecuado  o incluso no disponer de espacio para más máquinas virtuales en un entorno Virtual, teniendo en cuenta además, la configuración necesaria que ello conlleva. Por tanto, la escalabilidad se complicaría teniendo que esperar hasta recibir físicamente la(s) nueva(s) máquina(s)/servidor(es). Es aquí, donde Windows Azure una vez más aquiere gran importancia. Con Windows Azure este problema dejaría de existir y, si este Job se lanzara en determinados momentos (una vez al día, o a la semana, o al més), sólo pagaríamos por el tiempo de uso, así que el ahorro de costes podría llegar a ser enorme.


Finalmente se ha alargado un poco el Post, pero creo que la situación lo ha requerido y ha merecido la pena. En posts sucesivos iremos viendo cada uno de los restantes modelos de aplicación que soporta Windows Azure HPC Scheduler.


 


Saludos @Home & Happy HPC Coding !
Juanlu, ElGuerre

Etiquetas: , , ,


This page is powered by Blogger. Isn't yours?