订阅以接收新文章的通知:

Workers AI 中大型语言模型的流式传输和更长的背景信息

2023-11-14

3 分钟阅读时间
这篇博文也有 EnglishFrançaisDeutsch日本語한국어Español繁體中文版本。

Workers AI 是我们的无服务器 GPU 驱动的推理平台,在 Cloudflare 的全球网络之上运行。它提供了越来越多的现成模型目录,这些模型可以使用 Workers 无缝运行,并使开发人员能够在几分钟内构建强大且可扩展的 AI 应用程序。我们已经看到开发人员使用 Workers AI 构建出了惊人的作品,随着我们继续扩展平台,我们迫不及待地想看到他们的最新成果。为此,今天我们很高兴地宣布推出一些饱受期待的新功能:Workers AI 上所有大型语言模型 (LLM) 的流式响应、更长的背景信息和序列窗口以及全精度 Llama-2 模型变体 。

Streaming LLMs and longer context lengths available in Workers AI

如果您以前使用过 ChatGPT,那么您就会熟悉响应流的好处,其中响应按令牌逐个流动。LLM 的内部工作方式是使用重复推理过程按顺序生成响应,LLM 模型的完整输出本质上是数百或数千个单独预测任务的序列。因此,生成一个令牌只需要几毫秒,而生成完整的响应则需要更长的时间,大约需要几秒钟。好消息是,我们可以在生成第一个令牌后立即开始显示响应,并追加每一个额外的令牌,直到响应完成。这将为最终用户带来更好的体验——随着文本的生成逐步显示文本,不仅能提供即时响应,还能让最终用户有时间阅读和解释文本。

截至今天,您可以对我们目录中的任何 LLM 模型使用响应流,包括非常流行的 Llama-2 模型。下面是它的工作原理。

Server-sent events:浏览器 API 中的宝藏

Server-sent events 易于使用、易于在服务器端实施、合乎标准,并且可在许多平台上原生或作为填充程序广泛使用。Server-sent events 填补了处理来自服务器的更新流的空白,处理事件流原本所需的样板代码如今已不再需要。

.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]

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 和 websocket

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

要开始在WorkersAI的文本生成模型上通过 server-sentevents 使用流式传输,请在请求输入中将“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 推出后,我们从社区听到的另一个最重要的请求是在我们的 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 团队正在构建一个全球规模的平台和工具,让我们的客户能够在我们的网络之上运行快速、低延迟的推理任务。请查看我们的职位页面,了解工作机会。

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
Workers AICloudflare WorkersDeveloper PlatformJavaScriptServerless1.1.1.1

在 X 上关注

Celso Martinho|@celso
Cloudflare|@cloudflare

相关帖子

2024年10月31日 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. ...