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 Cloud Run-Autoscaling wird weiterhin angewendet. Dazu gehört das Hochskalieren auf bis zu fünf Instanzen (bei verfügbarer Kontingenterhöhung) sowie das Herunterskalieren auf null Instanzen, wenn keine Anfragen vorhanden sind.
Transformers.js ist funktional mit der Transformers-Python-Bibliothek von Hugging Face identisch. 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 Anwendung in Cloud Run bereit, die Transformers.js und GPUs verwendet.
Aufgaben in diesem Lab
- Eine Anwendung mit Transformers.js in Cloud Run mit GPUs ausführen
2. APIs aktivieren und Umgebungsvariablen festlegen
Bevor Sie dieses Codelab verwenden können, müssen Sie mehrere APIs aktivieren. Für dieses Codelab sind die folgenden APIs erforderlich. 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 mit „cd“ 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
. Das Dockerfile installiert zusätzliche NVIDIA-Treiber, 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
Reichen Sie Ihren Code bei Cloud Build ein.
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!
Weitere Informationen finden Sie in der Dokumentation zu GPUs in Cloud Run.
Behandelte Themen
- Eine Anwendung mit Transformers.js in Cloud Run mit GPUs ausführen
7. Bereinigen
Wenn Sie versehentliche Kosten vermeiden möchten, z. B. wenn die Cloud Run-Dienste versehentlich häufiger aufgerufen werden als Ihre monatliche Cloud Run-Aufrufzuweisung in der kostenlosen Stufe, können Sie entweder Cloud Run oder das in Schritt 2 erstellte Projekt löschen.
Wenn Sie den Cloud Run-Dienst löschen möchten, rufen Sie die Cloud Console unter https://console.cloud.google.com/run auf und löschen Sie den Dienst transformers-js-codelab
.
Wenn Sie das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das in Schritt 2 erstellte Projekt aus und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie die Projekte in Ihrem Cloud SDK ändern. Sie können eine Liste aller verfügbaren Projekte aufrufen, indem Sie gcloud projects list
ausführen.