Está en la página 1de 27

Noticias Vicisitud Sordidez Conclusiones

Supercomputacin en
Guillem Borrell i Nogueras III Jornada SAGE/Python. Vigo, 21 y 22 de Junio de 2012

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

De qu hablar este?

Noticias

Vicisitud

Sordidez

Conclusiones

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Antes de empezar
Guillem Borrell i Nogueras.
http://guillemborrell.es/ @guillemborrell

Ingeniero Aeronutico
Nunca me han gustado especialmente los aviones

Laboratorio de Mecnica de Fluidos Computacional


Capa lmite turbulenta. (DNS)

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

2 aos es mucho tiempo...


DNS de capa lmite turbulenta en 32k cores de Blue Gene/P

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

... y 250 TiB un montn de datos


En su momento fueron la 1a y la 3a mayores simulaciones de ujos turbulentos.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Me cabre con Mathworks


Como consecuencia, se acab el Matlab y el Octave para mi.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Y le dimos una oportunidad a Python

Un curso de Python. incluidos. http://picachu.dmt.upm.es/wordpress/?page_id=2 Un servidor SAGE pblico


http://picachu.dmt.upm.es:81 Bastante mal mantenido Pero en una muy buena mquina (Xeon X5550)

Unos apuntes / libro.


https: //github.com/guillemborrell/IntroduccionPython El texto se ha liberado y parece que habr ms autores. Estis ms que invitados a participar.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Vicisitud es generar tus datos mediante una simulacin numrica. Es, por lo general, un proceso agotador.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Hay Python en un gran superordenador?

http://pyvideo.org/speaker/204/william-scullin
Trabaja en Argonne y el ejemplo corre en Intrepid.

Problemas realmente exticos.


Cmo cargo mdulos a 64000 intrpretes a travs de GPFS? Cmo evito operaciones O(N archivos)?

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Python es an un experimento

S nos lo encontramos...
Problemas relativamente pequeos. Middleware. Cdigo pegamento.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Python es an un experimento

S nos lo encontramos...
Problemas relativamente pequeos. Middleware. Cdigo pegamento.

No nos lo encontramos...
Cuando te prestan algo que vale mucho dinero. Cuando tu director de tesis te dice que con su prestigio no se juega. Cuando quien tiene que revisar tu trabajo no usa Python.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Sordidez es conseguir los datos y hacer algo til con ellos, normalmente guarreando y picando piedra. Sueles intentar como sea que eso no requiera ms recursos que generarlos. Y cada vez que hablas de ello lo haces con cierto morbo masoquista.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Soy egosta, y este es mi problema.

Cdigos que hacen algo en concreto, no muy difcil. Intensivos en I/O.


Nuestra vida mejor signicativamente despus de adoptar HDF5.

Algoritmos a lo sumo O(N log N)


Porque algo O(N 2 ) es sencillamente inviable con >100TiB

Diseados especcamente para los datos en cuestin. Pueden requerir grandes cantidades de memoria. Seriales o paralelos. Reutilizan cdigo de la propia simulacin. Veamos unos cuantos ejemplos concretos.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Problema 1: Filtros
Tengo un campo de 15000x500x4000 (120 GiB) Quiero reducir el nmero de puntos para poder visualizar cosas grandes.
Aplico un ltro gaussiano. Tomo un punto de cada 3 en cada direccin

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Solucin:

Leo el archivo y reparto los datos en los nodos de un cluster de clculo Filtro en dos direcciones Hago una traspuesta global Filtro en la direccin restante. Deshago la traspuesta Guardo en disco.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

MPI4py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 def chzy2xy(self): """Changes. It uses a lot of memory""" ssbuf = np.empty((self.NZ,self.NPX,self.NY),dtype=np.float32) rrbuf = np.empty((self.size,self.NPZ,self.NPX,self.NY),dtype=np.float32)

ssbuf[:,:,:] = np.transpose(self.data,(2,0,1))[:,:,:] self.comm.Alltoall([ssbuf, self.NY*self.NPZ*self.NPX, MPI.FLOAT], [rrbuf, self.NY*self.NPZ*self.NPX, MPI.FLOAT]) del ssbuf rbuf = np.empty((self.NPZ,self.NY,self.size,self.NPX),dtype=np.float32) rbuf[:,:,:,:] = np.transpose(rrbuf,(1,3,0,2))[:,:,:,:] self.data = rbuf.reshape((self.NPZ,self.NY,self.NX))

http://mpi4py.scipy.org/ Wrappers a MPI hechos con Cython 2 sabores


Objetos serializados (pickling) Buffers (numpy)

Usad lo segundo, lo primero casca a menudo.


Guillem Borrell i Nogueras Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Problema 2: Identicacin de estructuras


Cuntas estructuras cerradas individuales hay aqu? Contaminacin
Numero todos los vxeles Si dos vxeles estn en contacto me quedo el de id mayor. O(N 4/3 )

Fcilmente paralelizable.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Solucin: Proling + Extensin

Pretendo utilizar todos los cores de un servidor


GIL es por Global Interpreter Lock. Utilizar OpenMP implica escribir una extensin.

Pero qu escribo?
1 2 3 4 5 6 7 8 9 /> python -m cProfile objects.py > objects.prof 1088768 function calls (1058481 primitive calls) in 141.797 seconds Ordered by: standard name ncalls tottime percall 1 0.023 0.023 387 102.151 0.264 1 14.458 14.458

cumtime 141.799 102.151 138.154

percall 141.799 0.264 138.154

filename:lineno(function) genus.py:1(<module>) genus.py:132(__stencilize) genus.py:140(objects)

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Inlining
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def __stencilize_par(clusterbed): codestring =""" int i,j,k; int counter = 0; #pragma omp parallel for private(i,j,k) for (i=1;i<nx-1;i++){ for (j=1;j<ny-1;j++){ for (k=1;k<nz-1;k++){ clusterbed(i,j,k,1) = clusterbed(i,j,k-1,0); [...] """ nx = clusterbed.shape[0] ny = clusterbed.shape[1] nz = clusterbed.shape[2] variables = "clusterbed nx ny nz".split() inline(codestring, variables, extra_compile_args =[-O3 -fopenmp], extra_link_args=[-lgomp], type_converters=converters.blitz)

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Solucin: Weave+Blitz

Permite escribir cdigo en C. Ofrece un interfaz sencillo a arrays. Weave es til cuando se opera con tipos simples: escalares, arrays... No es recomendable cuando hay que operar con tuples, listas...
1 2 3 4 5 6 7 8 9 /> python -m cProfile objects_weave.py > objects_weave.prof 1088768 function calls (1058481 primitive calls) in 141.797 seconds Ordered by: standard name ncalls tottime percall cumtime 1 0.023 0.023 53.191 387 0.007 0.000 12.484 1 14.413 14.413 49.556

percall 53.191 0.032 49.556

filename:lineno(function) genus.py:1(<module>) genus.py:141(__stencilize_par) genus.py:170(objects)

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Problema 3: Distancia de N puntos a una supercie.


Si no utilizo algn mtodo rpido es algo O(N 2 ) Las supercies son fractales as que los mtodos convencionales no valen. Puedo hacer un octree, que es O(N log N), pero es mucho ms difcil de programar.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Parece una buena idea pero...

Si buscamos implementaciones por Internet, todas son recursivas. Al llegar al 6o nivel de recursin... BUM!
El heap tiene un tamao limitado Si genero objetos en la recursin, almacenarlos requiere memoria.

Est bien para cosas pequeas, pero no es mi problema. Vamos, que es difcil.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Solucin: Evitar la recursin

Las listas son rpidas


Especialmente append Pueden utilizarse como arrays de longitud variable.

El mdulo itertools es realmente til... ...y rpido. Qu pasa si tengo cdigo en Python y no es lo sucientemente rpido?
1 2 ncalls 262144 tottime 11.994 percall 0.000 cumtime 21.658 percall filename:lineno(function) 0.000 otree_loop.py:223(pos)

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Cython
Cython es un source-to-source compiler. Python es lento porque es dinmico, no porque es interpretado Cython es python + tipado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cpdef build_lower(np.ndarray[float, ndim=3] f, int nlevels, int NX, voxels): """ Extension to boost the generation of the lowest level tree. """ cdef int p[6] cdef float n[8] cdef int dist cdef int facx cdef int facy cdef int facz [...]

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Et voil.
1 2 ncalls 262144 tottime 0.399 percall 0.000 cumtime 0.399 percall filename:lineno(function) 0.000 {otree_fast.select_lower}

Tengo ms ejemplos de:


f2py swig Boost::python

pytables es genial. Y hay tecnologas que merece la pena explorar.


pypy, la gran esperanza blanca. Serializadores ZeroMQ

Pero se me va el tiempo.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Conclusiones

Me siento como un crash test dummy. Enorme cantidad de alternativas y herramientas. Ms variedad y calidad que Matlab... ...y probablemente que cualquier otro lenguaje interpretado Hay soluciones para prcticamente todos los problemas... ...pero ninguna universal.

Guillem Borrell i Nogueras

Python en Supercomputacin

Noticias Vicisitud Sordidez Conclusiones

Muchas gracias.

Guillem Borrell i Nogueras

Python en Supercomputacin

También podría gustarte