1. Einführung
Übersicht
Cloud Run unterstützt seit Kurzem GPUs. Sie ist als öffentliche Vorschau mit Warteliste verfügbar. Wenn Sie die Funktion ausprobieren möchten, füllen Sie dieses Formular aus, um sich auf die Warteliste setzen zu lassen. Cloud Run ist eine Containerplattform in Google Cloud, mit der Sie Ihren Code ganz einfach in einem Container ausführen können, ohne einen Cluster verwalten zu müssen.
Derzeit stellen wir NVIDIA L4-GPUs mit 24 GB vRAM zur Verfügung. Es gibt eine GPU pro Cloud Run-Instanz und das Autoscaling von Cloud Run gilt weiterhin. Dazu gehört das Hochskalieren auf bis zu 5 Instanzen (mit Kontingenterhöhung) sowie das Herunterskalieren auf null Instanzen, wenn keine Anfragen vorhanden sind.
Transformers.js ist funktional äquivalent zur Python-Bibliothek „transformers“ von Hugging Face. Das bedeutet, dass Sie dieselben vortrainierten Modelle mit einer sehr ähnlichen API ausführen können. Weitere Informationen finden Sie auf der Transformers.js-Website.
In diesem Codelab erstellen und stellen Sie eine App in Cloud Run bereit, die Transformers.js und GPUs verwendet.
Lerninhalte
- Eine App mit Transformers.js in Cloud Run mit GPUs ausführen
2. APIs aktivieren und Umgebungsvariablen festlegen
Bevor Sie mit diesem Codelab beginnen können, müssen Sie mehrere APIs aktivieren. Für dieses Codelab müssen Sie die folgenden APIs verwenden. Sie können diese APIs mit dem folgenden Befehl aktivieren:
gcloud services enable run.googleapis.com \
storage.googleapis.com \
cloudbuild.googleapis.com \
Anschließend können Sie Umgebungsvariablen festlegen, die in diesem Codelab verwendet werden.
PROJECT_ID=<YOUR_PROJECT_ID> AR_REPO_NAME=repo REGION=us-central1
3. Transformers.js-App erstellen
Erstellen Sie zuerst ein Verzeichnis für den Quellcode und wechseln Sie in dieses Verzeichnis.
mkdir transformers-js-codelab && cd $_
Erstellen Sie eine package.json-Datei.
{
"name": "huggingface",
"version": "1.0.0",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"@huggingface/transformers": "^3.0.0-alpha.8",
"@xenova/transformers": "^2.17.2",
"express": "^4.17.1"
}
}
Erstellen Sie eine Datei mit dem Namen index.js.
import { pipeline } from "@xenova/transformers";
import express from 'express';
// make sure the text-generation pipeline is created first
// before anyone can access the routes
const generator = await pipeline('text-generation', 'Xenova/llama2.c-stories15M', {
device: 'cuda',
dtype: 'fp32',
});
// now create the app and routes
const app = express();
app.get('/', async (req, res) => {
const text = 'A long time ago in a galaxy far far away,';
const output = await generator(text, { max_new_tokens: 50 });
res.send(output);
});
const port = parseInt(process.env.PORT) || 8080;
app.listen(port, () => {
console.log(`transformers-js app: listening on port ${port}`);
});
Erstellen Sie einen Dockerfile. Im Dockerfile werden zusätzliche NVIDIA-Treiber installiert, die für Transformers.js erforderlich sind.
FROM node:20 WORKDIR /usr/src/app RUN apt-get update && \ apt-get install software-properties-common -y && \ wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb && \ dpkg -i cuda-keyring_1.1-1_all.deb && \ add-apt-repository contrib && \ apt-get update && \ apt-get -y install cuda-toolkit-12-6 && \ apt-get -y install cudnn-cuda-12 EXPOSE 8080 COPY package.json . RUN npm install COPY index.js . ENTRYPOINT ["node", "index.js"]
4. Cloud Run-Dienst erstellen und bereitstellen
Erstellen Sie ein Repository in Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
Senden Sie Ihren Code an Cloud Build.
IMAGE=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/gpu-transformers-js gcloud builds submit --tag $IMAGE
Als Nächstes in Cloud Run bereitstellen
gcloud beta run deploy transformers-js-codelab \ --image=$IMAGE \ --cpu 8 --memory 32Gi \ --gpu=1 --no-cpu-throttling --gpu-type nvidia-l4 \ --allow-unauthenticated \ --region us-central1 \ --project=$PROJECT_ID \ --max-instances 1
5. Dienst testen
Sie können den Dienst mit dem folgenden Befehl testen:
SERVICE_URL=$(gcloud run services describe transformers-js-codelab --region $REGION --format 'value(status.url)') curl $SERVICE_URL
Die Ausgabe sollte in etwa so aussehen:
[{"generated_text":"A long time ago in a galaxy far far away, there was a beautiful garden. Every day, the little girl would go to the garden and look at the flowers. She loved the garden so much that she would come back every day to visit it.\nOne day, the little girl was walking through"}]
6. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs!
Wir empfehlen, die Dokumentation zu Cloud Run-GPUs zu lesen.
Behandelte Themen
- Eine App mit Transformers.js in Cloud Run mit GPUs ausführen
7. Bereinigen
Um unbeabsichtigte Gebühren zu vermeiden (z. B. wenn die Cloud Run-Dienste versehentlich öfter aufgerufen werden, als in Ihrem monatlichen Cloud Run-Aufrufkontingent im kostenlosen Kontingent enthalten ist), können Sie entweder den Cloud Run-Dienst oder das in Schritt 2 erstellte Projekt löschen.
Wenn Sie den Cloud Run-Dienst löschen möchten, rufen Sie die Cloud Run Console unter https://console.cloud.google.com/run auf und löschen Sie den transformers-js-codelab-Dienst.
Wenn Sie das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das Projekt aus, das Sie in Schritt 2 erstellt haben, und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie das Projekt in Ihrem Cloud SDK ändern. Sie können die Liste aller verfügbaren Projekte mit gcloud projects list aufrufen.