Jetzt abonnieren, um Benachrichtigungen über neue Beiträge zu erhalten:

Streaming und größere Kontextlängen für Large Language Models in Workers AI

2023-11-14

Lesezeit: 3 Min.
Dieser Beitrag ist auch auf English, 繁體中文, Français, 日本語, 한국어, Español, und 简体中文 verfügbar.

Unsere mittels Grafikprozessor betriebene Serverless-Inferenzplattform Workers AI setzt auf dem weltumspannenden Netzwerk von Cloudflare auf. Sie bietet eine wachsende Auswahl an direkt einsetzbaren Modellen, die sich nahtlos in Workers einfügen und es Entwicklern erlauben, binnen weniger Minuten wirkmächtige und skalierbare KI-Anwendungen zu schaffen. Mithilfe von Workers AI wurden schon großartige Dinge entwickelt und wir können es nicht erwarten, zu sehen, was mit der schrittweisen Erweiterung der Plattform in Zukunft noch alles entstehen wird. Insofern freuen wir uns besonders, heute die Einführung einiger der am häufigsten nachgefragten Funktionen in diesem Zusammenhang bekannt geben zu können: das Streamen von Antworten für alle Large Language Models (LLM) bei Workers AI, größere Kontext- und Sequenzfenster sowie eine Variante des Llama-2-Modells mit voller Präzision.

Streaming LLMs and longer context lengths available in Workers AI

Wenn Sie ChatGPT schon einmal verwendet haben, sind Sie sich der Vorteile bewusst, die eine tokenweise Ausgabe der Antworten bietet. Intern arbeiten LLM, indem sie Antworten mittels wiederholter Inferenz nacheinander generieren: Beim dem vollständigen Output eines LLM handelt es sich im Grunde um eine Sequenz aus Hunderten oder Tausenden einzelner Vorhersagen. Obwohl es nur ein paar Millisekunden dauert, einen einzelnen Token (Bestandteil der Antwort) zu generieren, nimmt deshalb die Erstellung der gesamten Antwort mehr Zeit (und zwar ein paar Sekunden) in Anspruch. Die gute Nachricht ist, dass die Ausgabe der Antwort in dem Moment beginnen kann, in dem die ersten Token generiert werden. Anschließend werden weitere Token ergänzt, bis die Antwort vollständig ist. Für den Endnutzer ist das deutlich angenehmer: Wenn der Text nach und nach ausgegeben wird, sobald er verfügbar ist, signalisiert das sofortige Reaktionsfähigkeit. Zugleich hat der Endnutzer so Zeit, den Text zu lesen und zu interpretieren.

Künftig kann das Streamen von Antworten bei jedem von uns angebotenem LLM genutzt werden, darunter auch dem ausgesprochen beliebten Llama-2-Modell. So funktioniert’s:

„Server-Sent Events“: ein kleiner Schatz in der Browser-API

„Server-Sent Events“ sind leicht zu benutzen und serverseitig zu implementieren, standardisiert und bei vielen Plattformen nativ oder als Polyfill verfügbar. Sie decken eine Nische ab, indem sie einen Update-Stream vom Server verarbeiten und den Standard-Programmcode überflüssig machen, der sonst für die Verarbeitung des Ereignis-Streams erforderlich wäre.

.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-lt9p{background-color:#F3F3F3;text-align:left;vertical-align:top} .tg .tg-9qck{background-color:#F3F3F3;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}

Easy-to-use Streaming Bidirectional
fetch
Server-sent events
Websockets

Einfache Handhabung

Streaming

Bidirektional

curl -X POST \
"https://api.cloudflare.com/client/v4/accounts/<account>/ai/run/@cf/meta/llama-2-7b-chat-int8" \
-H "Authorization: Bearer <token>" \
-H "Content-Type:application/json" \
-d '{ "prompt": "where is new york?", "stream": true }'

data: {"response":"New"}

data: {"response":" York"}

data: {"response":" is"}

data: {"response":" located"}

data: {"response":" in"}

data: {"response":" the"}

...

data: [DONE]

fetch

import { Ai } from "@cloudflare/ai";
export default {
    async fetch(request, env, ctx) {
        const ai = new Ai(env.AI, { sessionOptions: { ctx: ctx } });
        const stream = await ai.run(
            "@cf/meta/llama-2-7b-chat-int8",
            { prompt: "where is new york?", stream: true  }
        );
        return new Response(stream,
            { headers: { "content-type": "text/event-stream" } }
        );
    }
}

const source = new EventSource("/worker-endpoint");
source.onmessage = (event) => {
    if(event.data=="[DONE]") {
        // SSE spec says the connection is restarted
        // if we don't explicitly close it
        source.close();
        return;
    }
    const data = JSON.parse(event.data);
    el.innerHTML += data.response;
}

„Server-Sent Events“

WebSockets

Fetch, „Server-Sent Events“ und WebSockets im Vergleich

Model Context length (in) Sequence length (out)
@cf/meta/llama-2-7b-chat-int8 2048 (768 before) 1800 (256 before)
@cf/meta/llama-2-7b-chat-fp16 3072 2500

Um mit bei den Textgenerierungsmodellen von Workers AI mit dem Streamen mittels „Server-Sent Events“ zu beginnen, setzen Sie den Parameter „stream“ in der Eingabe der Anfrage auf „true“. Dadurch werden das Antwortformat und der MIME-Type auf text/event-stream umgestellt.

Es folgt ein Beispiel für das Streamen mit der REST-API:

Und hier sehen Sie ein Beispiel für die Verwendung eines Worker-Skripts:

Wenn der von diesem Worker ausgegebene Ereignis-Stream in einer Browserseite angezeigt werden soll, sieht der clientseitige JavaScript-Code ungefähr so aus:

Sie können dieses simple Programm mit jeder einfachen HTML-Seite, komplizierten SPA unter Verwendung von React oder anderen Web-Frameworks zusammen benutzen.

Auf diese Weise wird dem Nutzer eine viel größere Interaktionsfähigkeit vermittelt. Er muss nun nicht mehr warten, bis die gesamte Antwortsequenz generiert wurde. Vielmehr wird ihm eine sich stetig aktualisierende Version der Seite angezeigt, während die Antwort schrittweise erstellt wird. Unter ai.cloudflare.com können Sie das Streamen ausprobieren.

Workers AI unterstützt das Streamen von textbasierten Anworten für das Llama-2-Modell und alle LLM, die wir künftig noch in unserer Sortiment aufnehmen werden.

Das ist aber noch nicht alles.

Höhere Genauigkeit, größere Kontext- und Sequenzlänge

Nach der Einführung von Workers AI wünschte sich unsere Community außerdem besonders oft die Möglichkeit, in unserem Llama-2-Modell längere Fragen stellen und längere Antworten erhalten zu können. Bei LLM bedeutet das eine höhere Kontextlänge (die Zahl der Token, die das Modell bei der Eingabe annimmt, bevor es eine Vorhersage trifft) und eine höhere Sequenzlänge (die Zahl der Token, die das Modell als Antwort generiert).

Wir haben uns das zu Herzen genommen und führen deshalb heute nicht nur das Streamen ein, sondern ergänzen unser Angebot auch um eine 16-Bit-Variante von Llama-2 mit voller Präzision. Außerdem haben wie die Kontext- und Sequenzlänge der bestehenden 8-Bit-Version erhöht.

.tg {border-collapse:collapse;border-spacing:0;} .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-9qck{background-color:#F3F3F3;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}

Modell

Kontextlänge (Eingabe)

Sequenzlänge (Ausgabe)

@cf/meta/llama-2-7b-chat-int8

2048 (bisher: 768)

1800 (bisher: 256)

@cf/meta/llama-2-7b-chat-fp16

3072

2500

Streaming, höhere Genauigkeit sowie größere Kontext- und Sequenzlängen stellen für den Nutzer eine Verbesserung dar und erlauben neue, vielfältigere Anwendungen, die Large Language Models in Workers AI nutzen.

Weitere Informationen und Optionen finden Sie in der Entwicklerdokumentation zu Workers AI. Sie haben Fragen oder Anmerkungen zu Workers AI? Dann schauen Sie doch einfach in der Cloudflare Community und dem Cloudflare Discord-Kanal vorbei.

Wenn Sie Interesse an maschinellem Lernen und Serverless-KI haben: Das Team von Cloudflare Workers AI entwickelt eine Plattform mit globalem Maßstab und Werkzeuge, die es unseren Kunden erlauben, schnell funktionierende, latenzarme Inferenzaufgaben über unser Netzwerk auszuführen. Und vielleicht findet sich ja auf unserer Stellenseite der richtige Job für Sie.

Wir schützen komplette Firmennetzwerke, helfen Kunden dabei, Internetanwendungen effizient zu erstellen, jede Website oder Internetanwendung zu beschleunigen, DDoS-Angriffe abzuwehren, Hacker in Schach zu halten, und unterstützen Sie bei Ihrer Umstellung auf Zero Trust.

Greifen Sie von einem beliebigen Gerät auf 1.1.1.1 zu und nutzen Sie unsere kostenlose App, die Ihr Internet schneller und sicherer macht.

Wenn Sie mehr über unsere Mission, das Internet besser zu machen, erfahren möchten, beginnen Sie hier. Sie möchten sich beruflich neu orientieren? Dann werfen Sie doch einen Blick auf unsere offenen Stellen.
Workers AICloudflare WorkersDeveloper PlatformJavaScriptServerless1.1.1.1 (DE)

Folgen auf X

Celso Martinho|@celso
Cloudflare|@cloudflare

Verwandte Beiträge

31. Oktober 2024 um 13:00

Moving Baselime from AWS to Cloudflare: simpler architecture, improved performance, over 80% lower cloud costs

Post-acquisition, we migrated Baselime from AWS to the Cloudflare Developer Platform and in the process, we improved query times, simplified data ingestion, and now handle far more events, all while cutting costs. Here’s how we built a modern, high-performing observability platform on Cloudflare’s network. ...