Subscribe to receive notifications of new posts:

Wir präsentieren Constellation, die KI für den Cloudflare-Lösungsstapel

05/15/2023

7 min read

Die Produkte und Funktionen im Ökosystem von Cloudflare Workers decken Rechenleistung, Hosting, Speicherplatz, Datenbanken, Streaming, Netzwerkdienste, Sicherheit und vieles mehr ab. Wir haben nachgewiesen, dass sich komplexe und weltweit skalierbare Anwendungen auf unserem Lösungsstapel entwickeln lassen, und dies auch dokumentiert, um zur Abkehr von traditionellen Software-Architekturen zu inspirieren.

Heute freuen wir uns, Constellation in den Lösungsstapel von Cloudflare aufnehmen zu können. Damit haben Entwickler die Möglichkeit, vortrainierte Modelle maschinellen Lernens und Inferenzaufgaben auf dem Cloudflare-Netzwerk auszuführen.

Ein weiterer Baustein unserer Supercloud

Maschinelles Lernen und künstliche Intelligenz (KI) sind in letzter Zeit in aller Munde. Tatsächlich nutzen wir diese Technologien aber schon seit Jahren im Alltag, selbst wenn uns das manchmal gar nicht bewusst ist. Unsere Handys, Computer, Autos und Helfer für das Smart Home sind nur einige Beispiele dafür. Diese Technologien sind allgegenwärtig.

Doch in den Entwickleralltag sind sie bislang noch nicht eingekehrt. Entwickler müssen häufig die Mathematik verstehen, auf der sie aufbauen. Hinzu kommt, dass Software und Tools in der Regel komplex und nicht unbedingt alle an einem Ort gebündelt sind. Außerdem sind die Hardware und Cloud-Dienste, die zum Betrieb der Frameworks und zur Verarbeitung der Daten benötigt werden, kostspielig.

Deshalb erweitern wir heute unseren Lösungsstapel um eine weitere Funktion, die es allgemein ermöglicht, Machine Learning-Modelle einzusetzen und Inferenzaufgaben auf Cloudflare Workers auszuführen.

Einführung von Constellation

Dank Constellation können Sie Inferenzaufgaben schnell und mit geringer Latenz mithilfe vortrainierter Machine Learning-Modell nativ auf Cloudflare Workers ausführen.

Hier sind ein paar Beispiele für Anwendungen, die mithilfe von Constellation ausgeführt werden können:

● Bild- oder Audioklassifizierung oder Objekterkennung

● Erkennung von Anomalien in Daten

● Übersetzung, Zusammenfassung oder Sentimentanalyse von Texten

● Verarbeitung natürlicher Sprache

● Sentimentanalyse

● Spracherkennung oder Text-zu-Sprache-Umwandlung

● Beantwortung von Fragen

Entwickler können alle unterstützten Modelle bei Constellation hochladen. Sie können sie unabhängig trainieren oder vortrainierte Modelle von Machine Learning-Plattformen wie HuggingFace oder ONNX Zooherunterladen.

Allerdings möchte nicht jeder Modelle trainieren oder das Internet nach noch nicht getesteten Modellen durchforsten. Aus diesem Grund wird Cloudflare auch eine Liste überprüfter und direkt einsatzbereiter Modelle bereitstellen.

Wir haben Constellation mit Blick auf benutzerfreundliche APIs so konzipiert, dass die Lösung Entwicklern ein großartiges Anwendererlebnis bietet. Hier ist ein Beispiel für den Einstieg.

Anwendung zur Bildklassifizierung

In diesem Beispiel werden wir eine Anwendung zur Bildklassifizierung entwickeln, die die Inferenz-API von Constellation und das Convolutional Neural Network (CNN) von SqueezeNet einsetzt, das mit mehr als einer Million Bildern aus der quelloffenen Datenbank ImageNetvortrainiert wurde und in der Lage ist, Bilder höchstens 1.000 Kategorien zuzuordnen.

SquezeNet nimmt einen Abgleich mit AlexNetvor, einem der ursprünglichen CNNs und Benchmarks für die Bildklassifizierung, ist dabei viel (ungefähr dreimal) schneller, erheblich (etwa 500-mal) kleiner und erreicht trotzdem eine vergleichbare Genauigkeit. Aufgrund ihrer geringen Größe ist die Lösung perfekt für den Einsatz auf tragbaren Geräten mit begrenzten Ressourcen und maßgeschneiderter Hardware geeignet.

Zunächst erstellen wir mit der ONNX-Laufzeitumgebung ein neues Constellation-Projekt. Wrangler verfügt nun über eine Constellation-Integration mit dem Schlagwort „constellation“.

$ npx wrangler constellation project create "image-classifier" ONNX

Jetzt erstellen wir die wrangler.toml-Konfigurationsdatei mit dieser Projektbindung:

# Top-level configuration
name = "image-classifier-worker"
main = "src/index.ts"
compatibility_date = "2022-07-12"

constellation = [
    {
      binding = 'CLASSIFIER',
      project_id = '2193053a-af0a-40a6-b757-00fa73908ef6'
    },
]

Installieren Sie die Client-API-Bibliotehk von Constellation:

$ npm install @cloudflare/constellation --save-dev

Laden Sie das vortrainierte SqueezeNet 1.1 ONNX-Modells in das Projekt hoch.

$ wget https://github.com/microsoft/onnxjs-demo/raw/master/docs/squeezenet1_1.onnx
$ npx wrangler constellation model upload "image-classifier" "squeezenet11" squeezenet1_1.onnx

Wie oben bereits erwähnt ordnet SqueezeNet Bilder nicht mehr als 1.000 Objektklassen zu. Diese Klassen nehmen die Gestalt einer Liste aus Synonymringen bzw. Synsets an. Ein Synset verfügt über eine Kennnummer (ID) und eine Beschriftung. Es leitet sich aus der WordNet-Datenbankterminologievon Princeton ab, die auch für die Beschriftungen der Bilddatenbank ImageNetverwendet wird.

Um die Ergebnisse von SqueezeNet in von Menschen lesbare Bildklassen zu übersetzen, wird eine Datei benötigt, die die Synset-IDs (die von dem Modell ausgegeben werden) den zugehörigen Beschriftungen zuordnet.

$ mkdir src; cd src
$ wget https://raw.githubusercontent.com/microsoft/onnxjs-demo/master/src/data/imagenet.ts

Zu guter Letzt müssen wir unser Bildklassifizierungsskript schreiben und implementieren:

import { imagenetClasses } from './imagenet';
import { Tensor, run } from '@cloudflare/constellation';

export interface Env {
    CLASSIFIER: any,
}

export default {
    async fetch(request: Request, env: Env, ctx: ExecutionContext) {
        const formData = await request.formData();
        const file = formData.get("file");
        const data = await file.arrayBuffer();
        const result = await processImage(env, data);
        return new Response(JSON.stringify(result));
    },
};

async function processImage(env: Env, data: ArrayBuffer) {
    const input = await decodeImage(data)

    const tensorInput = new Tensor("float32", [1, 3, 224, 224], input)

    const output = await run(env.CLASSIFIER, "MODEL-UUID", tensorInput);

    const probs = output.squeezenet0_flatten0_reshape0.value
    const softmaxResult = softmax(probs)
    const results = imagenetClasses(softmaxResult, 5);
    const topResult = results[0];
    return topResult
}

Dieses Skript liest ein Bild aus der Anfrage aus, entschlüsselt es in einen multidimensionalen float32-Tensor (zurzeit entschlüsseln wir nur PNGs, es können aber weitere Formate hinzugefügt werden), speist es in das in Constellation betriebene SqueezeNet-Modell ein, empfängt die Ergebnisse, ordnet sie anhand der ImageNet-Klassenliste zu und gibt für das Bild vom Menschen lesbare Beschriftungen aus.

Eigentlich ziemlich einfach, oder? Wir testen das jetzt einmal:

$ curl https://ai.cloudflare.com/demos/image-classifier -F file=@images/mountain.png | jq .name

alp

$ curl https://ai.cloudflare.com/demos/image-classifier -F file=@images/car.png | jq .name

convertible

$ curl https://ai.cloudflare.com/demos/image-classifier -F file=@images/dog.png | jq .name

Ibizan hound

Sie sehen hier die Wahrscheinlichkeiten in Aktion. Bei der Alm und dem Cabrio ist sich das Modell ziemlich sicher, bei dem Podenco Ibicenco ist die Wahrscheinlichkeit dagegen niedriger. Tatsächlich gehört der Hund auf dem Bild einer anderen Rasse an.

Diese kleine Applikation zeigt, wie leicht und schnell mit der Verwendung von Machine Learning-Modellen und Constellation begonnen werden kann, wenn Anwendungen auf Workers entwickelt werden. Sie können sich den vollständigen Quellcode hier ansehen und ihn selbst implementieren.

Transformers wurden von Google eingeführt. Es handelt sich um Deep Learning-Modelle, die entwickelt wurden, um sequenzielle Eingabedaten zu verarbeiten. Sie werden in der Regel zur Verarbeitung natürlicher Sprachen (Natural Language Processing – NLP) verwendet, etwa für Übersetzungen, Zusammenfassungen oder Sentimentanalysen, sowie für Aufgaben des computerbasierten Sehens (Computer Vision –CV) wie Bildklassifizierung.

Transformers.jsist eine beliebte Demo, die Transformer-Modelle aus HuggingFace lädt und sie in Ihrem Browser mit der zu WebAsssembly kompilierten Laufzeitumgebung ONNX betreibt. Wir haben eine Portierung für diese Demo vorgenommen, sodass sie stattdessen Constellation-APIs nutzt.

Hier ist der Link zu unserer Version: https://transformers-js.pages.dev/

Interoperabilität mit Workers

Interessant an Constellation ist auch, dass die Lösung nativ in Workers betrieben wird und daher mit anderen Produkten und APIs in unserem Lösungsstapel orchestriert werden kann. Sie können beispielsweise KV, R2, D1, Queues oder sogar E-Mails verwenden.

Hier ist ein Beispiel für einen Worker, der E-Mails von Ihrer Domain bei Cloudflare erhält, und zwar mittels E-Mail-Routing, Constellation mit dem t5-small-Sentimentanalysemodell betreibt, eine Kopfzeile mit dem sich daraus ergebenden Score hinzufügt und sie an die Bestimmungsadresse weiterleitet.

import { Tensor, run } from '@cloudflare/constellation';
import * as PostalMime from 'postal-mime';

export interface Env {
    SENTIMENT: any,
}

export default {
  async email(message, env, ctx) {
    const rawEmail = await streamToArrayBuffer(event.raw, event.rawSize);
    const parser = new PostalMime.default();
    const parsedEmail = await parser.parse(rawEmail);

    const input = tokenize(parsedEmail.text)
    const output = await run( env.SENTIMENT, "MODEL-UUID", input);


    var headers = new Headers();
    headers.set("X-Sentiment", idToLabel[output.label]);
    await message.forward("[email protected]", headers);
  }
}

Jetzt können Sie Gmail oder jeden beliebigen E-Mail-Client nutzen, um auf ihre Nachrichten eine Regel auf Grundlage der „X-Sentiment“-Kopfzeile anzuwenden. So können Sie beispielsweise E-Mails, die Beschimpfungen oder aggressive Ausdrücke enthalten, von Ihrem Posteingang fernhalten und diese stattdessen direkt in einen separaten Ordner abgelegen lassen.

Erste Schritte mit Constellation

Constellation ist ab heute als Private Beta verfügbar. Um sich auf die Warteliste setzen zu lassen, klicken Sie im Dashboard in der Registerkarte „Workers“ unter Ihrem Account auf die Schaltfläche „Zugang anfordern“ (Request access). Das Onboarding der Konten wird in mehreren Schüben erfolgen. Sobald Ihr Konto dafür aktiviert wurde, erhalten Sie eine E-Mail.

In der Zwischenzeit können Sie sich mithilfe der Entwicklerdokumentation für Constellationnäher mit dem Produkt, seiner Funktionsweise und den zugehörigen APIs vertraut machen. Constellation kann über Wrangler, unser Kommandozeilen-Tool zur Konfiguration, Entwicklung und Implementierung von Anwendungen mit Cloudflare-Entwicklerprodukten, verwendet oder direkt im Dashboard-Interface verwaltet werden.

Uns interessiert sehr, wie Sie Machine Learning/KI mit Ihren Anwendungen einsetzen möchten. Constellation wird sich mit höheren Obergrenzen, eine größerer Zahl unterstützter Umgebungen und größeren Modellen weiter verbessern, aber wir würden gern Ihre Meinung hören. Ihr Feedback wird auf jeden Fall in unsere Entscheidungen hinsichtlich unseres künftigen Angebots einfließen.

Es wäre noch eine letzte Sache anzumerken: In diesem Beitrag ging es darum, wie Sie Workers erstellen können, die Constellation nutzen. Constellation selbst wurde aber ebenfalls mithilfe von WebAssembly, Workers, R2 und unseren APIs entwickelt. In Kürze werden wir in einem weiteren Blogbeitrag näher auf die Entwicklung eingehen.

Sie können wie gewohnt über unseren Discord-Kanal für Entwickler (indem Sie dem #constellation-Kanal beitreten) oder über das Community-Forum mit uns in Kontakt treten. Unser Team ist für Sie da.

We protect entire corporate networks, help customers build Internet-scale applications efficiently, accelerate any website or Internet application, ward off DDoS attacks, keep hackers at bay, and can help you on your journey to Zero Trust.

Visit 1.1.1.1 from any device to get started with our free app that makes your Internet faster and safer.

To learn more about our mission to help build a better Internet, start here. If you're looking for a new career direction, check out our open positions.
Developer Week (DE)AI (DE)Cloudflare Workers (DE)Product News (DE)Deutsch

Follow on X

Celso Martinho|@celso
Rita Kozlov|@ritakozlov_
Cloudflare|@cloudflare

Related posts

April 05, 2024 1:01 PM

Browser Rendering-API allgemein verfügbar, Einführung von Cloudflare Snippets, SWR, und Bereitstellung von Workers for Platforms für alle Nutzer

Browser Rendering-API ist jetzt für alle zahlenden Workers-Kunden verfügbar und bietet auch eine verbesserte Sitzungsverwaltung...

April 04, 2024 1:05 PM

Neue Tools für die Produktionssicherheit — Gradual Deployments, Source Maps, Rate Limiting und neue SDKs

Heute geben wir fünf Updates bekannt, die Ihnen noch mehr Möglichkeiten bieten: Gradual Deployments, Source Mapped Stack Traces in Tail Workers, eine neue Rate Limiting API, brandneue API SDKs und Updates für Durable Objects – alle mit Blick auf geschäftskritische Produktionsdienste...

April 03, 2024 1:30 PM

R2 fügt Ereignisbenachrichtigungen, Unterstützung für Migrationen von Google Cloud Storage und eine Speicherebene mit seltenem Zugriff hinzu

Wir freuen uns, drei neue Funktionen für Cloudflare R2 ankündigen zu können: Ereignisbenachrichtigungen, Unterstützung für Migrationen von Google Cloud Storage und eine Speicherebene für seltenen Zugriff...