Usa AWS CDK per distribuire le configurazioni del ciclo di vita di Amazon SageMaker Studio.

Usa AWS CDK per distribuire le configurazioni di Amazon SageMaker Studio.

Amazon SageMaker Studio è il primo ambiente di sviluppo integrato (IDE) completamente dedicato all’apprendimento automatico (ML). Studio fornisce un’interfaccia visiva singola basata sul web dove è possibile eseguire tutti i passaggi di sviluppo ML richiesti per preparare i dati, nonché costruire, addestrare e distribuire modelli. Le configurazioni del ciclo di vita sono script shell attivati dagli eventi del ciclo di vita di Studio, come l’avvio di un nuovo notebook di Studio. È possibile utilizzare le configurazioni del ciclo di vita per automatizzare la personalizzazione dell’ambiente di Studio. Questa personalizzazione include l’installazione di pacchetti personalizzati, la configurazione di estensioni di notebook, il precaricamento di set di dati e la configurazione di repository di codice sorgente. Ad esempio, come amministratore per un dominio di Studio, è possibile voler risparmiare sui costi facendo sì che le app del notebook vengano chiuse automaticamente dopo lunghi periodi di inattività .

L’ AWS Cloud Development Kit (AWS CDK) è un framework per la definizione dell’infrastruttura cloud attraverso il codice e la sua fornitura tramite stack di AWS CloudFormation. Uno stack è una raccolta di risorse AWS che possono essere aggiornate, spostate o eliminate in modo programmato. I costrutti AWS CDK sono i mattoni di base delle applicazioni AWS CDK, rappresentando la base per definire le architetture cloud.

In questo post, mostriamo come utilizzare l’AWS CDK per impostare Studio, utilizzare le configurazioni del ciclo di vita di Studio e abilitare l’accesso per scienziati dei dati e sviluppatori nella tua organizzazione.

Panoramica della soluzione

La modularità delle configurazioni del ciclo di vita consente di applicarle a tutti gli utenti di un dominio o a utenti specifici. In questo modo, è possibile impostare le configurazioni del ciclo di vita e fare riferimento ad esse nel gateway del kernel di Studio o nel server Jupyter in modo rapido e coerente. Il gateway del kernel è il punto di ingresso per interagire con un’istanza di notebook, mentre il server Jupyter rappresenta l’istanza di Studio. Ciò consente di applicare le migliori pratiche DevOps e soddisfare gli standard di sicurezza, conformità e configurazione in tutti gli account e le regioni AWS. Per questo post, utilizziamo Python come linguaggio principale, ma il codice può essere facilmente modificato in altre lingue supportate da AWS CDK. Per ulteriori informazioni, fare riferimento a Working with the AWS CDK .

Prerequisiti

Per iniziare, assicurati di avere i seguenti prerequisiti:

  • L’interfaccia della riga di comando di AWS (AWS CLI) installata.
  • L’AWS CDK installato. Per maggiori informazioni, fare riferimento a Getting started with the AWS CDK e Working with the AWS CDK in Python .
  • Un profilo AWS con le autorizzazioni per creare ruoli IAM di AWS Identity and Access Management (IAM), domini di Studio e profili utente di Studio.
  • Python 3+.

Clona il repository GitHub

Per prima cosa, clona il repository GitHub .

Mentre cloni il repository, puoi osservare che abbiamo un progetto AWS CDK classico con la directory studio-lifecycle-config-construct , che contiene il costrutto e le risorse necessarie per creare le configurazioni del ciclo di vita.

Costrutti AWS CDK

Il file che vogliamo ispezionare è aws_sagemaker_lifecycle.py . Questo file contiene il costrutto SageMakerStudioLifeCycleConfig che utilizziamo per impostare e creare le configurazioni del ciclo di vita.

Il costrutto SageMakerStudioLifeCycleConfig fornisce la struttura per la creazione di configurazioni del ciclo di vita utilizzando una funzione AWS Lambda personalizzata e codice shell letto da un file. Il costrutto contiene i seguenti parametri:

  • ID – Il nome del progetto corrente.
  • studio_lifecycle_content – Il contenuto codificato in base64.
  • studio_lifecycle_tags – Etichette che assegni per organizzare le risorse di Amazon. Sono inseriti come coppie chiave-valore e sono facoltativi per questa configurazione.
  • studio_lifecycle_config_app_typeJupyterServer è per il server stesso, mentre l’app KernelGateway corrisponde a un contenitore di immagini SageMaker in esecuzione.

Per ulteriori informazioni sull’architettura del notebook di Studio, fare riferimento a Dive deep into Amazon SageMaker Studio Notebooks architecture .

Di seguito è riportato un frammento di codice del costrutto di configurazione del ciclo di vita di Studio ( aws_sagemaker_lifecycle.py ):

class SageMakerStudioLifeCycleConfig(Construct):
 def __init__(
 self,
 scope: Construct,
 id: str,
 studio_lifecycle_config_content: str,
 studio_lifecycle_config_app_type: str,
 studio_lifecycle_config_name: str,
 studio_lifecycle_config_arn: str,
 **kwargs,
 ):
 super().__init__(scope, id)
 self.studio_lifecycle_content = studio_lifecycle_content
 self.studio_lifecycle_config_name = studio_lifecycle_config_name
 self.studio_lifecycle_config_app_type = studio_lifecycle_config_app_type

 lifecycle_config_role = iam.Role(
 self,
 "SmStudioLifeCycleConfigRole",
 assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
 )

 lifecycle_config_role.add_to_policy(
 iam.PolicyStatement(
 resources=[f"arn:aws:sagemaker:{scope.region}:{scope.account}:*"],
 actions=[
 "sagemaker:CreateStudioLifecycleConfig",
 "sagemaker:ListUserProfiles",
 "sagemaker:UpdateUserProfile",
 "sagemaker:DeleteStudioLifecycleConfig",
 "sagemaker:AddTags",
 ],
 )
 )

 create_lifecycle_script_lambda = lambda_.Function(
 self,
 "CreateLifeCycleConfigLambda",
 runtime=lambda_.Runtime.PYTHON_3_8,
 timeout=Duration.minutes(3),
 code=lambda_.Code.from_asset(
 "../mlsl-cdk-constructs-lib/src/studiolifecycleconfigconstruct"
 ),
 handler="onEvent.handler",
 role=lifecycle_config_role,
 environment={
 "studio_lifecycle_content": self.studio_lifecycle_content,
 "studio_lifecycle_config_name": self.studio_lifecycle_config_name,
 "studio_lifecycle_config_app_type": self.studio_lifecycle_config_app_type,
 },
 )

 config_custom_resource_provider = custom_resources.Provider(
 self,
 "ConfigCustomResourceProvider",
 on_event_handler=create_lifecycle_script_lambda,
 )

 studio_lifecyle_config_custom_resource = CustomResource(
 self,
 "LifeCycleCustomResource",
 service_token=config_custom_resource_provider.service_token,
 )
 self. studio_lifecycle_config_arn = studio_lifecycle_config_custom_resource.get_att("StudioLifecycleConfigArn")

Dopo aver importato e installato il costrutto, è possibile utilizzarlo. Il seguente codice mostra come creare una configurazione del ciclo di vita utilizzando il costrutto in uno stack, sia in app.py o in un altro costrutto:

my_studio_lifecycle_config = SageMakerStudioLifeCycleConfig(
 self,
 "MLSLBlogPost",
 studio_lifecycle_config_content="contenuto_base64",
 studio_lifecycle_config_name="BlogPostTest",
 studio_lifecycle_config_app_type="JupyterServer",
 
 )

Deploy dei costrutti AWS CDK

Per distribuire lo stack AWS CDK, eseguire i seguenti comandi nella posizione in cui si è clonato il repository.

Il comando potrebbe essere python invece di python3 a seconda delle configurazioni del percorso.

  1. Crea un ambiente virtuale:

    1. Per macOS/Linux, utilizzare python3 -m venv .cdk-venv.
    2. Per Windows, utilizzare python3 -m venv .cdk-venv.
  2. Attiva l’ambiente virtuale:

    1. Per macOS/Linux, utilizzare source .cdk-venv\bin\activate.
    2. Per Windows, utilizzare .cdk-venv/Scripts/activate.bat.
    3. Per PowerShell, utilizzare .cdk-venv/Scripts/activate.ps1.
  3. Installa le dipendenze necessarie:

    1. pip install -r requirements.txt
    2. pip install -r requirements-dev.txt
  4. A questo punto, è possibile sintetizzare facoltativamente il modello CloudFormation per questo codice:

    cdk synth
  5. Implementa la soluzione con i seguenti comandi:

    1. aws configure
    2. cdk bootstrap
    3. cdk deploy

Quando lo stack viene distribuito con successo, sarà possibile visualizzare lo stack sulla console CloudFormation.

Sarà inoltre possibile visualizzare la configurazione del ciclo di vita sulla console SageMaker.

Scegliere la configurazione del ciclo di vita per visualizzare il codice shell che viene eseguito e qualsiasi tag assegnato.

Allega la configurazione del ciclo di vita dello Studio

Ci sono diversi modi per allegare una configurazione del ciclo di vita. In questa sezione, presentiamo due metodi: utilizzando la Console di gestione AWS e utilizzando programmabilmente l’infrastruttura fornita.

Allega la configurazione del ciclo di vita utilizzando la console

Per utilizzare la console, completare i seguenti passaggi:

  1. Nella console SageMaker, scegliere Domini nel riquadro di navigazione.
  2. Scegliere il nome del dominio che si sta utilizzando e il profilo utente corrente, quindi scegliere Modifica.
  3. Selezionare la configurazione del ciclo di vita da utilizzare e scegliere Allega.

Da qui, è anche possibile impostarla come predefinita.

Collegare la configurazione del ciclo di vita tramite programmazione

È anche possibile recuperare l’ARN della configurazione del ciclo di vita di Studio creata dal costrutto e allegarla al costrutto di Studio tramite programmazione. Il seguente codice mostra l’ARN della configurazione del ciclo di vita passato a un costrutto di Studio:

default_user_settings=sagemaker.CfnDomain.UserSettingsProperty(
                execution_role=self.sagemaker_role.role_arn,
                jupyter_server_app_settings=sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="system",
                        lifecycle_config_arn = my_studio_lifecycle_config.studio_lifeycycle_config_arn

                    )
                )

Pulizia

Completare i passaggi in questa sezione per pulire le risorse.

Eliminare la configurazione del ciclo di vita di Studio

Per eliminare la configurazione del ciclo di vita, completare i seguenti passaggi:

  1. Nella console di SageMaker, scegliere Configurazioni del ciclo di vita di Studio nel riquadro di navigazione.
  2. Selezionare la configurazione del ciclo di vita, quindi scegliere Elimina.

Eliminare lo stack AWS CDK

Quando si ha finito con le risorse create, è possibile distruggere lo stack AWS CDK eseguendo il seguente comando nella posizione in cui è stato clonato il repository:

cdk destroy

Quando viene chiesto di confermare l’eliminazione dello stack, inserire yes.

È anche possibile eliminare lo stack sulla console di AWS CloudFormation con i seguenti passaggi:

  1. Nella console di AWS CloudFormation, scegliere Stack nel riquadro di navigazione.
  2. Scegliere lo stack che si desidera eliminare.
  3. Nella finestra dei dettagli dello stack, scegliere Elimina.
  4. Scegliere Elimina stack quando richiesto.

Se si verificano errori, potrebbe essere necessario eliminare manualmente alcune risorse a seconda della configurazione dell’account.

Conclusioni

In questo post, abbiamo discusso come Studio funge da IDE per i carichi di lavoro di ML. Studio offre il supporto per la configurazione del ciclo di vita, che consente di configurare script shell personalizzati per eseguire attività automatizzate o configurare ambienti di sviluppo al lancio. Abbiamo utilizzato i costrutti AWS CDK per creare l’infrastruttura per la risorsa personalizzata e la configurazione del ciclo di vita. I costrutti sono sintetizzati in stack CloudFormation che vengono quindi distribuiti per creare la risorsa personalizzata e lo script del ciclo di vita utilizzato in Studio e nel kernel del notebook.

Per ulteriori informazioni, visitare Amazon SageMaker Studio.