前提条件
- 大模型学习机预装了Llama 2-7b-chat模型与stable-diffuison-base-v2.1模型,以及配套的开源服务框架text-generation-webui与stable-diffuison-webui,使您不需单独进行下载模型与配置环境。
- 云主机开通与如何登录网页页面参见部署文档。
以下将向您介绍如何进行Llama 2模型文本生成任务:
注意框架默认角色名称为"You", 但主流大模型默认角色名称一般为"User", 可能会导致模型效果显著变差。
修改角色名称的方式有:
1. 在网页Parameters -> Chat -> User标签下修改Name字段为"User",此方法刷新页面后就会失效。
2. 修改配置文件/root/text-generation-webui/modules/shared.py中的'name1': 'User', 并重启llama服务, 此方法永久生效。
1. 大语言模型加载
说明以下内容基于开源框架text-generation-webui。
1.1 基础模型加载
大语言模型体积较大,需要占用较多的内存/显存资源,因此在刚启动服务时并未进行加载,需要手动选择模型进行加载。
在页面上切换到Model标签页,左侧下拉菜单展开后会显示所有存放于云主机/root/text-generation-webui/models目录下的模型。学习机初始预装了Llama-2-7b-chat模型(huggingface格式),您也可随时下载其他大模型并放入models目录下进行加载。
默认Model loader:Transformers能够支持huggingface的主流大模型,在自行加载其他模型时您需要确认模型格式是否匹配。
右下角将出现模型加载样式,直至加载成功。耗时可能较长,期间不要退出页面。
注意在加载预装的Llama-2-7b模型时,如果您使用的是GPU学习机,模型将默认以fp16半精度进行加载,消耗13.1G显存;如果您使用的是CPU学习机,模型将以fp32单精度进行加载,消耗26G内存。
因此,如果您的机型是内存为32G或显存为16G的型号,则会因为资源不足导致无法直接加载Llama-2-7b模型。
解决办法:
(1) 参考大模型学习机服务启停文档说明,加载Llama 2-7b模型前先将图像生成服务关停。
(2) GPU学习机能够支持对模型进行量化,降低模型精度的同时缩减模型大小。您可以在Model页下方找到load-in-8bit的开关并进行勾选,此时Llama-2-7b模型将消耗7G内存,可以和图像生成服务中的StableDiffusion模型共存。且8bit精度对大语言模型的生成来说影响不会特别大。
注意由于huggingface.io网站访问受限,Model标签页的Download按钮无法直接下载模型。
1.2 LoRA模型加载
由于基础大模型参数量极多,训练需要的资源量极大,因此基于基础大模型进行微调的小模型应运而生。LoRA技术便是其中最主流的一种。
LoRA小模型无法独立使用,需要在加载完基础大模型后再进行加载,对基础大模型的能力进行扩展。
学习机内没有预装LoRA小模型,您可以在网上下载其他基于Llama-2-7b-chat的LoRA模型并放到学习机的/root/text-generation-webui/loras目录下。在Model标签页右侧选择LoRA模型并点击Apply LoRAs进行加载。
例如您可以从相关技术网站找到进行了中文微调的LoRA模型(也有直接在基础大模型上进行训练得到的新的基础大模型,注意区分)。
2. 大语言模型使用
2.1 对话模式
大模型需要在一定的提示词(prompt)下进行生成。在对话模式下,框架预设了一些背景知识以控制生成方向。可在Parameters标签页的Character标签下进行查看和修改。
需要参考下图将Parameter页Chat标签下默认的Name修改为Character’s Name:Assistant;User Name:User。否则在进行chat对话时部分模型可能出现问题。
在Chat标签页我们可以和大模型展开对话。
注意原版Llama-2-7b-chat模型对中文支持较弱,可以补充下载其他基于Llama-2-7b-chat的中文LoRA小模型,或换用其他中文的基础大模型,例如电信星辰(telechat)大模型。
2.2 文本生成模式
在Default标签页我们可以利用大模型进行文本生成创作。
注意原版Llama-2-7b-chat模型对中文支持较弱,可以补充下载其他基于Llama-2-7b-chat的中文LoRA小模型,或换用其他中文的基础大模型,例如电信星辰(telechat)大模型。
2.3 生成方向控制
大语言模型生成方向可以在Parameters标签页的Generation标签下进行调整,但需要您具有一定的大语言模型背景知识。这里仅对其中部分基础参数进行介绍。
注意大模型中token的概念:文本中最小的语义单元。例如在英文中一个简单单词(love)可能是一个token,一个复杂单词(transformer)可能是多个token的组合(trans + former); 在中文中一个字(爱)可能是一个token,多个字(爱情)也可能组成一个token。
- max_new_tokens:生成token的最大数量。
- temperature:在生成下一个token时,控制各个候选token被选择的概率的平滑程度。
temperature取值越大,每个候选token的概率越相似。 - top_p: 在生成下一个token时,按候选token的概率从大到小计算累计概率,
达到p后丢弃后续的候选token,控制候选token的数量。 - top_k:在生成下一个token时, 按候选token的概率从大到小,只取前k个候选token,控制候选token的数量。
- repetition_penalty:重复惩罚,控制生成结果中文字的重复次数。