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 l'agent de service

Par défaut, AI Platform Training utilise un agent de service pour exécuter des tâches d'entraînement. Cet agent 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 pour votre projet dans Google Cloud Console ou à l'aide de Google Cloud CLI :

console Google Cloud

Accédez à la page IAM de la console Google Cloud, sélectionnez Inclure les attributions de rôles fournis par Google, puis recherchez le compte principal 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é la CLI 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 de l'agent de service AI Platform de votre projet.

Cet agent de service 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 de l'agent de service.

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.

  3. Si le compte de service géré par l'utilisateur se trouve dans un projet différent de vos tâches d'entraînement, configurez le compte de service géré par l'utilisateur afin de pouvoir l'associer à vos tâches d'entraînement.

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 la CLI 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.

Si vous ne souhaitez pas coder en dur un ID de projet dans votre code d'entraînement, vous pouvez référencer la variable d'environnement CLOUD_ML_PROJECT_ID. AI Platform Training définit cette variable d'environnement dans chaque conteneur d'entraînement pour contenir le numéro de projet du projet dans lequel vous avez lancé un entraînement personnalisé. De nombreux outils Google Cloud peuvent accepter un numéro de projet dès lors qu'il est associé à un ID de projet.

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

project_number = os.environ["CLOUD_ML_PROJECT_ID"]

client = bigquery.Client(project=project_number)

Étape suivante