mllint - Linter para proyectos de aprendizaje automático ¡Atención! Esta herramienta ya no se mantiene
Como se detalla a continuación, escribí
mllintdurante mi tesis de MSC en informática entre febrero y octubre de 2021. Desde entonces, me he graduado y ahora ya no estoy desarrollando o manteniendo activamente este paquete.
mllinttodavía funciona, ¡así que no dudes en usarlo! Si encuentra algún error, no dude en crear un problema, todavía recibo notificaciones de nuevos problemas y hay una buena posibilidad de que los mire en mi tiempo libre, pero no garantizaré una respuesta oportuna o una solución para su problema.Para aquellos interesados en la producción de investigación producida en mi tesis de MSC:
- Tesis de MSC completa: http://resolver.tudelft.nl/uuid:b20883f8-a921-487a-8a65-89374a1f3867
- La prevalencia de los olores de código en proyectos de aprendizaje automático
Bart Van Oort, Luís Cruz, Maurício Aniche, Arie Van Deursen
Publicado en Wain 2021 (primer taller sobre ingeniería de IA - Ingeniería de software para IA, ubicada con ICSE)- "Project Huele": experiencias en el análisis de la calidad del software de los proyectos ML con mllint
Bart Van Oort, Luís Cruz, Babak Loni, Arie Van Deursen
Publicado en ICSE SEIP 2022
mllint es una utilidad de línea de comandos para evaluar la calidad técnica del aprendizaje automático (ML) y los proyectos de inteligencia artificial (IA) escritas en Python mediante el análisis del código fuente del proyecto, los datos y la configuración de las herramientas de soporte. mllint tiene como objetivo ...
mllint hace esto midiendo la adherencia del proyecto a las mejores prácticas de ML, como se recopila y deduce de SE4ML y las reglas de Google para ML. Tenga en cuenta que estas mejores prácticas son bastante de alto nivel, mientras que mllint tiene como objetivo brindar consejos prácticos y con los pies en la tierra a sus usuarios. Por lo tanto, mllint puede ser algo obstinada, ya que intenta abogar por herramientas específicas para adaptarse mejor a estas mejores prácticas. Sin embargo, mllint tiene como objetivo solo recomendar herramientas de código abierto y prácticas públicamente verificables. ¡Por supuesto, los comentarios son siempre bienvenidos!
mllint fue creado durante mi tesis de MSC en informática en el Grupo de Investigación de Ingeniería de Software (SERG) en TU Delft y la IA de Ing para FinTech Research Lab sobre el tema de los olores de código y calidad de software en proyectos de aprendizaje automático .
Consulte
docs/example-report.mdpara el informe completo generado para este proyecto de ejemplo.Consulte también el repositorio
mllint-example-projectspara explorar los informes de un proyecto de ejemplo que usamllintpara medir y mejorar la calidad de su proyecto en varias iteraciones.Consulte también el sitio web de
mllintpara la documentación en línea de todas sus reglas y categorías de pelucas.
mllint se compila para Linux, MacOS y Windows, tanto de 64 y 32 bits x86 (solo macOS de 64 bits), así como un brazo de 64 bits en Linux y macOS (Apple M1).
mllint se publica a PYPI, por lo que se puede instalar a nivel mundial o en su entorno actual utilizando pip :
pip install --upgrade mllint Alternativamente, para agregar mllint a un proyecto existente, si su proyecto usa poesía para sus dependencias:
poetry add --dev mllintO si su proyecto usa Pipenv:
pipenv install --dev mllint mllint tiene una dependencia suave de varias herramientas de Python que utiliza para su análisis. Si bien mllint recomendará que coloque estas herramientas en las dependencias de desarrollo de su proyecto, estas herramientas se enumeran como dependencias opcionales de mllint y se pueden instalar junto con mllint usando:
pip install --upgrade mllint[tools] También hay contenedores Docker mllint disponibles en Docker Hub en bvobart/mllint para Python 3.6, 3.7, 3.8 y 3.9. Estos pueden ser particularmente útiles al ejecutar mllint en entornos CI, como las acciones de Gitlab CI o GitHub. Vea el Docker Hub para una lista completa de etiquetas disponibles que se pueden usar.
Los contenedores Docker requieren que monte la carpeta con su proyecto en el contenedor como volumen en /app . Aquí hay un ejemplo de cómo usar este contenedor Docker, suponiendo que su proyecto esté en la carpeta actual. Reemplace $(pwd) con la ruta completa a la carpeta de su proyecto si está en otro lugar.
docker run -it --rm -v $( pwd ) :/app bvobart/mllint:latest mllint está diseñado para usarse tanto en su computadora personal como en los sistemas CI. Por lo tanto, abra un terminal en la carpeta de su proyecto y ejecute uno de los siguientes comandos, o agréguelo al script CI de su proyecto.
Para ejecutar mllint en el proyecto en la carpeta actual, simplemente ejecute:
mllint Para ejecutar mllint en un proyecto en otra carpeta, simplemente ejecute:
mllint path/to/my-ml-project mllint analizará su proyecto y creará un informe con formato de Markdown de su análisis. Por defecto, esto se imprimirá bastante en su terminal.
Si, en cambio, prefiere exportar el texto de Markdown sin procesar a un archivo, que puede ser particularmente útil cuando se ejecuta en CI, el indicador --output o -o y proporciona un nombre de archivo. mllint no sobrescribe el archivo de destino si ya existe, a menos que se use --force o -f . Por ejemplo:
mllint --output report.md Usando - (un tablero) ya que el nombre de archivo imprime el enriquecimiento sin procesar directamente a su terminal:
mllint -o -En los scripts de CI, dicha salida de marcado sin procesar (ya sea como un archivo o impreso en la salida estándar) se puede usar para hacer comentarios sobre solicitudes de extracción/fusión o crear páginas wiki en su repositorio.
Consulte Docs/Ejemplo-Inform.md para un ejemplo de un informe que mllint genera o explore los generados para los proyectos de ejemplo.
Por supuesto, no dude en explorar mllint help para obtener más información sobre sus comandos y descubrir banderas adicionales que se pueden usar.
mllint analiza su proyecto evaluando varias categorías de reglas de pelusa. Cada categoría, así como cada regla, tiene una 'Slug', es decir, una pieza de texto más baja con guiones o cortes para espacios, por ejemplo, code-quality/pylint/no-issues . Esta babosa identifica una regla y a menudo (si no siempre) se muestra junto a la categoría o regla que hace referencia.
Para enumerar todas las categorías y reglas de pelusa disponibles (implementadas), ejecute:
mllint list allPara enumerar todas las reglas de pelusa habilitadas, ejecute (opcionalmente proporcionando la ruta a la carpeta del proyecto):
mllint list enabled Por defecto, todas las reglas de mllint están habilitadas. Consulte la configuración para aprender cómo deshabilitar selectivamente ciertas reglas.
Para obtener más información sobre una determinada regla o categoría, use mllint describe junto con la babosa de la categoría o regla:
# Describe the Version Control category. This will also list the rules that it checks.
mllint describe version-control
# Use the exact slug of a rule to describe one rule,
# e.g., the rule on DVC usage in the Version Control category
mllint describe version-control/data/dvc
# Use a partial slug to describe all rules whose slug starts with this snippet,
# e.g., all rules about version controlling data
mllint describe version-control/data Alternativamente, visite las páginas de categorías y reglas en el sitio web de mllint para ver la última documentación en línea de estas reglas.
También es posible definir sus propias reglas de pelusa personalizadas implementando un script o programa que mllint ejecutará mientras realiza su análisis. Estas reglas personalizadas deben definirse en la configuración de mllint . Para obtener más información sobre cómo hacer esto, consulte mllint describe custom o vea la documentación en línea aquí.
mllint se puede configurar utilizando un archivo .mllint.yml o a través del pyproject.toml del proyecto. Esto te permite:
Consulte los fragmentos y comandos de código que se proporcionan a continuación para ver ejemplos de dichos archivos de configuración.
Para imprimir la configuración actual de mllint en formato YAML, ejecute (opcionalmente proporcionando la ruta a la carpeta del proyecto):
mllint config Para imprimir la configuración predeterminada de mllint en formato YAML, ejecute (a menos que haya una carpeta llamada default en el directorio actual):
mllint config default Para crear un archivo .mllint.yml a partir de la configuración predeterminada de mllint , ejecute:
mllint config default -q > .mllint.yml Un ejemplo .mllint.yml que deshabilita algunas reglas se ve de la siguiente manera:
rules :
disabled :
- version-control/code/git
- dependency-management/single Similar al comando describe , esto también coincide con las babosas parciales. Por lo tanto, para deshabilitar todas las reglas con respecto a la versión de control de datos, use version-control/data .
Si no se encuentra .mllint.yml , mllint busca la pyproject.toml del proyecto para una sección [tool.mllint] . TomL tiene una sintaxis ligeramente diferente, pero la estructura es la misma que la configuración en el archivo YAML.
Un ejemplo de la configuración de pyproject.toml de mllint es la siguiente. Tenga en cuenta que es idéntico al ejemplo de YAML anterior.
[ tool . mllint . rules ]
disabled = [ " version-control/code/git " , " dependency-management/single " ] Si bien mllint es una herramienta para el ecosistema ML de Python y se distribuye a través de PYPI, en realidad está escrito en GO, compilado a un binario estático y publicado como ruedas de pitón específicas de la plataforma.
Para ejecutar mllint desde la fuente, instale la última versión de GO para su sistema operativo, luego clone este repositorio y ejecute go run . en la raíz de este repositorio. Use go test ./... o ejecute test.sh para ejecutar todas las pruebas de mllint .
Para probar la compilación y el empaque mllint en una rueda de Python para su plataforma actual, ejecute test.package.sh .