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.
$ npx wrangler constellation project create "image-classifier" ONNX
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.
# 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'
},
]
Anwendung zur Bildklassifizierung
$ npm install @cloudflare/constellation --save-dev
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.
$ wget https://github.com/microsoft/onnxjs-demo/raw/master/docs/squeezenet1_1.onnx
$ npx wrangler constellation model upload "image-classifier" "squeezenet11" squeezenet1_1.onnx
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“.
$ mkdir src; cd src
$ wget https://raw.githubusercontent.com/microsoft/onnxjs-demo/master/src/data/imagenet.ts
Jetzt erstellen wir die wrangler.toml-Konfigurationsdatei mit dieser Projektbindung:
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
}
Installieren Sie die Client-API-Bibliotehk von Constellation:
Laden Sie das vortrainierte SqueezeNet 1.1 ONNX-Modells in das Projekt hoch.
$ 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
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.
Zu guter Letzt müssen wir unser Bildklassifizierungsskript schreiben und implementieren:
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:
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.
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);
}
}
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.
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.