Workers AIは、Cloudflareのグローバルネットワーク上で動作するサーバーレスGPU駆動の推論プラットフォームです。Workersとシームレスに連携し、開発者が数分で強力でスケーラブルなAIアプリを構築できるようにする、既製モデルの増加し続けるカタログを提供しています。すでに開発者がWorkers AIを使用して驚くべきことを成し遂げており、プラットフォームを拡大し続ける中で彼らがどのようなことをするかを見るのが楽しみです。そのために、今日は以下、いくつかの最も要望の多かった新機能であるすべての大規模言語モデル(LLM)に対するストリーミング応答、より大きなコンテキストとシーケンスウィンドウ、そして完全な精度のLlama-2モデルのバリアントを発表できることを嬉しく思います。
もし以前にChatGPTをご使用されたことがあれば、トークン単位でレスポンスが流れてくるレスポンスストリーミングの利点はよくご存知でしょう。LLMは内部的には、推論を繰り返すプロセスを用いてレスポンスを逐次生成することで動作します。LLMモデルの完全な出力は、基本的に数百から数千の個々の予測タスクのシーケンスです。このため、トークンの生成には数ミリ秒しかかかりませんが、完全なレスポンスの生成には数秒単位で時間がかかります。良いニュースは、最初のトークンが生成されたらすぐにレスポンスを表示し始め、レスポンスが完了するまでトークンを追加していくことができるということです。これにより、エンドユーザーのエクスペリエンスが大幅に向上します。生成されたテキストを段階的に表示することで、即座に応答するだけでなく、エンドユーザーがテキストを読んで解釈する時間をも確保できます。
本日より、カタログ内の人気モデルであるLlama-2モデルを含む、どのLLMモデルに対してもレスポンスストリーミングを利用できるようになりました。動作方法は以下の通りです。
サーバー送信イベント:ブラウザAPIの中での小さな宝石
サーバー送信イベントは使いやすく、サーバーサイドで実装が簡単で、標準化されており、多くのプラットフォームでネイティブにまたはポリフィルとして広く利用可能です。サーバー送信イベントは、サーバーからの更新ストリームを処理するニッチな用途を満たし、イベントストリームを処理するためにそれ以外に必要なボイラープレートコードを排除します。
.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 | ✅ | ✅ |
使いやすい
ストリーミング
双方向
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]
フェッチ
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;
}
サーバー送信イベント
✅
✅
Websockets
✅
✅
フェッチ、サーバー送信イベント、およびWebSocketsを比較
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 |
Workers AIのテキスト生成モデルでサーバー送信イベントを使用するには、リクエストの入力で"stream"パラメータをtrueに設定します。これにより、レスポンスのフォーマットとmime-type
がtext/event-stream
に変更されます。
以下は、REST APIを使用してストリーミングを行う例です:
以下は、Workerスクリプトを使用した例です:
このWorkerからの出力イベントストリームをブラウザページで消費する場合、クライアントサイドのJavaScriptは次のようになります:
このシンプルなコードは、簡単なHTMLページだけでなく、Reactや他のWebフレームワークを使用した複雑なSPAにも利用できます。
これにより、ユーザーにとってはページが逐次的に更新されるため、全体のレスポンスシーケンスが生成されるまでスピナーで待つのではなく、よりインタラクティブな体験が得られます。ai.cloudflare.comでストリーミングをお試しください。
Workers AIは、Llama-2モデルおよび将来的にカタログに追加するすべてのLLMモデルに対して、テキストのストリーミング応答をサポートしています。
しかし、それだけではありません。
高い精度、より長いコンテキストおよびシーケンスの長さ
Workers AIの発売後、コミュニティから寄せられたもう1つの主要な要望は、Llama-2モデルでのより長い質問と回答のサポートでした。LLMの用語では、これはコンテキストの長さ(予測を行う前にモデルが入力として受け取るトークンの数)とシーケンスの長さ(モデルがレスポンスで生成するトークンの数)の増加につながります。
その要望にお応えすべく、ストリーミングと連動して、今日はカタログにより高い16ビットのフルプレシジョンなLlama-2バリアントを追加し、既存の8ビットバージョンのコンテキストとシーケンスの長さを増やしています。
.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}
モデル
コンテキストの長さ(入力)
シーケンスの長さ(出力)
@cf/meta/llama-2-7b-chat-int8
2048(以前は768)
1800(以前は256)
@cf/meta/llama-2-7b-chat-fp16
3072
2500
ストリーミング、高い精度、およびより長いコンテキストとシーケンスの長さは、大規模言語モデルをWorkers AIで使用することにより、より良いユーザーエクスペリエンスを提供し、新しい、より豊かなアプリを可能にします。
より詳細な情報やオプションについては、Workers AIの開発者ドキュメントをご確認ください。Workers AIに関する質問やフィードバックがあれば、ぜひCloudflareコミュニティまたはCloudflare Discordでお知らせください。機械学習やサーバーレスAIにご興味をお持ちの場合、Cloudflare Workers AIチームは、当社のネットワーク上で高速で低遅延の推論タスクを実行できるようにする、グローバル規模のプラットフォームとツールを構築しています。よろしければ求人情報ページをご確認ください。