首頁 > 後端開發 > Golang > 主體

建構 Ollama Cloud - 將本地推理擴展到雲端

WBOY
發布: 2024-07-18 00:38:11
原創
762 人瀏覽過

Ollama 主要是 llama.cpp 的包裝器,專為本地推理任務而設計。如果您正在尋找尖端的效能或功能,它通常不是您的首選,但它有它的用途,特別是在需要考慮外部依賴項的環境中。

本地人工智慧開發

使用 Ollama 進行本地 AI 開發時,設定簡單但有效。開發人員通常利用 Ollama 直接在本機電腦上執行推理任務。以下是使用 Ollama 的典型本地開發設定的直觀描述:

Typical Local Development with Ollama

此配置允許開發人員快速測試和迭代,而無需複雜的遠端伺服器通訊。它非常適合快速週轉至關重要的初始原型設計和開發階段。

從本地到雲端

從本地設定過渡到可擴展的雲端環境涉及從簡單的1:1 設定(一個使用者請求到一台推理主機)演變為更複雜的多對多(多個使用者請求到多個推理主機)配置。隨著需求的增加,這種轉變對於維持效率和反應能力是必要的。

以下是從本地開發轉向生產時的擴展情況:

View of Typical m:n Scaling

在此過渡期間採用簡單的方法可能會顯著增加應用程式的複雜性,特別是當會話需要在不同狀態之間保持一致性時。如果請求未最佳路由到最佳可用推理主機,則可能會出現延遲和效率低下。

此外,分散式應用程式的複雜性使得它們在本地測試具有挑戰性,這會減慢開發過程並增加生產環境中失敗的風險。

無伺服器

無伺服器運算抽象化了伺服器管理和基礎架構細節,使開發人員能夠專注於程式碼和業務邏輯。透過將請求處理和一致性維護與應用程式解耦,無伺服器架構簡化了擴充。

這種方法允許應用程式繼續專注於提供價值,解決許多常見的擴展挑戰,而不會給開發人員帶來基礎設施複雜性的負擔。

網路組裝

WebAssembly (Wasm) 透過將應用程式編譯成獨立的模組來解決依賴管理的挑戰。這使得應用程式在本地和雲端中更容易編排和測試,確保不同環境之間的一致性。

牛頭蛋白

建構 Ollama Cloud - 將本地推理擴展到雲端

Tau 是一個用於建構低維護和高度可擴展的雲端運算平台的框架。它在簡單性和可擴展性方面表現出色。 Tau 讓部署變得簡單,並支援運行本地雲端進行開發,從而允許對雲端基礎架構及其上運行的應用程式進行端到端 (E2E) 測試。

這種方法被 Taubyte 稱為“本地編碼等於全球生產”,可確保本地工作也能在全球範圍內工作,從而顯著簡化開發和部署流程。

使用 Orbit 插件系統將 Ollama 整合到 Tau 中

Tau 的插件系統(稱為 Orbit)透過將服務包裝到 WebAssembly 主機模組中,顯著簡化了將服務轉變為可管理元件的過程。這種方法允許 Tau 接手編排職責,簡化部署和管理流程。

Ollama 中的導出函數

為了使 Ollama 功能在 Tau 生態系統中可訪問,我們利用 Orbit 系統將 Ollama 的功能匯出為可調用端點。以下是在 Go 中導出端點的方法:

func (s *ollama) W_pull(ctx context.Context, module satellite.Module, modelNamePtr uint32, modelNameSize uint32, pullIdptr uint32) Error {
    model, err := module.ReadString(modelNamePtr, modelNameSize)
    if err != nil {
        return ErrorReadMemory
    }

    id, updateFunc := s.getPullId(model)

    if updateFunc != nil {
        go func() {
            err = server.PullModel(s.ctx, model, &server.RegistryOptions{}, updateFunc)
            s.pullLock.Lock()
            defer s.pullLock.Unlock()
            s.pulls[id].err = err
        }()
    }

    module.WriteUint64(pullIdptr, id)

    return ErrorNone
}
登入後複製

有關匯出函數的簡單範例,您可以參考 hello_world 範例。

定義後,這些函數現在透過衛星呼叫。 Export,可以將 Ollama 無縫整合到 Tau 的環境中:

func main() {
    server := new(context.TODO(), "/tmp/ollama-wasm")
    server.init()
    satellite.Export("ollama", server)
}
登入後複製

為 Ollama 插件編寫測試

測試插件是簡化和簡單的。以下是如何在 Go 中編寫無伺服器功能測試:

//export pull
func pull() {
    var id uint64
    err := Pull("gemma:2b-instruct", &id)
    if err != 0 {
        panic("failed to call pull")
    }
}
登入後複製

使用 Tau 的測試套件和 Go 建構器工具,您可以建立插件,將其部署在測試環境中,並執行無伺服器函數來驗證功能:

func TestPull(t *testing.T) {
    ctx := context.Background()

    // Create a testing suite to test the plugin
    ts, err := suite.New(ctx)
    assert.NilError(t, err)

    // Use a Go builder to build plugins and wasm
    gob := builder.New()

    // Build the plugin from the directory
    wd, _ := os.Getwd()
    pluginPath, err := gob.Plugin(path.Join(wd, "."), "ollama")
    assert.NilError(t, err)

    // Attach plugin to the testing suite
    err = ts.AttachPluginFromPath(pluginPath)
    assert.NilError(t, err)

    // Build a wasm file from serverless function
    wasmPath, err := gob.Wasm(ctx, path.Join(wd, "fixtures", "pull.go"), path.Join(wd, "fixtures", "common.go"))
    assert.NilError(t, err)

    // Load the wasm module and call the function
    module, err := ts.WasmModule(wasmPath)
    assert.NilError(t, err)

    // Call the "pull" function from our wasm module
    _, err = module.Call(ctx, "pull")
    assert.NilError(t, err)
}
登入後複製

Code

You can find the complete code here https://github.com/ollama-cloud/ollama-as-wasm-plugin/tree/main/建構 Ollama Cloud - 將本地推理擴展到雲端

What's Next?

You can now build LLM applications with ease. Here are the steps to get started:

  • Start locally using dream: Set up your local environment to develop and test your application.
  • Create a project: Begin a new project with Tau to harness its full potential.
  • Create your production cloud: Deploy your project in a production cloud environment.
  • Drop the plugin binary in the /tb/plugins folder.
  • Import your project into production
  • Show off!

以上是建構 Ollama Cloud - 將本地推理擴展到雲端的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!