Offene Llama 3-Modelle mit Cloud TPUs mit mehreren Hosts auf der Gemini Enterprise Agent Platform mit Saxml bereitstellen

Llama 3 ist ein Open-Source Large Language Model (LLM) von Meta. In dieser Anleitung erfahren Sie, wie Sie ein Llama 3-LLM mit Tensor Processing Units (TPUs) mit mehreren Hosts auf der Gemini Enterprise Agent Platform mit Saxml bereitstellen.

In dieser Anleitung laden Sie die Llama 3 70B-Modellgewichtungen und Tokenizer herunter und stellen Sie sie auf der Gemini Enterprise Agent Platform bereit, die Saxml auf TPUs ausführt.

Hinweise

Wir empfehlen die Verwendung einer speicheroptimierten M2-VM zum Herunterladen des Modells und zum Konvertieren in Saxml. Das liegt daran, dass der Konvertierungsprozess des Modells viel Arbeitsspeicher erfordert und fehlschlagen kann, wenn der Maschinentyp nicht genügend Arbeitsspeicher hat.

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto bei Google Cloud, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis zu sehen und zu bewerten. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Agent Platform and Artifact Registry APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Agent Platform and Artifact Registry APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the APIs

  8. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  9. Installieren Sie Docker gemäß der Dokumentation zu Artifact Registry, um Docker zu installieren.
  10. Achten Sie darauf, dass Sie genügend Kontingente für 16 TPU v5e-Chips für die Gemini Enterprise Agent Platform haben.

In dieser Anleitung wird davon ausgegangen, dass Sie Cloud Shell zur Interaktion mit verwenden Google Cloud. Wenn Sie anstelle von Cloud Shell eine andere Shell nutzen möchten, führen Sie die folgende zusätzliche Konfiguration aus:

  1. Installieren Sie die Google Cloud CLI.

  2. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  3. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init

Wenn Sie für die Modell bereitstellung eine andere Shell anstelle von Cloud Shell verwenden, prüfen Sie, ob die Google Cloud CLI die Version später als 475.0.0 hat. Sie können die Google Cloud CLI aktualisieren, indem Sie den Befehl gcloud components update ausführen.

Wenn Sie Ihr Modell mit dem Vertex AI SDK bereitstellen, müssen Sie dafür sorgen, dass Sie die Version 1.50.0 oder höher haben.

Zugriff auf das Modell erhalten und die Modellgewichtungen herunterladen

Die folgenden Schritte gelten für eine Agent Platform Workbench-Instanz mit einer speicheroptimierten M2-VM. Informationen zum Ändern des Maschinentyps einer Agent Platform Workbench Instanz finden Sie unter Maschinentyp einer Agent Platform Workbench-Instanz ändern.

  1. Rufen Sie die Seite zur Einwilligung für das Llama-Modell auf.

  2. Wählen Sie „Llama 3“ aus, füllen Sie die Einverständniserklärung aus und akzeptieren Sie die Nutzungsbedingungen.

  3. Sie sollten per E-Mail eine signierte URL erhalten.

  4. Laden Sie das download.sh-Script von GitHub mit dem folgenden Befehl herunter:

    wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh
    chmod +x download.sh
    
  5. Zum Herunterladen der Modellgewichtungen führen Sie das Skript download.sh aus, das Sie von GitHub heruntergeladen haben.

  6. Wenn Sie dazu aufgefordert werden, geben Sie die signierte URL aus der E-Mail ein, die Sie im vorherigen Abschnitt erhalten haben.

  7. Geben Sie bei Aufforderung zum Herunterladen der Modelle 70B ein.

Modellgewichtungen in das Saxml-Format konvertieren

  1. Führen Sie den folgenden Befehl aus, um Saxml herunterzuladen:

    git clone https://github.com/google/saxml.git
    
  2. Führen Sie die folgenden Befehle aus, um eine virtuelle Python-Umgebung zu konfigurieren:

    python -m venv .
    source bin/activate
    
  3. Führen Sie die folgenden Befehle aus, um die Abhängigkeiten zu installieren:

    pip install --upgrade pip
    
    pip install paxml
    
    pip install praxis
    
    pip install torch
    
  4. Führen Sie den folgenden Befehl aus, um die Modellgewichtungen in das Saxml-Format zu konvertieren:

    python3 saxml/saxml/tools/convert_llama_ckpt.py \
        --base PATH_TO_META_LLAMA3 \
        --pax PATH_TO_PAX_LLAMA3 \
        --model-size llama3_70b
    

    Ersetzen Sie Folgendes:

    • PATH_TO_META_LLAMA3: der Pfad zu dem Verzeichnis, das die heruntergeladenen Modellgewichtungen enthält.
    • PATH_TO_PAX_LLAMA3: der Pfad zu dem Verzeichnis, in dem die konvertierten Modellgewichtungen gespeichert werden sollen.

    Umgewandelte Modelle werden in den Ordner „$PATH_TO_PAX_LLAMA3/checkpoint_00000000“ gelegt.

  5. Kopieren Sie die Tokenizer-Datei aus dem ursprünglichen Verzeichnis in einen Unterordner mit dem Namen vocabs folgendermaßen:

    cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
    
  6. Fügen Sie eine leere Datei „commit_success.txt“ in den Ordner $PATH_TO_PAX_LLAMA3 hinzu und fügen Sie auch die Unterordner metadata und state in diesen Ordner hinzu:

    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.txt
    

    Der Ordner $PATH_TO_PAX_LLAMA3 enthält jetzt die folgenden Ordner und Dateien:

    $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
    

Cloud Storage-Bucket erstellen

Erstellen Sie einen Cloud Storage-Bucket zum Speichern der konvertierten Modellgewichtungen.

  1. Führen Sie in der Cloud Shell die folgenden Befehle aus und ersetzen Sie dabei PROJECT_ID durch Ihre Projekt-ID:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Führen Sie den folgenden Befehl aus, um den Bucket zu erstellen:

    gcloud storage buckets create gs://WEIGHTS_BUCKET_NAME
    

    Ersetzen Sie WEIGHTS_BUCKET_NAME durch den gewünschten Namen, der für den Bucket verwendet werden soll.

Modellgewichtungen in den Cloud Storage-Bucket kopieren

Führen Sie den folgenden Befehl aus, um die Modellgewichtungen in Ihren Bucket zu kopieren:

gcloud storage cp PATH_TO_PAX_LLAMA3/* gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b/ --recursive

Modell hochladen

Ein vordefinierter Saxml-Container ist unter us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest verfügbar.

Wenn Sie eine Model-Ressource mit dem vordefinierten Saxml-Container in die Gemini Enterprise Agent Platform hochladen möchten, führen Sie den gcloud ai models upload-Befehl wie folgt aus:

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

Ersetzen Sie die folgenden Werte:

  • LOCATION: die Region, in der Sie die Gemini Enterprise Agent Platform verwenden. TPUs sind nur in us-west1 verfügbar.
  • MODEL_DISPLAY_NAME: der Anzeigename, den Sie für Ihr Modell verwenden möchten.
  • PROJECT_ID: die ID Ihres Google Cloud Projekts

Onlinevorhersage-Endpunkt erstellen

Führen Sie den folgenden Befehl aus, um den Endpunkt zu erstellen:

gcloud ai endpoints create \
    --region=LOCATION \
    --display-name=ENDPOINT_DISPLAY_NAME \
    --project=PROJECT_ID

Ersetzen Sie ENDPOINT_DISPLAY_NAME durch den Anzeigenamen für Ihren Endpunkt.

Modell für den Endpunkt bereitstellen

Wenn der Endpunkt bereit ist, stellen Sie das Modell für den Endpunkt bereit.

In dieser Anleitung stellen Sie ein Llama 3 70B-Modell bereit, das für 16 Cloud TPU v5e-Chips mit 4x4-Topologie fragmentiert ist. Sie können jedoch auch alle folgenden unterstützten Cloud TPU-Topologien mit mehreren Hosts angeben:

Maschinentyp Topologie Anzahl der TPU-Chips Anzahl der 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

Wenn Sie ein anderes Llama-Modell bereitstellen, das im Saxml-GitHub-Repository definiert ist, stellen Sie sicher, dass die Partitionierung der Anzahl der Geräte entspricht und die Cloud TPU ausreichend Speicher zum Laden des Modells hat.

Informationen zum Bereitstellen eines Modells auf Cloud TPUs mit einem Host finden Sie unter Modell bereitstellen.

Eine vollständige Liste der unterstützten Cloud TPU-Typen und -Regionen finden Sie unter Standorte der Gemini Enterprise Agent Platform.

  1. Rufen Sie die Endpunkt-ID für den Onlinevorhersage-Endpunkt ab:

    ENDPOINT_ID=$(gcloud ai endpoints list \
        --region=LOCATION \
        --filter=display_name=ENDPOINT_NAME \
        --format="value(name)")
    
  2. Rufen Sie die Modell-ID für Ihr Modell ab:

    MODEL_ID=$(gcloud ai models list \
        --region=LOCATION \
        --filter=display_name=DEPLOYED_MODEL_NAME \
        --format="value(name)")
    
  3. Stellen Sie das Modell für den Endpunkt bereit:

    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=100
    

    Ersetzen Sie DEPLOYED_MODEL_NAME durch einen Namen für das Bereitgestellte. Dieser kann mit dem Anzeigenamen des Modells (MODEL_DISPLAY_NAME) identisch sein.

    Beim Bereitstellungsvorgang kann es zu einer Zeitüberschreitung kommen.

    Der Befehl deploy-model gibt eine Vorgangs-ID zurück, mit der Sie prüfen können, wann der Vorgang abgeschlossen ist. Sie können den Status des Vorgangs abfragen, bis in der Antwort "done": true angegeben wird. Mit dem folgenden Befehl können Sie den Status abfragen:

    gcloud ai operations describe \
    --region=LOCATION \
    OPERATION_ID
    

    Ersetzen Sie OPERATION_ID durch die mit dem vorherigen Befehl zurückgegebene Vorgangs-ID.

Onlinevorhersagen aus dem bereitgestellten Modell abrufen

Wenn Sie Onlinevorhersagen vom Gemini Enterprise Agent Platform-Endpunkt abrufen möchten, führen Sie den gcloud ai endpoints predict Befehl aus.

  1. Führen Sie den folgenden Befehl aus, um eine request.json-Datei mit einer Beispielanfrage für eine Vorhersage zu erstellen:

    cat << EOF > request.json
    {"instances": [{"text_batch": "the distance between Earth and Moon is "}]}
    EOF
    
  2. Führen Sie folgenden Befehl aus, um die Onlinevorhersageanfrage an den Endpunkt zu senden:

    gcloud ai endpoints predict $ENDPOINT_ID \
        --project=PROJECT_ID \
        --region=LOCATION \
        --json-request=request.json
    

Bereinigen

Löschen Sie die in dieser Anleitung erstellten Ressourcen, um weitere Kosten für die Gemini Enterprise Agent Platform zu vermeiden: Google Cloud

  1. So heben Sie die Bereitstellung des Modells am Endpunkt auf und löschen den Endpunkt. Führen Sie die folgenden Befehle aus:

    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 \
       --quiet
    
  2. Führen Sie die folgenden Befehle aus, um Ihr Modell zu löschen:

    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