Comment utiliser le mode local du SDK Python Amazon SageMaker avec SageMaker Studio ?

Lecture de 6 minute(s)
0

Je souhaite utiliser le mode local du SDK Python Amazon SageMaker avec SageMaker Studio.

Brève description

Installez l'interface de la ligne de commande Docker de SageMaker Studio et (en option) les extensions de l'interface utilisateur Docker de SageMaker Studio pour ajouter le mode local et les fonctionnalités Docker à SageMaker Studio.

Solution

Prérequis

Avant de commencer, assurez-vous d'effectuer les étapes suivantes :

  • La configuration de votre domaine SageMaker Studio est en mode VpcOnly (notez que le mode PublicInternetOnly n'est pas pris en charge).
  • Votre domaine est connecté à Amazon VPC avec le nom d'hôte DNS et les options de résolution DNS activées.
  • Votre rôle d'exécution du profil utilisateur de SageMaker Studio dispose des autorisations suivantes :
sagemaker:DescribeDomain
sagemaker:DescribeUserProfile
sagemaker:ListTags
elasticfilesystem:DescribeMountTargets
elasticfilesystem:DescribeMountTargetSecurityGroups
elasticfilesystem:ModifyMountTargetSecurityGroups
ec2:RunInstances
ec2:TerminateInstances
ec2:DescribeInstances
ec2:DescribeInstanceTypes
ec2:DescribeImages
ec2:DescribeSecurityGroups
ec2:DescribeNetworkInterfaces
ec2:DescribeNetworkInterfaceAttribute
ec2:CreateSecurityGroup
ec2:AuthorizeSecurityGroupIngress
ec2:ModifyNetworkInterfaceAttribute
ec2:CreateTags
  • Vous avez installé l'extension de l'interface de ligne de commande (CLI) Docker. (Notez que Docker CLI est requise pour utiliser l'extension de l'interface utilisateur.)
  • Vous avez installé Docker Compose.
  • Vous avez installé PpYAML, 5.4.1.

Créer des scripts de configuration du cycle de vie de SageMaker Studio

1.    Créez un script de configuration de cycle de vie Studio pour l'application JupyterServer afin d'installer les extensions de l'une des deux manières suivantes :

Installez à la fois les extensions CLI et UI

#!/bin/bash

set -ex
cd ~
if cd sagemaker-studio-docker-cli-extension
then
  git reset --hard
  git pull
else
  git clone https://github.com/aws-samples/sagemaker-studio-docker-cli-extension.git
  cd sagemaker-studio-docker-cli-extension
fi
nohup ./setup.sh > docker_setup.out 2>&1 &
if cd ~/sagemaker-studio-docker-ui-extension
then
  git reset --hard
  git pull
  cd
else
  cd
  git clone https://github.com/aws-samples/sagemaker-studio-docker-ui-extension.git
fi

nohup ~/sagemaker-studio-docker-ui-extension/setup.sh > docker_setup.out 2>&1 &

Installez uniquement l'extension CLI

#!/bin/bash

set -ex
cd ~
if cd sagemaker-studio-docker-cli-extension
then
 git reset --hard
 git pull
else
 git clone https://github.com/aws-samples/sagemaker-studio-docker-cli-extension.git
 cd sagemaker-studio-docker-cli-extension
fi
nohup ./setup.sh > docker_setup.out 2>&1 &

2.    Créez un script de configuration de cycle de vie de SageMaker Studio pour l'application KernelGateway :

#!/bin/bash

set -eux
STATUS=$(python3 -c "import sagemaker_dataprep";echo $?)
if [ "$STATUS" -eq 0 ]
then
 echo 'Instance is of Type Data Wrangler'
else
 echo 'Instance is not of Type Data Wrangler'
 cd ~
 if cd sagemaker-studio-docker-cli-extension
 then
  git reset --hard
  git pull
 else
  git clone https://github.com/aws-samples/sagemaker-studio-docker-cli-extension.git
  cd sagemaker-studio-docker-cli-extension
 fi
 nohup ./setup.sh > docker_setup.out 2>&1 &
fi

3.    Depuis un terminal, encodez le contenu des deux scripts à l'aide du codage base64 :

$ LCC_JS_CONTENT=`openssl base64 -A -in <LifeCycle script file for JupyterServer>`
$ LCC_KG_CONTENT=`openssl base64 -A -in <LifeCycle script file for KernelGateway>`

4.    Créez des configurations de cycle de vie Studio à partir des variables d'environnement LCC_JS_CONTENT et LCC_KG_CONTENT à l'aide des commandes de l'interface de la ligne de commande (CLI) AWS suivantes :

$ aws sagemaker create-studio-lifecycle-config --studio-lifecycle-config-name sdocker-js --studio-lifecycle-config-content $LCC_JS_CONTENT --studio-lifecycle-config-app-type JupyterServer
$ aws sagemaker create-studio-lifecycle-config --studio-lifecycle-config-name sdocker-kg --studio-lifecycle-config-content $LCC_KG_CONTENT --studio-lifecycle-config-app-type KernelGateway

Remarque : si vous rencontrez des erreurs lors de l'exécution des commandes de l'interface de ligne de commande, vérifiez que vous utilisez la version la plus récente de l'interface de la ligne de commande AWS. Consultez la section Résolution des erreurs d'AWS CLI – Interface de la ligne de commande AWS.

Mettre à jour le domaine Studio (facultatif)

Mettez à jour le domaine Studio pour ajouter LCC aux paramètres utilisateur par défaut :

$ aws sagemaker update-domain --domain-id <domain-id> --default-user-settings '{"JupyterServerAppSettings": {"DefaultResourceSpec": {"InstanceType": "system", "LifecycleConfigArn": "arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-js"}}, "KernelGatewayAppSettings": {"DefaultResourceSpec": {"InstanceType": "<default instance type>", "LifecycleConfigArn": "arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-kg"}}}'

Mettre à jour le profil utilisateur de Studio

Mettez à jour les paramètres de votre profil utilisateur Studio comme suit :

$ aws sagemaker update-user-profile --domain-id <domain-id> --user-profile-name <user profile> --user-settings '{"JupyterServerAppSettings ": {"DefaultResourceSpec": {"InstanceType": "system", "LifecycleConfigArn": "arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-js"}, "LifecycleConfigArns": ["arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-js"]}, "KernelGatewayAppSettings": {"DefaultResourceSpec": {"InstanceType": "<default instance type>", "LifecycleConfigArn": "arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-kg"}, "LifecycleConfigArns": ["arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-kg"]}}'

Lancez la nouvelle application JuypterServer

Supprimez toute instance en cours d'exécution de l'application JupyterServer pour terminer la configuration. Lancez ensuite la nouvelle application JupyterServer. Une fois terminé, la nouvelle application affiche un statut InService.

Si vous utilisez l'extension d'interface utilisateur, attendez qu'elle soit installée. Cela prend environ 10 minutes après le lancement de la nouvelle application JupyterServer. Une fois terminé, actualisez votre navigateur pour voir l'extension.

(Facultatif) Certains noyaux Studio sont fournis avec PyYAML>=6.0 et ne contiennent pas de packages Python pgrep ou procps. Le mode local nécessite PyYAML==5.4.1 car les versions supérieures ne disposent pas de cette fonctionnalité. Vous avez également besoin de pgrep pour supprimer un point de terminaison local. Si nécessaire, utilisez les commandes suivantes pour installer ces éléments requis à partir de votre bloc-notes Studio. Redémarrez votre noyau à la fin de l'installation.

!conda update --force -y conda
!conda install -y pyyaml==5.4.1
!apt-get install -y procps

Créer un hôte Docker

Maintenant, créez un hôte Docker à l'aide de l'extension CLI que vous avez installée précédemment. Utilisez n'importe quel type d'instance Amazon Elastic Compute Cloud (EC2) (par exemple c5.xlarge) comme suit :

!sdocker create-host --instance-type c5.xlarge

Le résultat doit ressembler à ce qui suit :

Successfully launched DockerHost on instance i-xxxxxxxxxxxxxxxxx with private DNS ip-xxx-xxx-xxx-xxx.ec2.internal
Waiting on docker host to be ready
Docker host is ready!
ip-xxx-xxx-xxx-xxx.ec2.internal
Successfully created context "ip-xxx-xxx-xxx-xxx.ec2.internal "
ip-xxx-xxx-xxx-xxx.ec2.internal
Current context is now "ip-xxx-xxx-xxx-xxx.ec2.internal "

Si vous avez installé l'extension d'interface utilisateur, sélectionnez le type d'instance dans l'interface utilisateur, puis cliquez sur le bouton Start Host (Démarrer l'hôte). Le nouvel hôte apparaît dans la liste des Docker Hosts (Hôtes Docker), à côté d'un cercle vert.

Exécuter en mode local

Utilisez le SDK Python SageMaker en mode local.

Important : pour éviter des frais supplémentaires, fermez tous les hôtes Docker que vous avez lancés après avoir terminé avec le mode local et qui n'ont plus besoin d'utiliser Docker. Pour fermer un hôte Docker à l'aide de l'extension CLI, saisissez :

!sdocker terminate-current-host

Ou, dans l'extension de l'interface utilisateur, sous Docker Hosts (Hôtes Docker), cliquez sur l'icône Alimentation à côté de chaque hôte Docker. Cette action arrête l'hôte Docker et le supprime de la liste des Docker Hosts (Hôtes Docker).

Remarque : pour en savoir plus sur l'utilisation de l'extension CLI, consultez la section Extension CLI de Docker de SageMaker – Intégration Docker pour SageMaker Studio sur le site web GitHub.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an