Data version control
¿Qué es?
El versionamiento de datos y modelos es una técnica que permite hacerle trazabilidad a archivos de datos o modelos, que normalmente son pesados (10s-100s MB a 10s-100s GB, incluso en ocasiones TBs), junto con el versionamiento del código. El objetivo es que, en adición y concordancia con el código, se puedan versionar los datos de entrada y/o los modelo entrenados para hacer el proyecto completamente reproducible en cualquiera de sus etapas de desarrollo.
¿Cómo funciona?
Git no está diseñado para versionar archivos de gran tamaño o archivos binarios. Su uso está optimizado para versionar archivos de texto de poco peso (archivos con código fuente). Por lo tanto, para versionar archivos de datos/modelos junto con el código, se debe utilizar una técnica indirecta.
Esta técnica indirecta está implementada en una herramienta (DVC) que se instala en el proyecto al hacer uso de la opción just set-dev-env "--extra dvc".
DVC funciona:
- Generando archivos de texto livianos con metadatos sobre los archivos pesados (datos y/o modelos), que se agregan a Git para identificar una versión específica de estos archivos pesados (datos y/o modelos) y así poderlos recuperar en cualquier momento, y
- Almacenando de forma eficiente estos archivos pesados (datos y/o modelos) por fuera del proyecto. Para almacenar las versiones de estos archivos de forma óptima se utilizan repositorios (buckets) en la nube que ofrecen gran capacidad a precios competitivos.
Costos asociados
Como se explicó previamente, el versionamiento de datos y/o modelos requiere disponer un "lugar" para almacenar las distintas versiones de estos archivos. La forma más eficiente de almacenar estos archivos es en la nube, sin embargo esto no es libre de costo. Almacenar un 1TB en la nube tiene un costo que oscila entre USD 6 y USD 26 (por mes), más el costo de descargar los archivos una vez estén almacenados que oscila entre USD 0.01/GB y USD 0.11/GB.
Por lo anterior, es muy importante ser racional y consciente sobre los archivos de datos y/o modelos que se van a versionar, ya que esto conllevará costo. El objetivo debe ser contar con las versiones clave de estos archivos, por ejemplo, aquellos necesarios para estimar modelos, o los modelos (propiamente) ya entrenados que se estén utilizado oficialmente (en ambiente de producción).
Opción de repositorio en la nube
Backblaze ofrece un servicio de almacenamiento en la nube (B2 Cloud Storage), que además de cumplir con los más altos estándares de calidad y seguridad de los otros operadores (e.g. Amazon Web Services, Microsoft Azure o Google Cloud), es 3x más económico.
Uso
Después de haber "instalado" el proyecto aplicando la opción asociada con data version control (i.e. just set-dev-env "--extra dvc"), que habilita la herramienta (DVC) para hacer versionamiento de datos y/o modelos, ésta se debe inicializar y configurar para poderla empezar a utilizar.
Inicializar DVC
Las siguientes instrucciones inicializan el uso de DVC en el proyecto y apagan la opción de recopilación de analítica.
Configurar el bucket
Las siguientes instrucciones configuran el repositorio en la nube (bucket) en el que que se almacenarán los archivos de datos y/o modelos. A continuación se ilustra la configuración haciendo uso del servicio B2 Cloud Storage, sin embargo tenga presente que puede utilizar otros1 servicios de almacenamiento en la nube.
uv run dvc remote add -d backblaze s3://<bucket name/folder>
uv run dvc remote modify backblaze endpointurl https://s3.<region>.backblazeb2.com
Las anteriores instrucciones agregan el repositorio y le indican a DVC la url donde puede consultarlos. Tenga presente que previamente debe haber creado una cuenta en Backblaze, debe haber creado el Bucket allí, y debe contar con un Application Key con permiso de lectura y escritura sobre el bucket.
Atención
Recuerde modificar <bucket name/folder> con el nombre del bucket previamente creado, y si así lo desea, una ruta específica dentro del bucket (i.e. bucket/carpeta/otraCarpeta...). Asimismo, recuerde modificar la region en la que está ubicado el bucket.
Posteriormente, es preciso configurar las credenciales para poder acceder al bucket. Para esto, se deben ejecutar las siguientes instrucciones:
uv run dvc remote modify --local backblaze access_key_id '<keyID>'
uv run dvc remote modify --local backblaze secret_access_key '<applicationKey>'
Atención
Recuerde modificar <keyID> y <applicationKey> los datos de la Application Key creada previamente.
Seguridad
Por seguridad, las credenciales no se incluirán en el versionamiento en Git ni en DVC. Estas quedarán guardadas, únicamente, en su equipo local. Por lo tanto, en el futuro cuando otra persona clone el proyecto, deberá ejecutar las dos instrucciones anteriores para configurar, en su equipo, la información necesaria para poder interactuar con el repositorio en la nube (i.e. poder agregar y/o consultar versiones de los datos y/o modelos). No es necesario que ejecute las otras instrucciones porque el proyecto ya tendrá configurado DVC para hacer versionamiento de datos y/o modelos.
Finalmente, asegúrese de agregar al repositorio Git la configuración. Para esto, ejecute las siguientes instrucciones:
git add .dvcignore .dvc/.gitignore .dvc/config
git commit -m "feat: inicializa data version control con DVC"
Versionar archivos de datos y/o modelos
Una vez configurado DVC, como se indicó anteriormente, siga los siguientes pasos para versionar un archivo:
-
Agregue el archivo (datos y/o modelos), a la carpeta
data/del proyecto. -
Indíquele a DVC que debe versionar el archivo (datos y/o modelos). Para esto, ejecute la siguiente instrucción:
- Por ejemplo, si el archivo (datos y/o modelos) que va a versionar es
datos.csv, la instrucción sería:uv run dvc add data/datos.csv. O, si el archivo esdatos personas.csv, la instrucción sería:uv run dvc add data/"datos personas.csv".
Atención
No olvide reemplazar
<nombre archivo>por el nombre del archivo que agregó en el punto 1, con su respectiva extensión.Tenga presenta que si el nombre del archivo (datos y/o modelos) contiene espacios, debe encerrar todo el nombre en comillas sencillas o dobles (i.e.
''o""respectivamente). - Por ejemplo, si el archivo (datos y/o modelos) que va a versionar es
-
Indíquele a Git que agregue el archivo (
.dvc) con la metadata que identifica la versión especifica del archivo (datos y/o modelos). Ejecute:- Por ejemplo, si el archivo (datos y/o modelos) que va a versionar es
datos.csv, la instrucción sería:git add data/datos.csv.dvc. O, si el archivo esdatos personas.csv, la instrucción sería:git add data/"datos personas.csv.dvc".
Atención
No olvide reemplazar
<nombre archivo>por el nombre del archivo que agregó en el punto 1, con su respectiva extensión.Tenga presenta que si el nombre del archivo (datos y/o modelos) contiene espacios, debe encerrar todo el nombre en comillas sencillas o dobles (i.e.
''o""respectivamente). - Por ejemplo, si el archivo (datos y/o modelos) que va a versionar es
-
Haga commit en Git para dejar trazabilidad del archivo (datos y/o modelos) por medio del archivo con la metadata. Para esto, ejecute:
Atención
No olvide reemplazar
<mensaje>por un texto que identifique adecuadamente los datos/modelos que está versionando. Se recomienda consultar el capítulo Mensaje Commits la sección Lineamientos contribución para mayor información sobre mensajes para los commits. -
Configure la omisión de los headers no compatibles con Backblaze. Ejecute:
-
Suba el archivo al bucket. Para esto, ejecute:
Atención
Dependiendo el tamaño del archivo de datos/modelos que esté versionando, la instrucción
uv run dvc pushpuede tomar un tiempo considerable. -
Sincronice el repositorio git local con la versión en la nube. Ejecute:
Pro tip
Puede versionar varios archivos de datos/modelos simultáneamente, para esto, solo debe ajustar las instrucciones 1, 2 y 3 como se indica a continuación:
- Agregue todos los archivos a la carpeta
data/. - Agregue tantos
data/<nombre archivo>como sea necesario, separándolos con un espacio, a la instrucciónuv run dvc add. - Agregue tantos
data/<nombre archivo>.dvccomo sea necesario, separándolos con un espacio, a la instruccióngit add.
Descargar versiones
Para sincronizar (descargar) su versión local del proyecto con todas las versiones de los archivos de datos/modelos "versionados" que se han subido al bucket, ejecute la siguiente instrucción:
Atención
Dependiendo que tantos archivos sean y el tamaño de estos, esta instrucción puede tomar un tiempo considerable.
Cambiar de versión
Para cambiar a la versión de un archivo de datos/modelo que se haya versionado previamente, primero debe ir al commit de Git en el que se "versionó" el archivo y luego hacer checkout con DVC. Para realizar esto, ejecute las siguientes instrucciones:
Atención
Recuerde modificar <commit> con código del commit en el que "versionó" el archivo de datos/modelos que quiere recuperar nuevamente.
-
Visite DVC / Data Management / Remote Storage para consultar otros servicios disponibles y la forma cómo se lleva a cabo su configuración. ↩