DeepSeek-R1私有化部署——基于Ollama与FastApi部署DeepSeek-R1-Distill-Qwen服务器

概述

在前面的博客中,介绍了基于python私有化部署了DeepSeek-R1-Distill-Qwen的命令行对话与服务器客服端访问的方式,这两种方法都要基于torch算法框架,安装时还要对应torch的版本,假设安装的torch的版本小2.2,那么可以加载模型时可能获取到"triu_tril_cuda_template" not implemented for 'BFloat16’这个错误。还有一个问题是,GPU显存分配问题,DeepSeek官方给的文档,7B的模型要16G以上的显存,假设我现在用的显存只有8G,要部署7B的模型,那么可能获取一个显存不够的错误。如果使用Ollama框架的话,就不用面对这些问题了。

一.Ollama

Ollama 是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型,支持文本生成、翻译、代码编写、问答等多种自然语言处理任务。Ollama 的特点在于它不仅仅提供了现成的模型和工具集,还提供了方便的界面和 API,使得从文本生成、对话系统到语义分析等任务都能快速实现。与其他 NLP 框架不同,Ollama 旨在简化用户的工作流程,使得机器学习不再是只有深度技术背景的开发者才能触及的领域。Ollama 支持多种硬件加速选项,包括纯 CPU 推理和各类底层计算架构(如 Apple Silicon),能够更好地利用不同类型的硬件资源。

1.1 核心功能与特点

  1. 多种预训练语言模型支持
    Ollama 提供了多种开箱即用的预训练模型,包括常见的 GPT、BERT 等大型语言模型。用户可以轻松加载并使用这些模型进行文本生成、情感分析、问答等任务。

  2. 易于集成和使用
    Ollama 提供了命令行工具(CLI)和 Python SDK,简化了与其他项目和服务的集成。开发者无需担心复杂的依赖或配置,可以快速将 Ollama 集成到现有的应用中。

  3. 本地部署与离线使用
    不同于一些基于云的 NLP 服务,Ollama 允许开发者在本地计算环境中运行模型。这意味着可以脱离对外部服务器的依赖,保证数据隐私,并且对于高并发的请求,离线部署能提供更低的延迟和更高的可控性。

  4. 支持模型微调与自定义
    用户不仅可以使用 Ollama 提供的预训练模型,还可以在此基础上进行模型微调。根据自己的特定需求,开发者可以使用自己收集的数据对模型进行再训练,从而优化模型的性能和准确度。

  5. 性能优化
    Ollama 关注性能,提供了高效的推理机制,支持批量处理,能够有效管理内存和计算资源。这让它在处理大规模数据时依然保持高效。

  6. 跨平台支持
    Ollama 支持在多个操作系统上运行,包括 Windows、macOS 和 Linux。这样无论是开发者在本地环境调试,还是企业在生产环境部署,都能得到一致的体验。

  7. 开放源码与社区支持
    Ollama 是一个开源项目,这意味着开发者可以查看源代码,进行修改和优化,也可以参与到项目的贡献中。此外,Ollama 有一个活跃的社区,开发者可以从中获取帮助并与其他人交流经验。

1.2 应用场景

  1. 内容创作
    帮助作家、记者、营销人员快速生成高质量的内容,例如博客文章、广告文案等。

  2. 编程辅助::
    帮助开发者生成代码、调试程序或优化代码结构。

  3. 教育和研究
    辅助学生和研究人员进行学习、写作和研究,例如生成论文摘要或解答问题。

  4. 跨语言交流
    提供高质量的翻译功能,帮助用户打破语言障碍。

  5. 个人助手
    作为一个智能助手,帮助用户完成日常任务,例如撰写邮件、生成待办事项等。

1.3 安装

Ollama 支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行。Ollama 对硬件要求不高,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。

  • CPU:多核处理器(推荐 4 核或以上)。
  • GPU:如果你计划运行大型模型或进行微调,推荐使用具有较高计算能力的 GPU(如 NVIDIA 的 CUDA 支持)。
  • 内存:至少 8GB RAM,运行较大模型时推荐 16GB 或更高。
  • 存储:需要足够的硬盘空间来存储预训练模型,通常需要 10GB 至数百 GB 的空间,具体取决于模型的大小。
  • **软件要求:**确保系统上安装了最新版本的 Python(如果打算使用 Python SDK)。

Ollama 官方下载地址:https://ollama.com/download

打开浏览器,访问 Ollama 官方网站:https://ollama.com/download,下载适用于 Windows 的安装程序。
下载地址为:https://ollama.com/download/OllamaSetup.exe
下载完成后,双击安装程序并按照提示完成安装。

验证安装

打开命令提示符或 PowerShell,输入以下命令验证安装是否成功:

ollama --version

如果显示版本号,则说明安装成功。

更改安装路径(可选)

如果需要将 Ollama 安装到非默认路径,可以在安装时通过命令行指定路径,例如:

OllamaSetup.exe /DIR="d:somelocation"

1.4 下载模型与运行

打开https://ollama.com/download,选择Models,第一个就是DeepSeek:
在这里插入图片描述
选择要下载的模型:
在这里插入图片描述
打开cmd,输入:

ollama run deepseek-r1:14b

之后会进入漫长的下载等待,下载完成之后,就可以在当前命令行窗口进行对话:
在这里插入图片描述

二.命令行部署

为了方便开发与项目嵌入,可以使用代码进行部署,这里默认已经安装了Conda:

conda create -n deepseek python==3.10
conda activate deepseek
pip install ollama

然后创建一个ollama_server.py文件,代码如下:

from ollama import chat

# 初始化消息列表,用于存储对话历史
messages = []

while True:
    # 获取用户输入
    user_input = input("请输入你的问题(输入 '退出' 结束对话):")

    # 如果用户输入 '退出',则结束对话
    if user_input.lower() == '退出':
        break

    # 将用户输入添加到消息列表中
    messages.append({'role': 'user', 'content': user_input})

    # 调用 chat 函数进行问答
    stream = chat(
        model='deepseek-r1:7b',
        messages=messages,
        stream=True,
    )

    # 用于存储当前轮次的回答内容
    response_content = ""

    # 处理流式响应
    for chunk in stream:
        # 获取当前 chunk 的内容
        chunk_content = chunk['message']['content']
        # 打印内容,设置 end='' 防止换行,flush=True 确保内容立即输出
        print(chunk_content, end='', flush=True)
        # 将当前 chunk 的内容添加到响应内容中
        response_content += chunk_content

    # 将模型的回答添加到消息列表中,角色为 'assistant'
    messages.append({'role': 'assistant', 'content': response_content})

    # 打印换行符,使下一轮问答从新的一行开始
    print()

运行效果:
在这里插入图片描述

三.FastApi部署

FastAPI是一个现代、快速(高性能)的Web框架,用于构建APIs与Web应用程序。由于其出色的性能,简洁的代码编写方式,以及自动化文档的支持,FastAPI迅速成为Python社区中受欢迎的Web框架之一。本文将深入探讨FastAPI的核心特性、使用方法及其如何帮助开发者有效地构建高性能的API服务。

pip install fastapi

3.1 服务端代码

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from ollama import chat
import uvicorn

app = FastAPI()

# 用于存储对话历史
messages = []

# 定义请求体模型
class UserInput(BaseModel):
    user_input: str

@app.post("/chat")
async def chat_with_model(user_input: UserInput):
    global messages

    # 如果用户输入 '退出',则结束对话
    if user_input.user_input.lower() == '退出':
        messages = []  # 清空对话历史
        return {"response": "对话已结束"}

    # 将用户输入添加到消息列表中
    messages.append({'role': 'user', 'content': user_input.user_input})

    # 调用 chat 函数进行问答
    stream = chat(
        model='deepseek-r1:7b',
        messages=messages,
        stream=True,
    )

    # 用于存储当前轮次的回答内容
    response_content = ""

    # 处理流式响应
    for chunk in stream:
        # 获取当前 chunk 的内容
        chunk_content = chunk['message']['content']
        # 将当前 chunk 的内容添加到响应内容中
        response_content += chunk_content

    # 将模型的回答添加到消息列表中,角色为 'assistant'
    messages.append({'role': 'assistant', 'content': response_content})

    # 返回模型的回答
    return {"response": response_content}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

3.2 客户端代码

import requests

# FastAPI 服务器的地址
API_URL = "http://127.0.0.1:8000/chat"

def chat_with_server():
    print("欢迎使用聊天客户端!输入 '退出' 结束对话。")
    while True:
        # 获取用户输入
        user_input = input("输入: ")

        # 如果用户输入 '退出',则结束对话
        if user_input.lower() == '退出':
            print("对话已结束。")
            break

        # 构造请求体
        payload = {"user_input": user_input}

        # 发送 POST 请求到 FastAPI 服务器
        try:
            response = requests.post(API_URL, json=payload)
            response.raise_for_status()  # 检查请求是否成功
            data = response.json()

            # 打印模型的回答
            print(f"AI: {data['response']}")
        except requests.exceptions.RequestException as e:
            print(f"请求失败: {e}")
            break

if __name__ == "__main__":
    chat_with_server()
<think>好的,我现在需要帮助用户查找DeepSeek-R1-Distill-Qwen相关的技术信息或资源。首先,我应该回顾用户提供的引用内容,看看里面有没有直接相关的信息。 用户提到了三个引用。引用[1]提到DeepSeek-R1的论文地址、网页版、HuggingFace链接和官网。引用[2]是关于DeepSeek-R1-Distill-Qwen-7B的本地部署教程,包括下载预训练模型的步骤。引用[3]则涉及使用OllamaFastApi进行私有化部署的指南。这些引用中的信息应该能够覆盖用户的需求。 接下来,我需要将这些信息整理成结构清晰的回答。用户可能想知道如何获取技术文档、下载资源以及使用说明。根据引用[2],下载模型需要用到git lfs,克隆HuggingFace的仓库。技术文档可能在论文或官网中找到。使用说明方面,本地部署私有化部署的步骤分别在引用[2]和引用[3]中详细说明。 同时,用户需要生成相关问题。我需要考虑用户可能进一步询问的内容,比如如何优化模型部署、模型的应用场景或其他模型的对比等。 需要确保回答中的LaTeX格式正确,虽然这个问题主要涉及技术资源,可能不需要太多数学公式,但如果有相关内容,比如模型参数或数学原理,需要正确应用格式。 最后,检查所有引用是否正确标注,并确保回答符合用户要求的结构和语言规范。</think>关于DeepSeek-R1-Distill-Qwen的技术资源使用说明,以下是关键信息整理: ### 一、核心技术文档 1. **研究论文** 通过论文《DeepSeek-R1》可获取模型架构、蒸馏算法等核心技术细节,访问地址见[DeepSeek官网](https://www.deepseek.com)[^1] 2. **HuggingFace文档** 模型卡(Model Card)包含: - 输入输出规范 - 硬件要求 - 安全限制 访问地址:https://huggingface.co/deepseek-ai[^2] ### 二、资源下载渠道 1. **预训练模型** ```bash git lfs install git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B ``` (需预先安装Git LFS工具)[^2] 2. **量化版本** 提供4/6/8bit量化版本,适用不同显存配置: - 16GB显存可运行8bit量化版 - 24GB显存可运行原始版本[^3] ### 三、部署实践指南 1. **Ollama本地部署** ```bash ollama run deepseek-r1:14b ``` 支持Windows/Linux/macOS多平台运行[^3] 2. **API服务部署** ```python from fastapi import FastAPI app = FastAPI() # 加载模型代码... ``` 建议使用NVIDIA T4以上GPU加速推理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值