{"id":131481,"date":"2014-06-10T19:14:04","date_gmt":"2014-06-10T17:14:04","guid":{"rendered":"http:\/\/www.madrimasd.org\/blogs\/bioinformatica\/?p=131481"},"modified":"2014-06-30T17:02:45","modified_gmt":"2014-06-30T15:02:45","slug":"cuando-tus-herramientas-fallan-ubuntu-r-atlas-y-fallos-bizantinos","status":"publish","type":"post","link":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/2014\/06\/10\/131481","title":{"rendered":"Cuando tus herramientas fallan: Ubuntu, R, ATLAS y fallos bizantinos"},"content":{"rendered":"<p>Como en cualquier profesi\u00f3n, nuestro trabajo depende tanto de nuestra profesionalidad como del buen funcionamiento de nuestras herramientas. Pero, \u00bfpuede pasar que nuestras herramientas dejen de funcionar de forma correcta por una actualizaci\u00f3n? Por desgracia, todos sabemos que s\u00ed.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/openclipart.org\/image\/300px\/svg_to_png\/169622\/radioactive_ladybug.png\" alt=\"\" width=\"212\" height=\"300\" \/><\/p>\n<p>Esta situaci\u00f3n ocurri\u00f3 en nuestro laboratorio, y nos dimos cuenta la semana pasada. En la estaci\u00f3n de trabajo de una compa\u00f1era est\u00e1 instalada la distribuci\u00f3n de Linux Ubuntu 12.10, y se le actualiz\u00f3 <a href=\"http:\/\/es.wikipedia.org\/wiki\/R_(lenguaje_de_programaci%C3%B3n)\" target=\"_blank\">R<\/a>\u00a0(lenguaje y entorno de programaci\u00f3n muy usado en c\u00e1lculos estad\u00edsticos) hace cuatro semanas a la \u00faltima versi\u00f3n, la 3.1.0, por paquete de Ubuntu. Las instalaciones de R en Ubuntu dependen de la implementaci\u00f3n de <a href=\"http:\/\/en.wikipedia.org\/wiki\/BLAS\" target=\"_blank\">BLAS<\/a>\u00a0(una librer\u00eda matem\u00e1tica que define funciones de \u00e1lgebra lineal) que haya activa. En Ubuntu hay disponibles varias: la <a href=\"http:\/\/www.netlib.org\/blas\/\" target=\"_blank\">implementaci\u00f3n de referencia<\/a>, la implementaci\u00f3n de <a href=\"http:\/\/math-atlas.sourceforge.net\/\" target=\"_blank\">ATLAS<\/a>, la implementaci\u00f3n de <a href=\"http:\/\/www.openblas.net\/\" target=\"_blank\">OpenBLAS<\/a>, etc&#8230; Como tambi\u00e9n se actualizaron los paquetes de Ubuntu de esa m\u00e1quina, tambi\u00e9n hubo una actualizaci\u00f3n de la librer\u00eda BLAS (estaba seleccionada ATLAS)&#8230; y algo pasaba con esa implementaci\u00f3n.<\/p>\n<p>Esta compa\u00f1era empez\u00f3 a sospechar que algo \u00abraro\u00bb pasaba, cuando c\u00e1lculos realizados meses atr\u00e1s empezaron a salir distintos.\u00a0\u00bfC\u00f3mo saber qu\u00e9 ten\u00eda la culpa? En estos casos hay que tener una dosis de suerte, y pensar lo impensable. Primero estuvo mirando si fue alg\u00fan paquete de R, e intentando acotar el problema y su origen, se encontr\u00f3 con que c\u00e1lculos tan sencillos\u00a0<a href=\"http:\/\/stat.ethz.ch\/R-manual\/R-patched\/library\/stats\/html\/lm.html\" target=\"_blank\">en R como una regresi\u00f3n lineal<\/a>\u00a0daba resultados diferentes con cada ejecuci\u00f3n para un mismo conjunto de datos. Este tipo de errores en el software es de los denominados <a href=\"http:\/\/es.wikipedia.org\/wiki\/Problema_de_los_dos_generales\" target=\"_blank\">fallos bizantinos<\/a>, ya que no son fallos evidentes, y no son reproducibles.<\/p>\n<p>Al ser <a href=\"http:\/\/stat.ethz.ch\/R-manual\/R-patched\/library\/stats\/html\/lm.html\" target=\"_blank\">lm<\/a> una funci\u00f3n b\u00e1sica de R, el problema pod\u00eda estar en el propio R, en alguna librer\u00eda que use R o en el hardware de la m\u00e1quina (por ejemplo, un m\u00f3dulo de memoria defectuoso). As\u00ed que probamos a instalar R 3.1.0\u00a0a partir del c\u00f3digo fuente, compilando\u00a0con las opciones por defecto, y funcionaban los c\u00e1lculos. As\u00ed que, \u00bfestaba mal compilado R, o qu\u00e9 pasaba? Aqu\u00ed es donde intervino la suerte, cuando esta compa\u00f1era se acord\u00f3 que algunos paquetes de R hab\u00edan dejado de funcionar con la actualizaci\u00f3n, y esos paquetes depend\u00edan de la librer\u00eda BLAS del sistema. Buscando c\u00f3mo reemplazar ATLAS de forma r\u00e1pida y sencilla, encontramos esta <a href=\"http:\/\/www.stat.cmu.edu\/~nmv\/2013\/07\/09\/for-faster-r-use-openblas-instead-better-than-atlas-trivial-to-switch-to-on-ubuntu\/\" target=\"_blank\">entrada de blog donde se describe c\u00f3mo activar OpenBLAS<\/a> en Ubuntu. Y tras eso, el R 3.1.0 instalado por paquete empez\u00f3 a funcionar de nuevo como deb\u00eda.<\/p>\n<p>\u00bfQu\u00e9 conclusiones salen de todo esto? No, no voy a decir que ATLAS sea una mala librer\u00eda matem\u00e1tica, porque eso ser\u00eda ser injusto con el trabajo y dedicaci\u00f3n de sus desarrolladores. Ni que sea un problema de Ubuntu, porque posiblemente sea un fallo espec\u00edfico de la versi\u00f3n de ATLAS instalada con la versi\u00f3n de R instalada. La conclusi\u00f3n a nivel cient\u00edfico es que tenemos que ser capaces de reproducir nuestras investigaciones, y cuando no lo conseguimos, averiguar el por qu\u00e9. Puede ser la metodolog\u00eda que hemos seguido, puede ser la implementaci\u00f3n del m\u00e9todo&#8230; o puede ser algo que no hayamos tenido en cuenta, como que no funciona bien alguna herramienta.<\/p>\n<p><span style=\"text-decoration: underline;\">Actualizaci\u00f3n 30 de Junio de 2014<\/span><\/p>\n<p>Algo que se me olvid\u00f3 contar, pero que es muy importante, es que, cuando se cambian las librer\u00edas matem\u00e1ticas de las que depende R (y en general, cualquier librer\u00eda que sea usada por alg\u00fan paquete de R), es m\u00e1s que recomendable reinstalar los paquetes que las est\u00e9n usando. Tras el cambio a OpenBLAS se dio el caso de que la funci\u00f3n lm funcionaba, mientras que otro paquete segu\u00eda fallando.<\/p>\n<p>Otro detalle importante para evitar m\u00e1s problemas es que OpenBLAS tiene soporte multihebra que funciona muy bien cuando no hay otro tipo de paralelismo de por medio. Pero como hay paquetes de R o nuestro propio c\u00f3digo que ejecutan en varios n\u00facleos cuando \u00e9stos est\u00e1n disponibles, todo esto junto se lleva bastante mal. En los comentarios de la propia p\u00e1gina mencionan este problema, y cuentan una de las maneras de desactivar el soporte multihebra de OpenBLAS. Estableciendo en el fichero de perfil .bashrc la variable de entorno <tt>OPENBLAS_NUM_THREADS<\/tt>, o la variable de entorno <tt>GOTO_NUM_THREADS<\/tt>, o la variable de entorno <tt>OMP_NUM_THREADS<\/tt> (asociada a OpenMP) a 1:<\/p>\n<blockquote><p>export OPENBLAS_NUM_THREADS=1<\/p><\/blockquote>\n<p>conseguimos evitar ese problema<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como en cualquier profesi\u00f3n, nuestro trabajo depende tanto de nuestra profesionalidad como del buen funcionamiento de nuestras herramientas. Pero, \u00bfpuede pasar que nuestras herramientas dejen de funcionar de forma correcta por una actualizaci\u00f3n? Por desgracia, todos sabemos que s\u00ed. Esta situaci\u00f3n ocurri\u00f3 en nuestro laboratorio, y nos dimos cuenta la semana pasada. En la estaci\u00f3n de trabajo de una compa\u00f1era est\u00e1 instalada la distribuci\u00f3n de Linux Ubuntu 12.10, y se le actualiz\u00f3 R\u00a0(lenguaje y entorno de programaci\u00f3n muy usado en c\u00e1lculos estad\u00edsticos) hace cuatro semanas a la \u00faltima versi\u00f3n, la 3.1.0, por paquete de Ubuntu. Las instalaciones de R en\u2026<\/p>\n","protected":false},"author":25,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[187],"tags":[],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":4}},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/posts\/131481"}],"collection":[{"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/comments?post=131481"}],"version-history":[{"count":6,"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/posts\/131481\/revisions"}],"predecessor-version":[{"id":131487,"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/posts\/131481\/revisions\/131487"}],"wp:attachment":[{"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/media?parent=131481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/categories?post=131481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.madrimasd.org\/blogs\/bioinformatica\/wp-json\/wp\/v2\/tags?post=131481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}