大型语言模型(LLMs)已经成为现实。随着最近发布的Llama 2,开源LLMs正在接近ChatGPT的性能,并且经过适当调整,甚至可以超越它。
使用这些LLMs通常并不像看起来那么简单,特别是如果你想将LLM进行精细调整以适应特定用例。
在本文中,我们将介绍3种改善任何LLM性能的最常见方法:
- 提示工程
- 检索增强生成(RAG)
- 参数高效微调(PEFT)
还有许多其他方法,但这些是最简单的方法,可以在不多的工作量下带来重大改进。
这3种方法从最简单的方法开始,即所谓的低挂果,到更复杂的改进LLM的方法之一。
要充分利用LLMs,甚至可以将这三种方法结合起来使用!
在开始之前,这里是更详细的方法概述,以便更容易参考。
你还可以在Google Colab Notebook中跟随操作,以确保一切都按预期工作。
加载Llama 2
在开始之前,我们需要加载一个LLM,以便在这些示例中使用。我们选择基本的Llama 2,因为它展现出令人难以置信的性能,而且我也喜欢在教程中坚持使用基础模型。
在开始之前,我们首先需要接受许可协议。请按照以下步骤操作:
- 在此处创建一个HuggingFace帐户。
- 在此处申请Llama 2的访问权限。
- 在此处获取你的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!