訂閱以接收新文章的通知:

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日 下午1: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. ...

2024年10月25日 下午1:00

Elephants in tunnels: how Hyperdrive connects to databases inside your VPC networks

Hyperdrive (Cloudflare’s globally distributed SQL connection pooler and cache) recently added support for directing database traffic from Workers across Cloudflare Tunnels. We dive deep on what it took to add this feature....