Utiliser des VM Spot ou des réservations pour déployer un point de terminaison Llama-3.1 Gemini Enterprise Agent Platform sur des Cloud GPU

Ce tutoriel vous guide dans le déploiement du modèle Meta-Llama-3.1-8B sur la plate-forme Gemini Enterprise Agent. Vous apprendrez à déployer des points de terminaison et à les optimiser en fonction de vos besoins spécifiques. Si vous avez des charges de travail tolérantes aux pannes, vous pouvez optimiser les coûts en utilisant des VM spot. Si vous souhaitez assurer la disponibilité, utilisez des réservations Compute Engine. Vous apprendrez à déployer des points de terminaison qui utilisent :

  • VM Spot : utilisez des instances provisionnées par spot pour réaliser des économies considérables.
  • Réservations : garantissez la disponibilité des ressources pour des performances prévisibles, en particulier pour les charges de travail de production. Ce tutoriel montre comment utiliser des réservations automatiques (ANY_RESERVATION) et spécifiques (SPECIFIC_RESERVATION).

Pour en savoir plus, consultez Spot VM ou Réservations de ressources Compute Engine.

Prérequis

Avant de commencer, remplissez les conditions préalables suivantes :

  • Un projet Cloud de Confiance by S3NS pour lequel la facturation est activée.
  • Les API Gemini Enterprise Agent Platform et Compute Engine sont activées.
  • Un quota suffisant pour le type de machine et l'accélérateur que vous prévoyez d'utiliser, comme les GPU NVIDIA L4. Pour vérifier vos quotas, consultez Quotas et limites du système dans la console Cloud de Confiance .
  • Un compte Hugging Face et un jeton d'accès utilisateur avec accès en lecture.
  • Si vous utilisez des réservations partagées, accordez des autorisations IAM entre les projets. Toutes ces autorisations sont couvertes dans le notebook.

Déployer sur des VM Spot

Les sections suivantes vous guident dans la configuration de votre projet Cloud de Confiance by S3NS , la configuration de l'authentification Hugging Face, le déploiement du modèle Llama-3.1 à l'aide de VM Spot ou de réservations, et le test du déploiement.

1. Configurer votre projet Cloud de Confiance by S3NS et votre réservation partagée

Ouvrez le notebook Colab Enterprise.

Dans la première section, définissez les variables PROJECT_ID, SHARED_PROJECT_ID (le cas échéant), BUCKET_URI et REGION dans le notebook Colab.

Le notebook attribue le rôle compute.viewer au compte de service des deux projets.

Si vous prévoyez d'utiliser une réservation créée dans un autre projet de la même organisation, veillez à attribuer le rôle compute.viewer au P4SA (Principal Service Account) des deux projets. Le code du notebook automatisera cette opération, mais assurez-vous que SHARED_PROJECT_ID est correctement défini. Cette autorisation inter-projets permet au point de terminaison Gemini Enterprise Agent Platform de votre projet principal de voir et d'utiliser la capacité de réservation dans le projet partagé.

2. Configurer l'authentification Hugging Face

Pour télécharger le modèle Llama-3.1, vous devez fournir votre jeton d'accès utilisateur Hugging Face dans la variable HF_TOKEN du notebook Colab. Si vous n'en fournissez pas, le message d'erreur suivant s'affiche : Cannot access gated repository for URL.

Paramètres du jeton d'accès Hugging Face Figure 1 : Paramètres du jeton d'accès Hugging Face

3. Déployer avec une VM Spot

Pour déployer le modèle Llama sur une VM Spot, accédez à la section "Spot VM Gemini Enterprise Agent Platform Endpoint Deployment" (Déploiement du point de terminaison de la plate-forme Gemini Enterprise Agent sur une VM Spot) dans le notebook Colab et définissez is_spot=True.

base_model_name = "Meta-Llama-3.1-8B"
hf_model_id = "meta-llama/" + base_model_name

if "8b" in base_model_name.lower():
    accelerator_type = "NVIDIA_L4"
    machine_type = "g2-standard-12"
    accelerator_count = 1
    max_loras = 5
else:
    raise ValueError(
        f"Recommended GPU setting not found for: {accelerator_type} and {base_model_name}."
    )

common_util.check_quota(
    project_id=PROJECT_ID,
    region=REGION,
    accelerator_type=accelerator_type,
    accelerator_count=accelerator_count,
    is_for_training=False,
)

gpu_memory_utilization = 0.95
max_model_len = 8192

models["vllm_gpu_spotvm"], endpoints["vllm_gpu_spotvm"] = deploy_model_vllm(
    model_name=common_util.get_job_name_with_datetime(prefix="llama3_1-serve-spotvm"),
    model_id=hf_model_id,
    base_model_id=hf_model_id,
    service_account=SERVICE_ACCOUNT,
    machine_type=machine_type,
    accelerator_type=accelerator_type,
    accelerator_count=accelerator_count,
    gpu_memory_utilization=gpu_memory_utilization,
    max_model_len=max_model_len,
    max_loras=max_loras,
    enforce_eager=True,
    enable_lora=True,
    use_dedicated_endpoint=False,
    model_type="llama3.1",
    is_spot=True,
)

Déployer sur des instances de réservation partagées

Les sections suivantes vous guident dans la création d'une réservation partagée, la configuration des paramètres de réservation, le déploiement du modèle Llama-3.1 à l'aide de ANY_RESERVATION ou SPECIFIC_RESERVATION, et le test du déploiement.

1. Créer une réservation partagée

Pour configurer vos réservations, accédez à la section "Set Up Reservations for Gemini Enterprise Agent Platform Predictions" (Configurer les réservations pour les prédictions Gemini Enterprise Agent Platform) du notebook. Définissez les variables requises pour la réservation, telles que RES_ZONE, RESERVATION_NAME, RES_MACHINE_TYPE, RES_ACCELERATOR_TYPE et RES_ACCELERATOR_COUNT.

Vous devez définir RES_ZONE sur {REGION}-{availability_zone}.

RES_ZONE = "a"
RES_ZONE = f"{REGION}-{RES_ZONE}"

RESERVATION_NAME = "shared-reservation-1"
RESERVATION_NAME = f"{PROJECT_ID}-{RESERVATION_NAME}"
RES_MACHINE_TYPE = "g2-standard-12"
RES_ACCELERATOR_TYPE = "nvidia-l4"
RES_ACCELERATOR_COUNT = 1
rev_names.append(RESERVATION_NAME)

create_reservation(
    res_project_id=PROJECT_ID,
    res_zone=RES_ZONE,
    res_name=RESERVATION_NAME,
    res_machine_type=RES_MACHINE_TYPE,
    res_accelerator_type=RES_ACCELERATOR_TYPE,
    res_accelerator_count=RES_ACCELERATOR_COUNT,
    shared_project_id=SHARED_PROJECT_ID,
)

2. Partager vos réservations

Il existe deux types de réservations : les réservations à projet unique (par défaut) et les réservations partagées. Les réservations à projet unique ne peuvent être utilisées que par des VM du même projet que la réservation elle-même. Les réservations partagées, en revanche, peuvent être utilisées par des VM dans le projet où se trouve la réservation, ainsi que par des VM dans tout autre projet avec lequel la réservation a été partagée. L'utilisation de réservations partagées peut vous aider à améliorer l'utilisation de vos ressources réservées, et à réduire le nombre total de réservations que vous devez créer et gérer. Ce tutoriel porte sur les réservations partagées. Pour en savoir plus, consultez Fonctionnement des réservations partagées.

Avant de continuer, assurez-vous de partager avec d'autres services Google depuis la console Cloud de Confiance by S3NS , comme indiqué sur la figure :

Partager une réservation avec d'autres services Google Figure 2 : Partager une réservation avec d'autres services Google

3. Déployer avec ANY_RESERVATION

Pour déployer le point de terminaison à l'aide de ANY_RESERVATION, accédez à la section "Deploy Llama-3.1 Endpoint with ANY_RESERVATION" (Déployer le point de terminaison Llama-3.1 avec ANY_RESERVATION) du notebook. Spécifiez vos paramètres de déploiement, puis définissez reservation_affinity_type="ANY_RESERVATION". Exécutez ensuite la cellule pour déployer le point de terminaison.

hf_model_id = "meta-llama/Meta-Llama-3.1-8B"

models["vllm_gpu_any_reserve"], endpoints["vllm_gpu_any_reserve"] = deploy_model_vllm(
    model_name=common_util.get_job_name_with_datetime(
        prefix=f"llama3_1-serve-any-{RESERVATION_NAME}"
    ),
    model_id=hf_model_id,
    base_model_id=hf_model_id,
    service_account=SERVICE_ACCOUNT,
    machine_type=MACHINE_TYPE,
    accelerator_type=ACCELERATOR_TYPE,
    accelerator_count=ACCELERATOR_COUNT,
    model_type="llama3.1",
    reservation_affinity_type="ANY_RESERVATION",
)

4. Tester le point de terminaison ANY_RESERVATION

Une fois votre point de terminaison déployé, veillez à tester quelques requêtes pour vous assurer qu'il est correctement déployé.

5. Déployer avec SPECIFIC_RESERVATION

Pour déployer le point de terminaison à l'aide de SPECIFIC_RESERVATION, accédez à la section "Deploy Llama-3.1 Endpoint with SPECIFIC_RESERVATION" (Déployer le point de terminaison Llama-3.1 avec SPECIFIC_RESERVATION) du notebook. Spécifiez les paramètres suivants : reservation_name, reservation_affinity_type="SPECIFIC_RESERVATION", reservation_project et reservation_zone. Exécutez ensuite la cellule pour déployer le point de terminaison.

hf_model_id = "meta-llama/Meta-Llama-3.1-8B"

MACHINE_TYPE = "g2-standard-12"
ACCELERATOR_TYPE = "NVIDIA_L4"
ACCELERATOR_COUNT = 1

(
    models["vllm_gpu_specific_reserve"],
    endpoints["vllm_gpu_specific_reserve"],
) = deploy_model_vllm(
    model_name=common_util.get_job_name_with_datetime(
        prefix=f"llama3_1-serve-specific-{RESERVATION_NAME}"
    ),
    model_id=hf_model_id,
    base_model_id=hf_model_id,
    service_account=SERVICE_ACCOUNT,
    machine_type=MACHINE_TYPE,
    accelerator_type=ACCELERATOR_TYPE,
    accelerator_count=ACCELERATOR_COUNT,
    model_type="llama3.1",
    reservation_name=RESERVATION_NAME,
    reservation_affinity_type="SPECIFIC_RESERVATION",
    reservation_project=PROJECT_ID,
    reservation_zone=RES_ZONE,
)

6. Tester le point de terminaison SPECIFIC_RESERVATION

Une fois votre point de terminaison déployé, vérifiez que la réservation est utilisée par la prédiction en ligne de Gemini Enterprise Agent Platform. Veillez également à tester quelques requêtes pour vous assurer que le déploiement est correct.

Vérifier si la réservation est utilisée par la prédiction en ligne Vertex Figure 3 : Vérifier que la réservation est utilisée par la prédiction en ligne Vertex

7. Effectuer un nettoyage

Pour éviter les frais récurrents, supprimez les modèles, les points de terminaison et les réservations créés au cours de ce tutoriel. Le notebook Colab fournit du code dans la section "Nettoyage" pour automatiser ce processus de nettoyage.

Dépannage

  • Erreurs liées au jeton Hugging Face : vérifiez que votre jeton Hugging Face dispose des autorisations read et qu'il est correctement défini dans le notebook.
  • Erreurs de quota : vérifiez que vous disposez d'un quota de GPU suffisant dans la région où vous effectuez le déploiement. Demandez une augmentation de quota si nécessaire.
  • Conflits de réservation : assurez-vous que le type de machine et la configuration de l'accélérateur de votre déploiement de point de terminaison correspondent aux paramètres de votre réservation. Assurez-vous que les réservations peuvent être partagées avec les services Google.

Étapes suivantes