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

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

相关帖子