agarbuno / modelacion-bayesiana

Notas y contenido del curso en Modelación Bayesiana para la MCD @ ITAM
MIT License
23 stars 51 forks source link

Configurar docker y stan #2

Closed felipegonzalez closed 3 years ago

felipegonzalez commented 3 years ago

Falta la instalación de python pero podemos comenzar con esta. También falta esperar que cmdstanr salga de beta, pero creo que es buena idea intentarlo por estabilidad (si no nos quedamos con rstan y pystan).

agarbuno commented 3 years ago

No estoy tan seguro de quitar renv, la razón que veo para incluirlo es por si queremos distribuir las notas como en el curso de fundamentos. Nos aseguramos de tener las versiones de los paquetes homogenizadas. Que opinas @felipegonzalez?

felipegonzalez commented 3 years ago

Como lo veo es;

En resumen: renv lo veo como una versión más ligera para tener reproducibilidad, siempre y cuando los paquetes no tengan dependencias externas importantes (como en el curso de fundamentos). Docker es mejor si hay más cosas fuera de R que hay que controlar para que las cosas funcionen.

Quizá con esto podemos balancear y decidir qué combinación es mejor!

agarbuno commented 3 years ago

Ya veo! Tienes toda la razón, en este caso es redundante. Gracias por la aclaración, apenas estoy aprendiendo los detalles de Docker. Ahora, tengo otra pregunta: está habilitado un volume para que puedan correr el contenedor y a su vez guardar cambios en los scripts en su máquina? Como has resuelto esto antes?

felipegonzalez commented 3 years ago

Si, la idea es montar localmente el repositorio como un volumen. Por ejemplo en mac o linux, primero haces el build de la imagen (este es el paso más tardado, pero el chiste es hacerlo solo una vez):

docker build . -t mod-bayes

Ahora bajo mi repositorio por ejemplo a /home/felipe/clases/modelacion-bayesiana. Luego arrancas docker con:

docker run -e PASSWORD=mipass -p 8787:8787 -v /home/felipe/clases/modelacion-bayesiana:/home/rstudio/mod-bayes mod-bayes:latest

El flujo de trabajo que he usado hasta ahora es:

  1. Con el comando docker run arranco el contenedor (es mejor guardar ese comando).
  2. Abro en un browser localhost:8787, y ya está ahí la carpeta del repositorio. Puedes usar ahora git desde la interfaz, o también en una termina fuera del contenedor.
  3. Después de hacer cambios, corro las notas o lo que sea, y entonces hago commit y push si es necesario (es mejor hacer esto fuera del contenedor por las credenciales de git)
  4. Hago el deploy con algún script (yo uso neltify o github-pages). Generalmente lo hago manual, pero puede también ser con integración continua.

Este es mi flujo para casi cualquier proyecto importante/grande. Ahora ya me da miedo usar rstudio local! porque a veces cambio cosas en mi sistema (drivers de gpu, etc.) y tengo la paz mental de que es muy poco probable que mis proyectos no corran. La lata de actualizar el contenedor cuando quiero usar otra versión de R o de paquetes es sólo de vez en cuando.

Para los alumnos que no han usado docker, a veces tienen dificultad en instalarlo (es más dificil si no tienen una versión pro de windows) y luego tienen que entender el concepto de contenedores y volúmenes montados (que no es tan fácil al principio!). Creo que el secreto de Docker es que todos dicen que hace las cosas más fácil... pero nadie dice cómo le costó entender cómo hacerlo y tener el modelo mental que no es nada simple!

Por eso mi idea es que para el primer semestre uso Docker para las notas, pero les digo que es opcional. Para tareas y ejercicios les recomiendo usar rstudio cloud, donde ya instalé las cosas necesarias. Pero como esta materia es de segundo semestre ya deberían entender los conceptos de Docker.

felipegonzalez commented 3 years ago

De todas formas, podemos probar un flujo y cambiarlo conforme vayamos desarrollando. Voy a subir un primer caso introductorio y vamos viendo.