改善大型语言模型的3种简单方法

2023-11-27 14:04:05 浏览数 (1)

大型语言模型(LLMs)已经成为现实。随着最近发布的Llama 2,开源LLMs正在接近ChatGPT的性能,并且经过适当调整,甚至可以超越它。

使用这些LLMs通常并不像看起来那么简单,特别是如果你想将LLM进行精细调整以适应特定用例。

在本文中,我们将介绍3种改善任何LLM性能的最常见方法:

  1. 提示工程
  2. 检索增强生成(RAG)
  3. 参数高效微调(PEFT)

还有许多其他方法,但这些是最简单的方法,可以在不多的工作量下带来重大改进。

这3种方法从最简单的方法开始,即所谓的低挂果,到更复杂的改进LLM的方法之一。

要充分利用LLMs,甚至可以将这三种方法结合起来使用!

在开始之前,这里是更详细的方法概述,以便更容易参考。

你还可以在Google Colab Notebook中跟随操作,以确保一切都按预期工作。

加载Llama 2

在开始之前,我们需要加载一个LLM,以便在这些示例中使用。我们选择基本的Llama 2,因为它展现出令人难以置信的性能,而且我也喜欢在教程中坚持使用基础模型。

在开始之前,我们首先需要接受许可协议。请按照以下步骤操作:

  1. 在此处创建一个HuggingFace帐户。
  2. 在此处申请Llama 2的访问权限。
  3. 在此处获取你的HuggingFace令牌。

完成后,我们可以使用HuggingFace凭据登录,以便此环境知道我们有权限下载我们感兴趣的Llama 2模型:

代码语言:javascript复制
from huggingface_hub import notebook_login
notebook_login()

接下来,我们可以加载Llama 2的13B变体。

代码语言:javascript复制
from torch import cuda, bfloat16
import transformers

model_id = 'meta-llama/Llama-2-13b-chat-hf'
pyt
# 4-bit Quanityzation to load Llama 2 with less GPU memory
bnb_config = transformers.BitsAndBytesConfig(
    load_in_4bit=True,  
    bnb_4bit_quant_type='nf4',  
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=bfloat16
)

# Llama 2 Tokenizer
tokenizer = transformers.AutoTokenizer.from_pretrained(model_id)

# Llama 2 Model
model = transformers.AutoModelForCausalLM.from_pretrained(
    model_id,
    trust_remote_code=True,
    quantization_config=bnb_config,
    device_map='auto',
)
model.eval()

# Our text generator
generator = transformers.pipeline(
    model=model, tokenizer=tokenizer,
    task='text-generation',
    temperature=0.1,
    max_new_tokens=500,
    repetition_penalty=1.1
)

大多数开源LLMs在创建提示时都必须遵循某种模板。就Llama 2而言,以下内容有助于引导提示的编写:

这意味着我们必须按以下方式使用提示来正确生成文本:

代码语言:javascript复制
basic_prompt = """
<s>[INST] <<SYS>>

You are a helpful assistant

<</SYS>>

What is 1   1? [/INST]
"""
print(generator(basic_prompt)[0]["generated_text"])

然后,生成以下输出:

代码语言:javascript复制
"""
Oh my, that's a simple one! 
The answer to 1   1 is... (drumroll please)... 2! 


	

0 人点赞