Llama 3 es un modelo de lenguaje grande de código abierto (LLM) de Meta. En esta guía, se muestra cómo entregar un LLM de Llama 3 con unidades de procesamiento tensorial (TPU) de varios hosts en la plataforma de agentes de Gemini Enterprise con Saxml.
En esta guía, descargarás las ponderaciones y el tokenizador del modelo Llama 3 70B y los desplegarás en Gemini Enterprise Agent Platform, que ejecuta Saxml en TPUs.
Antes de comenzar
Te recomendamos que uses una VM M2 con optimización de memoria para descargar el modelo y convertirlo a Saxml. Esto se debe a que el proceso de conversión del modelo requiere una memoria significativa y puede fallar si eliges un tipo de máquina que no tiene suficiente memoria.
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the Agent Platform and Artifact Registry APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
En la consola de Cloud de Confiance , activa Cloud Shell.
En la parte inferior de la consola de Cloud de Confiance , se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.
- Sigue la documentación de Artifact Registry para instalar Docker.
- Asegúrate de tener cuotas suficientes para 16 chips TPU v5e en Gemini Enterprise Agent Platform.
En este instructivo, se supone que usas Cloud Shell para interactuar con Cloud de Confiance by S3NS. Si quieres usar un shell diferente en lugar de Cloud Shell, realiza la siguiente configuración adicional:
-
Instala Google Cloud CLI.
-
Configura gcloud CLI para usar tu identidad federada.
Para obtener más información, consulta Accede a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
Si utilizas un shell diferente en lugar de Cloud Shell para el despliegue del modelo asegúrese de que la versión de Google Cloud CLI es posterior a 475.0.0. Puedes actualizar la CLI de Google Cloud ejecutando el comando gcloud components update.
Si implementas tu modelo con el SDK de Vertex AI, asegúrate de tener la versión 1.50.0 o una posterior.
Obtén acceso al modelo y descarga los pesos del modelo
Los siguientes pasos son para una instancia de Agent Platform Workbench que tiene una VM con optimización de memoria M2. Si quieres obtener información para cambiar el tipo de máquina de una instancia de Agent Platform Workbench, consulta Cambia el tipo de máquina de una instancia de Agent Platform Workbench.
Selecciona Llama 3, completa el formulario de consentimiento y acepta los términos y condiciones.
Busca en tu carpeta de entradaun correo electrónico con una URL firmada.
Descarga la secuencia de comandos
download.shde GitHub ejecutando el siguiente comando:wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh chmod +x download.shPara descargar los pesos del modelo, ejecuta el script
download.shque descargaste de GitHub.Cuando se te solicite, ingresa la URL firmada del correo electrónico que recibiste en la sección anterior.
Cuando se te soliciten los modelos que desea descargar, introduce
70B.
Convierte las ponderaciones del modelo en el formato Saxml
Ejecuta el siguiente comando para descargar Saxml:
git clone https://github.com/google/saxml.gitEjecuta los siguientes comandos para configurar un entorno virtual de Python:
python -m venv . source bin/activateEjecuta los siguientes comandos para instalar las dependencias:
pip install --upgrade pip pip install paxml pip install praxis pip install torchPara convertir las ponderaciones del modelo al formato Saxml, ejecuta el siguiente comando:
python3 saxml/saxml/tools/convert_llama_ckpt.py \ --base PATH_TO_META_LLAMA3 \ --pax PATH_TO_PAX_LLAMA3 \ --model-size llama3_70bReemplaza lo siguiente:
PATH_TO_META_LLAMA3: la ruta al directorio que contiene las ponderaciones del modelo descargadoPATH_TO_PAX_LLAMA3: la ruta del directorio en el que almacenar los pesos del modelo convertido
Los modelos convertidos se ubicarán en la carpeta
$PATH_TO_PAX_LLAMA3/checkpoint_00000000.Copia el archivo tokenizer del directorio original en una subcarpeta denominada
vocabscomo se indica a continuación:cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.modelAñada un archivo vacío
commit_success.txten la carpeta$PATH_TO_PAX_LLAMA3y en las subcarpetasmetadataystatede dicha carpeta como sigue:touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txtLa carpeta
$PATH_TO_PAX_LLAMA3ahora contiene las siguientes carpetas y archivos:$PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/ $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/ $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
Crea un bucket de Cloud Storage
Crea un bucket de Cloud Storage para almacenar las ponderaciones del modelo convertido.
En Cloud Shell, ejecuta los siguientes comandos y reemplaza PROJECT_ID por el ID del proyecto:
projectid=PROJECT_ID gcloud config set project ${projectid}Para crear el bucket, ejecuta el siguiente comando:
gcloud storage buckets create gs://WEIGHTS_BUCKET_NAMEReemplaza WEIGHTS_BUCKET_NAME por el nombre que deseas usar para el bucket.
Copia las ponderaciones del modelo en el bucket de Cloud Storage
Para copiar las ponderaciones del modelo en tu bucket, ejecuta el siguiente comando:
gcloud storage cp PATH_TO_PAX_LLAMA3/* gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b/ --recursive
Sube el modelo
Hay disponible un contenedor Saxml precompilado en
us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest.
Para subir un recurso Model a Gemini Enterprise Agent Platform con el contenedor de Saxml compilado previamente, ejecuta el comando gcloud ai models upload de la siguiente manera:
gcloud ai models upload \
--region=LOCATION \
--display-name=MODEL_DISPLAY_NAME \
--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest \
--artifact-uri='gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b' \
--container-args='--model_path=saxml.server.pax.lm.params.lm_cloud.LLaMA3_70BFP16x16' \
--container-args='--platform_chip=tpuv5e' \
--container-args='--platform_topology=4x4' \
--container-args='--ckpt_path_suffix=checkpoint_00000000' \
--container-deployment-timeout-seconds=2700 \
--container-ports=8502 \
--project=PROJECT_ID
Realiza los siguientes reemplazos:
LOCATION: Es la región en la que usas Gemini Enterprise Agent Platform. Ten en cuenta que las TPU solo están disponibles enus-west1.MODEL_DISPLAY_NAME: el nombre de visualización que deseas para tu modeloPROJECT_ID: Es el ID de tu proyecto de Cloud de Confiance by S3NS .
Crea un extremo de inferencia en línea
Para crear el extremo, ejecuta el siguiente comando:
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_DISPLAY_NAME \
--project=PROJECT_ID
Reemplaza ENDPOINT_DISPLAY_NAME por el nombre visible que deseas para tu extremo.
Implementa el modelo con el extremo
Una vez que el extremo esté listo, implementa el modelo en el extremo.
En este tutorial, se despliega un modelo Llama 3 70B que se fragmenta para 16 Cloud TPU v5e utilizando una topología 4x4. Sin embargo, puedes especificar cualquiera de las siguientes topologías de Cloud TPU multihost compatibles:
| Tipo de máquina | Topología | Cantidad de chips TPU | Cantidad de hosts |
|---|---|---|---|
ct5lp-hightpu-4t |
4x4 | 16 | 2 |
ct5lp-hightpu-4t |
4x8 | 32 | 4 |
ct5lp-hightpu-4t |
8x8 | 64 | 8 |
ct5lp-hightpu-4t |
8x16 | 128 | 16 |
ct5lp-hightpu-4t |
16x16 | 256 | 32 |
Si implementas un modelo de Llama diferente que se define en el repositorio de GitHub de Saxml, asegúrate de que esté particionado para que coincida con la cantidad de dispositivos a los que te orientas y que Cloud TPU tiene suficiente memoria para cargar el modelo.
Para obtener más información sobre la implementación de un modelo en Cloud TPU de host único, consulta Implementa un modelo.
Para obtener una lista completa de los tipos y las regiones de Cloud TPU compatibles, consulta Ubicaciones de Agent Platform de Gemini Enterprise.
Obtén el ID del extremo de inferencia en línea:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)")Obtén el ID de tu modelo:
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)")Implementa el modelo en el extremo:
gcloud ai endpoints deploy-model $ENDPOINT_ID \ --region=LOCATION \ --model=$MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --machine-type=ct5lp-hightpu-4t \ --tpu-topology=4x4 \ --traffic-split=0=100Reemplaza DEPLOYED_MODEL_NAME por un nombre para el elemento implementado. Puede ser el mismo que el nombre visible del modelo (MODEL_DISPLAY_NAME).
Es posible que se agote el tiempo de espera de la operación de implementación.
El comando
deploy-modeldevuelve un ID de operación que puede utilizarse para comprobar cuándo ha finalizado la operación. Puedes sondear el estado de la operación hasta que la respuesta incluya"done": true. Utiliza el siguiente comando para sondear el estado:gcloud ai operations describe \ --region=LOCATION \ OPERATION_IDSustituye OPERATION_ID por el ID de operación que mostró el comando anterior.
Obtén inferencias en línea del modelo implementado
Para obtener inferencias en línea del extremo de Gemini Enterprise Agent Platform, ejecuta el comando gcloud ai endpoints predict.
Ejecuta el siguiente comando para crear un archivo
request.jsonque contenga una solicitud de inferencia de muestra:cat << EOF > request.json {"instances": [{"text_batch": "the distance between Earth and Moon is "}]} EOFPara enviar la solicitud de inferencia en línea al extremo, ejecuta el siguiente comando:
gcloud ai endpoints predict $ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION \ --json-request=request.json
Realiza una limpieza
Para evitar incurrir en más cargos de Gemini Enterprise Agent Platform, borra los Cloud de Confiance recursos que creaste durante este instructivo:
Para anular la implementación del modelo en el extremo y borrarlo, ejecuta los siguientes comandos:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)") DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \ --region=LOCATION \ --format="value(deployedModels.id)") gcloud ai endpoints undeploy-model $ENDPOINT_ID \ --region=LOCATION \ --deployed-model-id=$DEPLOYED_MODEL_ID gcloud ai endpoints delete $ENDPOINT_ID \ --region=LOCATION \ --quietPara borrar tu modelo, ejecuta los siguientes comandos:
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)") gcloud ai models delete $MODEL_ID \ --region=LOCATION \ --quiet