当前位置: 首页 > news >正文

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


目录

一、环境配置

        1.硬件设备评估

         2.基础环境安装

        3.模型参数下载

        (1) huggingface镜像源下载

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

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

        1.Transformers库自编代码

三、进阶使用(仅Linux)

        1.vLLM库远程部署

        (1) 服务端配置

        (2) 客户端配置

        2.SGLang库远程部署

        (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的部署方式更推荐,其内部有优化,推理过程更加迅速。

        2.SGLang库远程部署

        (1) 服务端配置

        使用 SGLang 跟 vLLM 一样先在服务器端配置好环境。注意如果更换 torch 和 cuda 版本,要在下面指令的--find-links后面地址相应修改。

# 安装SGLang环境
conda create -n sglang python=3.12 -y
conda activate sglangpip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124pip install sgl-kernel --force-reinstall --no-deps
pip install "sglang[all]>=0.4.2.post3" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer/

         如果安装 flashinfer (最后一行指令)速度很慢,可以考虑先单独下载好whl后pip安装。

         地址: https://flashinfer.ai/whl/cu124/torch2.5/flashinfer/

# whl包安装flashinfer-python
pip install flashinfer_python-0.2.0.post2+cu124torch2.5-cp312-cp312-linux_x86_64.whl

        激活sglang环境后,输入下面指令完成服务端配置,其中需要修改--model-path 参数后的地址为下载的本地目录。

# SGLang服务端启动
CUDA_VISIBLE_DEVICES=0,1 python -m sglang.launch_server --model-path /path/model --port 8000 --host 0.0.0.0

        (2) 客户端配置

        SGLang 有多种访问服务器服务的请求方式,可以任选一种进行访问。需修改下面官方代码的访问网址IP(http://localhost)和模型model(meta-llama/Meta-Llama-3.1-8B-Instruct)。

# 使用cURL访问
import subprocess, jsoncurl_command = """
curl -s http://localhost:30000/v1/chat/completions \-d '{"model": "meta-llama/Meta-Llama-3.1-8B-Instruct", "messages": [{"role": "user", "content": "What is the capital of France?"}]}'
"""response = json.loads(subprocess.check_output(curl_command, shell=True))
print_highlight(response)# 使用requests库
import requestsurl = "http://localhost:30000/v1/chat/completions"data = {"model": "meta-llama/Meta-Llama-3.1-8B-Instruct","messages": [{"role": "user", "content": "What is the capital of France?"}],
}response = requests.post(url, json=data)
print_highlight(response.json())# 使用openai库
import openaiclient = openai.Client(base_url="http://127.0.0.1:30000/v1", api_key="None")response = client.chat.completions.create(model="meta-llama/Meta-Llama-3.1-8B-Instruct",messages=[{"role": "user", "content": "List 3 countries and their capitals."},],temperature=0,max_tokens=64,
)
print_highlight(response)# 使用原生生成式API
import requestsresponse = requests.post("http://localhost:30000/generate",json={"text": "The capital of France is","sampling_params": {"temperature": 0,"max_new_tokens": 32,},},
)print_highlight(response.json())

http://www.mrgr.cn/news/89846.html

相关文章:

  • C# winforms 使用菜单和右键菜单
  • TaskBuilder低代码开发项目实战:项目简介
  • 2、k8s的cni网络插件和基本操作命令
  • 使用git commit时‘“node“‘ 不是内部或外部命令,也不是可运行的程序
  • JAVA安全—FastJson反序列化利用链跟踪autoType绕过
  • Android原生开发问题汇总
  • VMware下Linux和macOS遇到的一些问题总结
  • π0开源了且推出自回归版π0-FAST——打造机器人动作专用的高效Tokenizer:比扩散π0的训练速度快5倍但效果相当
  • idea——IDEA2024版本创建Sping项目无法选择Java 8
  • aliyun 的 ip 设置方法
  • 定时任务单线程消费 redis 中数据导致消费能力不足
  • DeepSeek本地化部署
  • mongodb 使用内存过大分析
  • 学习笔记:机器学习中的数学原理(一)
  • 均方根层标准化(RMSNorm: Root Mean Square Layer Normalization)
  • 【从零开始系列】DeepSeek-R1:(本地部署使用)思维链推理大模型,开源的神!——Windows/Linux本地环境测试 + vLLM远程部署服务
  • k8s部署rabbitmq
  • 《Kettle实操案例一(全量/增量更新与邮件发送)》
  • 音频进阶学习十二——Z变换
  • 保姆级教程Docker部署KRaft模式的Kafka官方镜像