mllint - Linter für maschinelle Lernprojekte Aufmerksamkeit! Dieses Tool wird nicht mehr aufrechterhalten
Wie nachstehend beschrieben, schrieb ich
mllintwährend meiner MSC -These in Informatik zwischen Februar und Oktober 2021. Ich habe dieses Paket seitdem abgeschlossen und bin jetzt nicht mehr entwickelt oder aktiv aufbewahrt.
mllintfunktioniert immer noch, also können Sie es gerne benutzen! Wenn Sie Fehler finden, können Sie gerne ein Problem erstellen, ich erhalte immer noch Benachrichtigungen über neue Probleme, und es besteht eine gute Chance, dass ich sie in meiner Freizeit betrachten werde, aber ich garantiert keine rechtzeitige Antwort oder eine Lösung für Ihr Problem.Für diejenigen, die sich für die in meiner MSC -These erzeugte Forschungsleistung interessieren:
- Vollständige MSC-These: http://resolver.tudelft.nl/uuid:2
- Die Prävalenz von Code riecht bei Projekten für maschinelles Lernen
Bart Van Oort, Luís Cruz, Maurício Aniche, Arie Van Deursen
Veröffentlicht bei Wain 2021 (1. Workshop über AI Engineering - Software Engineering für AI, Co -Lokalisierung mit ICSE)- "Projektgerüche" - Erfahrungen bei der Analyse der Softwarequalität von ML -Projekten mit Mllint
Bart Van Oort, Luís Cruz, Babak Loni, Arie Van Deursen
Veröffentlicht bei ICSE SEIP 2022
mllint ist ein Befehlszeilen-Dienstprogramm zur Bewertung der technischen Projekte des maschinellen Lernens (ML) und der KI-Projekte für künstliche Intelligenz (KI), die in Python geschrieben wurden, indem der Quellcode, die Daten und die Konfiguration des Projekts von unterstützenden Tools analysiert wird. mllint zielt darauf ab, ...
mllint misst dies durch die Messung der Einhaltung des Projekts an ML Best Practices, die aus SE4ML- und Google -Regeln für ML gesammelt und abgeleitet werden. Beachten Sie, dass diese Best Practices eher hochwertig sind, während mllint seinen Benutzern praktische, bodenständige Ratschläge geben soll. mllint kann daher etwas übereinstimmen, da es versucht, bestimmte Tools zu befürworten, um diese Best Practices am besten zu passen. mllint zielt jedoch darauf ab, Open-Source-Tools und öffentlich überprüfbare Praktiken zu empfehlen. Feedback ist natürlich immer willkommen!
mllint wurde während meiner MSC -These in Informatik in der Software Engineering Research Group (SERG) bei TU Delft und ings KI für FinTech Research Lab zum Thema Codegerüche und Softwarequalität bei maschinellen Lernprojekten erstellt.
Siehe
docs/example-report.mdfür den vollständigen Bericht, der für dieses Beispielprojekt erstellt wurde.Siehe auch das Repository
mllint-example-projects, um die Berichte eines Beispielprojekts zu untersuchen, dasmllintverwendet, um seine Projektqualität über mehrere Iterationen zu messen und zu verbessern.Siehe auch
mllintWebsite für die Online -Dokumentation aller Lining -Regeln und -kategorien.
mllint wird für Linux, MacOS und Windows sowohl 64 als auch 32 Bit x86 (nur 64-Bit) sowie 64-Bit-Arm unter Linux und MacOS (Apple M1) kompiliert.
mllint wird bei PYPI veröffentlicht, sodass es weltweit oder in Ihrer aktuellen Umgebung mit pip installiert werden kann:
pip install --upgrade mllint Alternativ, um einem vorhandenen Projekt mllint hinzuzufügen, wenn Ihr Projekt Poesie für seine Abhängigkeiten verwendet:
poetry add --dev mllintOder wenn Ihr Projekt Pipenv verwendet:
pipenv install --dev mllint mllint hat eine weiche Abhängigkeit von mehreren Python -Tools, die für seine Analyse verwendet werden. Während mllint empfehlen wird, diese Tools in die Entwicklungsabhängigkeiten Ihres Projekts aufzunehmen, werden diese Tools als optionale Abhängigkeiten von mllint aufgeführt und können zusammen mit mllint unter Verwendung:
pip install --upgrade mllint[tools] Es gibt auch mllint -Docker -Container in Docker Hub bei bvobart/mllint für Python 3.6, 3.7, 3.8 und 3.9. Diese können besonders hilfreich sein, wenn mllint in CI -Umgebungen wie Gitlab CI oder GitHub -Aktionen ausgeführt wird. Eine vollständige Liste der verfügbaren Tags, die verwendet werden können, finden Sie im Docker Hub.
Die Docker -Container müssen den Ordner mit Ihrem Projekt als Volumen an /app auf den Container montieren. Hier ist ein Beispiel für die Verwendung dieses Docker -Containers unter der Annahme, dass sich Ihr Projekt im aktuellen Ordner befindet. Ersetzen Sie $(pwd) durch den vollständigen Pfad zu Ihrem Projektordner, wenn es sich an einem anderen Ort befindet.
docker run -it --rm -v $( pwd ) :/app bvobart/mllint:latest mllint ist so konzipiert, dass sie sowohl auf Ihrem PC als auch auf CI -Systemen verwendet werden. Öffnen Sie also ein Terminal in Ihrem Projektordner und führen Sie einen der folgenden Befehle aus oder fügen Sie ihn dem CI -Skript Ihres Projekts hinzu.
Um das Projekt im aktuellen Ordner mllint , rennen Sie einfach:
mllint Um mllint in einem Projekt in einem anderen Ordner auszuführen, rennen Sie einfach:
mllint path/to/my-ml-project mllint analysiert Ihr Projekt und erstellt einen von Markdown formatierten Bericht über seine Analyse. Standardmäßig wird dies in Ihrem Terminal ziemlich gedruckt sein.
Wenn Sie stattdessen den RAW -Markdown -Text in eine Datei exportieren, die besonders nützlich sein kann, wenn Sie auf CI, dem Flag --output oder -o -Flag ausgeführt werden, und einen Dateinamen bereitstellen. mllint überschreibt die Zieldatei nicht, wenn sie bereits vorhanden ist, es sei denn --force oder -f wird verwendet. Zum Beispiel:
mllint --output report.md Verwenden Sie - (ein Armaturenbrett), wenn der Dateiname den RAW -Markdown direkt an Ihr Terminal druckt:
mllint -o -In CI -Skripten kann eine solche Roh -Markdown -Ausgabe (ob als Datei oder gedruckt in die Standardausgabe) verwendet werden, um z. B. Kommentare zu Pull/Merge -Anforderungen abzugeben oder Wiki -Seiten auf Ihrem Repository zu erstellen.
Eine Beispiel für einen Bericht, den mllint generiert, finden Sie unter DOCS/Beispiel-Report.md oder untersuchen Sie die für die Beispielprojekte generierten.
Natürlich können Sie mllint help für weitere Informationen zu seinen Befehlen erkunden und zusätzliche Flaggen entdecken, die verwendet werden können.
mllint analysiert Ihr Projekt, indem Sie verschiedene Kategorien von Lining -Regeln bewerten. Jede Kategorie hat wie jede Regel einen "Slug", dh einen niedrigeren Textstück mit Strichen oder Schrägstrichen für Räume, z code-quality/pylint/no-issues Diese Schnecke identifiziert eine Regel und wird häufig (wenn auch nicht immer) neben der Kategorie oder Regel angezeigt, auf die sie verweist.
Ausführen:
mllint list allUm alle aktivierten Lining -Regeln aufzulisten, leiten Sie aus (optional den Pfad zum Ordner des Projekts):
mllint list enabled Standardmäßig sind alle Regeln von mllint aktiviert. Siehe Konfiguration, um zu erfahren, wie Sie bestimmte Regeln selektiv deaktivieren können.
Um mehr über eine bestimmte Regel oder eine bestimmte Kategorie zu erfahren, verwenden Sie mllint describe zusammen mit dem Schlupf der Kategorie oder Regel:
# 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 Alternativ besuchen Sie die Kategorien und Regeln auf der Website von mllint , um die neueste Online -Dokumentation dieser Regeln anzuzeigen.
Es ist auch möglich, Ihre eigenen benutzerdefinierten Lining -Regeln zu definieren, indem ein Skript oder ein Programm implementiert wird, das mllint während der Durchführung seiner Analyse ausgeführt wird. Diese benutzerdefinierten Regeln müssen in der Konfiguration von mllint definiert werden. Weitere Informationen dazu finden Sie mllint describe custom oder sehen Sie sich die Dokumentation hier online an.
mllint kann entweder mit einer .mllint.yml -Datei oder über die pyproject.toml des Projekts konfiguriert werden. Dadurch können Sie:
Beispiele für solche Konfigurationsdateien finden Sie in den unten angegebenen Code -Snippets und -befehlen.
Um die aktuelle Konfiguration von mllint im YAML -Format zu drucken (optional den Pfad zum Ordner des Projekts angeben):
mllint config Um die Standardkonfiguration von mllint im YAML -Format zu drucken, leiten Sie es aus (es sei denn, es gibt einen Ordner, der im aktuellen Verzeichnis default ist):
mllint config default So erstellen Sie eine .mllint.yml -Datei aus der Standardkonfiguration von Mllint von mllint :
mllint config default -q > .mllint.yml Ein Beispiel .mllint.yml , das einige Regeln wie folgt deaktiviert:
rules :
disabled :
- version-control/code/git
- dependency-management/single Ähnlich wie beim Befehl describe , entspricht dies auch teilweise Schnecken. Verwenden Sie also alle Regeln für Versionen zur Versionskontrolldaten, um version-control/data zu verwenden.
Wenn nein .mllint.yml gefunden wird, sucht mllint nach einem Abschnitt [tool.mllint] den Projekt des Projekts pyproject.toml . Toml hat eine etwas andere Syntax, aber die Struktur ist ansonsten die gleiche wie die Konfiguration in der YAML -Datei.
Ein Beispiel pyproject.toml -Konfiguration von mllint ist wie folgt. Beachten Sie, dass es mit dem obigen YAML -Beispiel identisch ist.
[ tool . mllint . rules ]
disabled = [ " version-control/code/git " , " dependency-management/single " ] Während mllint ein Werkzeug für das Python ML-Ökosystem ist und über PYPI verteilt ist, ist es tatsächlich in Go geschrieben, zu einem statischen binären und als plattformspezifischen Python-Räder veröffentlichten Python-Räder veröffentlicht.
Um mllint aus Quelle auszuführen, installieren Sie die neueste Version von GO für Ihr Betriebssystem, klonen Sie dann dieses Repository und rennen Sie go run . in der Wurzel dieses Repositorys. Verwenden Sie go test ./... oder test.sh durchführen, um alle Tests von mllint auszuführen.
Um das Kompilieren und Verpacken mllint in ein Python -Rad für Ihre aktuelle Plattform zu testen, rennen Sie test.package.sh .