Compartir vía


Integración de Git con Azure Machine Learning

Git es un conocido sistema de control de versiones que le permite compartir sus proyectos y colaborar con otros usuarios en ellos. En este artículo se explica cómo Azure Machine Learning se puede integrar con un repositorio Git local para realizar un seguimiento de la información de repositorio, rama y confirmación actual como parte de un trabajo de entrenamiento.

Azure Machine Learning es totalmente compatible con repositorios de Git para el trabajo de seguimiento. Puede clonar repositorios directamente en el sistema de archivos del área de trabajo compartida, usar Git en la estación de trabajo local o usar Git desde una canalización de integración continua e implementación continua (CI/CD).

Al enviar un trabajo de entrenamiento de Azure Machine Learning que tenga archivos de origen desde un repositorio Git local, se realiza un seguimiento de la información sobre el repositorio como parte del trabajo de entrenamiento. Dado que la información procede del repositorio de Git local, no está vinculada a ningún repositorio central específico. El repositorio se puede clonar desde cualquier servicio compatible con Git, como GitHub, GitLab, Bitbucket o Azure DevOps.

Sugerencia

Puede usar Visual Studio Code para interactuar con Git a través de una interfaz gráfica de usuario. Para conectarse a una instancia de proceso remota de Azure Machine Learning mediante Visual Studio Code, consulte Inicio de Visual Studio Code integrado con Azure Machine Learning (versión preliminar).

Para obtener más información sobre las características de control de versiones de Visual Studio Code, consulte Usar control de versiones en Visual Studio Code y Trabajar con GitHub en Visual Studio Code.

Repositorios de Git en un sistema de archivos del área de trabajo

Azure Machine Learning proporciona un sistema de archivos compartido para todos los usuarios de un área de trabajo. La mejor manera de clonar un repositorio de Git en este recurso compartido de archivos es crear una instancia de proceso y abrir un terminal. En el terminal, tiene acceso a un cliente de Git completo y puede clonar y trabajar con Git mediante la CLI de Git. Para obtener más información, consulte CLI de Git.

Puede clonar cualquier repositorio de Git en el que pueda autenticarse, como un repositorio de GitHub, Azure Repos o BitBucket. Es mejor clonar el repositorio en el directorio de usuario para que otros usuarios no entren directamente en la rama de trabajo.

Hay algunas diferencias entre la clonación en el sistema de archivos local de la instancia de proceso o la clonación en el sistema de archivos compartido, montado como el directorio ~/cloudfiles/code/. En general, la clonación en el sistema de archivos local proporciona un mejor rendimiento que la clonación en el sistema de archivos montado. Sin embargo, si elimina y vuelve a crear la instancia de proceso, se pierde el sistema de archivos local, mientras se mantiene el sistema de archivos compartido montado.

Clonación de un repositorio de Git con SSH

Puede clonar un repositorio mediante el protocolo Secure Shell (SSH). Para usar SSH, debe autenticar la cuenta de Git con SSH mediante una clave SSH.

Generación y guardado de una nueva clave SSH

Para generar una nueva clave SSH, puede ir a la página de Estudio de Azure Machine Learning Notebook, abrir un terminal y ejecutar el comando siguiente, sustituyendo la dirección de correo electrónico.

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

El comando devuelve la siguiente salida:

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

Asegúrese de que la ubicación de la salida anterior es /home/azureuser/.ssh, o cámbiela a esa ubicación y presione Entrar.

Es mejor agregar una frase de contraseña a la clave SSH para mayor seguridad. En las siguientes indicaciones, escriba una frase de contraseña segura.

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

Al presionar Entrar, el comando ssh-keygen genera una nueva clave SSH con la dirección de correo electrónico proporcionada como etiqueta. El archivo de clave se guarda en la instancia de proceso y solo es accesible para el propietario de la instancia de proceso.

Adición de la clave pública a la cuenta de Git

Debe agregar la clave SSH pública a la cuenta de Git. Para obtener la clave, ejecute el siguiente comando en la ventana del terminal. Si el archivo de clave tiene un nombre diferente, reemplace id_ed25519.pub por el nombre del archivo de clave pública.

cat ~/.ssh/id_ed25519.pub

El comando muestra el contenido del archivo de clave pública. Copie la salida.

Sugerencia

Para copiar y pegar en la ventana del terminal, use estos métodos abreviados de teclado, en función del sistema operativo:

  • Windows: Ctrl+C o Ctrl+Insertar para copiar, Ctrl+V o Ctrl+Mayús+V para pegar.
  • MacOS: Cmd+C para copiar y Cmd+V para pegar.

Es posible que algunos exploradores no admitan los permisos del Portapapeles correctamente.

Agregue la clave SSH a la cuenta de Git mediante las instrucciones siguientes, en función del servicio Git:

Clonación del repositorio de Git con SSH

Para clonar un repositorio de Git, copie la dirección URL de clonación de Git SSH del repositorio. En el terminal, ejecute git clone seguido de la dirección URL de clonación de Git SSH. Por ejemplo:

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

SSH puede mostrar la huella digital SSH del servidor y pedirle que lo compruebe, como en el ejemplo siguiente.

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])?

SSH muestra esta huella digital cuando se conecta a un host desconocido para protegerle de ataques de tipo "Man in the Middle". Debe comprobar que la huella digital coincide con una de las huellas digitales de la página de claves públicas SSH. Una vez que acepte la huella digital del host, SSH no le pedirá de nuevo a menos que cambie la huella digital.

SSH muestra una respuesta como en el ejemplo siguiente:

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': 

Después de escribir la frase de contraseña, Git clona el repositorio y configura el origen remoto para conectarse con SSH para futuros comandos de Git.

Seguimiento del código proveniente de repositorios de Git

Cuando se envía un trabajo de entrenamiento desde el SDK de Python o la CLI de Machine Learning, los archivos necesarios para entrenar el modelo se cargan en el área de trabajo. Si el comando git está disponible en el entorno de desarrollo, el proceso de carga comprueba si los archivos de origen se almacenan en un repositorio de Git.

Si es así, el proceso carga la información de confirmación actual, rama y repositorio de Git como parte del trabajo de entrenamiento. La información se almacena en las siguientes propiedades del trabajo de entrenamiento para los trabajos que usan un estimador, una canalización de aprendizaje automático o una ejecución de script.

Propiedad Comando de Git para obtener el valor Descripción
azureml.git.repository_uri o mlflow.source.git.repoURL git ls-remote --get-url Identificador URI del que se clonó el repositorio.
azureml.git.branch o mlflow.source.git.branch git symbolic-ref --short HEAD Rama activa cuando se envió el trabajo.
azureml.git.commit o mlflow.source.git.commit git rev-parse HEAD Hash de confirmación del código enviado para el trabajo.
azureml.git.dirty git status --porcelain . True si la rama o la confirmación están sucias; de lo contrario, false.

Si el comando git no está disponible en el entorno de desarrollo o los archivos de entrenamiento no se encuentran en un repositorio de Git, no se realiza un seguimiento de la información relacionada con Git.

Sugerencia

Para comprobar si el comando git está disponible en el entorno de desarrollo, ejecute el comando git --version en una interfaz de línea de comandos. Si Git está instalado y en la ruta de acceso, recibirá una respuesta similar a git version 2.43.0. Para obtener información sobre cómo instalar Git en el entorno de desarrollo, consulte el Sitio web de Git.

Visualización de la información de Git

La información de Git se almacena como código JSON en las propiedades de un trabajo de entrenamiento. La información de Git registrada puede incluir las siguientes propiedades:

"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>",

Puede ver esta información mediante Azure Portal, el SDK de Python o la CLI de Azure.

Azure portal

En el área de trabajo de Estudio de Azure Machine Learning, seleccione el trabajo en la página Trabajos. En la sección Propiedades de la página Información general del trabajo, seleccione JSON sin formato en Ver todas las propiedades.

En JSON, busque las propiedades de Git, por ejemplo:

    "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",
        ...
    },

SDK de Python (V2)

Después de enviar una ejecución de entrenamiento, se devuelve un objeto Trabajo. El atributo properties de este objeto contiene la información de Git registrada. Por ejemplo, puede ejecutar el siguiente comando para recuperar el hash de confirmación:

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

CLI de Azure V2

Puede ejecutar el comando az ml job show con el argumento --query para mostrar la información de Git. Por ejemplo, la consulta siguiente recupera el valor de la propiedad 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"