【从零开始系列】DeepSeek-R1:(本地部署使用)思维链推理大模型,开源的神!——Windows/Linux本地环境测试 + vLLM远程部署服务


目录

一、环境配置

        1.硬件设备评估

         2.基础环境安装

        3.模型参数下载

        (1) huggingface镜像源下载

        (2) modelscope魔搭社区下载 (推荐)

二、基础使用(Linux、Window兼容)

        1.Transformers库自编代码

三、进阶使用(仅Linux)

        1.vLLM库远程部署

        (1) 服务端配置

        (2) 客户端配置


一、环境配置

        1.硬件设备评估

        Deepseek-R1系列至少开源了 7 种参数大小的模型,如下图所示。

        下面将不同参数量模型在实验中粗略估算的所需GPU显存大小记录在表格(注:1.下表显存仅代表加载模型所需,多次对话推理后显存开销将变更大;2.部分模型未下载实验,以及一些其他的推理硬件指标如每秒生成tokens数量没有记录,欢迎各位大佬在评论区留言补充)

模型类别(根据参数量划分)GPU显存
Deepseek-R1-685B900G+
Deepseek-R1-70B137G+
Deepseek-R1-32B64G+
Deepseek-R1-14B30G+
Deepseek-R1-8B18G+
Deepseek-R1-7B
Deepseek-R1-1.5B4G+

         2.基础环境安装

# 3.10版本Python
conda create -n deepseek python=3.10 -y# 2.4.1版本torch
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu118pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu124# 其他依赖库正常安装
pip install transformers==4.46.3 safetensors==0.4.5 triton==3.0.0

        triton库windows系统安装教程:

        hf-mirror镜像triton库地址:madbuda/triton-windows-builds · HF Mirror

        下载 triton-3.0.0的python3.10版本

        导航到下载目录cmd进入命令窗口,pip指令安装即可。

# 使用whl安装triton-window版本
conda activate deepseekpip install triton-3.0.0-cp310-cp310-win_amd64.whl

        3.模型参数下载

        (1) huggingface镜像源下载

        hf-mirror镜像地址:deepseek-ai (DeepSeek)

        可以选择访问上述网址,在浏览器中下载。

         成功浏览器下载则可忽略下面内容,跳转到下一个章节测试使用模型进行推理。


        浏览器下载可能存在中断风险,尤其对于动辄好几G一个文件的大模型参数。可以考虑使用huggingface_hub 库的命令行工具——huggingface-cli 不中断下载。下面记录安装使用过程。

        pip安装库

# 安装huggingface_hub库在创建虚拟环境中
conda activate deepseek# 使用huggingface-cli下载模型参数
pip install -U huggingface_hub

        环境变量配置

        配置系统变量中huggingface下载地址为镜像地址(hf-mirror)。

        在 Linux 环境中,可以直接指令配置。

export HF_ENDPOINT=https://hf-mirror.com

        在 Windows 环境中,需要在此电脑的属性,高级系统设置的环境变量中配置。

        输入以下内容。

HF_ENDPOINT
https://hf-mirror.com

        点击确定完成后,可以在命令行测试。有下图的输出结果即代表镜像地址配置成功。

# Windows测试环境变量配置成功
echo %HF_ENDPOINT%# Linux测试环境变量配置成功
echo $HF_ENDPOINT

        使用命令下载模型参数

        命令可以不中断下载,其中 --resume-download 后填入模型名称,这个可以直接在网站内复制,如下图。

         --local-dir 参数后填入要保存的本地目录地址即可。

# 激活环境后,命令下载 
conda activate deepseek
huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Llama-8B --local-dir path/to/save

        (2) modelscope魔搭社区下载 (推荐)

        modelscope模型库地址:魔搭社区

        跟 hf-mirror 一样,可以直接使用浏览器下载。

        也支持命令行下载方式,但是也要安装相应库(较 hf 配置流程更简单,如下图)。

        下载指令如下,在命令行cmd中操作。其中下载的指令可以在每个模型网页界面中直接复制。并且通过 modelscope download -h 可以查询指令参数,得知和之前一样可以使用 --local_dir 加本地地址来设置保存路径。

# 激活环境安装包
conda activate deepseekpip install modelscope# 指令下载模型(以deepseek-r1-32B为例)
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-32B# 保存本地指定目录
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-32B --local_dir path/to/save

二、基础使用(Linux、Window兼容)

        1.Transformers库自编代码

        在官方的本地部署使用方法介绍中,表明 qwen 和 llama 蒸馏的小参数量 R1 模型可以和Qwen 或 LLaMA 一致的部署方式。

        因此可以和之前记录的 Qwen 模型一样,使用 Transformer 库进行部署,只需修改部分代码内容,将其变为可持续对话并记忆上下文的形式即可。

        首先,如果使用和之前Qwen相同方式部署,还有一些依赖包需要安装。

        特别的,Linux 系统下还要安装 flash-attn 库,具体安装报错解决办法见Qwen文章:Qwen从零开始

        Windows 系统不支持该库,实际部署运行会有红字报错,但不影响输出结果,可忽略。

# 其他依赖包环境
pip install accelerate==1.3.0
pip install protobuf# Linux下安装
pip install flash-attn

        安装好包后,下面直接给出一个简单的运行代码,可将其保存为一个 py 文件,在命令行激活环境直接运行即可和模型进行对话。 (记得修改其中的模型地址modelpath

from transformers import AutoModelForCausalLM, AutoTokenizer# 加载模型
def model_load(path):model_name_or_path = pathmodel = AutoModelForCausalLM.from_pretrained(model_name_or_path,torch_dtype="auto",device_map="auto")tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)return model, tokenizerif __name__ == '__main__':modelpath = ''  # 模型参数地址model, tokenizer = model_load(modelpath)chat_history = [{"role":"system", "content":'你是Deepseek,一个友好的ai聊天助手'}]while True:user_input = input("user:")if user_input.lower() in ['exit']:breakchat_history.append({"role":"user", "content":user_input})text = tokenizer.apply_chat_template(chat_history, tokenize=False,add_generation_prompt=True)chat_prompt = tokenizer([text], return_tensors="pt").to(model.device)output = model.generate(**chat_prompt, max_new_tokens=1024, pad_token_id=tokenizer.eos_token_id)generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(chat_prompt.input_ids, output)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]print(f'\n模型回答:{response}')chat_history.append({"role":"assistant", "content":response})

        下面多图展示具体使用流程。

        激活环境,并运行该 py 文件。就可以在命令行中与下载好的 deepseek 模型进行对话了。

# 激活环境并运行文件
conda activate deepseekpython test.py

        对于选择特定GPU进行推理部署,Linux系统可以直接命令改变环境变量。

# Linux系统指定GPU(如选择0、2、4号三块推理)
CUDA_VISIBLE_DEVICES=0,2,4 python test.py

         Window系统则需要在 test.py 文件中添加内容。

# Window系统指定单卡训练
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"

三、进阶使用(仅Linux)

        官方推荐使用 vLLM 和 SGLang 进行部署使用,这些使用架构平台将更好的优化显存管理和推理速度。

        1.vLLM库远程部署

        (1) 服务端配置

        首先在服务器上安装 vLLM 库环境,直接创建虚拟环境pip安装即可。

# 安装vLLM环境
conda create -n vLLM python=3.12 -y
conda activate vLLM
pip install vllm

        在激活的环境下,输入下面指令即可激活 api 服务。其中 model_path 代表本地的模型的下载地址;--port 代表提供服务的端口号为8000

# 启动vllm远程服务(指定0,1号GPU)
CUDA_VISIBLE_DEVICES=0,1 vllm serve model_path --port 8000

        得到下面信息代表成功激活服务端了。

        (2) 客户端配置

        在任一联网主机上,创建一个包含 openai 库的环境,将下面代码内容和之前Transformer部分一样创建成一个文件运行,即可得到一个对话窗口。

# 客户端环境
conda create -n user python=3.10
conda activate user
pip install openai

         记得要修改下面代码中的 openai_api_base 的地址为实际部署服务器的IP。

from openai import OpenAIopenai_api_key = "EMPTY"
openai_api_base = "http://host:8000/v1"  # host修改为服务器的ip地址client = OpenAI(# defaults to os.environ.get("OPENAI_API_KEY")api_key=openai_api_key,base_url=openai_api_base,
)models = client.models.list()
model = models.data[0].idif __name__ == '__main__':chat_history = [{"role": "system", "content": '你是Deepseek,一个智能的ai聊天助手'}]while True:user_input = input("user:")if user_input.lower() in ['exit']:breakchat_history.append({"role": "user", "content": user_input})response = client.chat.completions.create(messages=chat_history,model=model,).choices[0].message.contentprint(f'\n模型回答:\n{response}')chat_history.append({"role": "assistant", "content": response})

        运行上述代码,即可在窗口中进行与服务器上部署模型的对话任务了。

        这种基于vllm的部署方式更推荐,其内部有优化,推理过程更加迅速。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/68217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0207作业

思维导图 服务器 enum Type{TYPE_REGIST,TYPE_LOGIN };typedef struct Pack{int size;enum Type type;char buf[2048];}pack_t;typedef struct list{union Data{struct List* tail;char str[64];}data;struct List* next;struct List* prev; }List;List* create_node(){List* …

RabbitMQ 从入门到精通:从工作模式到集群部署实战(五)

#作者:闫乾苓 系列前几篇: 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)》:link 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)》: lin…

nodejs:express + js-mdict 网页查询英汉词典,能播放.spx 声音

向 DeepSeek R1 提问: 我想写一个Web 前端网页,后台用 nodejs js-mdict , 实现在线查询英语单词,并能播放.spx 声音文件 1. 项目结构 首先,创建一个项目目录,结构如下: mydict-app/ ├── public/ │ …

Linux ftrace 内核跟踪入门

文章目录 ftrace介绍开启ftraceftrace使用ftrace跟踪指定内核函数ftrace跟踪指定pid ftrace原理ftrace与stracetrace-cmd 工具KernelShark参考 ftrace介绍 Ftrace is an internal tracer designed to help out developers and designers of systems to find what is going on i…

【抽象代数】1.1. 运算及关系

集合与映射 定义1. 设 为 的子集,定义 到 的映射 : 使得 ,称 为 到 的嵌入映射。 定义2. 设 为 的子集, 为 到 的映射, 为 到 的映射,如果 ,称为的开拓, 为 的限制&…

数据库高安全—审计追踪:传统审计统一审计

书接上文数据库高安全—角色权限:权限管理&权限检查,从权限管理和权限检查方面解读了高斯数据库的角色权限,本篇将从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读。 4 审计追踪 4.1 传统审计 审计内容的记录方式通…

第三个Qt开发实例:利用之前已经开发好的LED驱动在Qt生成的界面中控制LED2的亮和灭

前言 上一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145459006 中,我们是直接利用GPIO子系统控制了LED2的亮和灭,这篇博文中我们利用之前写好的LED驱动程序在Qt的生成的界面中控制LED2的亮和灭。 之前已经在下面两篇博文中实现了LED驱动…

解决aspose将Excel转成PDF中文变成方框的乱码问题

原文网址:解决aspose将Excel转成PDF中文变成方框的乱码问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决aspose将Excel转成PDF中文变成方框的乱码问题。 问题描述 用aspose将word、excel等转成PDF后,英文展示正常,但中文全部变成了…

vue-vite axios bug

axios-bug http proxy error Error: write ECONNABORTED 代码写法 一般baseURL不是单写前缀就可以了吗,为何要写死就不会出现以上错误,求解。

【Spring】_SpringBoot配置文件

目录 1.Spring Boot配置文件 1.1 Spring Boot 的配置文件类型及命名 1.2 properties和yml的优先级 2. properties配置文件 1.1 properties语法格式 1.2 自定义配置及配置文件的读取 1.3 properties的缺点 3. yml配置文件 3.1 yml语法格式 3.2 自定义配置及配置文件的…

实操给触摸一体机接入大模型语音交互

本文以CSK6 大模型开发板串口触摸屏为例,实操讲解触摸一体机怎样快速增加大模型语音交互功能,使用户能够通过语音在一体机上查询信息、获取智能回答及实现更多互动功能等。 在本文方案中通过CSK6大模型语音开发板采集用户语音,将语音数据传输…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)

#作者:闫乾苓 文章目录 RabbitMQ简介RabbitMQ与VMware的关系架构工作流程RabbitMQ 队列工作模式及适用场景简单队列模式(Simple Queue)工作队列模式(Work Queue)发布/订阅模式(Publish/Subscribe&#xff…

RK3568平台开发系列讲解(ConfigFS篇)ConfigFS核心数据结构

🚀返回专栏总目录 文章目录 一、数据结构二、结构体关系三、案例3.1、configfs_subsystem 实例3.2、config_group 实例化四、属性和方法五、config_item实例化沉淀、分享、成长,让自己和他人都能有所收获!😄 理解 ConfigFS 的核心数据结构对于深入使用和定制 ConfigFS 非…

微信小程序案例1——制作猫眼电影底部标签导航栏

文章目录 一、项目步骤1 新建一个无AppID的movie项目2将准备好的底部标签导航图标拷贝到movie项目下面(将图标文件夹image放到项目文件夹里)3 打开App.json配置文件,在pages数组里添加4个页面路径:电影“pages/movie/movie”、影院“pages/cinema/cinema…

CSS 伪类(Pseudo-classes)的详细介绍

CSS 伪类详解与示例 在日常的前端开发中,CSS 伪类可以帮助我们非常精准地选择元素或其特定状态,从而达到丰富页面表现的目的。本文将详细介绍以下伪类的使用: 表单相关伪类 :checked、:disabled、:enabled、:in-range、:invalid、:optional、…

Elasticsearch 开放推理 API 增加了 Azure AI Studio 支持

作者:来自 Elastic Mark Hoy Elasticsearch 开放推理 API 现已支持 Azure AI Studio。在此博客中了解如何将 Azure AI Studio 功能与 Elasticsearch 结合使用。 作为我们持续致力于为 Microsoft Azure 开发人员提供他们选择的工具的一部分,我们很高兴地宣…

JUC学习笔记02

文章目录 JUC笔记2练习题:手写线程池代码解释:AdvancedThreadPool 类:WorkerThread 内部类:AdvancedThreadPoolExample 类: 线程池的思考CPU密集型IO密集型 练习题:手写自动重试机练习题:手写定…

baigeiRSA

baigeiRSA 打开附件有两个: 1.import libnumfrom Crypto.Util import numberfrom secret import flag​size 128e 65537p number.getPrime(size)q number.getPrime(size)n p*q​m libnum.s2n(flag)c pow(m, e, n)​print(n %d % n)print(c %d % c)​​2.n…

【csp-j学习完C++语法后,如何进阶学习C++算法和数据结构?】

在掌握了 CSP - J 的 C 语法基础后,接下来的进阶学习需要系统地掌握各类算法和数据结构知识,并通过大量练习来巩固和提高应用能力。以下是一份详细的进阶学习规划: 第一阶段:基础算法学习(1 - 2 个月) 排…

QT中解决使用QCustomplot绘制高速大量数据时频谱图卡顿问题

[!!!核心方法!!!] 使用带参数的replot()函数绘制m_pCustomPlot>replot(QCustomPlot::rpQueuedReplot) 1. replot() 方法 void QCustomPlot::replot(QCustomPlot::RefreshPriority refreshPriority rp…