使用本地部署的 LLaMA 3 模型进行中文对话生成

以下程序调用本地部署的 LLaMA3 模型进行多轮对话生成,通过 Hugging Face Transformers API 加载、预处理、生成并输出最终回答。

  • 程序用的是 Chat 模型格式(如 LLaMA3 Instruct 模型),遵循 ChatML 模板,并使用 apply_chat_template 正确构造 prompt。

首先执行下面这个python脚本下载大模型到本地(下载到本地的具体路径通过cache_dir参数指定)。

#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('LLM-Research/Llama-3.2-1B-Instruct', cache_dir="/root/autodl-tmp/llm")

然后,加载下载好的本地大模型,执行后续操作

from transformers import AutoModelForCausalLM, AutoTokenizerDEVICE = "cuda"# 加载本地模型路径为该模型配置文件所在的根目录
model_dir = "/root/autodl-tmp/llm/LLM-Research/Llama-3___2-1B-Instruct"
# 使用transformer加载模型
model = AutoModelForCausalLM.from_pretrained(model_dir, torch_dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_dir)# 调用模型
# 定义提示词
prompt = "你好,你叫什么名字?你是由谁创造的?"
# 将提示词封装为message
messages = [{"role": "system", "content": "You are a helpful assistant system"},{"role": "user", "content": prompt}]
# 使用分词器的apply_chat_template方法将messages转换为chat引擎可以接受的信息
# tokenize=False表示此时不进行令牌化
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)print("--------------")
print(text)
print("--------------")# 将处理后的文本令牌化并转换为模型的输入张量
model_inputs = tokenizer([text], return_tensors="pt").to(DEVICE)
# 输入模型得到输出
generated = model.generate(model_inputs.input_ids, max_new_tokens=512)
print(generated)# 对输出的内容进行解码还原
response = tokenizer.batch_decode(generated, skip_special_tokens=True)
print(response)
root@autodl-container-38c543b634-d7f7c9f4:~/autodl-tmp/demo_10# python llama3.2_test.py 
--------------
<|begin_of_text|><|start_header_id|>system<|end_header_id|>Cutting Knowledge Date: December 2023
Today Date: 12 May 2025You are a helpful assistant system<|eot_id|><|start_header_id|>user<|end_header_id|>你好,你叫什么名字?你是由谁创造的?<|eot_id|><|start_header_id|>assistant<|end_header_id|>--------------
The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
Setting `pad_token_id` to `eos_token_id`:128001 for open-end generation.
The attention mask is not set and cannot be inferred from input because pad token is same as eos token. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
tensor([[128000, 128000, 128006,   9125, 128007,    271,  38766,   1303,  33025,2696,     25,   6790,    220,   2366,     18,    198,  15724,   2696,25,    220,    717,   3297,    220,   2366,     20,    271,   2675,527,    264,  11190,  18328,   1887, 128009, 128006,    882, 128007,271,  57668,  53901, 104660, 105424, 101879, 119395,  11571,  57668,21043,  68171, 112471, 104251,  67178,   9554,  11571, 128009, 128006,78191, 128007,    271,  37046,  21043,  16197,  44689,  15836,  18328,3922, 113230,  13372,  18184,    445,  81101,   1811,     43,  81101,55951,  16197,  44689,  48044,  27384, 121790,   9554, 109683, 120074,55642, 123123,   3922,  68438,  38129,  43240,  87502,  41007,  37507,111478,  34208,  23226,  42399,   1811, 128009]], device='cuda:0')
['system\n\nCutting Knowledge Date: December 2023\nToday Date: 12 May 2025\n\nYou are a helpful assistant systemuser\n\n你好,你叫什么名字?你是由谁创造的?assistant\n\n我是 Meta 的AI assistant,目前名为 Llama。Llama 是 Meta 的一个大规模的自然语言处理模型,通过使用多种方法来学习和改进。']

这段程序的目的是:使用本地部署的 LLaMA 3 模型进行多轮中文对话生成,主要包括模型加载、输入构造、文本生成和输出解析四个核心部分。

程序一开始导入了必要的模块,并设置计算设备为 "cuda",也就是使用 GPU 来加速模型推理。接着,它指定了模型所在的本地目录路径 model_dir,这个目录中应该包含 Hugging Face 格式的模型权重和配置文件。程序通过 AutoModelForCausalLM.from_pretrained 来加载模型,并指定了 torch_dtype="auto"device_map="auto",这让 transformers 自动选择合适的数据精度(比如 float16)并智能将模型加载到可用的 GPU 上(需要安装 accelerate 库)。同时,AutoTokenizer 也从该路径中加载对应的分词器,它会把人类语言转换成模型可以理解的 token ID。

接下来,程序准备了一条用户输入:你好,你叫什么名字?你是由谁创造的?。为了构建标准的聊天输入,程序创建了一个 messages 列表,其中包含一个 "system" 信息(设定助手角色),以及一条 "user" 提问。这种格式是 Chat 模型(如 LLaMA3 Instruct)所支持的,类似于 ChatGPT 的对话格式。之后,通过 tokenizer.apply_chat_template 方法将这组消息转换为模型能够理解的 纯文本格式。这个方法的参数中,tokenize=False 表示暂时不转换为 token ID,而 add_generation_prompt=True 会在文本结尾添加生成提示符,引导模型开始生成回答。

完成 prompt 构造后,程序使用分词器将文本转换为 token ID,并用 return_tensors="pt" 表示返回 PyTorch 张量,随后将其 .to(DEVICE) 移到 GPU 上,准备作为模型输入。然后调用 model.generate 方法,让模型基于输入生成回复。这里设置了 max_new_tokens=512,即最多生成 512 个 token 的新内容。

模型生成的是一串 token ID,因此最后一步需要用分词器进行反解码。tokenizer.batch_decode 方法会将生成的 token 序列还原为人类可读的自然语言文本,skip_special_tokens=True 参数会去除控制符号。程序最后将生成的回复打印出来,实现了从用户提问到模型生成回答的完整过程。

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

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

相关文章

Oracle19c中的全局临时表

应用程序通常使用某种形式的临时数据存储来处理过于复杂而无法一次性完成的流程。通常&#xff0c;这些临时存储被定义为数据库表或 PL/SQL 表。从 Oracle 8i 开始&#xff0c;可以使用全局临时表将临时表的维护和管理委托给服务器。 一、临时表分类 Oracle 支持两种类型的临…

Windows 安装 Milvus

说明 操作系统&#xff1a;Window 中间件&#xff1a;docker desktop Milvus&#xff1a;Milvus Standalone&#xff08;单机版&#xff09; 安装 docker desktop 参考&#xff1a;Window、CentOs、Ubuntu 安装 docker-CSDN博客 安装 Milvus 参考链接&#xff1a;Run Mil…

24、DeepSeek-V3论文笔记

DeepSeek-V3论文笔记 **一、概述****二、核心架构与创新技术**0.汇总&#xff1a;1. **基础架构**2. **创新策略** 1.DeepSeekMoE无辅助损失负载均衡DeepSeekMoE基础架构无辅助损失负载均衡互补序列级辅助损失 2.多令牌预测&#xff08;MTP&#xff09;1.概念2、原理2.1BPD2.2M…

1.8 梯度

&#xff08;知识体系演进逻辑树&#xff09; 一元导数&#xff08;1.5&#xff09; │ ├─→ 多元偏导数&#xff08;1.6核心突破&#xff09; │ │ │ └─解决&#xff1a;多变量耦合时的单变量影响分析 │ │ │ ├─几何&#xff1a;坐标轴切片切线斜率…

274、H指数

题目 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#xff09…

【C++11】异常

前言 上文我们学习到了C11中类的新功能【C11】类的新功能-CSDN博客 本文我们来学习C下一个新语法&#xff1a;异常 1.异常的概念 异常的处理机制允许程序在运行时就出现的问题进行相应的处理。异常可以使得我们将问题的发现和问题的解决分开&#xff0c;程序的一部分负…

Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)

文章目录 前言1、Linux文件系统1.1 核心特点1.2 重要目录结构1.3 文件类型1.4 文件和目录的命名规则1.5 文件与目录的定位方式 2、查看目录或文件的详细信息&#xff08;ls&#xff09;2.1 基本语法2.2 常用操作2.3 高级用法 3、切换目录&#xff08;cd&#xff09;3.1 常用操作…

在线caj转换word

CAJ格式是中国知网特有的一种文献格式&#xff0c;在学术研究等领域广泛使用&#xff0c;但有时我们需要将其转换为Word格式&#xff0c;方便编辑、引用文献。本文分享如何轻松将CAJ转换为word的转换工具&#xff0c;提高阅读和办公效率。 如何将CAJ转换WORD? 1、使用CAJ转换…

【现代深度学习技术】注意力机制05:多头注意力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

SpringBoot 集成滑块验证码AJ-Captcha行为验证码 Redis分布式 接口限流 防爬虫

介绍 滑块验证码比传统的字符验证码更加直观和用户友好&#xff0c;能够很好防止爬虫获取数据。 AJ-Captcha行为验证码&#xff0c;包含滑动拼图、文字点选两种方式&#xff0c;UI支持弹出和嵌入两种方式。后端提供Java实现&#xff0c;前端提供了php、angular、html、vue、u…

边缘网关(边缘计算)

边缘网关是边缘计算架构中的关键组件&#xff0c;充当连接终端设备&#xff08;如传感器、IoT设备&#xff09;与云端或核心网络的桥梁。它在数据源头附近进行实时处理、分析和过滤&#xff0c;显著提升效率并降低延迟。 核心功能 协议转换 ○ 支持多种通信协议&#xff08;如…

OpenCV定位地板上的书

任务目标是将下面的图片中的书本找出来&#xff1a; 使用到的技术包括&#xff1a;转灰度图、提取颜色分量、二值化、形态学、轮廓提取等。 我们尝试先把图片转为灰度图&#xff0c;然后二值化&#xff0c;看看效果&#xff1a; 可以看到&#xff0c;二值化后&#xff0c;书的…

机器学习第一讲:机器学习本质:让机器通过数据自动寻找规律

机器学习第一讲&#xff1a;机器学习本质&#xff1a;让机器通过数据自动寻找规律 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;超详细手把手指…

修改图像分辨率

在这个教程中&#xff0c;您将学习如何使用Python和深度学习技术来调整图像的分辨率。我们将从基础的图像处理技术开始&#xff0c;逐步深入到使用预训练的深度学习模型进行图像超分辨率处理。 一、常规修改方法 1. 安装Pillow库 首先&#xff0c;你需要确保你的Python环境中…

jsAPI

环境准备 1 安装nvm nvm 即 (node version manager)&#xff0c;好处是方便切换 node.js 版本 安装注意事项 要卸载掉现有的 nodejs提示选择 nvm 和 nodejs 目录时&#xff0c;一定要避免目录中出现空格选用【以管理员身份运行】cmd 程序来执行 nvm 命令首次运行前设置好国…

SCDN是什么?

SCDN是安全内容分发网络的简称&#xff0c;它在传统内容分发网络&#xff08;CDN&#xff09;的基础上&#xff0c;集成了安全防护能力&#xff0c;旨在同时提升内容传输速度和网络安全性。 SCDN的核心功能有&#xff1a; DDoS防御&#xff1a;识别并抵御大规模分布式拒绝服务…

Qt/C++开发监控GB28181系统/实时视频预览/视频点播/rtp解包解码显示

一、前言 通过gb28181做实时视频预览&#xff0c;也就是视频点播功能&#xff0c;是最重要的功能了&#xff0c;绝对是整个系统排第一重要的&#xff0c;这就是核心功能&#xff0c;什么设备注册、获取通道等都是为了实时预览做准备的&#xff0c;当然这个功能也是最难的&…

找银子 题解(c++)

题目 思路 首先&#xff0c;这道题乍一看&#xff0c;应该可以用搜索来做。 但是&#xff0c;搜索会不会超时间限制呢&#xff1f; 为了防止时间超限,我们可以换一种做法。 先创立两个二维数组&#xff0c;一个是输入的数组a&#xff0c;一个是数组b。 假设 i 行 j 列的数…

子集树算法文档

1.算法概述 子集树是一种 回溯算法&#xff0c;用于生成一个集合的所有子集。给定一个数组 arr&#xff0c;该算法递归地遍历所有可能的子集&#xff0c;并通过一个辅助数组 x 标记当前元素是否被选中。 2.算法特点 时间复杂度&#xff1a;O(2n)&#xff08;因为一个包含 n 个…

HTTP/1.1 host虚拟主机详解

一、核心需求&#xff1a;为什么需要虚拟主机&#xff1f; 在互联网上&#xff0c;我们常常希望在一台物理服务器&#xff08;它通常只有一个公网 IP 地址&#xff09;上运行多个独立的网站&#xff0c;每个网站都有自己独特的域名&#xff08;例如 www.a-site.com​, www.b-s…