Acceso a los nodos del clúster de SageMaker HyperPod - Amazon SageMaker AI

Acceso a los nodos del clúster de SageMaker HyperPod

Puede acceder al clúster de InService a través de AWS Systems Manager (SSM) ejecutando el comando aws ssm start-session de la AWS CLI con el nombre de host del clúster de SageMaker HyperPod en el formato sagemaker-cluster:[cluster-id]_[instance-group-name]-[instance-id]. Puede recuperar el ID del clúster, el ID de la instancia y el nombre del grupo de instancias desde la consola de SageMaker HyperPod o ejecutando describe-cluster y list-cluster-nodes desde los comandos de la AWS CLI de SageMaker HyperPod. Por ejemplo, si el ID del clúster esaa11bbbbb222, el nombre del nodo del clúster es controller-group y el ID del nodo del clúster es i-111222333444555aa, el comando start-session de SSM debería ser el siguiente.

nota

Al conceder a los usuarios acceso a los nodos del clúster de HyperPod, pueden instalar y utilizar software administrado por los usuarios en los nodos. Asegúrese de cumplir con el principio de conceder privilegios mínimos a los usuarios.

Si no ha configurado AWS Systems Manager, siga las instrucciones que se proporcionan en Configuración de AWS Systems Manager y Ejecutar como para el control de acceso de los usuarios del clúster.

$ aws ssm start-session \ --target sagemaker-cluster:aa11bbbbb222_controller-group-i-111222333444555aa \ --region us-west-2 Starting session with SessionId: s0011223344aabbccdd root@ip-111-22-333-444:/usr/bin#

Tenga en cuenta que esto lo conecta inicialmente como usuario raíz. Antes de ejecutar trabajos, cambie al usuario ubuntu ejecutando el siguiente comando.

root@ip-111-22-333-444:/usr/bin# sudo su - ubuntu ubuntu@ip-111-22-333-444:/usr/bin#

Para obtener la configuración avanzada para un uso práctico de los clústeres de HyperPod, consulte los siguientes temas.

Consejos adicionales para acceder a los nodos del clúster de SageMaker HyperPod

Uso del script easy-ssh.sh proporcionado por HyperPod para simplificar el proceso de conexión

Para convertir el proceso anterior en un comando de una sola línea, el equipo de HyperPod proporciona el script easy-ssh.sh que recupera la información del clúster, la añade al comando SSM y se conecta al nodo de computación. No es necesario buscar manualmente la información necesaria sobre el clúster de HyperPod, ya que este script ejecuta los comandos describe-cluster y list-cluster-nodes y analiza la información necesaria para completar el comando de SSM. En los siguientes comandos de ejemplo, se muestra cómo ejecutar el script easy-ssh.sh. Si se ejecuta correctamente, se conectará al clúster como usuario raíz. También imprime un fragmento de código para configurar SSH añadiendo el clúster de HyperPod como host remoto a través de un proxy de SSM. Al configurar SSH, puede conectar su entorno de desarrollo local, como Visual Studio Code, con el clúster de HyperPod.

$ chmod +x easy-ssh.sh $ ./easy-ssh.sh -c <node-group> <cluster-name> Cluster id: <cluster_id> Instance id: <instance_id> Node Group: <node-group> Add the following to your ~/.ssh/config to easily connect: $ cat <<EOF >> ~/.ssh/config Host <cluster-name> User ubuntu ProxyCommand sh -c "aws ssm start-session --target sagemaker-cluster:<cluster_id>_<node-group>-<instance_id> --document-name AWS-StartSSHSession --parameters 'portNumber=%p'" EOF Add your ssh keypair and then you can do: $ ssh <cluster-name> aws ssm start-session --target sagemaker-cluster:<cluster_id>_<node-group>-<instance_id> Starting session with SessionId: s0011223344aabbccdd root@ip-111-22-333-444:/usr/bin#

Tenga en cuenta que esto lo conecta inicialmente como usuario raíz. Antes de ejecutar trabajos, cambie al usuario ubuntu ejecutando el siguiente comando.

root@ip-111-22-333-444:/usr/bin# sudo su - ubuntu ubuntu@ip-111-22-333-444:/usr/bin#

Configuración para facilitar el acceso mediante SSH utilizando el nodo de computación de HyperPod como host remoto

Para simplificar aún más el acceso al nodo de computación mediante SSH desde una máquina local, el script easy-ssh.sh genera un fragmento de código de la configuración del clúster de HyperPod como host remoto, tal y como se muestra en la sección anterior. El fragmento de código se genera automáticamente para que pueda añadirlo directamente al archivo ~/.ssh/config de su dispositivo local. En el siguiente procedimiento, se muestra cómo configurarlo para acceder fácilmente mediante SSH a través del proxy SSM, de modo que tanto usted como los usuarios del clúster puedan ejecutar directamente ssh <cluster-name> para conectarse al nodo del clúster de HyperPod.

  1. En su dispositivo local, añada el nodo de computación de HyperPod con un nombre de usuario como host remoto al archivo ~/.ssh/config. El siguiente comando muestra cómo añadir el fragmento de código generado automáticamente desde el script easy-ssh.sh al archivo ~/.ssh/config. Asegúrese de copiarlo de la salida generada automáticamente del script easy-ssh.sh que contiene la información de clúster correcta.

    $ cat <<EOF >> ~/.ssh/config Host <cluster-name> User ubuntu ProxyCommand sh -c "aws ssm start-session --target sagemaker-cluster:<cluster_id>_<node-group>-<instance_id> --document-name AWS-StartSSHSession --parameters 'portNumber=%p'" EOF
  2. En el nodo del clúster de HyperPod, añada la clave pública del dispositivo local al archivo ~/.ssh/authorized_keys del nodo del clúster de HyperPod.

    1. Imprima el archivo de clave pública en su máquina local.

      $ cat ~/.ssh/id_rsa.pub

      Esto debería devolver la clave. Copie la salida de este comando.

      (Opcional) Si no dispone de una clave pública, cree una mediante el siguiente comando.

      $ ssh-keygen -t rsa -q -f "$HOME/.ssh/id_rsa" -N ""
    2. Conéctese al nodo del clúster y cambie al usuario para añadir la clave. El siguiente comando es un ejemplo de acceso como usuario ubuntu. Sustituya ubuntu por el nombre de usuario para el que desee configurar el acceso fácil con SSH.

      $ ./easy-ssh.sh -c <node-group> <cluster-name> $ sudo su - ubuntu ubuntu@ip-111-22-333-444:/usr/bin#
    3. Abra el archivo ~/.ssh/authorized_keys y añada la clave pública al final del archivo.

      ubuntu@ip-111-22-333-444:/usr/bin# vim ~/.ssh/authorized_keys

Una vez finalizada la configuración, puede conectarse al nodo del clúster de HyperPod como usuario ejecutando un comando SSH simplificado de la siguiente manera.

$ ssh <cluster-name> ubuntu@ip-111-22-333-444:/usr/bin#

Además, puede usar el host para el desarrollo remoto desde un IDE en su dispositivo local, como Visual Studio Code Remote - SSH.

Configuración de un entorno multiusuario a través del espacio compartido de Amazon FSx

Puede utilizar el espacio compartido de Amazon FSx para administrar un entorno multiusuario en un clúster de Slurm en SageMaker HyperPod. Si ha configurado el clúster de Slurm con Amazon FSx durante la creación del clúster de HyperPod, esta es una buena opción para configurar el espacio de trabajo para los usuarios del clúster. Cree un nuevo usuario y configure el directorio principal del usuario en el sistema de archivos compartidos de Amazon FSx.

sugerencia

Para permitir que los usuarios accedan al clúster con su nombre de usuario y sus directorios dedicados, debe asociarlos además a roles o usuarios de IAM etiquetándolos de la forma que se indica en la Opción 2 del paso 5 del procedimiento Activación del soporte Ejecutar como para nodos administrados de Linux y macOS que se incluye en Activación del soporte Ejecutar como para nodos administrados de Linux y macOS de la Guía del usuario de AWS Systems Manager. Véase también Configuración de AWS Systems Manager y Ejecutar como para el control de acceso de los usuarios del clúster.

Configuración de un entorno multiusuario al crear un clúster de Slurm en SageMaker HyperPod

El equipo del servicio de SageMaker HyperPod proporciona un script add_users.sh como parte de los ejemplos de scripts de ciclo de vida básicos.

  1. Prepare un archivo de texto con el nombre shared_users.txt que debe crear con el siguiente formato. La primera columna corresponde a los nombres de usuario, la segunda a los ID de usuario únicos y la tercera a los directorios de usuarios del espacio compartido de Amazon FSx.

    username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...
  2. Asegúrese de cargar los archivos shared_users.txt y add_users.sh en el bucket de S3 para los scripts de ciclo de vida de HyperPod. Mientras se está creando o actualizando el clúster, o durante la actualización del software del clúster, el add_users.sh lee en el shared_users.txt y configura los directorios de usuario correctamente.

Creación e incorporación de nuevos usuarios a un clúster de Slurm existente que se ejecute en SageMaker HyperPod

  1. En el nodo principal, ejecute el siguiente comando para guardar un script que ayude a crear un usuario. Asegúrese de ejecutarlo con permisos sudo.

    $ cat > create-user.sh << EOL #!/bin/bash set -x # Prompt user to get the new user name. read -p "Enter the new user name, i.e. 'sean': " USER # create home directory as /fsx/<user> # Create the new user on the head node sudo useradd \$USER -m -d /fsx/\$USER --shell /bin/bash; user_id=\$(id -u \$USER) # add user to docker group sudo usermod -aG docker \${USER} # setup SSH Keypair sudo -u \$USER ssh-keygen -t rsa -q -f "/fsx/\$USER/.ssh/id_rsa" -N "" sudo -u \$USER cat /fsx/\$USER/.ssh/id_rsa.pub | sudo -u \$USER tee /fsx/\$USER/.ssh/authorized_keys # add user to compute nodes read -p "Number of compute nodes in your cluster, i.e. 8: " NUM_NODES srun -N \$NUM_NODES sudo useradd -u \$user_id \$USER -d /fsx/\$USER --shell /bin/bash; # add them as a sudoer read -p "Do you want this user to be a sudoer? (y/N): " SUDO if [ "\$SUDO" = "y" ]; then sudo usermod -aG sudo \$USER sudo srun -N \$NUM_NODES sudo usermod -aG sudo \$USER echo -e "If you haven't already you'll need to run:\n\nsudo visudo /etc/sudoers\n\nChange the line:\n\n%sudo ALL=(ALL:ALL) ALL\n\nTo\n\n%sudo ALL=(ALL:ALL) NOPASSWD: ALL\n\nOn each node." fi EOL
  2. Ejecute el script con el siguiente comando. Se le pedirá que añada el nombre de un usuario y el número de nodos de computación a los que desea permitir que acceda el usuario.

    $ bash create-user.sh
  3. Pruebe el usuario ejecutando los siguientes comandos.

    $ sudo su - <user> && ssh $(srun hostname)
  4. Añada la información del usuario al archivo shared_users.txt para que el usuario se cree en todos los nodos de computación o clústeres nuevos.

Configure un entorno multiusuario integrando los clústeres de HyperPod con Active Directory

En casos de uso prácticos, los clústeres de HyperPod suelen ser utilizados por varios usuarios: investigadores de machine learning (ML), ingenieros de software, científicos de datos y administradores de clústeres. Cada uno de ellos edita sus propios archivos y ejecuta sus propios trabajos sin que ello afecte al trabajo de los demás. Para configurar un entorno multiusuario, utilice el mecanismo de usuarios y grupos de Linux para crear de forma estática varios usuarios en cada instancia mediante scripts de ciclo de vida. Sin embargo, el inconveniente de este enfoque es que es necesario duplicar la configuración de usuario y grupo en varias instancias del clúster para mantener una configuración uniforme en todas las instancias al realizar actualizaciones, como añadir, editar y eliminar usuarios.

Para solucionar este problema, puede utilizar el Protocolo ligero de acceso a directorios (LDAP) y el LDAP sobre TLS/SSL (LDAPS) para la integración con un servicio de directorio como AWS Directory Service para Microsoft Active Directory. Para obtener más información sobre cómo configurar Active Directory y un entorno multiusuario en un clúster de HyperPod, consulte la entrada del blog Integrate HyperPod clusters with Active Directory for seamless multi-user login.