¿Cuál es un buen flujo de trabajo de Git para un equipo de análisis o ciencia de datos?

Lo que me llamó la atención en esta pregunta fue la mención de un equipo de análisis O equipo de ciencia de datos. Como lo veo, hay una pequeña diferencia que afecta el flujo de trabajo de git.

En lo que respecta al análisis, mi suposición es que no hay un producto final. Los repositorios son principalmente para mantener el código para el análisis. Con esto en mente, empujar directamente está bien. La razón de esto es que la mayoría de las veces, es un repositorio de una persona y no hay un producto final.

Para un equipo de ciencia de datos, es un poco diferente. Espero que el código de producción esté presente y potencialmente mantenido por más de una persona. Aunque tengo algunos puntos que no estoy muy seguro en este momento, por ejemplo, cómo manejar grandes conjuntos de datos locales, en lo que respecta al código, se debe usar el flujo de trabajo estándar de git. Es, después de todo, el código de producción.

Hay una nueva herramienta de DS que no está enviando archivos de datos a los repositorios de Git y utiliza almacenamientos en la nube para eso: se admiten almacenamientos de AWS y GCP – Control de versión de datos – Haga que sus proyectos de ciencia de datos sean reproducibles y compartibles – agilice su trabajo en un solo , entorno reproducible, también facilita compartir este entorno mediante Git, incluidas las dependencias (DAG). Eso permite evitar las ramas separadas en el flujo de trabajo de DS.

El siguiente código muestra cómo compartir su código y DAG a través de Git y archivos de datos a través de S3:

# Configura la configuración de la nube. Ejemplo: Cloud = AWS, StoragePath = / dvc-share / projects / tag_classifier
$ vi dvc.conf
$ git commit -am “Configurar ruta de AWS”
[master ec994b6] Configurar la ruta de AWS
1 archivo modificado, 1 inserción (+), 1 eliminación (-)

# Comparta el repositorio con la tubería y la configuración de la nube.
$ git remoto agregar origen https://github.com/dmpetrov/tag_classifier.git
$ git push -u maestro de origen

# Compartir los archivos de datos más importantes.
$ dvc datos de sincronización / matriz-tren.p datos / matriz-prueba.p
Carga del archivo de caché “.cache / matrix-train.p_1fa3a9b” a S3 “projects / tag_classifier / .cache / matrix-train.p_1fa3a9b”
Subida completada
Carga del archivo de caché “.cache / matrix-test.p_1fa3a9b” a S3 “projects / tag_classifier / .cache / matrix-test.p_1fa3a9b”
Subida completada

¿El código que está introduciendo entra en producción (es decir, afecta a los usuarios finales de su aplicación, ya sea interna o externa)? Si es así, es mejor seguir el flujo de trabajo estándar y utilizar solicitudes de extracción revisadas por pares.

Si solo está realizando pequeños cambios en un cuaderno o análisis que está utilizando para sí mismo o para comunicar ideas a otro miembro de su equipo, no hay necesidad de perder el valioso tiempo del desarrollador en tales cosas.