Accedi ai repository privati utilizzando il decoratore @remote per i carichi di lavoro di formazione di Amazon SageMaker
Accedi ai repository privati con @remote in Amazon SageMaker per i carichi di lavoro di formazione.
Sempre più clienti cercano di mettere in produzione carichi di lavoro di apprendimento automatico (ML) e, per questo motivo, le organizzazioni stanno cercando di accorciare il ciclo di sviluppo del codice ML. Molte organizzazioni preferiscono scrivere il loro codice ML in uno stile pronto per la produzione, sotto forma di metodi e classi Python, piuttosto che in uno stile esplorativo (scrivendo codice senza l’utilizzo di metodi o classi) perché questo li aiuta a spedire il codice pronto per la produzione più velocemente.
Con Amazon SageMaker, puoi utilizzare l’annotazione @remote per eseguire un lavoro di formazione SageMaker semplicemente annotando il tuo codice Python con l’annotazione @remote. L’SDK Python di SageMaker tradurrà automaticamente il tuo ambiente di lavoro esistente e qualsiasi codice di elaborazione dei dati e set di dati associati in un lavoro di formazione SageMaker che viene eseguito sulla piattaforma di formazione SageMaker.
Eseguire una funzione Python in locale richiede spesso diverse dipendenze, che potrebbero non essere presenti nell’ambiente di runtime Python locale. Puoi installarle tramite strumenti di gestione dei pacchetti e delle dipendenze come pip o conda.
Tuttavia, le organizzazioni che operano in settori regolamentati come la banca, l’assicurazione e la sanità operano in ambienti che hanno rigorosi controlli sulla privacy dei dati e sulla rete. Questi controlli richiedono spesso che non ci sia accesso a Internet disponibile in nessuno dei loro ambienti. Il motivo di questa restrizione è avere il pieno controllo sul traffico in uscita e in ingresso in modo da poter ridurre le possibilità che attori senza scrupoli inviino o ricevano informazioni non verificate attraverso la loro rete. Spesso è anche obbligatorio avere tale isolamento di rete come parte delle regole di conformità e di audit industriali. Per quanto riguarda l’ML, ciò limita i data scientist dal scaricare pacchetti da repository pubblici come PyPI, Anaconda o Conda-Forge.
- L’agenzia delle Nazioni Unite assembla un gruppo di robot per suscitare una discussione sul futuro dell’IA
- Accedi ai repository privati utilizzando il decoratore @remote per i carichi di lavoro di training di Amazon SageMaker
- La divisione Sierra presenta tre progetti epici realizzati con NVIDIA Omniverse.
Per fornire ai data scientist l’accesso agli strumenti di loro scelta rispettando anche le restrizioni dell’ambiente, le organizzazioni spesso configurano il loro repository di pacchetti privato ospitato nel proprio ambiente. Puoi configurare repository di pacchetti privati su AWS in modi diversi:
- Utilizzando AWS CodeArtifact
- Utilizzando Amazon Simple Storage (Amazon S3)
- Ospitando un repository su Amazon Elastic Compute Cloud (Amazon EC2)
In questo post, ci concentriamo sulla prima opzione: l’utilizzo di CodeArtifact.
Panoramica della soluzione
Il diagramma di architettura seguente mostra l’architettura della soluzione.
I passi di alto livello per implementare la soluzione sono i seguenti:
- Configurare una virtual private cloud (VPC) senza accesso a Internet utilizzando un modello AWS CloudFormation.
- Utilizzare un secondo modello CloudFormation per configurare CodeArtifact come repository privato PyPI e fornire connettività alla VPC, e configurare un ambiente Amazon SageMaker Studio per utilizzare il repository privato PyPI.
- Allenare un modello di classificazione basato sul dataset MNIST utilizzando un annotazione @remote dall’SDK Python di SageMaker open-source. Tutte le dipendenze verranno scaricate dal repository privato PyPI.
Si noti che l’utilizzo di SageMaker Studio in questo post è opzionale. Puoi scegliere di lavorare in qualsiasi ambiente di sviluppo integrato (IDE) a tua scelta. Devi solo configurare correttamente le credenziali dell’interfaccia a riga di comando AWS (AWS CLI). Per ulteriori informazioni, consulta Configurare l’AWS CLI.
Prerequisiti
Hai bisogno di un account AWS con un ruolo di AWS Identity and Access Management (IAM) con le autorizzazioni per gestire le risorse create come parte della soluzione. Per i dettagli, consulta Creare un account AWS.
Configurare una VPC senza connessione a Internet
Crea uno stack CloudFormation nuovo utilizzando il modello vpc.yaml. Questo modello crea le seguenti risorse:
- Una VPC con due subnet private in due zone di disponibilità senza connessione a Internet
- Un endpoint VPC Gateway per accedere ad Amazon S3
- Endpoint VPC di interfaccia per SageMaker, CodeArtifact e alcuni altri servizi per consentire alle risorse nella VPC di connettersi ai servizi AWS tramite AWS PrivateLink
Fornisci un nome stack, ad esempio No-Internet
, e completa il processo di creazione dello stack.
Attendere il completamento del processo di creazione dello stack.
Configurare un repository privato e SageMaker Studio utilizzando la VPC
Il passaggio successivo consiste nel distribuire un altro stack di CloudFormation utilizzando il modello sagemaker_studio_codeartifact.yaml. Questo modello crea le seguenti risorse:
- Un dominio SageMaker collegato alla VPC creata nel passaggio precedente
- Un dominio CodeArtifact
- Un repository privato di CodeArtifact collegato a un repository pubblico PyPI a monte
Fornire un nome allo stack e mantenere i valori predefiniti o regolare i parametri per il nome del dominio CodeArtifact, nome del repository privato, nome del profilo utente per SageMaker Studio e nome per il repository pubblico PyPI a monte. Sarà anche necessario fornire il nome dello stack VPC creato nel passaggio precedente.
Una volta completata la creazione dello stack, il dominio SageMaker dovrebbe essere visibile nella console di SageMaker.
Per verificare che non sia disponibile una connessione internet in SageMaker Studio, avviare SageMaker Studio. Scegliere File
, Nuovo
e Terminale
per avviare un terminale e provare a eseguire il comando curl su una risorsa internet. Dovrebbe fallire la connessione, come mostrato nella seguente schermata.
Allenare un classificatore di immagini utilizzando un decoratore @remote con il repository privato PyPI
In questa sezione, utilizziamo il decoratore @remote per eseguire un lavoro di addestramento PyTorch che produce un modello di classificazione di immagini MNIST. Per farlo, configuriamo un file di configurazione, sviluppiamo lo script di addestramento ed eseguiamo il codice di addestramento.
Configurare un file di configurazione
Configuriamo un file config.yaml
e forniamo le configurazioni necessarie per fare quanto segue:
- Eseguire un lavoro di addestramento SageMaker nella VPC senza internet creata in precedenza
- Scaricare i pacchetti necessari connettendosi al repository privato PyPI creato in precedenza
Il file ha il seguente aspetto:
SchemaVersion: '1.0'
SageMaker:
PythonSDK:
Modules:
RemoteFunction:
Dependencies: '../config/requirements.txt'
InstanceType: 'ml.m5.xlarge'
PreExecutionCommands:
- 'aws codeartifact login --tool pip --domain <domain-name> --domain-owner <AWS account number> --repository <private repository name> --endpoint-url <VPC-endpoint-url-prefixed with https://>
RoleArn: '<execution role ARN for running training job>'
S3RootUri: '<s3 bucket to store the job output>'
VpcConfig:
SecurityGroupIds:
- '<security group id used by SageMaker Studio>'
Subnets:
- '<VPC subnet id 1>'
- '<VPC subnet id 2>'
Il campo Dependencies
contiene il percorso del file requirements.txt
, che contiene tutte le dipendenze necessarie. Notare che tutte le dipendenze verranno scaricate dal repository privato. Il file requirements.txt
contiene il seguente codice:
torch
torchvision
sagemaker>=2.156.0,<3
La sezione PreExecutionCommands
contiene il comando per connettersi al repository privato PyPI. Per ottenere l’URL del punto di accesso della VPC di CodeArtifact, utilizzare il seguente codice:
risposta = ec2.describe_vpc_endpoints(
Filters=[
{
'Name': 'service-name',
'Values': [
f'com.amazonaws.{boto3_session.region_name}.codeartifact.api'
]
},
]
)
code_artifact_api_vpc_endpoint = response['VpcEndpoints'][0]['DnsEntries'][0]['DnsName']
endpoint_url = f'https://{code_artifact_api_vpc_endpoint}'
endpoint_url
In generale, otteniamo due endpoint VPC per CodeArtifact e possiamo utilizzarne uno qualsiasi nei comandi di connessione. Per ulteriori dettagli, fare riferimento a “Utilizzare CodeArtifact da una VPC”.
Inoltre, configurazioni come execution role
, output location
e configurazioni VPC
vengono fornite nel file di configurazione. Queste configurazioni sono necessarie per eseguire il job di addestramento SageMaker. Per conoscere tutte le configurazioni supportate, fare riferimento al file di configurazione.
Non è obbligatorio utilizzare il file config.yaml
per lavorare con il decoratore @remote. Questo è solo un modo più pulito per fornire tutte le configurazioni al decoratore @remote. Tutte le configurazioni potrebbero anche essere fornite direttamente negli argomenti del decoratore, ma ciò riduce la leggibilità e la manutenibilità delle modifiche a lungo termine. Inoltre, il file di configurazione può essere creato da un amministratore e condiviso con tutti gli utenti in un ambiente.
Sviluppare lo script di addestramento
Successivamente, prepariamo il codice di addestramento in semplici file Python. Abbiamo diviso il codice in tre file:
- load_data.py – Contiene il codice per scaricare il dataset MNIST
- model.py – Contiene il codice per l’architettura della rete neurale del modello
- train.py – Contiene il codice per addestrare il modello utilizzando load_data.py e model.py
In train.py
, è necessario decorare la funzione di addestramento principale nel seguente modo:
@remote(include_local_workdir=True)
def perform_train(train_data,
test_data,
*,
batch_size: int = 64,
test_batch_size: int = 1000,
epochs: int = 3,
lr: float = 1.0,
gamma: float = 0.7,
no_cuda: bool = True,
no_mps: bool = True,
dry_run: bool = False,
seed: int = 1,
log_interval: int = 10,
):
# codice di addestramento nativo pytorch........
Ora siamo pronti per eseguire il codice di addestramento.
Eseguire il codice di addestramento con un decoratore @remote
Possiamo eseguire il codice da un terminale o da qualsiasi prompt eseguibile. In questo post, utilizziamo una cella del notebook di SageMaker Studio per dimostrarlo:
!python ./train.py
L’esecuzione del comando precedente avvia il job di addestramento. Nei log, possiamo vedere che sta scaricando i pacchetti dal repository privato PyPI.
Questo conclude l’implementazione di un decoratore @remote che funziona con un repository privato in un ambiente senza accesso a Internet.
Pulizia
Per pulire le risorse, seguire le istruzioni in CLEANUP.md.
Conclusione
In questo post, abbiamo imparato come utilizzare efficacemente le capacità del decoratore @remote mentre si lavora in ambienti restrittivi senza alcun accesso a Internet. Abbiamo anche imparato come integrare le capacità del repository privato CodeArtifact con l’aiuto del supporto del file di configurazione in SageMaker. Questa soluzione semplifica e velocizza lo sviluppo iterativo. Un altro vantaggio aggiunto è che è possibile continuare a scrivere il codice di addestramento in modo più naturale e orientato agli oggetti e utilizzare comunque le capacità di SageMaker per eseguire job di addestramento su un cluster remoto con modifiche minime al codice. Tutto il codice mostrato in questo post è disponibile nel repository GitHub.
Come prossimo passo, ti incoraggiamo a esplorare la funzionalità del decoratore @remote e l’API del SDK Python e a utilizzarli nel tuo ambiente e IDE preferiti. Sono disponibili altri esempi nel repository amazon-sagemaker-examples per iniziare rapidamente. Puoi anche consultare il post Esegui il tuo codice di machine learning locale come job di addestramento Amazon SageMaker con modifiche minime al codice per ulteriori dettagli.