mllint - Linter para projetos de aprendizado de máquina Atenção! Esta ferramenta não é mais mantida
Conforme detalhado abaixo, escrevi
mllintdurante minha tese de mestrado em ciência da computação entre fevereiro e outubro de 2021. Desde então, me formei e agora não estou mais desenvolvendo ou mantendo ativamente este pacote.
mllintainda funciona, então fique à vontade para usá -lo! Se você encontrar bugs, sinta -se à vontade para criar um problema, ainda recebo notificações de novos problemas e há uma boa chance de que eu os verei no meu tempo livre, mas não garantirei uma resposta oportuna ou uma correção para o seu problema.Para os interessados na produção de pesquisa produzida na minha tese de mestrado:
- Tese completa do MSC: http://resolver.tudelft.nl/uuid:b20883f8-a921-487a-8a65-89374a1f3867
- A prevalência de código cheira em projetos de aprendizado de máquina
Bart Van Oort, Luís Cruz, Maurício Aniche, Arie Van Deursen
Publicado em Wain 2021 (1º workshop em engenharia de IA - Engenharia de Software para AI, co -localizada com ICSE)- "Projeto Smells" - Experiências na análise da qualidade do software dos projetos de ML com Mllint
Bart Van Oort, Luís Cruz, Babak Loni, Arie Van Deursen
Publicado no ICSE SEIP 2022
mllint é um utilitário de linha de comando para avaliar os projetos de qualidade técnica do aprendizado de máquina (ML) e da inteligência artificial (IA) escritos em Python, analisando o código-fonte, dados e configuração das ferramentas de suporte do projeto. mllint pretende ...
mllint faz isso medindo a adesão do projeto às melhores práticas do ML, conforme coletado e deduzido das regras SE4ML e do Google para ML. Observe que essas práticas recomendadas são bastante de alto nível, enquanto mllint pretende dar conselhos práticos e práticos aos seus usuários. Portanto, mllint pode ser um tanto opinativa, pois tenta defender ferramentas específicas para melhor se adequar a essas práticas recomendadas. No entanto, mllint pretende recomendar apenas ferramentas de código aberto e práticas publicamente verificáveis. É claro que o feedback é sempre bem -vindo!
mllint foi criado durante minha tese de mestrado em Ciência da Computação no Grupo de Pesquisa em Engenharia de Software (SERG) da AI da TU Delft e da ING for Fintech Research Lab sobre o tema do código Smells & Software Quality em projetos de aprendizado de máquina .
Consulte
docs/example-report.mdpara obter o relatório completo gerado para este projeto de exemplo.Consulte também o repositório
mllint-example-projectspara explorar os relatórios de um projeto de exemplo usandomllintpara medir e melhorar a qualidade do projeto em relação a várias iterações.Veja também o site da
mllintpara a documentação on -line de todas as suas regras e categorias de linha.
mllint é compilado para Linux, MacOS e Windows, de 64 e 32 bits x86 (apenas MacOS de 64 bits), bem como o braço de 64 bits no Linux e MacOS (Apple M1).
mllint é publicado no Pypi, para que possa ser instalado globalmente ou em seu ambiente atual usando pip :
pip install --upgrade mllint Como alternativa, para adicionar mllint a um projeto existente, se o seu projeto usar poesia para suas dependências:
poetry add --dev mllintOu se o seu projeto usar Pipenv:
pipenv install --dev mllint mllint tem uma dependência suave de várias ferramentas Python que ele usa para sua análise. Embora mllint recomendado que você coloque essas ferramentas nas dependências de desenvolvimento do seu projeto, essas ferramentas são listadas como dependências opcionais do mllint e podem ser instaladas junto com mllint usando:
pip install --upgrade mllint[tools] Também existem contêineres mllint Docker disponíveis no Docker Hub no bvobart/mllint para Python 3.6, 3.7, 3,8 e 3.9. Isso pode ser particularmente útil ao executar mllint em ambientes de IC, como ações Gitlab CI ou Github. Consulte o Hub do Docker para obter uma lista completa de tags disponíveis que podem ser usadas.
Os contêineres do Docker exigem que você monte a pasta com seu projeto no contêiner como um volume em /app . Aqui está um exemplo de como usar este contêiner do Docker, assumindo que seu projeto esteja na pasta atual. Substitua $(pwd) pelo caminho completo para a pasta do projeto, se estiver em outro lugar.
docker run -it --rm -v $( pwd ) :/app bvobart/mllint:latest mllint foi projetado para ser usado tanto no seu computador pessoal quanto nos sistemas de IC. Portanto, abra um terminal na pasta do projeto e execute um dos seguintes comandos ou adicione -o ao script CI do seu projeto.
Para executar mllint no projeto na pasta atual, basta executar:
mllint Para executar mllint em um projeto em outra pasta, basta executar:
mllint path/to/my-ml-project mllint analisará seu projeto e criará um relatório formatado em marcação de sua análise. Por padrão, isso será bastante impresso no seu terminal.
Se você preferir exportar o texto de marcação bruta para um arquivo, que pode ser particularmente útil ao executar no IC, o sinalizador -O --output ou -o e fornecer um nome de arquivo. mllint não substitui o arquivo de destino, se ele já existir, a menos que --force ou -f seja usado. Por exemplo:
mllint --output report.md Usando - (um traço) como o nome do arquivo imprime o markdown bruto diretamente para o seu terminal:
mllint -o -Nos scripts de CI, essa saída de marcação bruta (seja como um arquivo ou impressa na saída padrão) pode ser usada para fazer comentários sobre solicitações de puxar/mesclar ou criar páginas wiki no seu repositório.
Consulte Docs/exemplo-report.md para um exemplo de relatório que mllint gera ou explore os gerados para os projetos de exemplo.
Obviamente, sinta -se à vontade para explorar mllint help para obter mais informações sobre seus comandos e descobrir sinalizadores adicionais que podem ser usados.
mllint analisa seu projeto, avaliando várias categorias de regras de linha. Cada categoria, assim como cada regra, tem uma 'lesma', ou seja, um texto de texto inferior com traços ou barras para espaços, por exemplo, code-quality/pylint/no-issues . Essa lesma identifica uma regra e é frequentemente (se não sempre) exibida ao lado da categoria ou regra que ela faz referência.
Para listar todas as categorias disponíveis (implementadas) e regras de linha, execute:
mllint list allPara listar todas as regras de linha habilitadas, execute (opcionalmente fornecendo o caminho para a pasta do projeto):
mllint list enabled Por padrão, todas as regras da mllint estão ativadas. Consulte a configuração para aprender como desativar seletivamente certas regras.
Para saber mais sobre uma determinada regra ou categoria, use mllint describe junto com a lesma da categoria ou regra:
# 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 Como alternativa, visite as páginas de categorias e regras no site da mllint para visualizar a mais recente documentação on -line dessas regras.
Também é possível definir suas próprias regras de linha personalizadas implementando um script ou programa que mllint executará durante a execução de sua análise. Essas regras personalizadas precisam ser definidas na configuração da mllint . Para obter mais informações sobre como fazer isso, consulte mllint describe custom ou visualize a documentação on -line aqui.
mllint pode ser configurado usando um arquivo .mllint.yml ou através do pyproject.toml do projeto. Isso permite que você:
Consulte os trechos e comandos de código fornecidos abaixo para exemplos desses arquivos de configuração.
Para imprimir a configuração atual da mllint no formato YAML, execute (opcionalmente fornecendo o caminho para a pasta do projeto):
mllint config Para imprimir a configuração padrão do mllint no formato YAML, execute (a menos que haja uma pasta chamada default no diretório atual):
mllint config default Para criar um arquivo .mllint.yml a partir da configuração padrão da mllint , execute:
mllint config default -q > .mllint.yml Um exemplo .mllint.yml que desativa algumas regras parecem a seguir:
rules :
disabled :
- version-control/code/git
- dependency-management/single Semelhante ao comando describe , isso também corresponde às lesmas parciais. Portanto, para desativar todas as regras sobre dados de controle da versão, use version-control/data .
Se não for encontrado .mllint.yml , mllint pesquisará a [tool.mllint] pyproject.toml do projeto. Toml tem uma sintaxe ligeiramente diferente, mas a estrutura é a mesma que a configuração no arquivo YAML.
Um exemplo de configuração pyproject.toml do mllint é o seguinte. Observe que é idêntico ao exemplo da YAML acima.
[ tool . mllint . rules ]
disabled = [ " version-control/code/git " , " dependency-management/single " ] Embora mllint seja uma ferramenta para o ecossistema Python ML e distribuído através do Pypi, ele é realmente escrito em Go, compilado a um binário estático e publicado como rodas Python específicas da plataforma.
Para executar mllint da fonte, instale a versão mais recente do Go para o seu sistema operacional, clone este repositório e execute go run . na raiz deste repositório. Use go test ./... ou execute test.sh para executar todos os testes da mllint .
Para testar a compilação e embalagem, mllint em uma roda Python para sua plataforma atual, execute test.package.sh .