最近由于 DeepSeek 的爆火出圈,如何在本地部署大模型这个话题的热度也一直居高不下。网络上也充斥着各种层出不穷的视频教程,但是大多数的视频都很冗长,且不能直击核心。我通过看了几分钟的视频了解了一些基本概念后,并通过自己的摸索成功的完成了自己的本地大模型部署,特此记录分享一波。希望能帮助所有感兴趣的人(甚至包括从未接触过编程的小白)完成自己本地大模型的部署😁😁。
-
安装
LM StudioLM Studio 是一款支持在本地离线运行大型语言模型(LLM)的桌面应用,适用于 Windows、Linux 和 macOS 系统。其核心优势在于无需联网即可部署和管理模型,支持从 HuggingFace 下载兼容的
ggml格式模型(如 Llama、MPT 等),并提供图形化界面简化模型配置、性能优化(如剪枝、量化)及多版本管理。用户可通过内置聊天界面直接交互,或启动兼容 OpenAI 的本地 API 服务器对接开发项目,保障数据隐私。我们可以在 lmstudio.ai/download 下载适合自己系统的
LM Studio。 -
配置
Hugging Face镜像Hugging Face 是一个专注于自然语言处理(NLP)的开源社区和平台。它提供了一系列强大的工具、库和预训练模型,帮助开发者快速构建和部署NLP应用。
作为前端来说,可以将
Hugging Face当做 NPM 来理解,那么配置Hugging Face镜像就像配置淘宝镜像一样简单。不过LM Studio作为一个桌面软件,暂时没有提供配置Hugging Face镜像的入口,所以可以参考我这篇文章【保姆级本地大模型部署教程】LM Studio 中搜索模型时报:Model details error: fetch failed 解决 完成配置。 -
下载 DeepSeek R1 大模型
打开LM Studio后按下图所示操作,即可搜索到 DeepSeek 相关的一系列模型我的电脑配置如下:
CPU: i9-14900hx GPU: NVIDIA GeForce RTX 4060 Laptop GPU RAM: 32GB我下载的模型是 DeepSeek-R1-Distill-Qwen-7B-GGUF,基于我的电脑配置推理速度还是非常快的。后面的同学想尝试的话,配置相同的话我觉得可以直接拉到 DeepSeek-R1-Distill-Qwen-32B-GGUF 试一试,问题不大。
好了,现在点击 Download 按钮进行下载模型吧。
-
选择加载的模型
经过漫长的等待…… 我们终于进行到了第4步~
但是没关系,从时间上来讲,我们已经完成了这篇教程的 95%~可以按自己需要调整相关参数
-
测试聊天功能
加载模型很快,10s以内就好了。现在在输入框输入一段文字跟你亲手部署的大模型聊天吧。 -
开启对外服务
LM Studio提供了外部应用调用大模型能力的入口,只需要开启对外服务即可。现在在浏览器中键入
http://127.0.0.1:1234/v1/models测试一下服务是否正常,一般会打印如下内容:{ "data": [ { "id": "deepseek-r1-distill-qwen-7b", "object": "model", "owned_by": "organization_owner" }, { "id": "text-embedding-nomic-embed-text-v1.5", "object": "model", "owned_by": "organization_owner" } ], "object": "list" } -
编写聊天接口
我这边采用 Python 技术栈相关的 FastAPI 编写对外接口,它可以让我们很简单、很快速去构建 API功能。from fastapi import FastAPI, HTTPException, Query, status from chat_service import chat_with_llm, ChatResponse import asyncio app = FastAPI() @app.post("/chat/", response_model=ChatResponse) async def chat( prompt: str = Query(..., min_length=1, max_length=1000, description="用户输入的问题") ): try: # 假设 chat_with_llm 是同步函数 response = await asyncio.to_thread(chat_with_llm, prompt) return ChatResponse(code=200, msg='请求成功', data={'content': response}) except ValueError as e: # 特定业务异常 raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="无效的请求参数" ) except Exception as e: # 记录原始错误日志(实际项目需添加日志记录) print(f"Internal error: {str(e)}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="服务器内部错误" )chat_service.py
from pydantic import BaseModel import requests import re # 预编译正则表达式 CLEAN_PATTERN = re.compile(r'<think>.*?</think>', flags=re.DOTALL) # 常量配置 API_ENDPOINT = "http://127.0.0.1:1234/v1/chat/completions" DEFAULT_TIMEOUT = 10.0 MODEL_NAME = "DeepSeek-R1-Distill-Qwen-7B" class ChatRequest(BaseModel): prompt: str class ChatResponse(BaseModel): code: int msg: str data: dict # 创建可复用的Session对象 _session = requests.Session() def chat_with_llm(prompt: str) -> str: """ 与LLM进行对话的封装函数 Args: prompt: 用户输入的提示文本 Returns: 清理后的响应文本,已移除<think>标签内容 Raises: requests.exceptions.RequestException: 网络请求相关异常 ValueError: JSON解析失败时抛出 """ headers = {"Content-Type": "application/json"} payload = { "model": MODEL_NAME, "messages": [{"role": "user", "content": prompt}], "temperature": 0.7 } try: response = _session.post( API_ENDPOINT, headers=headers, json=payload, timeout=DEFAULT_TIMEOUT ) response.raise_for_status() # 安全解析响应内容 response_data = response.json() choices = response_data.get('choices', []) if choices: message = choices[0].get('message', {}) raw_content = message.get('content', '') else: raw_content = '' # 清理文本内容 cleaned_content = CLEAN_PATTERN.sub('', raw_content).strip() return cleaned_content except requests.exceptions.JSONDecodeError as e: raise ValueError(f"Failed to parse response JSON: {str(e)}")也可以点击 github.com/dizuncainia… 拉取最新的代码进行测试。
-
测试接口
如何有PyCharm的话,可以在拉取代码后直接使用项目目录中的test.http进行测试
写在最后
本篇《从0到1本地部署 DeepSeek R1 大模型并开发聊天接口》教程乃是作者奶妈级整理分享,相信按照教程可以全程无雷丝滑顺畅完成部署,彻底揭开本地部署 DeepSeek 大模型以及开发功能接口的神秘面纱!但如若仍有不确定之处,欢迎评论区大家一起讨论~