No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Desarrollo de workflow para Continuous Training utilizando CML

20/24
Recursos

Aportes 10

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

name: Continuous Training
on:
  push:
    branches:
      - workflow_continuous_training
  # Para que github action corra el worflow con este crontab, es decir cada 6 horas
  schedule:
    - cron: '0 */6 * * *'
  # Por si queremos correrlo manualmente
  workflow_dispatch:
    inputs:
      reason:
        description: Why to run this?
        required: false
        default: running CT
# These permissions are needed to interact with GitHub's OIDC Token endpoint.
permissions:
  id-token: write # need this for OIDC  
  contents: write
  pull-requests: write 
  issues: read
  packages: none
jobs:
  continuous-training:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v3
      - name: Set AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          role-session-name: aws_testing_session
          role-to-assume: ${{ secrets.AWS_IAM_ROLE }}
          aws-region: ${{ secrets.AWS_REGION }}
      - name: Train model
        run: |
          pip install pipenv
          pipenv install
          pipenv run python
          pip install -r src/requirements.txt
          dvc pull model/model.pkl.dvc -r model-tracker
          dvc unprotect model/model.pkl
          dvc repro -f 
          echo "Training Completed"
          dvc add model/model.pkl
          dvc push model/model.pkl -r model-track
        # Running dvc unprotect guarantees that the target files or directories (targets) in the workspace are physically 鈥渦nlinked鈥 from the cache and can be safely updated. 
      - name: Commit .dvc file changes
        run: |
          git config --local user.email "[email protected]"
          git config --local user.name "github-actions[bot]"
          git add model/model.pkl.dvc
          git commit -m "Updating model serialization"
      - uses: ad-m/github-push-action@master
        with:
            github_token: ${{ secrets.GITHUB_TOKEN }}
            branch: ${{ github.ref }}
      - uses: iterative/setup-cml@v1
      - name: Push metrics
        env:
          REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat report.txt >> report.md 
          cml-publish prediction_behavior.png --md >> report.md
          cml-send-comment report.md

El error que les aparece a algunas personas es por la version de Node. Lanza un error de 400 Bad request que solo interfiere con el intento de agregar la imagen (mas no el texto de report.txt).

Actualmente GitHub Actions usa la version 12 por defecto, a partir del 27 de Setiembre usar谩 la 16 (como nuevo default) https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/

Para definir las directivas de Node en el archivo yaml, se ubica dentro de steps, llamalo cerca al inicio, ya sea antes o despues de cargar el repo:

      - name: Set up Node 16
        uses: actions/setup-node@v1
        with:
          node-version: '16'

En el caso de pipevash encontr茅 su usuario de github y le actualic茅 eso con un pull request.

AzureML tiene tambi茅n un muy buen pipeline de reentrenamiento

Triggers AzureML

脡ste error me dio muchos problemas

|
*
|
Lo solucion茅 comentando estas lineas de c贸digo

 # - uses: ad-m/github-push-action@master
      #   with:
      #       github_token: ${{ secrets.GITHUB_TOKEN }}
      #       branch: ${{ github.ref }}
      - uses: iterative/setup-cml@v1
      - name: Push metrics
        env:
          REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat report.txt >> report.md 
          cml-publish prediction_behavior.png --md >> report.md
          cml-send-comment report.md

Parece que tenia conflictos al llamar dos veces la GITHUB_TOKEN
|
*
|

Dejo mi resultado
|

encontr茅 muy interesante esto, pero realmente tengo aun que probarlo. La idea es que se puedan probar las Github actions de manera local, antes de hacer los commits y los push, de manera que el timeline no se llene de commits de fixes; adem谩s porque al correr de manera local puede que el proceso sea m谩s r谩pido si se cuenta con una buena m谩quina y los contenedores quedan guardados.
En mi caso, Github actions se demora mucho, al rededor de 7 minutos para cada prueba.

Hay un peque帽o error en el worflow, casi imperceptible ya que no afecta, pero igualmente un error en si.

El primero es agregar a dvc con:

          dvc add model/model.pkl
          dvc push model/model.pkl -r model-track

Para seguir la buena practica que comentaron otros ccompa帽eros en clases anteriores para no tener problema el md5.

Y un error en el workflows que si es del profesor:

          dvc add model/model.pkl -r model-tracker --to-remote
          dvc push model/model.pkl.dvc -r model-tracker

A dvc para que vamos a enviar el archivo model.pkl.dvc, si la gracia de este archivo es que este en github, y el archivo model.pkl y .csv que pueden pesar mas, esten alojados en nuestro servidor manejados por dvc,

No se notara el error ya que previamente durante la creacion del proyecto ya tenemos en el servidor nuestro model.pkl, entonces cuando lo necesitemos vamos a usar, pero model.pkl.dvc, por muy bonito que sea que este subido al servicio de almacenamiento de su preferencia, no hara nada.

Igual este error se nota posteriormente con la siguiente linea:

 git add model/model.pkl.dvc

Subimos a dvc y a git el mismo archivo.

Tuve problemas con la parte en que el flujo trata de hacer el commit de los cambios al repositorio git commit -m "Updating model tracked", porque me dec铆a que no ten铆a permisos.
Para resolverlos, fui a la rama en Github, luego a Settings. En el men煤 a la izquierda seleccion茅 Actions, y del desplegable General. en la secci贸n Workflow permissions, seleccione Read and write permissions. Y le di guardar. Con eso ya se pod铆an hacer commits.

en caso de tener este error en el paso de al intalar librerias:

AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'

actualicen esta libreria pyOpenSLL y listo,

- name: Installing dependencies
        run: |
          pip3 install pyOpenSSL --upgrade
          pip install dvc[gs]
          pip install -r test/requirements_test.txt

Creo que es peligroso hacer ese tipo de commits a producci贸n sin correr tests previamente. Deber铆a haber una advertencia de los problemas asociados a este workflow:

  • puedes subir a DVC archivos innecesarios
  • puedes subir modelos rotos a producci贸n o a tu nube con dvc (en el caso de que este workflow pase pero el testing de la api no lo haga)

Hay una nueva version de dvc > 3.0 , recuerden urtilizar la misma version cuando hicieron el seguimiento local y el que se hace en el workflow.