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

开源大模型本地部署

一、大模型

T5\BERT\GPT → Transformer的儿子→自注意力机制+神经网络

大模型, Large Model,是指参数规模庞大、训练数据量巨大、具有强泛化能力的人工智能模型,典型代表如GPT、BERT、PaLM等。它们通常基于深度神经网络,特别是Transformer架构,在自然语言处理、图像识别、代码生成等任务中表现出色。

1、基本概念

大模型是指在超大规模数据集上训练、拥有数十亿到千亿以上参数的人工智能模型,具备多任务、多模态能力,并能通过少量样本甚至零样本完成新任务。

2、主要特征

大模型具备以下特征:

- 参数规模大
  数亿至数千亿参数,容量决定了模型的表达与泛化能力。
- 数据训练量大
  利用海量文本、图像、音频等多模态数据训练,提升模型的通用性。
- 基于Transformer
  多数大模型采用Transformer作为基础结构,具备强大的表示学习能力。
- 强泛化与迁移能力
  一次训练,多场景复用(如ChatGPT既能对话,也能写代码、改文案)。
- 具备“涌现能力”
  模型规模突破某个阈值后,表现出超越训练目标的智能行为(如逻辑推理、复杂生成)。
- 可调优能力强
  支持微调(Fine-tuning)、提示学习(Prompt Learning)、参数高效调优(LoRA、Adapter等)。
- 多模态发展趋势
  从纯文本模型发展到图文、语音、视频等多模态大模型,如GPT-4V、DeepSeek、Grok等

3、应用方向

  1. Agent智能体(AI管家)

    • 概念:像一个“全能私人助理”,能自己分析问题、拆解任务、调用工具解决问题。

    • 例子:你想周末去露营,告诉它:“帮我找个离市区近、能带宠物、有烧烤区的露营地,订周六的房间,再推荐附近超市买食材。”它自动完成:搜攻略 → 筛选地点 → 查天气 → 订营地 → 生成购物清单 → 发到你手机。

    • 好处:不用自己一步步操作,AI能“动脑子”帮你搞定复杂任务。

    • 流程:用户输入 -> 拆解任务 -> 意图识别 -> 调用对应的函数并执行 -> 完成执行

  2. 语音聊天助手(会聊天的AI)

    • 概念:像“升级版Siri”,能自然对话、理解语气,甚至模拟真人情感。

    • 例子:你开车时说:“我好困啊,来点提神的音乐,再导航到最近的咖啡店。”它回答:“马上切到摇滚歌单!前方500米有星巴克,要帮你点一杯冰美式吗?”(还能学你喜欢的说话风格)

    • 好处:不用打字,动动嘴就能聊天、查信息、控制智能家居,像有个“随身陪聊”。

    • 流程:语音输入 -> 语音识别转文字 -> 大模型对话 -> 文本转语音 -> 完成对话

  3. 医学客服(AI健康小助手)

    • 概念:医院的“虚拟前台”,能解答常见问题、提醒用药、分诊建议。

    • 例子:你半夜胃疼,打开医院APP问:“吃了火锅后胃痛,该挂哪个科?现在能吃什么药缓解?”AI回答:“建议挂消化内科,暂时可服用XX药(非处方)。若呕吐加重,请立即急诊。”并推送附近24小时药店。

    • 好处:24小时在线,快速解答小毛病,避免排队问医生,隐私问题也能匿名咨询。

    • 流程:问题输入 -> 检索知识库 -> 问题拼接 -> 大模型对话 -> 给予回复

4、开发流程

大模型开发是一个系统工程,涉及数据、模型、算力、训练、部署、安全与迭代等多个环节。

  • 任务定义与需求分析

    • 明确应用场景(如对话、写作、推荐、图像识别等)

    • 选择模型类型(NLP、CV、多模态等)

  • 数据准备与预处理

    • 收集高质量、大规模数据(文本、图像、音频等)

    • 去噪清洗、标注、格式转换、去重与分词等

  • 模型设计与选择

    • 选择合适的模型架构(如GPT、BERT、ViT、T5等)

    • 设定层数、宽度、注意力机制等结构参数

  • 训练策略与资源配置

    • 分布式训练/混合精度训练

    • 使用大规模算力资源(GPU/TPU集群)

    • 设置优化器(AdamW)、学习率调度等参数

  • 评估与调优

    • 评估指标:PPL、准确率、BLEU、ROUGE、F1等

    • 微调/指令调优(Instruction tuning)/RLHF等方法提升效果

  • 推理部署与压缩优化

    • 部署到服务器或边缘端(云部署、API服务)

    • 模型量化、裁剪、蒸馏、MoE等手段提升推理效率

  • 安全机制与合规检测

    • 防止生成有害/敏感内容

    • 对输出进行内容审查、对抗样本防御、模型水印等

  • 持续迭代与生态构建

    • 基于用户反馈持续优化

    • 构建插件系统、开发者平台等生态体系

5、关键要点

  • 在大模型应用开发时,不会从头开始构建一个新的模型,基于已有基座模型进行二次开发是行业主流实践。

  • 选用已有的基座模型,并采用相应的技术手段优化大模型,如:微调,RAG,并行推理等。

  • 选用流行且成熟的框架,通过参数调整和功能集成实现业务需求,避免重复造轮子。

6、项目介绍

  • 简历

  • 项目框架

  • 三个模块

    • 大语言模型(LLM)--实现大语言模型的对话功能:大模型的本地部署,微调训练,流式对话,多轮对话。

    • RAG技术--增强大语言模型的对话能力:文本分割,文本嵌入,知识检索

    • 知识图谱--实现数据的高效存储:neo4j数据库,三元组抽取,实体对齐

  • 项目展示

二、LLM

开始实际案例的展示......

1、API调用

大模型通过API调用是目前最常见、最便捷的使用方式,用户无需训练模型,只需调用接口即可享受强大的 AI 能力,比如文本生成、翻译、图像识别、代码补全等。

1.1 基本流程

  • 获取 API 权限

    • 注册平台账号(如 OpenAI、DeepSeek、阿里通义、讯飞星火等)

    • 获取 API KeyAccess Token

  • 准备请求参数

    • 选择模型

    • 设置请求体

  • 发起 API 请求

    • 使用编程语言(如 Python、JavaScript)通过 HTTP 协议调用接口

  • 解析响应结果

    • 获取模型返回内容(如文本、图片链接、结构化数据等)

    • 可与前端、应用系统集成使用

1.2 基本特征

大模型API调用将复杂的模型能力简化为标准化服务,核心价值在于:

  • 降低使用门槛:无需本地部署千亿参数模型,节省硬件与运维成本。

  • 灵活适配场景:通过参数调节和上下文学习快速满足业务需求。

  • 规模化支持:依托云计算实现高可用、低延迟的企业级服务。

1.3 DeepSeek实操

DeepSeek作为国内优秀的LLM平台,是一个不错的选择~

1.3.1 准备工作
  • 访问deepseek官网,并注册账号:DeepSeek官网

  • 注册账号并且充值

  • 创建API-key

    仅在创建时可见可复制

  • 查看使用手册

1.3.2 非流式输出

等模型生成完整结果后一次性返回,适合短文本、结构化内容提取等任务。

  • 特点

    • 优点:

      • 使用简单,一次性拿到完整结果

      • 适合分析处理、摘要抽取、短文本问答等

    • 缺点:

      • 响应时间长,特别是文本很长时

      • 体验较差,用户需要等待全部生成完才能看到内容

  • 环境安装

    pip install openai
  • 非流式输出

    # Please install OpenAI SDK first: `pip3 install openai`
    from openai import OpenAI
    ​
    client = OpenAI(api_key="sk-f9deff6faca64899a3faaaf1f4c53d1d", base_url="https://api.deepseek.com"
    )
    ​
    response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "system", "content": "You are a helpful assistant"},{"role": "user", "content": "明月几时有"},],stream=False,
    )
    ​
    print(response.choices[0].message.content)
    ​
  • 输出结果

    “明月几时有”是苏轼《水调歌头·明月几时有》中的名句,全文如下:
    ​
    **《水调歌头·明月几时有》**  
    明月几时有?把酒问青天。  
    不知天上宫阙,今夕是何年。  
    我欲乘风归去,又恐琼楼玉宇,高处不胜寒。  
    起舞弄清影,何似在人间。  
    ​
    转朱阁,低绮户,照无眠。
    不应有恨,何事长向别时圆?
    人有悲欢离合,月有阴晴圆缺,此事古难全。
    但愿人长久,千里共婵娟。
    ​
    ### 赏析:
    1. **背景**:此词作于宋神宗熙宁九年(1076年)中秋,苏轼在密州(今山东诸城)任职时,怀念弟弟苏 辙而写。
    2. **情感**:以月起兴,围绕中秋明月展开想象,交织人间情怀与宇宙哲思,既有对亲人的思念,又有对 人生无常的豁达。
    3. **名句**:- “人有悲欢离合,月有阴晴圆缺”道出世事无常的常态。- “但愿人长久,千里共婵娟”成为表达远方亲友平安共勉的千古绝唱。
    ​
    ​
    ### 小知识:
    这首词被誉为“中秋词之冠”,后曾被改编为经典歌曲(如王菲演唱的《但愿人长久》)。若您想进一步探讨其文学手法或创作背景,可以随时告诉我!
1.3.3 流式输出

服务器将响应内容一段一段地实时返回,适合长文本、对话、写作等需要即时反馈的场景。

  • 特点

    • 优点

      • 响应快:无需等全部生成完毕,先生成先返回

      • 体验佳:像人打字一样流畅,常用于对话机器人

      • 可中断:用户可随时打断流式响应过程

    • 缺点

      • 编程稍复杂,需要处理数据流拼接

      • 不易直接使用普通 HTTP 请求工具(如 Postman)

  • 原理

  • 流式推理的实现—生成器

    import time
    ​
    def test():  # 生成器函数for i in range(10):time.sleep(1)yield i  # 生成器函数,使用yield关键字返回值
    ​
    if __name__ == "__main__":aaa = test()print(aaa)  # aaa是一个生成器,可以想象成一个队列,每读取一次,就会执行一次函数体for a in aaa:print(a)  # 读取生成器中的值
  • 流式推理代码编写:

    from openai import OpenAI
    ​
    client = OpenAI(api_key="sk-f9deff6faca64899a3faaaf1f4c53d1d", base_url="https://api.deepseek.com"
    )
    ​
    response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "system", "content": "You are a helpful assistant"},{"role": "user", "content": "明月几时有"},],stream=True,
    )
    ​
    # 流式输出
    out = []
    for chunk in response:print(chunk.choices[0].delta.content)out.append(chunk.choices[0].delta.content)print('-' * 10)print(''.join(out))
    ​
1.3.4 总结对比
项目流式输出非流式输出
返回方式边生成边返回全部生成后一次返回
响应速度慢(尤其是长文本)
使用体验更自然(打字式)等待过程较长
编程复杂度稍复杂(需拼接)简单
适用场景对话生成、直播问答简短回复、结构化处理
1.3.5 代码封装

将代码封装为类,方便其他文件调用此功能。

非流式输出:

from openai import OpenAI
​
class DeepseekAPI:def __init__(self, api_key):  # 初始化方法self.api_key = api_key  # API密钥self.client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com")  # 实例化OpenAI客户端
​def inference(self, messages):response = self.client.chat.completions.create(model="deepseek-chat",messages=messages,  # 消息内容stream=False,  # 设置为False以获取完整响应)return response.choices[0].message.content  # 返回完整响应
​
​
# 测试代码
if __name__ == "__main__":api_key = "sk-f9deff6faca64899a3faaaf1f4c53d1d"  # API密钥messages = [{"role": "system", "content": "你是一名AI助手"},{"role": "user", "content": "请简要介绍一下你自己"},]  # 定义消息内容stream = False  # 设置为True以获取流式输出,False以获取完整响应deepseek_api = DeepseekAPI(api_key)  # 实例化DeepseekAPI类result = deepseek_api.inference(messages)  # 调用推理方法print(result)  # 打印响应内容
​

流式输出:

# 流式输出:
from openai import OpenAI
​
class DeepseekAPI:def __init__(self, api_key):  # 初始化方法self.api_key = api_key  # API密钥self.client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com")  # 实例化OpenAI客户端
​def inference(self, messages):response = self.client.chat.completions.create(model="deepseek-chat",messages=messages,  # 消息内容stream=True,  # 设置为False以获取完整响应)for chunk in response:  # 遍历响应的每个块if chunk.choices:  # 如果块中有返回内容content = chunk.choices[0].delta.content  # 获取内容yield content  # 逐块返回内容
​
# 测试代码
if __name__ == "__main__":api_key = "sk-f9deff6faca64899a3faaaf1f4c53d1d"  # API密钥messages = [{"role": "system", "content": "你是一名乐于助人的人工智能助手"},{"role": "user", "content": "请简要介绍一下你自己"},]  # 定义消息内容stream = False  # # 设置为True以获取流式输出,False以获取完整响应deepseek_api = DeepseekAPI(api_key)  # 实例化DeepseekAPI类result = deepseek_api.inference(messages)  # 调用推理方法for chunk in result:  # 遍历响应的每个块print(chunk, end="")  # 打印每个块的内容
​

三、大模型本地部署

各种大模型

国内:ModelScope 魔搭社区

国际:https://huggingface.co/

镜像:HF-Mirror

1、基本介绍

官网: 通义大模型_AI大模型_一站式大模型推理和部署服务-阿里云

开源:https://github.com/QwenLM/Qwen

在国产大模型领域,Qwen系列一直稳居前列,其出色的性能使其在多项评测中名列前茅。作为阿里巴巴的一项重要研发成果,Qwen系列的开源版本在业内备受瞩目,且长期以来在各大榜单上表现优异。

  • 多模态能力:部分版本支持文本、图像、音频等多模态输入与生成。

  • 超长上下文:最新模型支持高达128K tokens的上下文窗口,适合长文档处理。

  • 高性能:在权威基准(如MMLU、C-Eval)上表现优异,接近或超越国际主流模型。

  • 工具调用:支持外部API调用、代码解释器等,增强复杂任务处理能力。

这张图表展示了多个大语言模型(LLMs)在不同评估基准上的性能表现,各列的参数含义如下:

  • Model

模型名称,如 MPT、Falcon、ChatGLM2、LLaMA、Qwen 等。

  • Params

模型参数量(参数规模),单位是 B(Billion,十亿)。例如 7B 表示模型有 70 亿参数。

  • MMLU (5-shot)

Massive Multitask Language Understanding,是一个跨学科考试题集,衡量模型的广泛知识掌握能力。

5-shot 表示使用 5 个示例提示(few-shot learning)进行评测。

  • C-Eval (5-shot)

C-Eval 是面向中文的多任务评测集,涵盖中国大学考试内容等。

5-shot 同样表示使用 5 个示例提示。

  • GSM8K (8-shot)

Grade School Math 8K,是一个数学问题解决数据集,适用于小学级别数学推理能力评测。

8-shot 表示给出 8 个示例再让模型解题。

  • MATH (4-shot)

比 GSM8K 更难,是中学至大学级别的数学题数据集,评估模型在复杂数学问题上的能力。

4-shot 表示提供 4 个示例。

  • HumanEval (0-shot)

由 OpenAI 提供的评估模型编程能力的数据集,包含 Python 编程任务。

0-shot 表示不提供任何提示,直接让模型生成代码。

  • MBPP (3-shot)

Mostly Basic Python Problems,也是编程任务集合,但比 HumanEval 更基础。

3-shot 表示提供 3 个编程示例。

  • BBH (3-shot)

Big-Bench Hard,是 BIG-bench 数据集中最难的子集,涵盖推理、数学、逻辑等多种任务。

3-shot 表示提供 3 个例题。

2、线上体验

你说自己牛逼就牛逼?那不行,我要体验一下

https://huggingface.co/spaces/Qwen/Qwen2.5-Coder-7B-Instruct

通义大模型_AI大模型_一站式大模型推理和部署服务-阿里云

3、本地部署

各种配置方式

3.1 modelscope

搜索对应的模型即可~

官方指导: 通义千问3-0.6B

3.2 huggingface

搜索对应的模型即可~

官方指导:https://huggingface.co/Qwen/Qwen3-0.6B

3.3 Ollama

Ollama是一个开源工具,用于在本地计算机上快速运行、管理和部署大型语言模型(LLMs)。它支持多种开源模型(如 Llama 3、Mistral、Gemma、Qwen 等),并提供简单命令行操作,适合开发者和研究者本地测试 LLM。

官网:Ollama

支持的模型:Ollama Search

3.3.1 安装

下载安装即可,Ollama安装硬件要求:

  • Windows:3060以上显卡+8G以上显存+16G内存,硬盘空间至少20G

  • Mac:M1或M2芯片16G内存,20G以上硬盘空间

3.3.2 基本命令
命令说明
ollama pull <模型名>下载模型(如 llama3
ollama run <模型名>运行模型交互式对话
ollama list查看已安装模型
ollama rm <模型名>删除模型

3.3.3 运行模型

ollama pull qwen:7b           # 下载 Qwen-7B
ollama run qwen:7b            # 启动聊天

3.3.4 适用场景
  • 开发测试 – 快速验证模型效果

  • 离线应用 – 无网络环境下使用 LLM

  • 轻量级部署 – 替代云 API 的高成本方案

3.3.5 请求示例

POST http://localhost:11434/api/chat
Content-Type: application/json

{
  "model": "qwen3:0.6b",
  "messages": [
    { "role": "user", "content": "LLM是什么?" }
  ],
  "stream": true
}

响应:

json复制编辑{
  "message": {
    "role": "assistant",
    "content": "你好!我不知道实时天气信息,但你可以查看天气预报网站获取最新天气。"
  },
  "done": true
}

3.4 vLLM

参考Docker

四、DeepSeek-1.5B本地部署

大模型本地部署是指将大型预训练模型(如GPT、Llama、BERT等)完全部署在用户自有的硬件设备(如服务器、本地计算机)上,而非依赖云端API服务。

1、特点

  • 私有化:模型和数据完全存储在本地,无需通过互联网传输。

  • 自主控制:用户拥有模型的完整权限,可自由修改、训练或调整推理逻辑。

  • 离线运行:无需网络连接即可使用模型能力(如生成文本、分析数据)。

2、功能

  • 数据安全:敏感数据(如医疗记录、企业机密)无需上传第三方服务器,避免泄露风险。

  • 模型微调:基于本地数据调整模型参数,适配垂直领域任务(如法律合同分析)。

  • 硬件适配:针对本地GPU/CPU资源优化模型推理速度(如量化、剪枝)。

  • 无需联网:在断网环境(如实验室、保密机构)中仍可使用模型能力。

3、模型下载

  • 从huggingface找到你要下载的模型

  • 安装huggingface的下载工具(python库):

    pip install huggingface_hub
  • 下载模型文件

    set HF_ENDPOINT=https://hf-mirror.com  # 加速下载设置
    huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --local-dir ./deepseek  # 下载模型文件
    huggingface-cli download thenlper/gte-large --local-dir ./gte-large
    huggingface-cli download BAAI/bge-base-zh --local-dir ./bge-base-zh
    ​

4、非流式推理

利用transformer框架进行部署推理: Transformer库的使用手册:Transformers文档

4.1 参考代码

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch# 一:加载模型
model_path = r"./modeldir"  # 模型路径
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16  # 指定模型参数类型为float16
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch_dtype).to(device
)  # 加载模型并移动到GPU
tokenizer = AutoTokenizer.from_pretrained(model_path)  # 加载分词器# 二:设置生成参数和输入消息
gen_kwargs = {"max_length": 1024,  # 生成的最大长度"do_sample": True,  # 是否使用概率采样"top_k": 10,  # 采样时的前K个候选词,越大越随机"temperature": 0.7,  # 生成丰富性,越大越有创造力"top_p": 0.8,  # 采样时的前P个候选词,越大越随机"repetition_penalty": 1.2,  # 重复惩罚系数,越大越不容易重复
}
# 定义消息内容
messages = [{"role": "system", "content": "你是AI助手"},{"role": "user", "content": "明月几时有"},
]# 三:将输入数据转换为模型可接受的格式
inputs = tokenizer.apply_chat_template(messages,add_generation_prompt=True,tokenize=True,return_tensors="pt",return_dict=True,
).to(device
)  # 将输入数据移动到GPU# 四:生成输出
outputs = model.generate(**inputs, **gen_kwargs)  # 生成输出
outputs = outputs[:, inputs["input_ids"].shape[1] :]  # 截取生成的输出
result = tokenizer.decode(outputs[0], skip_special_tokens=True)  # 解码输出# 五:打印结果
print(result)  # 打印结果

4.2 参数详解

  1. device

    • 概念:指定模型运行的计算设备(CPU 或 GPU)。在 PyTorch 中通常为 "cpu" 或 "cuda:0"。

    • 设置建议:优先使用 GPU(如 device="cuda:0"),显存不足时用 CPU。

  2. torch_dtype

    • 概念:模型张量的数据类型,如 float32(高精度)、float16 或 bfloat16(低精度,节省显存)。

    • 影响:精度越高(如 float32),结果越精确,但显存占用更大。精度越低(如 float16),显存占用少,但可能损失精度或数值不稳定。

    • 设置建议:GPU 推荐 torch.float16 或 bfloat16(兼容性需确认);CPU 通常用 float32。

  3. max_length

    • 概念:生成文本的最大长度(token 数量)。

    • 影响:值越大,生成内容越长,但速度越慢,且可能重复或偏离主题。值过小可能导致回答不完整。

    • 设置建议:根据任务调整:对话建议 100-300,长文本生成可设 512-1024,注意模型最大限制(如 4096)。

  4. do_sample

    • 概念:是否启用采样策略(如 top_k, top_p)。若为 False,则使用贪心解码(确定性强)。

    • 影响:True:输出多样化,适合创意任务。False:输出确定性强,适合事实性问题。

    • 设置建议:需要多样性时设为 True,需准确性时设为 False。

  5. top_k

    • 概念:采样时保留概率最高的前 k 个 token。

    • 影响:值越大(如 100),候选 token 多,输出多样但可能不相关。值越小(如 10),输出更确定但可能重复。

    • 设置建议:通常设为 10-50。

      Token概率
      "猫"0.30
      "狗"0.25
      "鸟"0.15
      "跑"0.10
      "跳"0.08
      "飞"0.07
      "叫"0.05

      top_k=3 采样:

      • 只保留概率最高的 3个 token:["猫", "狗", "鸟"]

      • 在这三个中按概率随机采样一个。

  6. temperature

    TokenLogitsSoftmax(T=1)Softmax(T=0.5)Softmax(T=2)
    "猫"4.00.600.800.40
    "狗"3.00.250.180.30
    "鸟"2.00.150.020.30
    • 概念:控制采样随机性,调整概率分布平滑度。

    • 影响:值大(如 1.5):输出随机性高,可能不连贯。值小(如 0.1):输出更确定,但易重复。

    • 设置建议:平衡点常为 0.7-1.0;需创造性时调高(如 0.9),需保守时调低(如 0.3)。

  7. top_p(核采样)

    • 概念:从累积概率超过阈值 p 的最小 token 集合中采样。

    • 影响:值大(如 0.95):候选 token 多,输出多样。值小(如 0.5):候选 token 少,输出更集中。

    • 设置建议:常用 0.7-0.95。

      Token概率累积和
      "猫"0.250.25
      "狗"0.200.45
      "鸟"0.150.60
      "跑"0.120.72
      "跳"0.100.82
      "飞"0.090.91 : 达到 top_p 阈值
      "叫"0.050.96
  8. repetition_penalty

    if token in generated_tokens:logits[token] /= repetition_penalty
    • 概念:惩罚重复 token 的权重(>1.0 时抑制重复,<1.0 时鼓励重复)。

    • 影响:值大(如 2.0):减少重复,但可能生成不自然内容。值小(如 1.0):无惩罚,默认行为。

    • 设置建议:通常设为 1.0-1.2,明显重复时可设 1.2-1.5。

      应用场景推荐设置
      正常文本生成(如聊天)1.1~1.3(防止重复)
      模仿风格性强文本(如古诗)1.0(或略小)
      模型不断重复一句话?适当增大 penalty(如 1.5)

4.3 代码封装

from transformers import AutoTokenizer, AutoModelForCausalLM
import torchclass DeepSeek:def __init__(self, model_path, device, torch_dtype):self.device = device  # 设定推理设备self.model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch_dtype).to(device)  # 加载模型并移动到GPUself.tokenizer = AutoTokenizer.from_pretrained(model_path)  # 加载分词器def inference(self, messages, gen_kwargs):inputs = self.tokenizer.apply_chat_template(messages,add_generation_prompt=True,tokenize=True,return_tensors="pt",return_dict=True,).to(self.device)  # 将输入数据移动到GPUoutputs = self.model.generate(**inputs, **gen_kwargs)  # 生成输出outputs = outputs[:, inputs["input_ids"].shape[1] :]  # 截取生成的输出result = self.tokenizer.decode(outputs[0], skip_special_tokens=True)  # 解码输出return resultif __name__ == "__main__":# 一:设定模型路径和设备,加载模型model_path = r"./modeldir"  # 替换为你的模型路径device = "cuda:0" if torch.cuda.is_available() else "cpu"torch_dtype = torch.float16deepseek = DeepSeek(model_path, device, torch_dtype)# 二:设定推理参数,推理消息gen_kwargs = {"max_length": 1024,  # 生成的最大长度"do_sample": True,  # 是否使用概率采样"top_k": 10,  # 采样时的前K个候选词,越大越随机"temperature": 0.7,  # 生成丰富性,越大越有创造力"top_p": 0.8,  # 采样时的前P个候选词,越大越随机"repetition_penalty": 1.2,}  # 重复惩罚系数,越大越不容易重复messages = [{"role": "system", "content": "你是一名乐于助人的人工智能助手"},{"role": "user", "content": "写一个js判断用户验证码代码"},]  # 定义消息内容result = deepseek.inference(messages, gen_kwargs)  # 调用推理方法print(result)  # 打印结果

5、流式推理

from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
import torch
from threading import Threadclass DeepSeek:def __init__(self, model_path, device, torch_dtype):self.device = device  # 设定推理设备self.model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch_dtype).to(device)  # 加载模型并移动到GPUself.tokenizer = AutoTokenizer.from_pretrained(model_path)  # 加载分词器def inference(self, messages, gen_kwargs):inputs = self.tokenizer.apply_chat_template(messages,add_generation_prompt=True,tokenize=True,return_tensors="pt",return_dict=True,).to(self.device)  # 将输入数据移动到GPUstreamer = TextIteratorStreamer(self.tokenizer, skip_special_tokens=True)  # 创建流式输出对象generation_kwargs = dict(**inputs, **gen_kwargs, streamer=streamer)  # 生成参数thread = Thread(target=self.model.generate, kwargs=generation_kwargs)  # 创建线程thread.start()  # 启动线程进行生成generated_text = ""  # 初始化生成文本for new_text in streamer:  # 流式输出生成的文本generated_text += new_text  # 累加生成的文本yield new_text  # 逐步返回生成的文本if __name__ == "__main__":# 一:设定模型路径和设备,加载模型model_path = r"./modeldir"  # 替换为你的模型路径device = "cuda"  # 指定推理设备为GPUtorch_dtype = torch.float16deepseek = DeepSeek(model_path, device, torch_dtype)# 二:设定推理参数,推理消息gen_kwargs = {"max_length": 1024,  # 生成的最大长度"do_sample": True,  # 是否使用概率采样"top_k": 10,  # 采样时的前K个候选词,越大越随机"temperature": 0.7,  # 生成丰富性,越大越有创造力"top_p": 0.8,  # 采样时的前P个候选词,越大越随机"repetition_penalty": 1.2,}  # 重复惩罚系数,越大越不容易重复messages = [{"role": "system", "content": "你是一名乐于助人的人工智能助手"},{"role": "user", "content": "请简要介绍一下你自己"},]  # 定义消息内容response = deepseek.inference(messages, gen_kwargs)  # 调用推理方法result = ""  # 初始化结果for chunk in response:  # 流式输出生成的文本result += chunk  # 累加生成的文本print(result)  # 打印结果
http://www.dtcms.com/a/351261.html

相关文章:

  • [Mysql数据库] 知识点总结3
  • 基于Android的电影院订票选座系统、基于Android的电影院管理系统app#基于Android的电影在线订票系统
  • 玩转QEMU硬件模拟器 - vexpress-a9开发板模拟开发
  • 深入浅出理解支持向量机:从原理到应用,解锁分类算法的核心密码
  • 宝石组合(蓝桥杯)
  • UX 设计入门终章:让洞察落地!用用户流程图、IA 和旅程图,设计用户与产品的互动故事
  • 介绍一下 bev fusion 网络结构
  • 微服务-27.配置管理-什么是配置管理
  • FULL OUTER JOIN 的作用与使用场景(检查表与表是否存在不同记录)
  • UML 时序图中交互片段操作符的详细解析与 C/C++ 实现示例
  • 五、VSCODE SSH连接linux服务器免密登录
  • Java中 0.05 + 0.01 ≠ 0.06 揭秘浮点数精度陷阱
  • VSCode: 从插件安装到配置,如何实现 Ctrl+S 保存时,完全按照 .eslintrc.js 中的 ESLint 规则自动格式化代码
  • vscode 配置 + androidStudio配置
  • Easy Voice Recorder Pro v2.9.3 简单易用的专业音频录制工具应用
  • 开发手札:UnrealEngine编辑器开发
  • 基于stm32的物联网OneNet火灾报警系统
  • Java面试指南‌——事务:数据库世界的超级英雄联盟
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯|22th-24th Aug. , 2025
  • MySQL基本语法及与JAVA程序建立连接
  • 设计模式七大原则附C++正反例源码
  • 学习嵌入式的第三十八天
  • 【网络安全】XSS漏洞——PortSwigger靶场-DOM破坏
  • 常见的 Loader 和 Plugin?
  • 观察者模式 (Observer Pattern)与几个C++应用例子
  • Visual Basic 数据类型应用示例
  • EasyExcel 3.x 导出动态表头,动态sheet页
  • 国产化Excel开发组件Spire.XLS教程:Python 读取 CSV 文件,从基础到进阶指南
  • C shell 学习
  • AI出题人给出的Java后端面经(二十仨)(不定更)