Entraînement avec un compte de service personnalisé

Vous pouvez configurer AI Platform Training de sorte qu'il utilise le compte de service de votre choix lorsqu'il exécute votre application d'entraînement. L'utilisation d'un compte de service personnalisé vous permet de personnaliser les ressources Google Cloud auxquelles votre code d'entraînement peut accéder sans accorder d'autorisations trop étendues au compte de service utilisé par défaut par AI Platform Training. De plus, vous pouvez utiliser un compte de service personnalisé pour accorder l'accès de votre code à d'autres services Google Cloud tels que Secret Manager.

Ce guide se concentre sur les autorisations des ressources AI Platform Training pour accéder à d'autres ressources Google Cloud. Pour en savoir plus sur les autorisations nécessaires pour accéder directement aux ressources AI Platform Training, consultez la page Contrôle des accès.

Comprendre le fonctionnement du compte de service géré par Google

Par défaut, AI Platform Training utilise un compte de service géré par Google pour exécuter des tâches d'entraînement. Ce compte de service est identifié par une adresse e-mail au format suivant :

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

PROJECT_NUMBER est remplacé par le numéro de projet correspondant à votre projet Google Cloud.

Recherchez le compte de service correspondant à votre projet dans Google Cloud Console ou à l'aide de l'outil de ligne de commande gcloud :

Cloud Console

Accédez à la page IAM de Cloud Console et recherchez le membre correspondant au format d'adresse e-mail décrit précédemment dans cette section. Le compte de service porte également le nom Google Cloud ML Engine Service Agent.

Accéder à la page IAM

gcloud

Exécutez la commande suivante dans un environnement Shell dans lequel vous avez initialisé l'outil gcloud :

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

Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

Cette commande génère les éléments suivants :

serviceAccount:GOOGLE_MANAGED_SERVICE_ACCOUNT

GOOGLE_MANAGED_SERVICE_ACCOUNT est l'adresse e-mail du compte de service AI Platform géré par Google de votre projet.

Ce compte de service géré par Google dispose d'autorisations appropriées pour la plupart des tâches d'entraînement. Par exemple, il peut lire et écrire dans des buckets Cloud Storage situés dans le même projet Google Cloud.

Si vous souhaitez que vos applications d'entraînement s'exécutent avec des autorisations supplémentaires, vous pouvez attribuer des rôles IAM supplémentaires à ce compte de service. Par exemple, vous pouvez l'autoriser à accéder aux buckets Cloud Storage d'autres projets Google Cloud.

Utiliser un compte de service personnalisé

Si vous souhaitez accorder ou limiter des autorisations Google Cloud pour une tâche d'entraînement spécifique, utilisez un compte de service personnalisé au lieu du compte de service géré par Google.

Pour ce faire, commencez par configurer un compte de service personnalisé. Ensuite, spécifiez le compte de service personnalisé lorsque vous créez une tâche d'entraînement.

Configurer un compte de service personnalisé

Pour configurer un compte de service personnalisé, procédez comme suit :

  1. Créez un compte de service géré par l'utilisateur.

  2. Attribuez des rôles IAM à votre nouveau compte de service afin de fournir à votre application d'entraînement toutes les autorisations nécessaires à son exécution.

  1. Attribuez au compte de service AI Platform géré par Google de votre projet le rôle "Administrateur de compte de service" (roles/iam.serviceAccountAdmin) pour votre nouveau compte de service personnalisé. Pour ce faire, utilisez l'outil gcloud afin d'exécuter la commande suivante :

    gcloud iam service-accounts add-iam-policy-binding \
      --role=roles/iam.serviceAccountAdmin \
      --member=serviceAccount:GOOGLE_MANAGED_SERVICE_ACCOUNT \
      CUSTOM_SERVICE_ACCOUNT
    

    Dans cette commande, remplacez les espaces réservés suivants :

Spécifier le compte de service personnalisé pour votre tâche d'entraînement

Pour configurer AI Platform Training de sorte à utiliser votre compte de service personnalisé lors de l'exécution de votre application d'entraînement, spécifiez le champ trainingInput.serviceAccount lorsque vous créez une tâche d'entraînement.

Si vous utilisez l'outil gcloud pour créer une tâche d'entraînement, vous devez utiliser un fichier config.yaml pour spécifier ce champ. Exemple :

trainingInput:
  serviceAccount: CUSTOM_SERVICE_ACCOUNT

Remplacez CUSTOM_SERVICE_ACCOUNT par l'adresse e-mail du compte de service géré par l'utilisateur que vous avez configuré dans une section précédente de ce guide.

Accéder aux services Google Cloud à partir du code d'entraînement

Dans votre code d'entraînement, si vous souhaitez accéder à d'autres services Google Cloud à partir de votre tâche d'entraînement, utilisez les identifiants par défaut de l'application. De nombreuses bibliothèques clientes Google Cloud s'authentifient par défaut avec les identifiants par défaut de l'application. Vous n'avez pas besoin de configurer de variables d'environnement. AI Platform Training configure automatiquement les identifiants par défaut de l'application de sorte qu'il s'authentifie en tant que compte de service personnalisé que vous avez spécifié à l'étape précédente.

Toutefois, lorsque vous utilisez une bibliothèque cliente Google Cloud dans votre code d'entraînement, il se peut qu'elle ne se connecte pas par défaut au projet Google Cloud approprié. Si vos journaux d'entraînement signalent des erreurs d'autorisation, le problème peut venir de là. Lorsque vous créez une tâche d'entraînement, AI Platform Training n'exécute pas votre code d'entraînement directement dans votre projet Google Cloud. AI Platform Training exécute votre code dans un projet distinct géré par Google. AI Platform Training utilise ce projet exclusivement pour les opérations liées à votre projet. Par conséquent, n'essayez pas de déduire un ID de projet de l'environnement de votre code d'entraînement. Spécifiez les ID de projet explicitement.

Par exemple, envisagez d'exécuter une tâche d'entraînement dans un projet Google Cloud dont l'ID est PROJECT_ID. Si vous souhaitez utiliser le client Python pour Google BigQuery afin d'accéder à une table BigQuery du même projet, n'essayez pas de déduire le projet dans votre code d'entraînement :

Sélection implicite d'un projet

from google.cloud import bigquery

client = bigquery.Client()

Utilisez plutôt un code qui sélectionne explicitement un projet :

Sélection explicite d'un projet

from google.cloud import bigquery

client = bigquery.Client(project=PROJECT_ID)

Étape suivante