本地快速部署谷歌開放模型Gemma教程(基于WasmEdge)

本地快速部署谷歌開放模型Gemma教程(基于WasmEdge)

  • 一、介紹 Gemma
  • 二、部署 Gemma
    • 2.1 部署工具
    • 2.1 部署步驟
  • 三、構建超輕量級 AI 代理
  • 四、總結

一、介紹 Gemma

在這里插入圖片描述
Gemma是一系列輕量級、最先進的開放式模型,采用與創建Gemini模型相同的研究和技術而構建。可以直接運行在本地的電腦上,無GPU也可以運行,只用CPU即可,只不過速度慢點。

二、部署 Gemma

2.1 部署工具

使用 Linux 環境 + WasmEdge 一個工具部署Gemma,WasmEdge 用來運行模型。

WasmEdge:https://github.com/wasmedge/wasmedge

🤩 WasmEdge 是在您自己的設備上運行 LLM 的最簡單、最快的方法。🤩

WasmEdge 是一個輕量級、高性能且可擴展的 WebAssembly 運行時。它是當今最快的 Wasm 虛擬機。WasmEdge 是CNCF主辦的官方沙箱項目。其用例包括現代 Web 應用程序架構(同構和 Jamstack 應用程序)、邊緣云上的微服務、無服務器 SaaS API、嵌入式功能、智能合約和智能設備。

在這里插入圖片描述

2.1 部署步驟

  1. 安裝具有 LLM 支持的 WasmEdge

可以從一行命令開始安裝 WasmEdge 運行時,并提供 LLM 支持。

curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash -s -- --plugins wasmedge_rustls wasi_nn-ggml

使用選項傳遞插件列表--plugins,安裝wasmedge_rustlswasi_nn-ggml插件。wasmedge_rustls插件以啟用 TLS 和 HTTPS 網絡,為啟動API服務提供支持。wasi_nn-ggml使 WasmEdge 能夠在大型語言模型(例如LMMs的 gemma)上運行人工智能推理程序。

安裝完成后執行source /home/server/.bashrc,使wasmedge命令立即生效。

或者可以按照此處的安裝指南手動下載并復制 WasmEdge 安裝文件。

  1. 在 Wasm 中下載 LLM 聊天應用程序

接下來,獲取超小型 2MB 跨平臺二進制文件 - LLM 聊天應用程序,該應用程序允許您在命令行上與模型聊天。它證明了效率,不需要其他依賴項并提供跨各種環境的無縫操作,這個 2M 的小 Wasm 文件是從 Rust 編譯而來的。

curl -LO https://github.com/LlamaEdge/LlamaEdge/releases/latest/download/llama-chat.wasm
  1. 下載Gemma-7b-it 模型 GGUF 文件,由于模型大小為5.88G,下載可能需要一段時間。
curl -LO https://huggingface.co/second-state/Gemma-7b-it-GGUF/resolve/main/gemma-7b-it-Q5_0.gguf

模型下載匯總:https://github.com/LlamaEdge/LlamaEdge/blob/main/models.md

WasmEdge 還支持 Llama2、CodeLlama、Codeshell、Mistrial、MiscialLite、TinyLlama、Baichuan、BELLE、Alpaca、Vicuna、OpenChat、Starcoder、OpenBuddy 等等!

  1. 在 CLI 上與 Llama2 7b 模型聊天

現在您已完成所有設置,您可以開始使用命令行與 Llama2 7b 聊天支持的 LLM 聊天。

wasmedge --dir .:. --nn-preload default:GGML:AUTO:gemma-7b-it-Q5_0.gguf llama-chat.wasm -p gemma-instruct -c 4096

便攜式 Wasm 應用程序會自動利用我設備上的硬件加速器(例如 GPU)。

[You]:
Create JSON for the following: There are 3 people, two males, One is named Mark. Another is named Joe. And a third person, who is a woman, is named Sam. The women is age 30 and the two men are both 19.[Bot]:
json
{"people": [{"name": "Mark","age": 19},{"name": "Joe","age": 19},{"name": "Sam","age": 30}]
}

在這里插入圖片描述

您可以使用同一llama-chat.wasm文件來運行其他 LLM,例如 OpenChat、CodeLlama、Mistral 等。

三、構建超輕量級 AI 代理

  1. 創建兼容OpenAI的API服務

當您使用領域知識或自托管 LLama2 模型微調模型時,僅使用 CLI 運行模型是不夠的。接下來,我們為開源模型設置兼容 OpenAI 的 API 服務,然后我們可以將微調后的模型集成到其他工作流程中。

假設您已經安裝了帶有 ggml 插件的 WasmEdge 并下載了您需要的模型。

首先,通過終端下載Wasm文件來構建API服務器,它也是一個跨平臺的便攜式 Wasm 應用程序,可以在許多 CPU 和 GPU 設備上運行。

curl -LO https://github.com/LlamaEdge/LlamaEdge/releases/latest/download/llama-api-server.wasm
  1. 下載聊天機器人 Web UI,以通過聊天機器人 UI 與模型進行交互。
curl -LO https://github.com/LlamaEdge/chatbot-ui/releases/latest/download/chatbot-ui.tar.gz
tar xzf chatbot-ui.tar.gz
rm chatbot-ui.tar.gz
  1. 使用以下命令行啟動模型的 API 服務器。
wasmedge --dir .:. --nn-preload default:GGML:AUTO:gemma-7b-it-Q5_0.gguf llama-api-server.wasm -p gemma-instruct -c 4096

然后,看到連接已建立后,打開瀏覽器訪問http://0.0.0.0:8080/即可使用可視化操作頁面聊天。

server@dev-fj-srv:~/code$ wasmedge --dir .:. --nn-preload default:GGML:AUTO:gemma-2b-it-Q5_0.gguf llama-api-server.wasm -p gemma-instruct   -c 4096
[2024-03-01 09:46:45.391] [error] instantiation failed: module name conflict, Code: 0x60
[2024-03-01 09:46:45.391] [error]     At AST node: module
[INFO] Socket address: 0.0.0.0:8080
[INFO] Model name: default
[INFO] Model alias: default
[INFO] Prompt context size: 4096
[INFO] Number of tokens to predict: 1024
[INFO] Number of layers to run on the GPU: 100
[INFO] Batch size for prompt processing: 512
[INFO] Temperature for sampling: 1
[INFO] Top-p sampling (1.0 = disabled): 1
[INFO] Penalize repeat sequence of tokens: 1.1
[INFO] Presence penalty (0.0 = disabled): 0
[INFO] Frequency penalty (0.0 = disabled): 0
[INFO] Prompt template: GemmaInstruct
[INFO] Log prompts: false
[INFO] Log statistics: false
[INFO] Log all information: false
[INFO] Starting server ...
[INFO] Plugin version: b2230 (commit 89febfed)
[INFO] Listening on http://0.0.0.0:8080

在這里插入圖片描述

您可以使用以下命令行來嘗試您的模型。

curl -X POST http://localhost:8080/v1/chat/completions \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"messages":[{"role":"system", "content": "You are a helpful assistant. Answer each question in one sentence."}, {"role":"user", "content": "Who is Robert Oppenheimer?"}], "model":"llama-2-chat"}'

四、總結

此教程用于基于 WasmEdge 系統的部署,可根據自身需求定制部署環境,靈活調整配置參數,滿足個性化需求。對模型和數據擁有完全控制權,可自由進行二次開發和擴展。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713716.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

持續集成(CICD)- Jenkins插件安裝失敗解決辦法

解決辦法:將插件安裝更新源需要改成國內鏡像源 具體步驟如下: 步驟一:修改Jenkins工作目錄下的 hudson.model.UpdateCenter.xml 文件,將url 改為http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 步驟二…

RuoYi-Vue-Plus功能分析-jackson配置

文章目錄 前言一、配置文件二、配置類三、注解四、json工具類1. 工具內容2. 使用工具 前言 前端在給我發送請求的時候一般包含三個部分url,header,body。那么就會涉及我們后端如何接收這些請求參數并且我們處理完畢參數后前端又如何接收參數 通過url傳…

代碼隨想錄刷題筆記 DAY 37 | 動態規劃理論基礎 | 斐波那契數 No.509 | 爬樓梯 No.70 | 使用最小花費爬樓梯 No.746

文章目錄 Day 3700. 動態規劃理論基礎01. 斐波那契數&#xff08;No. 509&#xff09;<1> 題目<2> 筆記<3> 代碼 02. 爬樓梯&#xff08;No. 70&#xff09;<1> 題目<2> 筆記<3> 代碼 03. 使用最小花費爬樓梯&#xff08;No. 746&#xff…

ECMAScript-262 @2023版本中的關鍵字和保留字

1、什么是標識符&#xff1f; 所謂標識符&#xff0c;就是javascript里的變量、函數、屬性或函數參數的名稱&#xff0c;可由一個或多個字符組成&#xff0c;當然標識符有命名規范 標識符第一個字符必須是 一個字母、下劃線&#xff08;_&#xff09;或美元符號&#xff08;$…

ONLYOFFICE文檔8.0全新發布:私有部署、卓越安全的協同辦公解決方案

ONLYOFFICE文檔8.0全新發布&#xff1a;私有部署、卓越安全的協同辦公解決方案 文章目錄 ONLYOFFICE文檔8.0全新發布&#xff1a;私有部署、卓越安全的協同辦公解決方案摘要&#x1f4d1;引言 &#x1f31f;正文&#x1f4da;一、ONLYOFFICE文檔概述 &#x1f4ca;二、ONLYOFFI…

【新書推薦】10.2 分支程序設計

稍微復雜一些的程序通常需要做某種條件判斷&#xff0c;然后再決定程序的執行流程。當然也可以無條件跳轉到程序的另一處地址開始執行。本節我們將詳細介紹分支結構的程序設計方法。 針對功能較為復雜的程序&#xff0c;程序開發有一套標準的流程&#xff0c;我們將10.1節中的五…

計算機網絡【網絡安全】

計算機網絡——網絡安全 一、網絡安全問題概述 網絡安全威脅 網絡安全面臨兩大類威脅&#xff0c;被動攻擊和主動攻擊 被動攻擊 指攻擊者從網絡上竊聽他人的通信內容&#xff0c;通常把這類攻擊稱為截獲。 主動攻擊 篡改 攻擊者故意篡改網絡上傳送的報文 惡意程序 拒絕服…

InnoDB索引與優化篇(5)-InnoDB中的查詢優化策略

InnoDB是MySQL數據庫中一種常用的存儲引擎&#xff0c;它具有高性能和可靠性。查詢優化是數據庫開發中非常重要的一環&#xff0c;它能夠幫助我們提高數據庫查詢的效率和性能。在本篇博客中&#xff0c;我們將介紹一些在使用InnoDB存儲引擎時進行查詢優化的常用策略&#xff0c…

貪心 Leetcode 455 分發餅干

分發餅干 Leetcode 455 學習記錄自代碼隨想錄 假設你是一位很棒的家長&#xff0c;想要給你的孩子們一些小餅干。但是&#xff0c;每個孩子最多只能給一塊餅干。 對每個孩子 i&#xff0c;都有一個胃口值 g[i]&#xff0c;這是能讓孩子們滿足胃口的餅干的最小尺寸&#xff1…

神經網絡算法:卷積神經網絡

神經網絡算法&#xff0c;也稱為人工神經網絡算法&#xff0c;是一種模仿人腦神經網絡結構和功能的計算模型。它由多個神經元相互連接而成的網絡組成&#xff0c;每個神經元都有輸入和輸出&#xff0c;并通過學習算法來調整連接權重&#xff0c;從而實現對輸入數據的模式識別和…

JavaScript Web Socket 詳解

Web Socket ? Web Socket&#xff08;套接字&#xff09;的目標是通過一個長時連接實現與服務器全雙工、雙向的通信。在 JavaScript 中創建 Web Socket 時&#xff0c;一個 HTTP 請求會發送到服務器以初始化連接。服務器響應后&#xff0c;連接使用 HTTP 的 Upgrade 頭部從 H…

12、窗口看門狗

目錄 1、窗口看門狗概述 2、常用寄存器和庫函數配置 3、窗口看門狗實驗 1、窗口看門狗概述 之所以稱為窗口就是因為其喂狗時間是一個有上下限的范圍內&#xff08;窗口&#xff09;&#xff0c;你可以通過設定相關寄存器&#xff0c;設定其上限時間&#xff08;下限固定&…

數據結構 棧和隊列 力扣例題AC——代碼以及思路記錄

20. 有效的括號 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。每個右括號都有一個對應…

mysql使用連接池

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、mysql連接池&#xff1f;二、使用步驟1.引入庫 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 例如&#xff1a; 提示&#xff1a…

深入理解Flutter中的StreamSubscription和StreamController

在Flutter中&#xff0c;StreamSubscription和StreamController是處理異步數據流的重要工具。它們提供了一種方便的方式來處理來自異步事件源的數據。本文將深入探討它們的區別以及在實際應用中的使用場景。 StreamSubscription StreamSubscription代表了對數據流的訂閱&…

代碼隨想錄算法訓練營番外 刷題日記0301 || 29、兩數相除,31、下一個排列

29、兩數相除 思路&#xff1a;不斷相減就是求解的最直接方法&#xff0c;我這樣計算時間復雜度有點高 // 時間復雜度O(count*divisor) // 空間復雜度O(1)class Solution {int res 0;public int divide(int dividend, int divisor) {// dividend 是被除數if(dividend 0) …

技術棧選型的時候,ruby、go、java、vue、react應該怎么選擇?

選擇適合項目需求、團隊技術背景和偏好、開發速度、性能要求以及可擴展性的技術棧和框架是一個綜合考慮的過程&#xff0c;沒有一種通用的最佳選擇&#xff0c;取決于具體情況。 選擇Vue.js或React應該綜合考慮項目的需求、團隊的技術背景和偏好、生態系統的支持和發展趨勢等因…

隨記-點選驗證碼

文字驗證碼&#xff08;點擊文字&#xff09; 模板匹配&#xff08;從一張圖片中尋找 icon&#xff09;&#xff0c;放棄&#xff0c;目前準確率不高&#xff0c;且處理過程復雜 灰度處理將 complete_image_path 截取并另存為 target_image_path&#xff0c; verify_image_path…

WPF真入門教程30--順風物流單據管理系統

1、教程回顧 到現在為止&#xff0c;真入門系列教程已完成了29刺由淺入深地講解&#xff0c;當然不可能講到了WPF的所有技能點&#xff0c;但讀者看到了wpf的內部各種功能及之間的聯系&#xff0c;在此基礎上&#xff0c;提供一個完整有效的綜合項目&#xff0c;本項目采用的是…

c++知識點之 --this

在成員函數中存在。struct和class每個成員函數都隱含一個名為this的指針形參&#xff0c;并且它是該成員函數的第一個參數&#xff0c;當某個對象調用成員函數時&#xff0c;就會把該對象的地址傳給被調用成員函數的隱式形參this。 this是一個指針 &#xff0c;存放的是當前對象…