Ollama 主要是 llama.cpp 的包裝器,專為本地推理任務而設計。如果您正在尋找尖端的效能或功能,它通常不是您的首選,但它有它的用途,特別是在需要考慮外部依賴項的環境中。
使用 Ollama 進行本地 AI 開發時,設定簡單但有效。開發人員通常利用 Ollama 直接在本機電腦上執行推理任務。以下是使用 Ollama 的典型本地開發設定的直觀描述:
此配置允許開發人員快速測試和迭代,而無需複雜的遠端伺服器通訊。它非常適合快速週轉至關重要的初始原型設計和開發階段。
從本地設定過渡到可擴展的雲端環境涉及從簡單的1:1 設定(一個使用者請求到一台推理主機)演變為更複雜的多對多(多個使用者請求到多個推理主機)配置。隨著需求的增加,這種轉變對於維持效率和反應能力是必要的。
以下是從本地開發轉向生產時的擴展情況:
在此過渡期間採用簡單的方法可能會顯著增加應用程式的複雜性,特別是當會話需要在不同狀態之間保持一致性時。如果請求未最佳路由到最佳可用推理主機,則可能會出現延遲和效率低下。
此外,分散式應用程式的複雜性使得它們在本地測試具有挑戰性,這會減慢開發過程並增加生產環境中失敗的風險。
無伺服器運算抽象化了伺服器管理和基礎架構細節,使開發人員能夠專注於程式碼和業務邏輯。透過將請求處理和一致性維護與應用程式解耦,無伺服器架構簡化了擴充。
這種方法允許應用程式繼續專注於提供價值,解決許多常見的擴展挑戰,而不會給開發人員帶來基礎設施複雜性的負擔。
WebAssembly (Wasm) 透過將應用程式編譯成獨立的模組來解決依賴管理的挑戰。這使得應用程式在本地和雲端中更容易編排和測試,確保不同環境之間的一致性。
Tau 是一個用於建構低維護和高度可擴展的雲端運算平台的框架。它在簡單性和可擴展性方面表現出色。 Tau 讓部署變得簡單,並支援運行本地雲端進行開發,從而允許對雲端基礎架構及其上運行的應用程式進行端到端 (E2E) 測試。
這種方法被 Taubyte 稱為“本地編碼等於全球生產”,可確保本地工作也能在全球範圍內工作,從而顯著簡化開發和部署流程。
Tau 的插件系統(稱為 Orbit)透過將服務包裝到 WebAssembly 主機模組中,顯著簡化了將服務轉變為可管理元件的過程。這種方法允許 Tau 接手編排職責,簡化部署和管理流程。
為了使 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) }
測試插件是簡化和簡單的。以下是如何在 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) }
You can find the complete code here https://github.com/ollama-cloud/ollama-as-wasm-plugin/tree/main/建構 Ollama Cloud - 將本地推理擴展到雲端
You can now build LLM applications with ease. Here are the steps to get started:
以上是建構 Ollama Cloud - 將本地推理擴展到雲端的詳細內容。更多資訊請關注PHP中文網其他相關文章!