DeepSeek本地部署

DeepSeek可以在網頁端使用,但是有些時候可能不是很穩定,除了網頁端,也能通過本地部署來使用。

一、Ollama本地安裝Deepseek R1 模型

Ollama官網:https://ollama.com/,打開官網,然后點擊下載,之后安裝到本地。但默認從github下載比較慢,可以用這個github加速: https://ghfast.top/
打開網頁并輸入如下下載鏈接:https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe

然后點擊下載按鈕,之后安裝exe文件到本地,Ollama的大模型默認下到C盤,對空間占用比較大確保C盤空間夠大。
如何更改?見后面附錄描述。

安裝界面

官方建議:應該至少有 8 GB 可用 RAM 來運行 7 B 型號,16 GB 來運行 13 B 型號,32 GB 來運行 33 B 型號。

然后打開Ollama 的模型列表,搜索到DeepSeek R1,
https://ollama.com/library/deepseek-r1

像我們普通的電腦安裝1.5B、7B就可以使用,然后在【右上角的的代碼】復制在命令行中運行。


輸入【ollama list】,就可以查看安裝的模型。

ollama run deepseek-r1:1.5b啟動模型,run后面的參數是上圖的模型名稱。第一次運行會下載相關的鏡像文件。


安裝需要一段時間,我們等一下就可以等success,就代表安裝成功。

第二次運行無需下載過程,直接進入命令行交互頁面。

測試一下問答效果:


API方式調用DeepSeek:
curl http://localhost:11434/api/generate -d "{\"model\":\"deepseek-r1:1.5b\", \"prompt\":\"介紹一下大模型在2025年有哪些亮點?\", \"stream\": false}"

接口請求支持 stream 模式,上邊這個請求響應 10s 左右,如果使用 stream 模式,體驗會更好。
curl http://localhost:11434/api/generate -d "{\"model\":\"deepseek-r1:1.5b\", \"prompt\":\"介紹一下大模型在2025年有哪些亮點?\", \"stream\": true}"

二、其他命令

ollama serve Start ollama
運行之后,訪問 localhost:11434,查看Ollama是否正常運行:

ollama show deepseek-r1:1.5b Show information for a model

ollama ps List running models

ollama stop Stop a running model

三、Ollama運行本地模型

Ollama 通常支持 GGUF 等格式的模型,而 .pt 文件一般是 PyTorch 保存的模型文件,不能直接被 Ollama 使用。若要使用 Ollama 與本地 .pt 模型進行交互,需要將 .pt 模型轉換為 Ollama 支持的格式。

    import torch

    # 加載 .pt 模型
    try:
        # 設置 weights_only=True 來加載模型權重
        model_pt = torch.load('GuoPT.pt', weights_only=True)
    except Exception as e:
        print(f"加載模型時出現錯誤: {e}")

    # 這里需要根據具體模型架構和 GGUF 格式要求進行處理
    # 例如,提取模型的權重、偏置等參數,并按照 GGUF 格式進行存儲
    # 由于 GGUF 格式較為復雜,具體實現需要參考相關文檔和規范

    # 保存轉換后的模型
    # 這里只是示例,實際保存為 GGUF 格式需要更詳細的處理
    torch.save(model_pt, 'converted_model.gguf')

得到轉換后的模型文件。


3.1 將轉換后的模型添加到 Ollama

轉換完成后,將轉換后的 GGUF 模型添加到 Ollama 中。在終端中輸入以下命令啟動 Ollama 服務:

ollama serve

創建Modelfile文件:
在你的工作目錄中創建一個名為Modelfile的文本文件(擴展名可以省略)。在文件中寫入一句話,指定GGUF模型文件的路徑。例如:FROM ./path/to/your-model.gguf
創建Ollama模型:打開終端或命令行界面,運行以下命令來創建Ollama模型:
ollama create my_llama_model -f Modelfile
其中,my_llama_model是你為模型指定的名稱,-f選項后面跟的是Modelfile文件的路徑。

檢查模型是否創建成功:運行以下命令來檢查Ollama中是否已包含你創建的模型:
ollama list
你應該能在列表中看到你的模型名稱。
運行模型:一旦模型創建成功,你就可以使用以下命令來運行它:
ollama run my_llama_model
此時,Ollama將加載你指定的GGUF模型文件,并運行該模型。

3.2 使用 Ollama 與模型進行交互
3.2.1 命令行交互

添加模型成功后,在終端中使用 ollama run 命令與模型進行交互:

ollama run my_converted_model

輸入問題后,按下回車鍵,模型會生成相應的回答。若要結束交互,按下 Ctrl + C

3.2.2 API 交互

也可以通過 API 的方式與模型進行交互,以下是一個 Python 示例:

import requests

url = "http://localhost:11434/api/generate"
data = {
    "model": "my_converted_model",
    "prompt": "請介紹一下人工智能",
    "stream": False
}

response = requests.post(url, json=data)
if response.status_code == 200:
    result = response.json()
    print(result["response"])
else:
    print(f"請求失敗,狀態碼: {response.status_code}")
3.2.3 Web頁面交互

Ollama有個開源的WebUI,但是需要安裝Node.js、Docker等。索性自己寫了一個輕量級的前端頁面與DeepSeek R1交互(實質是與Ollama的API進行交互,API的入參指定模型名稱)。
如果頁面直接請求http://localhost:11434/api/generate會有跨域問題,后端會拒絕頁面請求。由于我們無法修改Ollama的代碼,結合上面我們通過Python代碼調用正常,我們用Python寫個代理服務器,讓頁面請求代理(下述代碼執行了CORS(app) # 允許所有來源的跨域請求),代理再請求后端API。

使用 Flask 包裝 Ollama 的 API,代理服務器文件名:OllamaProxy.py,具體代碼:

from flask import Flask, request, jsonify
from flask_cors import CORS
import requests

app = Flask(__name__)
CORS(app)  # 允許所有來源的跨域請求

@app.route('/api/generate', methods=['POST'])
def generate():
    data = request.get_json()
    url = "http://localhost:11434/api/generate"
    response = requests.post(url, json=data)
    if response.status_code == 200:
        result = response.json()
        return jsonify(result)
    else:
        return jsonify({"error": f"請求失敗,狀態碼: {response.status_code}"}), response.status_code

if __name__ == '__main__':
    app.run(host='localhost', port=5000)  # 可以選擇不同的端口

啟動代理服務器:python OllamaProxy.py

成功啟動后的代理服務

JS代碼:

// 獲取 DOM 元素
const chatContainer = document.getElementById('chat-container');
const userInput = document.getElementById('user-input');
const sendButton = document.getElementById('send-button');

// 發送消息的函數
function sendMessage() {
    const message = userInput.value.trim();
    if (message === '') return;

    // 顯示用戶輸入的消息
    displayMessage(message, 'user');

    // 清空輸入框
    userInput.value = '';

    // 構建請求數據
    const data = {
        model: "deepseek-r1:7b",
        prompt: message,
        stream: false
    };

    // 發送 POST 請求到后端 API
    fetch("http://localhost:5000/api/generate", {
        method: 'POST',
        // mode: 'no-cors',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
      .then(response => {
            if (!response.ok) {
                throw new Error(`請求失敗,狀態碼: ${response.statusCode}`);
            }
            return response.json();
        })
      .then(result => {
            // 顯示大模型的響應消息
            displayMessage(result.response, 'bot');
        })
      .catch(error => {
            // 顯示錯誤消息
            displayMessage(error.message, 'bot');
        });
}

// 顯示消息的函數
function displayMessage(message, sender) {
    const messageElement = document.createElement('div');
    messageElement.classList.add(`${sender}-message`);
    messageElement.textContent = message;
    chatContainer.appendChild(messageElement);
    // 滾動到最新消息
    chatContainer.scrollTop = chatContainer.scrollHeight;
}

// 為發送按鈕添加點擊事件監聽器
sendButton.addEventListener('click', sendMessage);

// 為輸入框添加按鍵事件監聽器,當按下回車鍵時發送消息
userInput.addEventListener('keydown', function (event) {
    if (event.key === 'Enter') {
        sendMessage();
    }
});

Html代碼:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>大模型交互界面</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 20px;
        }

        #chat-container {
            width: 400px;
            border: 1px solid #ccc;
            border-radius: 5px;
            padding: 10px;
            margin-bottom: 20px;
            max-height: 400px;
            overflow-y: auto;
        }

        #input-container {
            display: flex;
            width: 400px;
        }

        #user-input {
            flex: 1;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 5px 0 0 5px;
        }

        #send-button {
            padding: 10px 20px;
            background-color: #007BFF;
            color: white;
            border: none;
            border-radius: 0 5px 5px 0;
            cursor: pointer;
        }

        #send-button:hover {
            background-color: #0056b3;
        }

        .user-message {
            background-color: #e0f7fa;
            padding: 8px;
            margin: 5px 0;
            border-radius: 5px;
            text-align: right;
        }

        .bot-message {
            background-color: #f1f8e9;
            padding: 8px;
            margin: 5px 0;
            border-radius: 5px;
            text-align: left;
        }
    </style>
</head>

<body>
    <div id="chat-container">
        <!-- 聊天消息將顯示在這里 -->
    </div>
    <div id="input-container">
        <input type="text" id="user-input" placeholder="輸入你的問題">
        <button id="send-button">發送</button>
    </div>
    <script src="script.js"></script>
</body>

</html>

js和html文件在同一目錄,結構如下:



使用瀏覽器打開本地的index.html頁面進行交互。


四、附錄

在 Ollama 中,你可以通過設置環境變量來修改模型的下載位置。以下是詳細的步驟和示例:

步驟

  1. 關閉正在運行的 Ollama 服務:在修改模型下載位置之前,需要先確保 Ollama 服務沒有在運行,避免出現沖突。

  2. 設置環境變量:通過設置 OLLAMA_MODELS 環境變量來指定模型的下載位置。不同的操作系統設置環境變量的方法有所不同,下面分別介紹。

在 Linux 或 macOS 系統上

你可以通過以下幾種方式設置環境變量:

臨時設置(當前終端會話有效)
打開終端,輸入以下命令,將 /new/path/to/models 替換為你想要的模型存儲路徑:

export OLLAMA_MODELS=/new/path/to/models

然后啟動 Ollama 服務:

ollama serve

在這個終端會話中,Ollama 會將模型下載到你指定的新路徑。

永久設置
如果你希望每次啟動系統時都自動設置該環境變量,可以將設置命令添加到 shell 的配置文件中。例如,對于大多數 Linux 用戶和 macOS 用戶,如果你使用的是 Bash shell,可以編輯 ~/.bashrc 文件;如果你使用的是 Zsh shell,可以編輯 ~/.zshrc 文件。

echo 'export OLLAMA_MODELS=/new/path/to/models' >> ~/.bashrc  # 對于 Bash
# 或者
echo 'export OLLAMA_MODELS=/new/path/to/models' >> ~/.zshrc  # 對于 Zsh

然后使配置文件生效:

source ~/.bashrc  # 對于 Bash
# 或者
source ~/.zshrc  # 對于 Zsh

最后啟動 Ollama 服務:

ollama serve

在 Windows 系統上

臨時設置(當前命令提示符會話有效)
打開命令提示符,輸入以下命令,將 C:\new\path\to\models 替換為你想要的模型存儲路徑:

set OLLAMA_MODELS=C:\new\path\to\models

然后啟動 Ollama 服務:

ollama serve

永久設置
你可以通過系統的環境變量設置界面來永久設置 OLLAMA_MODELS 環境變量。步驟如下:

  1. 右鍵點擊“此電腦”,選擇“屬性”。
  2. 點擊“高級系統設置”。
  3. 在“系統屬性”窗口中,點擊“環境變量”按鈕。
  4. 在“系統變量”部分,點擊“新建”。
  5. 在“變量名”輸入框中輸入 OLLAMA_MODELS,在“變量值”輸入框中輸入你想要的模型存儲路徑,例如 C:\new\path\to\models
  6. 點擊“確定”保存設置。
  7. 重新打開命令提示符,啟動 Ollama 服務:
ollama serve
  1. 下載模型:設置好環境變量并啟動 Ollama 服務后,當你使用 ollama pull 命令下載模型時,模型將被下載到你指定的新位置。例如:
ollama pull llama2

通過以上步驟,你就可以成功修改 Ollama 下載模型的位置。


下載后的模型在新的D盤目錄下

在云服務部署ollama

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容