Offene Llama 3-Modelle mit Cloud-TPUs mit mehreren Hosts in Vertex AI Prediction mit Saxml bereitstellen

Llama 3 ist ein Open-Source Large Language Model (LLM) von Meta. In diesem Leitfaden erfahren Sie, wie Sie ein Llama 3-LLM mit Tensor Processing Units (TPUs) mit mehreren Hosts auf Vertex AI Prediction mit Saxml bereitstellen.

In dieser Anleitung laden Sie die Llama 3 70B-Modellgewichtungen und Tokenizer herunter und stellen Sie sie in Vertex AI Prediction bereit, das 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI and Artifact Registry APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI and Artifact Registry APIs.

    Enable the APIs

  8. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  9. Installieren Sie Docker gemäß der Dokumentation zu Artifact Registry.
  10. Achten Sie darauf, dass Sie genügend Kontingente für 16 TPU v5e-Chips für Vertex AI Prediction haben.

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

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init

Wenn Sie für die Modellbereitstellung eine andere Shell anstelle von Cloud Shell verwenden, prüfen Sie, ob die Google Cloud CLI die Version 475.0.0 oder höher 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 Modellgewichte herunterladen

Die folgenden Schritte gelten für eine Vertex AI Workbench-Instanz mit einer speicheroptimierten M2-VM. Informationen zum Ändern des Maschinentyps einer Vertex AI Workbench-Instanz finden Sie unter Maschinentyp einer Vertex AI 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 eine E-Mail mit einer signierten URL erhalten haben.

  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 70B ein, wenn Sie aufgefordert werden, die Modelle auszuwählen, die heruntergeladen werden sollen.

Modellgewichte 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 Modellgewichte 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 umgewandelten Modellgewichte.

  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.

Modellgewichte in den Cloud Storage-Bucket kopieren

Führen Sie den folgenden Befehl aus, um die Modellgewichte 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.

Zum Hochladen einer Model-Ressource in Vertex AI Prediction mit dem vordefinierten SAxml-Container, führen Sie den Befehl gcloud ai models upload 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 Vertex AI verwenden. TPUs sind nur in us-west1 verfügbar.
  • MODEL_DISPLAY_NAME: Der gewünschte Anzeigename für Ihr Modell
  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
.

Endpunkt für Onlinevorhersagen erstellen

Führen Sie 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 einzelnen Host finden Sie unter Modell bereitstellen.

Weitere Informationen zu Cloud TPU v5e-Typen finden Sie unter TPU v5e.

  1. Rufen Sie die Endpunkt-ID für den Endpunkt der Onlinevorhersage 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.

    Bei der Bereitstellung kann es zu einer Zeitüberschreitung kommen.

    Der Befehl deploy-model gibt eine Vorgangs-ID zurück, mit der geprüft werden kann, ob 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 Befehlzurückgegebene Vorgangs-ID.

Onlinevorhersagen aus dem bereitgestellten Modell abrufen

Zum Abrufen von Onlinevorhersagen vom Vertex AI Prediction-Endpunkt führen Sie den Befehl gcloud ai endpoints predict aus.

  1. Führen Sie den folgenden Befehl aus, um eine request.json-Datei mit einem Beispiel für eine Vorhersageanfrage 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

Um weitere Vertex AI-Kosten zu vermeiden, löschen Sie die Google Cloud-Ressourcen, die Sie in dieser Anleitung erstellt haben:

  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 das 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