¡Amigos! paisanos! ¡Te traigo buenas noticias! El ¡el bicho está muerto! ¡Larga vida a conda/mamba en clústeres compartidos!
OK espera. Retrocedamos. ¿Qué es este error y por qué es importante que esté solucionado?
Todo comienza con la enseñanza…
conda es como la mejor para enseñar bioinformática!!
He estado enseñando bioinformática usando conda durante aproximadamente 5 años. No solo lo hago directamente enseñar a conda/mamba pero también lo uso ampliamente en mi laboratorio práctico de introducción a la bioinformática para estudiantes de posgrado, donde enseño llamada variantemontaje de novo y RNAseq.
Principalmente enseño en un clúster compartido, el HPC de ‘granja’, porque ahí es donde muchos de los estudiantes estarán haciendo su investigación.
Y enseño conda (y mamba) por algunas razones:
- ¡funciona!
- ¡No necesita privilegios de administrador para instalar versiones específicas de su software!
- ¡La mayoría del software de línea de comandos de bioinformática está disponible a través de conda!
- muchos (¿la mayoría?) paquetes de Python y ¡muchos (¿la mayoría?) paquetes R están disponibles en conda-forge o bioconda!
- y, más recientemente, uno de nuestros administradores, Camille Scott, hizo que RStudio Server funcionara para que cargue paquetes R y R desde entornos conda.
Entonces, básicamente, conda es una solución completa para que los estudiantes tomen y usen después mi clase ha terminado.
Mi configuración de enseñanza para conda
Enseño usando un montón de cuentas creadas específicamente para el curso. Estas cuentas están configuradas para que tenga acceso ssh a ellas, lo cual es realmente importante; y tienen acceso a colas específicas. ¡Todo funciona muy bien! Bueno, sobre todo.
Cosas que funcionan fuera de la caja: software instalado con conda. ¡Hurra!
Cosas que no funcionan desde el primer momento: 30 estudiantes descargando simultáneamente los mismos paquetes de conda-forge.
Esto se debe a que 30 estudiantes que descargan 500 MB de paquetes desde el mismo sitio web remoto es lento ;).
La cuestión es que no es realmente necesario que todos descarguen los paquetes; la mayoría de las veces, los estudiantes solo descargan paquetes al mismo tiempo durante la clase, y todos descargan el mismo paquetes ¡Deberíamos poder almacenarlos en caché!
Así que configuré las cuentas con un caché central. sigue leyendo…
Uso de un caché de paquetes central para un montón de cuentas
En realidad, es bastante sencillo de configurar; hay dos componentes: un archivo condarc,
pkgs_dirs:
- ~/.conda/pkgs
- /home/ctbrown/remote-computing.cache
que especifica un directorio de caché de paquetes que se comparte; y un instalar secuencia de comandos que ejecuto en cada cuenta “hijo” que instala y configura conda para usar el caché compartido:
$ cd ~/
$ mkdir -p ~/.conda/pkgs
$ cp ~ctbrown/shared-conda-on-farm/condarc ~/.condarc
$ bash ~ctbrown/shared-conda-on-farm/Mambaforge-Linux-x86_64.sh -b -p $HOME/miniforge3
Esto configura las cosas para que todas las cuentas busquen paquetes en un solo lugar y los descarguen a su cuenta local si no están allí.
Ejecuto este script en cada cuenta secundaria y luego configuro una cuenta principal separada que tiene privilegios de escritura en el directorio de caché. Esta cuenta principal debe descargar todos los paquetes de conda deseados, momento en el cual estarán disponibles para que todas las cuentas secundarias los usen sin descargar.
Esto funciona muy bien, excepto por una cosa: hasta hace poco, las llamadas mamba de la cuenta infantil se quejaban amargamente si los permisos eran incorrectos. Y a veces las cosas saldrían aún peor y habría accidentes. Así que tuve que ser muy consciente de cómo instalé los paquetes. Cosa que no siempre fui. Lo que causó problemas.
¡Y ese es el error que se solucionó! – lo especifico problema de conda al que he estado prestando atención referencias esta soluciónque en realidad apuntaba a este problema.
Bien está lo que bien acaba: actualicé todas las cuentas a mamba 1.30, realicé algunas pruebas y ¡todo parece funcionar! Hicimos una prueba de estrés el miércoles con ~ 30 personas revisando mi lección de creación de serpientes, y aparte de las fallas en la red, ¡la vida era buena!
Dando un paso atrás: ¿es conda todo eso?
Sí, es genial.
Estoy seguro de que no resuelve todos los problemas de empaque, y estoy seguro de que teóricamente es inferior a muchas cosas, pero debo decir que realmente simplemente funciona para mí (y las personas en mi laboratorio) el 99% del tiempo.
Aún mejor, otras personas informan que funciona bien para ellos, incluso para las instalaciones de software R.
Conda y R.
Conda resuelve muchos problemas de instalación de paquetes R para mí.
No soy un experto en R, pero esto es lo que he recopilado sobre por qué tengo muchos problemas:
El desafío con la instalación de R es que muchos paquetes de R deben compilarse antes de la instalación; Deduzco que el ecosistema de empaquetado R normalmente distribuye las cosas como fuente. Esto significa que instalarlos requiere tener instalada una cadena de herramientas de compilación particular. Las dependencias también se convierten en un problema. Básicamente, este es un punto de fragilidad.
Conda convenientemente hace las cosas de una manera diferente: los paquetes se distribuyen como archivos binarios sin necesidad de compilación, y sus dependencias incluyen todo lo necesario para el tiempo de ejecución. Cuando esto funciona, funciona realmente bien: ¡simplemente descarga e instala el paquete compilado para su sistema!
Aún mejor, toda la magia de Conda funciona: puedes usar un entorno aislado, con la versión de R que querías usar, con todos los paquetes compatibles instalados. Y si necesita instalar algo usted mismo, puede hacerlo en ese entorno de conda aislado sin contaminar potencialmente sus otras instalaciones de R.
Entonces, ahora uso regularmente entornos conda que se ven así:
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- r-ggplot2
- r-dplyr
- r-readr
- r-pheatmap
- r-knitr
- r-rmarkdown
- r-rsqlite
- r-data.table
- r-kableextra
- bioconductor-tximeta
- bioconductor-deseq2
- bioconductor-summarizedexperiment
- r-base
- r-irkernel=1.1
- r-devtools
y me funciona muy bien.
Notaré que la situación realmente ha mejorado en los últimos 3 años: solía tener muchos problemas, pero conda-forge realmente ha mejorado su juego y ahora la mayoría de mis problemas ocurren en otros lugares (cosas específicas del problema, básicamente) .
Una preocupación con conda ha sido la disponibilidad de paquetes R comunes. Aquí me complace decir que Fredrik Boulund informó que pudo encontrar que todos menos uno de los 600 de sus paquetes R utilizados internamente ya estaban disponibles en conda-forge. ¡Así que eso es genial!
Un último pensamiento para ti…
…o tal vez dos ;).
El empaquetado de software de ciencia de datos realmente requiere una comunidad. Hay tantos paquetes, y tantas necesidades diversas y dispares, que si desea una solución que satisfaga > 80% de las necesidades, necesita construir una comunidad diversa. Si los mecanismos de la comunidad incluyen una forma de agregar sus propios paquetes de interés (como conda-forge y bioconda do), ¡eso resulta en magia!
Además, creo que las soluciones de software deben incorporar la perspectiva de novatos/aprendices. Si no puedo lograr que una clase de 30 personas usen su solución de manera sólida, entonces eso es un problema.
–tito