mirror of
https://github.com/datawhalechina/self-llm.git
synced 2026-08-28 15:11:50 +08:00
docs: 添加GLM-4.5-Air模型文档及评测指南
添加GLM-4.5-Air模型的部署、评测和微调文档,包括vLLM部署指南、EvalScope评测方法和LoRA微调教程 更新README.md中GLM-4.5-Air的支持状态 添加相关示例图片和详细操作步骤
This commit is contained in:
@@ -75,10 +75,10 @@
|
||||
### 已支持模型
|
||||
|
||||
- [GLM-4.5-Air](https://github.com/zai-org/GLM-4.5)
|
||||
- [ ] GLM-4.5-Air vLLM 部署调用
|
||||
- [ ] GLM-4.5-Air Lora 微调
|
||||
- [ ] GLM-4.5-Air EvalScope 并发测试
|
||||
- [ ] GLM-4.5-Air Docker 镜像
|
||||
- [x] [GLM-4.5-Air vLLM 部署调用](./models/GLM-4.5-Air/01-GLM-4.5-Air-vLLM%20部署调用.md) @不要葱姜蒜
|
||||
- [x] [GLM-4.5-Air EvalScope 智商情商 && 并发评测](./models/GLM-4.5-Air/02-GLM-4.5-Air%20EvalScope%20并发测试.md) @不要葱姜蒜
|
||||
- [x] [GLM-4.5-Air Lora 微调](./models/GLM-4.5-Air/03-GLM-4.5-Air-Lora%20及%20Swanlab%20可视化微调.md) @不要葱姜蒜
|
||||
- [x] [GLM-4.5-Air Ucloud Docker 镜像](https://www.compshare.cn/images/lUQhKDCeCdZW?referral_code=ELukJdQS3vvCwYIfgsQf2C) @不要葱姜蒜
|
||||
|
||||
- [ERNIE-4.5](https://huggingface.co/baidu/ERNIE-4.5-0.3B-PT)
|
||||
- [x] [ERNIE-4.5-0.3B-PT Lora 微调及 SwanLab 可视化记录](./models/ERNIE-4.5/01-ERNIE-4.5-0.3B-PT%20Lora%20微调及%20SwanLab%20可视化记录.md) @不要葱姜蒜
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,175 @@
|
||||
# 02-GLM-4.5-Air EvalScope 智商情商&&并发评测
|
||||
|
||||
## 大模型评测是什么
|
||||
|
||||
大语言模型评测是指对大语言模型(LLM)在多种任务和场景下的性能进行全面评估的过程。评测的目的是衡量模型的通用能力、特定领域表现、效率、鲁棒性、安全性等多方面性能,以便优化模型设计、指导技术选型和推动模型在实际应用中的部署。
|
||||
|
||||
评测的主要内容包括以下几个方面:
|
||||
|
||||
- 通用能力:评估模型在语言理解、生成、推理等方面的基础能力。
|
||||
- 特定领域表现:针对特定任务(如数学推理、代码生成、情感分析等)的性能评估。
|
||||
- 效率与资源消耗:包括模型的训练和推理时间、计算资源需求等。
|
||||
- 鲁棒性与可靠性:评估模型在面对噪声、对抗攻击或输入扰动时的稳定性。
|
||||
- 伦理与安全性:检测模型是否会产生有害内容、是否存在偏见或歧视。
|
||||
|
||||
EvalScope 是魔搭社区官方推出的模型评测与性能基准测试框架,内置多个常用测试基准和评测指标,如 MMLU、CMMLU、C-Eval、GSM8K、ARC、HellaSwag、TruthfulQA、MATH 和 HumanEval 等;支持多种类型的模型评测,包括 LLM、多模态 LLM、embedding 模型和 reranker 模型。EvalScope 还适用于多种评测场景,如端到端 RAG 评测、竞技场模式和模型推理性能压测等。此外,通过 ms-swift 训练框架的无缝集成,可一键发起评测,实现了模型训练到评测的全链路支持。
|
||||
官网地址:https://evalscope.readthedocs.io/zh-cn/latest/get_started
|
||||
|
||||
# EvalScope 评测使用方法
|
||||
|
||||
## 环境准备
|
||||
|
||||
本文基础环境如下:
|
||||
|
||||
```
|
||||
----------------
|
||||
ubuntu 22.04
|
||||
python 3.10
|
||||
Cuda 12.4
|
||||
PyTorch 2.7.1
|
||||
----------------
|
||||
```
|
||||
|
||||
**pip 安装 EvalScope:**
|
||||
|
||||
```
|
||||
pip install evalscope # 安装 Native backend (默认)
|
||||
# 额外选项
|
||||
pip install evalscope[opencompass] # 安装 OpenCompass backend
|
||||
pip install evalscope[vlmeval] # 安装 VLMEvalKit backend
|
||||
pip install evalscope[rag] # 安装 RAGEval backend
|
||||
pip install evalscope[perf] # 安装 模型压测模块 依赖
|
||||
pip install evalscope[all] # 安装所有 backends (Native, OpenCompass, VLMEvalKit, RAGEval)
|
||||
```
|
||||
|
||||
> 考虑到部分同学配置环境可能会遇到一些问题,我们在 ucloud 平台准备了 GLM-4.5-Air 的环境镜像,点击下方链接并直接创建 ucloud 示例即可。
|
||||
> ***https://www.compshare.cn/images/lUQhKDCeCdZW?referral_code=ELukJdQS3vvCwYIfgsQf2C***
|
||||
|
||||
|
||||
## 模型评测方法
|
||||
|
||||
下面我们以**智商情商评测**为例,对 GLM-4.5-Air 模型进行评测。
|
||||
|
||||
我们将使用 EvalScope 模型评测框架,在 IQuiz 数据集上进行评测,这个数据集中收集了 40 道 IQ 测试和 80 道 EQ 测试选择题,其中包括一些经典问题:
|
||||
|
||||
- 数字 9.8 和 9.11 哪个大?
|
||||
|
||||
- 单词 strawberry 和 blueberry 中一共有多少个 r ?
|
||||
|
||||
- 刘雨正在休假,突然被要求开车送领导去机场,他正为休假计划的泡汤而懊恼,因此在送领导时,刹车踩得比较用力。在车上,领导突然说:“小刘啊,这不愧是有着悠久历史的西安,我这坐车有一种回到古代坐马车的感觉。” 领导是什么意思?
|
||||
|
||||
可以点击[这里](https://modelscope.cn/datasets/AI-ModelScope/IQuiz/dataPeview)看看你能答对多少,再期待一下 AI 模型的表现吧。
|
||||
|
||||
### 步骤一: **创建 vLLM 服务器**
|
||||
|
||||
这里我们参照第一节vllm部署模型环节,使用 vLLM 创建兼容 OpenAI API 接口的服务器,然后使用 EvalScope 进行评测。当然接入其他的 api 也是可以的。
|
||||
|
||||
在终端输入以下命令,即可用 vLLM 部署 GLM-4.5-Air 模型到一个兼容 OpenAI API 接口的服务器上。
|
||||
|
||||
```bash
|
||||
vllm serve /model/ModelScope/ZhipuAI/GLM-4.5-Air \
|
||||
--tensor-parallel-size 4 \
|
||||
--tool-call-parser glm4_moe \
|
||||
--reasoning-parser glm4_moe \
|
||||
--enable-auto-tool-choice \
|
||||
--served-model-name glm-4.5-air
|
||||
```
|
||||
|
||||
### 步骤二: **执行评测**
|
||||
|
||||
我们可以使用 EvalScope 命令进行评测,直接在终端输入以下命令:
|
||||
|
||||
```bash
|
||||
evalscope eval \
|
||||
--model glm-4.5-air \
|
||||
--api-url http://localhost:8000/v1 \
|
||||
--api-key EMPTY \
|
||||
--eval-type service \
|
||||
--eval-batch-size 16 \
|
||||
--datasets iquiz \
|
||||
--work-dir outputs/glm-4.5-air
|
||||
```
|
||||
|
||||
也可以使用 Python 命令进行评测:
|
||||
|
||||
新建 eval_api.py 文件,并输入以下代码:
|
||||
|
||||
```python
|
||||
# 导入执行任务的函数和任务配置类
|
||||
from evalscope.run import run_task
|
||||
from evalscope.config import TaskConfig
|
||||
|
||||
# 配置任务参数
|
||||
task_cfg = TaskConfig(
|
||||
model='glm-4.5-air', # 指定使用的模型
|
||||
api_url='http://localhost:8000/v1/chat/completions', # 指定API端点,这里使用的是ollama默认的api接口
|
||||
api_key='sk-xxxxxxx', # API密钥(需替换为实际密钥,ollama 的api_key)
|
||||
eval_type='service', # 指定评估类型为服务模式
|
||||
datasets=['iquiz'], # 指定使用的数据集(这个测试集可以快速测试模型的智商和情商)
|
||||
generation_config={ # 文本生成配置
|
||||
'max_tokens': 4096, # 最大令牌数
|
||||
'max_new_tokens': 4096, # 最大新生成令牌数
|
||||
'temperature': 1.0, # 温度参数,这里设置为1.0,模型的输出随机性较大,所以可能会有些实验误差
|
||||
},
|
||||
work_dir='outputs/glm-4.5-air', # 输出目录
|
||||
)
|
||||
|
||||
# 执行任务
|
||||
run_task(task_cfg=task_cfg)
|
||||
```
|
||||
|
||||
新建一个 bash 窗口,也就是终端中执行。
|
||||
控制台运行`python eval_api.py`命令即可。
|
||||
|
||||
等待 3 分钟左右评测就完成啦,控制台输出的结果如下图所示:
|
||||
|
||||

|
||||
|
||||
## 并发测试
|
||||
|
||||
在终端输入以下命令,即可用 vLLM 部署 GLM-4.5-Air 模型到一个兼容 OpenAI API 接口的服务器上。
|
||||
|
||||
```bash
|
||||
vllm serve /model/ModelScope/ZhipuAI/GLM-4.5-Air \
|
||||
--tensor-parallel-size 4 \
|
||||
--tool-call-parser glm4_moe \
|
||||
--reasoning-parser glm4_moe \
|
||||
--enable-auto-tool-choice \
|
||||
--served-model-name glm-4.5-air \
|
||||
--port 8000
|
||||
```
|
||||
|
||||
然后使用以下命令进行并发测试:
|
||||
|
||||
> 注:作者在 4卡H20 上部署 GLM-4.5-Air 模型,并发测试时使用 5、10、15、20 个线程。
|
||||
|
||||
```bash
|
||||
MODEL="glm-4.5-air"
|
||||
NUMBER=100
|
||||
PARALLEL=20
|
||||
|
||||
evalscope perf \
|
||||
--url "http://localhost:8000/v1/chat/completions" \
|
||||
--parallel ${PARALLEL} \
|
||||
--model ${MODEL} \
|
||||
--number ${NUMBER} \
|
||||
--api openai \
|
||||
--dataset openqa \
|
||||
--stream \
|
||||
--swanlab-api-key 'your-swanlab-api-key' \
|
||||
--name "${MODEL}-number${NUMBER}-parallel${PARALLEL}"
|
||||
```
|
||||
|
||||
- `--url`:指定模型服务的 API 接口地址,这里是本地部署的 vLLM 服务地址。
|
||||
- `--parallel`:指定并发请求的线程数,这里设置为 20 个线程。
|
||||
- `--model`:指定要评测的模型名称,这里是 glm-4.5-air。
|
||||
- `--number`:指定每个线程要发送的请求数量,这里设置为 100 个请求。
|
||||
- `--api`:指定评测使用的 API 类型,这里是 openai。
|
||||
- `--dataset`:指定评测使用的数据集,这里是 openqa。
|
||||
- `--stream`:指定是否使用流式输出,这里设置为 true。
|
||||
- `--swanlab-api-key`:指定 swanlab 的 API 密钥,这里需要替换为实际的 API 密钥。
|
||||
- `--name`:指定评测任务的名称,这里是 glm-4.5-air-number100-parallel20。
|
||||
|
||||
测试结果可以在我的 [性能评测](https://swanlab.cn/@kmno4/perf_benchmark/charts) 上查看,如下图所示:
|
||||
|
||||

|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,292 @@
|
||||
# 03-GLM-4.5-Air-LoRA 及 SwanLab 可视化记录
|
||||
|
||||
## 环境配置
|
||||
|
||||
```bash
|
||||
# 换清华镜像源
|
||||
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
pip install modelscope
|
||||
pip install transformers==4.54.0
|
||||
pip install accelerate
|
||||
pip install datasets
|
||||
pip install peft==0.16.0
|
||||
pip install swanlab
|
||||
|
||||
```
|
||||
|
||||
> 考虑到部分同学配置环境可能会遇到一些问题,我们在 ucloud 平台准备了 GLM-4.5-Air 的环境镜像,点击下方链接并直接创建 ucloud 示例即可。
|
||||
> ***https://www.compshare.cn/images/lUQhKDCeCdZW?referral_code=ELukJdQS3vvCwYIfgsQf2C***
|
||||
|
||||
|
||||
## 模型下载
|
||||
|
||||
```python
|
||||
from modelscope import snapshot_download
|
||||
|
||||
model_dir = snapshot_download('ZhipuAI/GLM-4.5-Air', cache_dir='your_model_dir', revision='master')
|
||||
```
|
||||
|
||||
## 数据集构建
|
||||
|
||||
对大语言模型进行 `supervised-finetuning`(`sft`,有监督微调)的数据格式如下:
|
||||
|
||||
```json
|
||||
{
|
||||
"instruction": "回答以下用户问题,仅输出答案。",
|
||||
"input": "1+1等于几?",
|
||||
"output": "2"
|
||||
}
|
||||
```
|
||||
|
||||
其中,`instruction` 是用户指令,告知模型其需要完成的任务;`input` 是用户输入,是完成用户指令所必须的输入内容;`output` 是模型应该给出的输出。
|
||||
|
||||
有监督微调的目标是让模型具备理解并遵循用户指令的能力。因此,在构建数据集时,我们应针对我们的目标任务,针对性构建数据。比如,如果我们的目标是通过大量人物的对话数据微调得到一个能够 role-play 甄嬛对话风格的模型,因此在该场景下的数据示例如下:
|
||||
|
||||
```json
|
||||
{
|
||||
"instruction": "你父亲是谁?",
|
||||
"input": "",
|
||||
"output": "家父是大理寺少卿甄远道。"
|
||||
}
|
||||
```
|
||||
|
||||
所有的示例微调数据集位于 [/dataset](../../dataset/huanhuan.json)
|
||||
|
||||
## 数据准备
|
||||
|
||||
`LoRA`(`Low-Rank Adaptation`)训练的数据是需要经过格式化、编码之后再输入给模型进行训练的,我们需要先将输入文本编码为 `input_ids`,将输出文本编码为 `labels`,编码之后的结果是向量。我们首先定义一个预处理函数,这个函数用于对每一个样本,同时编码其输入、输出文本并返回一个编码后的字典:
|
||||
|
||||
```python
|
||||
def process_func(example):
|
||||
MAX_LENGTH = 1024 # 设置最大序列长度为1024个token
|
||||
input_ids, attention_mask, labels = [], [], [] # 初始化返回值
|
||||
# 适配chat_template
|
||||
instruction = tokenizer(
|
||||
f"[gMASK]<sop><|system|>\n现在你要扮演皇帝身边的女人--甄嬛"
|
||||
f"<|user|>\n{example['instruction'] + example['input']}"
|
||||
f"<|assistant|>\n<think></think>\n",
|
||||
add_special_tokens=False
|
||||
)
|
||||
response = tokenizer(f"{example['output']}", add_special_tokens=False)
|
||||
# 将instructio部分和response部分的input_ids拼接,并在末尾添加eos token作为标记结束的token
|
||||
input_ids = instruction["input_ids"] + response["input_ids"]
|
||||
# 注意力掩码,表示模型需要关注的位置
|
||||
attention_mask = instruction["attention_mask"] + response["attention_mask"]
|
||||
# 对于instruction,使用-100表示这些位置不计算loss(即模型不需要预测这部分)
|
||||
labels = [-100] * len(instruction["input_ids"]) + response["input_ids"]
|
||||
if len(input_ids) > MAX_LENGTH: # 超出最大序列长度截断
|
||||
input_ids = input_ids[:MAX_LENGTH]
|
||||
attention_mask = attention_mask[:MAX_LENGTH]
|
||||
labels = labels[:MAX_LENGTH]
|
||||
return {
|
||||
"input_ids": input_ids,
|
||||
"attention_mask": attention_mask,
|
||||
"labels": labels
|
||||
}
|
||||
```
|
||||
|
||||
`GLM-4.5-Air` 采用的 `Chat Template`格式如下:
|
||||
|
||||
由于 `GLM-4.5-Air` 是混合推理模型,因此可以手动选择开启思考模式
|
||||
|
||||
不开启 `thinking mode`
|
||||
|
||||
```python
|
||||
messages = [
|
||||
{"role": "system", "content": "You are a helpful assistant."},
|
||||
{"role": "user", "content": "你好"},
|
||||
{"role": "assistant", "content": "你好,我是一个AI助手"},
|
||||
{"role": "user", "content": "不错~"},
|
||||
]
|
||||
|
||||
text = tokenizer.apply_chat_template(
|
||||
messages,
|
||||
tokenize=False,
|
||||
add_generation_prompt=True,
|
||||
enable_thinking=False
|
||||
)
|
||||
print(text)
|
||||
```
|
||||
|
||||
```
|
||||
[gMASK]<sop><|system|>
|
||||
You are a helpful assistant.<|user|>
|
||||
你好/nothink<|assistant|>
|
||||
<think></think>
|
||||
你好,我是一个AI助手<|user|>
|
||||
不错~/nothink<|assistant|>
|
||||
<think></think>
|
||||
```
|
||||
|
||||
开启 `thinking mode`
|
||||
|
||||
```python
|
||||
messages = [
|
||||
{"role": "system", "content": "You are a helpful assistant."},
|
||||
{"role": "user", "content": "你好"},
|
||||
{"role": "assistant", "content": "你好,我是一个AI助手"},
|
||||
{"role": "user", "content": "不错~"},
|
||||
]
|
||||
|
||||
text = tokenizer.apply_chat_template(
|
||||
messages,
|
||||
tokenize=False,
|
||||
add_generation_prompt=True,
|
||||
enable_thinking=True
|
||||
)
|
||||
print(text)
|
||||
```
|
||||
|
||||
```
|
||||
[gMASK]<sop><|system|>
|
||||
You are a helpful assistant.<|user|>
|
||||
你好<|assistant|>
|
||||
<think></think>
|
||||
你好,我是一个AI助手<|user|>
|
||||
不错~<|assistant|>
|
||||
```
|
||||
|
||||
## 加载模型和 tokenizer
|
||||
|
||||
```python
|
||||
tokenizer = AutoTokenizer.from_pretrained('请修改我!!!/Qwen/Qwen3-8B')
|
||||
|
||||
model = AutoModelForCausalLM.from_pretrained('请修改我!!!/Qwen/Qwen3-8B', device_map="auto", torch_dtype=torch.bfloat16)
|
||||
```
|
||||
|
||||
## Lora Config
|
||||
|
||||
`LoraConfig`这个类中可以设置很多参数,比较重要的如下
|
||||
|
||||
- `task_type`:模型类型,现在绝大部分 `decoder_only` 的模型都是因果语言模型 `CAUSAL_LM`
|
||||
- `target_modules`:需要训练的模型层的名字,主要就是 `attention`部分的层,不同的模型对应的层的名字不同
|
||||
- `r`:`LoRA` 的秩,决定了低秩矩阵的维度,较小的 `r` 意味着更少的参数
|
||||
- `lora_alpha`:缩放参数,与 `r` 一起决定了 `LoRA` 更新的强度。实际缩放比例为`lora_alpha/r`,在当前示例中是 `32 / 8 = 4` 倍
|
||||
- `lora_dropout`:应用于 `LoRA` 层的 `dropout rate`,用于防止过拟合
|
||||
|
||||
```python
|
||||
config = LoraConfig(
|
||||
task_type=TaskType.CAUSAL_LM,
|
||||
target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
|
||||
inference_mode=False, # 训练模式
|
||||
r=8, # Lora 秩
|
||||
lora_alpha=32, # Lora alpha
|
||||
lora_dropout=0.1 # Dropout 比例
|
||||
)
|
||||
```
|
||||
|
||||
## Training Arguments
|
||||
|
||||
- `output_dir`:模型的输出路径
|
||||
- `per_device_train_batch_size`:每张卡上的 `batch_size`
|
||||
- `gradient_accumulation_steps`: 梯度累计
|
||||
- `num_train_epochs`:顾名思义 `epoch`
|
||||
|
||||
```python
|
||||
args = TrainingArguments(
|
||||
output_dir="./output/glm45_air_lora",
|
||||
per_device_train_batch_size=4,
|
||||
gradient_accumulation_steps=4,
|
||||
logging_steps=2,
|
||||
num_train_epochs=3,
|
||||
save_steps=10,
|
||||
learning_rate=1e-4,
|
||||
save_on_each_node=True,
|
||||
gradient_checkpointing=True,
|
||||
report_to="none",
|
||||
)
|
||||
```
|
||||
|
||||
## SwanLab 简介
|
||||
|
||||

|
||||
|
||||
[SwanLab](https://github.com/swanhubx/swanlab) 是一个开源的模型训练记录工具,面向 AI 研究者,提供了训练可视化、自动日志记录、超参数记录、实验对比、多人协同等功能。在 `SwanLab` 上,研究者能基于直观的可视化图表发现训练问题,对比多个实验找到研究灵感,并通过在线链接的分享与基于组织的多人协同训练,打破团队沟通的壁垒。
|
||||
|
||||
**为什么要记录训练**
|
||||
|
||||
相较于软件开发,模型训练更像一个实验科学。一个品质优秀的模型背后,往往是成千上万次实验。研究者需要不断尝试、记录、对比,积累经验,才能找到最佳的模型结构、超参数与数据配比。在这之中,如何高效进行记录与对比,对于研究效率的提升至关重要。
|
||||
|
||||
## 实例化 SwanLabCallback
|
||||
|
||||
建议先在 [SwanLab 官网](https://swanlab.cn/) 注册账号,然后在训练初始化阶段选择
|
||||
|
||||
`(2) Use an existing SwanLab account` 并使用 private API Key 登录
|
||||
|
||||
```python
|
||||
import swanlab
|
||||
from swanlab.integration.transformers import SwanLabCallback
|
||||
|
||||
swanlab.login(api_key='your api key', save=True)
|
||||
|
||||
# 实例化SwanLabCallback
|
||||
swanlab_callback = SwanLabCallback(
|
||||
project="self-llm",
|
||||
experiment_name="glm45_air_lora_experiment"
|
||||
)
|
||||
```
|
||||
|
||||
## 使用 Trainer 训练
|
||||
|
||||
```python
|
||||
trainer = Trainer(
|
||||
model=model,
|
||||
args=args,
|
||||
train_dataset=tokenized_id,
|
||||
data_collator=DataCollatorForSeq2Seq(tokenizer=tokenizer, padding=True),
|
||||
callbacks=[swanlab_callback] # 传入之前的swanlab_callback
|
||||
)
|
||||
trainer.train()
|
||||
```
|
||||
|
||||
训练完成后,打开 `SwanLab` ,可以查看训练过程中记录的参数和可视化的训练 loss 曲线:
|
||||
|
||||

|
||||
|
||||
## 加载 lora 权重推理
|
||||
|
||||
得到任意 `checkpoints` 之后加载 `lora` 权重进行推理:
|
||||
|
||||
```python
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
import torch
|
||||
from peft import PeftModel
|
||||
|
||||
mode_path = '/model/ModelScope/ZhipuAI/GLM-4.5-Air'
|
||||
lora_path = '/workspace/output/glm45_air_lora/checkpoint-20' # 这里改称你的 lora 输出对应 checkpoint 地址
|
||||
|
||||
# 加载tokenizer
|
||||
tokenizer = AutoTokenizer.from_pretrained(mode_path)
|
||||
|
||||
# 加载模型
|
||||
model = AutoModelForCausalLM.from_pretrained(mode_path, device_map="auto",torch_dtype=torch.bfloat16, trust_remote_code=True)
|
||||
|
||||
# 加载lora权重
|
||||
model = PeftModel.from_pretrained(model, model_id=lora_path)
|
||||
|
||||
prompt = "你是谁?"
|
||||
inputs = tokenizer.apply_chat_template(
|
||||
[{"role": "user", "content": "假设你是皇帝身边的女人--甄嬛。"},{"role": "user", "content": prompt}],
|
||||
add_generation_prompt=True,
|
||||
tokenize=True,
|
||||
return_tensors="pt",
|
||||
return_dict=True,
|
||||
enable_thinking=False
|
||||
)
|
||||
|
||||
inputs = {
|
||||
"input_ids": inputs["input_ids"],
|
||||
"attention_mask": inputs["attention_mask"]
|
||||
}
|
||||
|
||||
gen_kwargs = {"max_length": 2500, "do_sample": True, "top_k": 1}
|
||||
with torch.no_grad():
|
||||
outputs = model.generate(**inputs, **gen_kwargs)
|
||||
outputs = outputs[:, inputs['input_ids'].shape[1]:]
|
||||
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
|
||||
```
|
||||
|
||||
```
|
||||
我是甄嬛,家父是大理寺少卿甄远道。
|
||||
```
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 656 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 432 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 177 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 645 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 155 KiB |
Reference in New Issue
Block a user