Integração com Git para Azure Machine Learning

O Git é um sistema popular de controle de versões que permite que você compartilhe e colabore em seus projetos. Este artigo explica como o Azure Machine Learning pode ser integrado a um repositório Git local para acompanhar informações sobre o repositório, a ramificação e a confirmação atual como parte de um trabalho de treinamento.

O Azure Machine Learning dá suporte total a repositórios Git para acompanhamento o trabalho. Você pode clonar repositórios diretamente no sistema de arquivos do seu espaço de trabalho compartilhado, usar o Git na sua estação de trabalho local ou utilizar o Git a partir de um pipeline de integração contínua e implantação contínua (CI/CD).

Quando você envia um trabalho de treinamento do Azure Machine Learning que contém arquivos de origem de um repositório Git local, as informações sobre o repositório são rastreadas como parte do trabalho de treinamento. Como as informações vêm do repositório Git local, elas não estão vinculadas a nenhum repositório central específico. Seu repositório pode ser clonado de qualquer serviço compatível com Git, como GitHub, GitLab, Bitbucket ou Azure DevOps.

Dica

Você pode usar o Visual Studio Code para interagir com o Git por meio de uma interface gráfica de usuário. Para conectar-se a uma instância de computação remota do Azure Machine Learning usando o Visual Studio Code, consulte Iniciar o Visual Studio Code integrado ao Azure Machine Learning (versão prévia).

Para mais informações sobre os recursos de controle de versão do Visual Studio Code, confira Usar Controle de Versão no Visual Studio Code e Trabalhar com GitHub no Visual Studio Code.

Repositórios Git em um sistema de arquivos de espaço de trabalho

O Azure Machine Learning fornece um sistema de arquivos compartilhado para todos os usuários em um espaço de trabalho. A melhor maneira de clonar um repositório Git para esse compartilhamento de arquivos é criar uma instância de computação e abrir um terminal. No terminal, você tem acesso a um cliente Git completo e pode clonar e trabalhar com o Git usando a CLI do Git. Para mais informações, confira CLI do Git.

Você pode clonar qualquer repositório Git que possa autenticar, como um repositório GitHub, Azure Repos ou BitBucket. É melhor clonar o repositório no seu diretório de usuário para evitar que outros usuários interfiram diretamente na sua ramificação de trabalho.

Existem algumas diferenças entre clonar para o sistema de arquivos local da instância de computação ou clonar para o sistema de arquivos compartilhado, montado como o diretório ~/cloudfiles/code/. Em geral, clonar para o sistema de arquivos local oferece melhor desempenho do que clonar para o sistema de arquivos montado. No entanto, se você excluir e recriar a instância de computação, o sistema de arquivos local será perdido, enquanto o sistema de arquivos compartilhado montado será mantido.

Clonar um repositório Git com SSH

Você pode clonar um repositório usando o protocolo Secure Shell (SSH). Para usar SSH, você precisa autenticar sua conta Git com SSH usando uma chave SSH.

Gerar e salvar uma nova chave SSH

Para gerar uma nova chave SSH, você pode acessar a página Notebook no Estúdio do Azure Machine Learning, abrir um terminal e executar o seguinte comando, substituindo pelo seu endereço de email.

ssh-keygen -t ed25519 -C "your_email@example.com"

O comando retorna a seguinte saída:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_ed25519):

Verifique se a localização na saída anterior é /home/azureuser/.ssh, ou altere-a para essa localização e pressione Enter.

É recomendável adicionar uma frase secreta à sua chave SSH para maior segurança. Nos prompts seguintes, insira uma frase secreta segura.

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

Quando você pressionar Enter, o ssh-keygen comando gerará uma nova chave SSH com o endereço de email fornecido como rótulo. O arquivo de chave será salvo na instância de computação e estará acessível apenas para o proprietário da instância de computação.

Adicionar a chave pública à sua conta do Git

Você precisa adicionar sua chave SSH pública à sua conta Git. Para obter a chave, execute o seguinte comando na janela do terminal. Se o arquivo da sua chave tiver outro nome, substitua id_ed25519.pub pelo nome do arquivo da sua chave pública.

cat ~/.ssh/id_ed25519.pub

O comando exibirá o conteúdo do arquivo da sua chave pública. Copie a saída.

Dica

Para copiar e colar na janela do terminal, use os seguintes atalhos de teclado, dependendo do seu sistema operacional:

  • Windows: Ctrl+C ou Ctrl+Insert para copiar, Ctrl+V ou Ctrl+Shift+V para colar.
  • MacOS: Cmd+C para copiar e Cmd+V para colar.

Alguns navegadores podem não dar suporte adequado às permissões de área de transferência.

Adicione a chave SSH à sua conta do Git usando as instruções a seguir, dependendo do seu serviço Git:

Clone o repositório Git com SSH

Para clonar um repositório Git, copie a URL de clonagem SSH do repositório. No seu terminal, execute git clone seguido da URL de clonagem SSH. Por exemplo:

git clone git@example.com:GitUser/azureml-example.git

O SSH pode exibir a impressão digital do servidor SSH e pedir que você a verifique, como no exemplo a seguir.

The authenticity of host 'github.com (000.00.000.0)' can't be established.
ECDSA key fingerprint is SHA256:0000000000000000000/00000000/00000000.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

O SSH exibe essa impressão digital quando se conecta a um host desconhecido para protegê-lo contra ataques man-in-the-middle. Você deve verificar se a impressão digital corresponde a uma das impressões digitais na página de chaves públicas do SSH. Depois de aceitar a impressão digital do host, o SSH não solicitará novamente a menos que a impressão digital seja alterada.

O SSH exibirá uma resposta como o exemplo a seguir:

Cloning into 'azureml-example'...
Warning: Permanently added 'github.com,000.00.000.0' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/azureuser/.ssh/id_ed25519': 

Depois de inserir sua frase secreta, o Git clonará o repositório e configurará o remoto de origem para conectar-se com SSH para comandos Git futuros.

Acompanhe o código proveniente de repositórios Git

Quando você envia um trabalho de treinamento do SDK do Python ou da CLI do Machine Learning, os arquivos necessários para treinar o modelo são carregados no espaço de trabalho. Se o comando git estiver disponível no seu ambiente de desenvolvimento, o processo de upload verificará se os arquivos de origem estão armazenados em um repositório Git.

Se sim, o processo carrega as informações do repositório Git, ramificação e confirmação atual como parte do trabalho de treinamento. As informações são armazenadas nas seguintes propriedades do trabalho de treinamento para trabalhos que usam um avaliador, pipeline de aprendizado de máquina ou execução de script.

Propriedade Comando Git para obter o valor Descrição
azureml.git.repository_uri ou mlflow.source.git.repoURL git ls-remote --get-url O URI do qual O repositório foi clonado.
azureml.git.branch ou mlflow.source.git.branch git symbolic-ref --short HEAD A ramificação ativa no momento do envio do trabalho.
azureml.git.commit ou mlflow.source.git.commit git rev-parse HEAD O hash de confirmação do código enviado para o trabalho.
azureml.git.dirty git status --porcelain . True se a ramificação ou confirmação estiverem sujos, caso contrário, false.

Se o comando git não estiver disponível no seu ambiente de desenvolvimento ou se seus arquivos de treinamento não estiverem localizados em um repositório Git, nenhuma informação relacionada ao Git será controlada.

Dica

Para verificar se o comando git está disponível no seu ambiente de desenvolvimento, execute o comando git --version em uma interface de linha de comando. Se o Git estiver instalado e no seu caminho, você receberá uma resposta semelhante a git version 2.43.0. Para obter informações sobre como instalar o Git no seu ambiente de desenvolvimento, consulte o site do Git.

Exibir informações do Git

As informações do Git são armazenadas como código JSON nas propriedades de um trabalho de treinamento. As informações do Git registradas podem incluir as seguintes propriedades:

"azureml.git.repository_uri": "git@github.com:azure/<repo-name>",
"azureml.git.branch": "<branch-name>",
"azureml.git.commit": "<commit-id>",
"azureml.git.dirty": "<True/False>",
"mlflow.source.git.repoURL": "git@github.com:azure/<repo-name>",
"mlflow.source.git.branch": "<branch-name>",
"mlflow.source.git.commit": "<commit-id>",

Você pode visualizar essas informações usando o portal do Azure, SDK do Python ou CLI do Azure.

Portal do Azure

No seu workspace no Estúdio do Azure Machine Learning, selecione seu trabalho na página Trabalhos. Na seção Propriedades da página Visão Geral do trabalho, selecione JSON Bruto em Ver todas as propriedades.

No JSON, procure as propriedades do Git, por exemplo:

    "properties": {
        "mlflow.source.git.repoURL": "git@github.com:azure/azureml-examples",
        "mlflow.source.git.branch": "main",
        "mlflow.source.git.commit": "0000000000000000000000000000000000000000",
        "azureml.git.dirty": "False",
        ...
    },

Python SDK V2

Após enviar uma execução de treinamento, um objeto Trabalho será retornado. O atributo properties desse objeto contém as informações do Git registradas. Por exemplo, você pode executar o seguinte comando para recuperar o hash de confirmação:

job.properties["mlflow.source.git.commit"]

CLI do Azure V2

Você pode executar o comando az ml job show com o argumento --query para exibir as informações do Git. Por exemplo, a consulta a seguir recupera o valor da propriedade mlflow.source.git.commit:

az ml job show --name my-job-id --query "{GitCommit:properties.azureml.git.commit} --resource-group my-resource-group --workspace-name my-workspace"