Addestramento con un account di servizio personalizzato

Puoi configurare AI Platform Training in modo da utilizzare un account di servizio a tua scelta quando esegui la tua applicazione di addestramento. L'uso di un account di servizio personalizzato ti consente di personalizzare le risorse Google Cloud a cui può accedere il tuo codice di addestramento senza concedere autorizzazioni troppo ampie all'account di servizio utilizzato per impostazione predefinita da AI Platform Training. Inoltre, puoi utilizzare un account di servizio personalizzato per concedere al tuo codice l'accesso a servizi Google Cloud aggiuntivi come Secret Manager.

La guida è incentrata sulle autorizzazioni delle risorse di AI Platform Training per accedere ad altre risorse Google Cloud. Per conoscere le autorizzazioni necessarie per accedere alle risorse di AI Platform Training, consulta Controllo dell'accesso.

Informazioni sull'account di servizio gestito da Google

Per impostazione predefinita, AI Platform Training utilizza un account di servizio gestito da Google per eseguire i job di addestramento. Questo account di servizio è identificato da un indirizzo email con il seguente formato:

service-PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com

PROJECT_NUMBER viene sostituito dal numero di progetto del progetto Google Cloud.

Trova l'account di servizio corrispondente per il tuo progetto nella console Google Cloud o utilizzando Google Cloud CLI:

Console Google Cloud

Vai alla pagina IAM nella console Google Cloud, seleziona Includi concessioni di ruoli fornite da Google e trova l'entità che corrisponde al formato dell'indirizzo email descritto in precedenza in questa sezione. L'account di servizio ha anche il nome Google Cloud ML Engine Service Agent.

Vai alla pagina IAM

gcloud

Esegui questo comando in un ambiente Shell in cui hai inizializzato gcloud CLI:

gcloud projects get-iam-policy PROJECT_ID \
  --flatten="bindings[].members" \
  --format="table(bindings.members)" \
  --filter="bindings.role:roles/ml.serviceAgent" \
  | grep serviceAccount:

Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.

Questo comando restituisce quanto segue:

serviceAccount:GOOGLE_MANAGED_SERVICE_ACCOUNT

GOOGLE_MANAGED_SERVICE_ACCOUNT è l'indirizzo email dell'account di servizio AI Platform gestito da Google del tuo progetto.

Questo account di servizio gestito da Google dispone di autorizzazioni appropriate per la maggior parte dei job di addestramento. Ad esempio, può leggere e scrivere nei bucket Cloud Storage nello stesso progetto Google Cloud.

Se vuoi che le tue applicazioni di addestramento vengano eseguite con autorizzazioni aggiuntive, puoi assegnare altri ruoli IAM (Identity and Access Management) a questo account di servizio. Ad esempio, puoi concedere al team l'accesso ai bucket Cloud Storage in altri progetti Google Cloud.

Utilizzo di un account di servizio personalizzato

Se vuoi concedere o limitare le autorizzazioni di Google Cloud per un job di addestramento specifico, utilizza un account di servizio personalizzato al posto dell'account di servizio gestito da Google.

Per farlo, configura innanzitutto un account di servizio personalizzato. Quindi specifica l'account di servizio personalizzato quando crei un job di addestramento.

Configura un account di servizio personalizzato

Per configurare un account di servizio personalizzato:

  1. Crea un account di servizio gestito dall'utente.

  2. Concedi i ruoli IAM al tuo nuovo account di servizio per fornire all'applicazione di addestramento le autorizzazioni di cui ha bisogno durante l'esecuzione.

  3. Se l'account di servizio gestito dall'utente si trova in un progetto diverso dai job di addestramento, configura l'account di servizio gestito dall'utente in modo da poterlo collegare ai job di addestramento.

Specifica l'account di servizio personalizzato per il job di addestramento

Per configurare AI Platform Training in modo che utilizzi il tuo account di servizio personalizzato quando esegue l'applicazione di addestramento, specifica il campo trainingInput.serviceAccount quando crei un job di addestramento.

Se utilizzi gcloud CLI per creare un job di addestramento, devi utilizzare un file config.yaml per specificare questo campo. Ad esempio:

trainingInput:
  serviceAccount: CUSTOM_SERVICE_ACCOUNT

Sostituisci CUSTOM_SERVICE_ACCOUNT con l'indirizzo email dell'account di servizio gestito dall'utente che hai configurato in una sezione precedente di questa guida.

Accesso ai servizi Google Cloud dal codice di addestramento

Nel codice di addestramento, se vuoi accedere ad altri servizi Google Cloud dal job di addestramento, utilizza Credenziali predefinite dell'applicazione (ADC). Molte librerie client di Google Cloud si autenticano con ADC per impostazione predefinita. Non è necessario configurare alcuna variabile di ambiente; AI Platform Training configura automaticamente ADC in modo che esegua l'autenticazione come account di servizio personalizzato specificato nel passaggio precedente.

Tuttavia, quando utilizzi una libreria client di Google Cloud nel codice di addestramento, questa potrebbe non connettersi al progetto Google Cloud corretto per impostazione predefinita. Se i log di addestramento segnalano errori di autorizzazione, questo potrebbe essere il problema. Quando crei un job di addestramento, AI Platform Training non esegue il codice di addestramento direttamente nel progetto Google Cloud, ma AI Platform Training esegue il codice in un progetto separato gestito da Google. AI Platform Training usa questo progetto esclusivamente per le operazioni correlate al progetto. Pertanto, non provare a dedurre un ID progetto dall'ambiente nel tuo codice di addestramento; specifica gli ID progetto in modo esplicito.

Se non vuoi impostare come hardcoded un ID progetto nel codice di addestramento, puoi fare riferimento alla variabile di ambiente CLOUD_ML_PROJECT_ID. AI Platform Training imposta questa variabile di ambiente in ogni container di addestramento in modo che contenga il numero di progetto del progetto in cui hai avviato l'addestramento personalizzato. Molti strumenti Google Cloud possono accettare un numero di progetto ovunque prendano un ID progetto.

Ad esempio, valuta l'esecuzione di un job di addestramento in un progetto Google Cloud con ID PROJECT_ID. Se vuoi utilizzare il client Python per Google BigQuery per accedere a una tabella BigQuery nello stesso progetto, non provare a dedurre il progetto nel codice di addestramento:

Selezione implicita del progetto

from google.cloud import bigquery

client = bigquery.Client()

Utilizza invece codice che seleziona esplicitamente un progetto:

Selezione esplicita del progetto

from google.cloud import bigquery

project_number = os.environ["CLOUD_ML_PROJECT_ID"]

client = bigquery.Client(project=project_number)

Passaggi successivi