1. Einführung
Übersicht
Cloud Run unterstützt seit Kurzem GPUs. Die Funktion ist im Rahmen des Programms „Öffentliche Vorschau“ verfügbar, für das Sie sich anmelden müssen. Wenn Sie die Funktion ausprobieren möchten, füllen Sie dieses Formular aus, um sich für die öffentliche Vorschau anzumelden. 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. Pro Cloud Run-Instanz ist eine GPU verfügbar und das Autoscaling von Cloud Run gilt weiterhin. Dazu gehört das Hochskalieren auf bis zu fünf Instanzen (mit Kontingenterhöhung verfügbar) 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 App in Cloud Run bereit, die Transformers.js und GPUs verwendet.
Lerninhalte
- Wie Sie 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 ein Dockerfile. Mit dem 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
Stellen Sie ihn dann in Cloud Run bereit.
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
Sie sehen dann etwas Ähnliches wie Folgendes:
[{"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!
Sie haben das Codelab abgeschlossen.
Wir empfehlen Ihnen, die Dokumentation zu Cloud Run-GPUs zu lesen.
Behandelte Themen
- Wie Sie 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 häufiger aufgerufen werden als die monatliche Zuweisung für Cloud Run-Aufrufe im kostenlosen Kontingent), 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 in der Cloud Console unter https://console.cloud.google.com/run Cloud 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 die Liste aller verfügbaren Projekte mit dem Befehl gcloud projects list aufrufen.