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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容