SnakeMake gobierna con script Python, conda y cluster

Me gustaría que Snakemake ejecute un script de Python con un entorno conda específico a través de un cluster SGE.

En el clúster tengo miniconda instalada en mi directorio de inicio. Mi directorio de inicio se monta a través de NFS, de modo que es accesible para todos los nodos del clúster.

Debido a que la miniconda está en mi directorio de inicio, el comando conda no está en la ruta del sistema operativo por defecto. Es decir, para usar conda primero debo agregar explícitamente esto a la ruta.

Tengo una especificación de entorno conda como un archivo yaml, que podría usarse con la opción –use-conda. ¿Funcionará también con la opción –cluster “qsub”?

FWIW También lanzo snakemake utilizando un entorno conda (de hecho, el mismo entorno en el que quiero ejecutar el script).

Tengo un sistema Snakemake existente, ejecutando conda, en un clúster SGE. Es una delicia y muy factible. Trataré de ofrecer una perspectiva y orientación.

La ubicación de su miniconda, local o compartida, puede no importar. Si está utilizando un inicio de sesión para acceder a su grupo, debería poder actualizar sus variables predeterminadas al iniciar sesión. Esto tendrá un efecto global. Si es posible, sugiero encarecidamente que edite la configuración predeterminada en su .bashrc para lograr esto. Esto configurará de forma correcta y automática su ruta de acceso al inicio de sesión.

Una de las líneas en mi archivo, “home / tboyarski / .bashrc”

export PATH=$HOME/share/usr/anaconda/4.3.0/bin:$PATH 

EDITAR 1 Buen punto hecho en el comentario

Personalmente, considero una buena práctica poner todo bajo control de la conda; sin embargo, esto puede no ser ideal para usuarios que comúnmente requieren acceso a software no compatible con conda. Normalmente, los problemas de soporte técnico tienen que ver con el uso de sistemas operativos antiguos (por ejemplo, recientemente se eliminó el soporte de CentOS 5). Como se sugiere en el comentario, exportar manualmente la variable PATH en una sola sesión de terminal puede ser más ideal para usuarios que no trabajan exclusivamente en tuberías, ya que esto no tendrá un efecto global.

Dicho esto, al igual que yo antes de la ejecución de Snakemake, recomiendo inicializar el entorno de Conda utilizado por la mayoría o la totalidad de su canalización. Considero que esta es la forma preferida, ya que permite a Conda crear el entorno, en lugar de hacer que Snakemake le pida a Conda que cree el entorno. No tengo el enlace para la discusión en la web, pero creo que leí en alguna parte que las personas que solo confían en Snakemake para crear los entornos, no para lanzar desde un entorno base, encontraron que los entornos se almacenaban en el /. directorio de snakemake, y que se estaba volviendo excesivamente grande. Siéntete libre de buscar el post. El problema lo abordó el autor que redujo la carga en la carpeta oculta, pero aún así, creo que tiene más sentido iniciar los trabajos desde un entorno Snakemake existente, que interactúa con su nodo principal, y luego pasa las variables ambientales correspondientes a Son nodos hijos. Me gusta un poco de jerarquía.

Dicho esto, es probable que deba pasar los entornos a sus nodos secundarios si está ejecutando Snakemake desde el entorno de su nodo principal y dejando que Snakemake interactúe con el progtwigdor de tareas de SGE, a través de qsub . De hecho, uso la función DRMAA incorporada , que recomiendo altamente. Ambos medios de presentación requieren que proporcione los siguientes argumentos:

  -V Available for qsub, qsh, qrsh with command and qalter. Specifies that all environment variables active within the qsub utility be exported to the context of the job. 

También…

  -S [[hostname]:]pathname,... Available for qsub, qsh and qalter. Specifies the interpreting shell for the job. pathname must be an executable file which interprets command-line options -c and -s as /bin/sh does. 

Para darle un mejor punto de partida, también especifico la memoria virtual y los recuentos de núcleos, esto podría ser específico para mi sistema SGE, no lo sé.

 -V -S /bin/bash -l h_vmem=10G -pe ncpus 1 

Espero que necesite ambos argumentos al enviar el clúster SGE, como lo hago personalmente. Recomiendo poner las variables de envío de clúster en formato JSON, en un archivo separado. El fragmento de código anterior se puede encontrar en este ejemplo de lo que he hecho personalmente . Lo he organizado de forma ligeramente diferente a la del tutorial , pero eso es porque necesitaba un poco más de granularidad.

Personalmente, solo uso el comando –use-conda cuando ejecuto un entorno conda diferente al que solía iniciar y enviar mis trabajos de Snakemake. Por ejemplo, mi entorno principal de Conda ejecuta Python 3, pero si necesito usar una herramienta que diga, requiere Python 2, entonces solo usaré Snakemake para lanzar una regla, con ese entorno específico, de modo que la ejecución de ese La regla usa una ruta correspondiente a una instalación de python2. Esto fue de gran importancia para mi empleador, ya que el sistema existente que estaba reemplazando tuvo problemas para cambiar de python2 a 3, con conda y snakemake, esto es muy fácil.

En principio, creo que esta es una buena práctica lanzar un entorno base de Conda y ejecutar Snakemake desde allí. Fomenta el uso de un solo entorno para toda la carrera. Mantenlo simple, ¿verdad? Complicar las cosas solo cuando sea necesario, como cuando se necesita ejecutar tanto python2 como python3 en el mismo canal. 🙂