Opciones para Metric Tracking en Libtorch

For anyone reading articles on this website, I don’t think I need to stress the importance of logging metrics of ML models, but there aren’t very many options when it comes to Libtorch metric tracking. Things just aren’t quite as easy as they are with PyTorch.  You could, of course, save everything to a csv file and then visualize it yourself later on, but it’d be nice to see stuff in real time while your model is actually training.  Not only that, you will also likely want an organized way to keep track of your training runs.

Si se busca un poco, hay unos opciones, pero es un poco difícil decider cual es lo mejor. Cuando se trabaja con PyTorch, tipicamente hay unos APIs oficiales que los plataformas ofrecen, pero en C++ existen dos opciones (que yo conozco):

  • Usar un libraria en un repo de Github
  • Hacer su propio logger

Usando Un Repo de Github

Acá les muestro unos proyectos que se puede usar directamente. El beneficio de estos es que no hay que pensar demasiado. Solo hay que añadirlos al proyecto y seguir las instrucciones para empezar:  

Y si los opciones encima no funcionan o si queres una alternativa en que podes conectar directamente a un API ofrecido por el plataforma de logging, también podes hacer tu propio logger.

Haciendo Tu Propio Logger

MLFlow ofrece un REST API además de los APIs para Python, R y Java. Esto significa que si tenés un libraria para requests, podes conectar directamente a MLFlow. (Imagino que esto sería muy útil para proyectos usando Boost, que contiene su propio libraria para requests)

MLFlow ofreces endpoints para hacer y buscar experimentos y runs, en adición a guardar metrics, asi que podes escribir un clase que hace un experimento y run para iniciar, y después incluir una funciona para guardar metrics. Acá es un ejemplo de un interfaz simple:

C++
int main() {

    MLFlowLogger logger{"mlflow:5050", "test2"};

    std::vector<float> loss = {300.0, 100.0, 50.0, 10.0, 5.0, 1.0, 0.5};

    int step = 0;
    for(auto value : loss) {
        logger.log_metric("loss", value, step);
        step++;
    }

}

Este clase obviamente solo guarda números que elegí por mi mismo, pero debe ser más o menos fácil para incorporar un clase como esto en tu loop de entrenamiento.

Me gustaría compartir la implementación entera acá, pero resultaría en un post demasiado grande, así que si queres ver un ejemplo simple de un logger que funciona (con MLFlow en un contenedor de docker) podes ver el mio acáUso los librarias restclient-cpp y simple json library para hacer un logger muy básico.

Conclusión

Hay muchos métodos de guardar metrics para un proyecto de Libtorch y lo que necesitás para tu proyecto va a depender en las restricciones que tu proyecto tiene. No hay una solución incorrecta, pero es importante considerar cual método sería más fácil para desarrollar y mantener.

For more of my content on Libtorch, check some of these articles out!

Referencias

Para más información sobre el MLFlow REST API, podes ver la documentación de MLFlow acá.

https://mlflow.org/docs/latest/rest-api.html#rest-api


Publicado

en

,

por

Comentarios

Deja un comentario

es_ARES