Python实现本地部署DeepSeek-R1-Distill-Qwen-1.5B模型教程

在本地运行 DeepSeek 模型进行文本生成

在现代 NLP(自然语言处理)应用中,生成式预训练模型(如 GPT 系列)已经成为非常重要的工具。今天,我们将介绍如何使用 Hugging Face 的 transformers 库在本地加载 DeepSeek 模型,并通过用户输入生成响应。

准备工作

首先,确保你已经安装了以下依赖:

pip install transformers torch

本篇文章以 DeepSeek 的模型为例,展示如何使用该模型来处理用户的输入并生成文本响应。

假设你已经下载了本地的 DeepSeek 模型文件(如 deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B)。

代码解析

下面是完整的代码示例,它演示了如何加载模型并进行生成。

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# 加载tokenizer和模型
tokenizer = AutoTokenizer.from_pretrained("模型路径/deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B")
model = AutoModelForCausalLM.from_pretrained("模型路径/deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B")

# 显式设置 pad_token_id
tokenizer.pad_token = tokenizer.eos_token  # 设置pad_token为eos_token

# 循环5次,用户输入文本并生成响应
for _ in range(5):
    # 用户输入文本
    input_text = input("请输入文本:")

    # 编码输入
    inputs = tokenizer(input_text, return_tensors="pt", padding=True, truncation=True)

    # 添加 attention_mask
    inputs['attention_mask'] = inputs.get('attention_mask', torch.ones(inputs['input_ids'].shape))

    # 生成文本,避免重复并设置更长的max_length
    with torch.no_grad():
        outputs = model.generate(inputs['input_ids'], attention_mask=inputs['attention_mask'], 
                                 max_length=200, num_return_sequences=1, pad_token_id=tokenizer.pad_token_id,
                                 no_repeat_ngram_size=2, early_stopping=False)  # 防止过早停止,避免重复

    # 解码输出
    output_text = tokenizer.decode(outputs[0], skip_special_tokens=True)

    # 去掉输入部分,只输出生成的内容
    output_text = output_text[len(input_text):].strip()  # 去除输入的重复部分

    # 只输出生成的文本
    print(output_text)

代码解析

加载模型和 Tokenizer 我们通过 AutoTokenizerAutoModelForCausalLM 来加载模型和相应的分词器。

这些工具可以自动处理模型文件和权重文件。

确保模型路径正确指向本地文件夹(如 模型路径/deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B)。

tokenizer = AutoTokenizer.from_pretrained("模型路径/deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B")
model = AutoModelForCausalLM.from_pretrained("模型路径/deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B")

设置 pad_token 为了避免生成文本时出现问题,我们将 pad_token 设置为 eos_token

这是因为一些模型在训练时可能没有显式地指定 pad_token,因此我们手动设置它为 eos_token 来避免在生成时出现错误。

tokenizer.pad_token = tokenizer.eos_token  # 设置pad_token为eos_token

用户输入与文本生成 程序循环 5 次,每次提示用户输入文本。

然后,文本被传递给模型进行处理,生成新的文本。

以下是关键部分:

  • 文本编码:使用 tokenizer 将用户输入文本转换为模型可理解的 token 格式,并进行填充和截断。
  • 添加 attention_mask:在必要时,手动设置 attention_mask,以确保模型知道哪些部分是实际输入数据,哪些是填充部分。
  • 文本生成:使用 model.generate 方法生成响应。我们设置了 max_lengthno_repeat_ngram_size 等参数来控制生成文本的质量和防止重复。
inputs = tokenizer(input_text, return_tensors="pt", padding=True, truncation=True)
inputs['attention_mask'] = inputs.get('attention_mask', torch.ones(inputs['input_ids'].shape))

防止重复:为了避免生成过程中出现重复内容,我们使用 no_repeat_ngram_size=2 来防止连续的二元组重复。

4.输出生成的文本 最后,生成的文本被解码,并去除了重复的输入部分。

生成的文本输出给用户。

output_text = output_text[len(input_text):].strip()  # 去除输入的重复部分
print(output_text)

总结

通过这个简单的例子,我们演示了如何使用 Hugging Face 的 transformers 库加载本地的 DeepSeek 模型,并通过循环交互生成文本。此方法非常适用于需要在本地运行预训练模型的场景,不需要依赖云服务。你可以根据自己的需求调整生成的参数,例如增加 max_length 或调整 no_repeat_ngram_size 来改善输出质量。

使用本地模型能够大大提高响应速度,并且为你的应用提供更多的控制权,特别是当你处理敏感数据或需要自定义模型时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值