与 Llama-2 (7B) 从 HuggingFace (Llama-2–7b-chat-hf) 聊天
驼峰 2 是基于自回归变压器架构的预训练和微调文本生成模型系列。驼峰 2 共有 3 个模型,参数分别为 70 亿、130 亿和 700 亿。驼峰 2 是一个开源模型,性能与 ChatGPT 相当。您可以在商业和研究中使用驼峰 2 进行英文任务。
Llama 2在公开来源的2万亿个标记数据上进行了预训练。微调数据包括公开可获取的指令数据集,以及一百多万个新的人工注释示例。
在本文中,我将演示如何开始使用在HuggingFace托管的具有70亿参数的Llama-2-7b-chat 7模型,并进行了细化以进行有用和安全的对话,使用了监督微调(SFT)和RLHF方法。代码使用Python编写。我使用了Google Colab免费版的T4 GPU来执行此代码。它无法在CPU上运行。模型大小约为14GB,因此在Colab的免费版上可能会耗尽CUDA内存。但是,使用这篇笔记本中的model.generate()参数,您将能够成功运行代码。
要使用HuggingFace的模型,您需要一个HuggingFace帐号和一个有效的访问令牌(免费提供)。一旦您创建了HuggingFace帐号,您可以创建一个新的访问令牌,或者使用系统自动生成的默认令牌。您可以在这里找到您的访问令牌。
步骤1:安装所需库
!pip install accelerate\
protobuf\
sentencepiece\
torch\
git+https://github.com/huggingface/transformers\
huggingface_hub
步骤2:导入所需的库
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
步骤3:使用huggingface_hub login功能从Colab登录到您的HuggingFace帐户。
在您的Colab笔记本的代码单元中运行以下代码,它将给您显示如下的登录提示,将您从HF账号复制的访问令牌粘贴到登录按钮上并点击登录按钮。
from huggingface_hub import login
login()
第四步:加载llama-2-7b-chat-hf模型和相应的分词器。llama2模型无法在CPU上运行,所以必须使用GPU。
if torch.cuda.is_available():
model_id = "meta-llama/Llama-2-7b-chat-hf"
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, device_map="auto")
model.cuda()
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.use_default_system_prompt = False
步骤5:与llama2聊天。接收用户提示,对其进行分词并传递给模型。收集模型的回复,对其进行分词并发送给用户。
我们定义了一个名为chat_with_llama()的函数,它以文本提示作为输入,并使用分词器将文本转换为标记(input_ids)。将所有input_ids移至GPU(cuda)。然后它调用model.generate(),该函数接受输入参数input_ids、max_length等。较长的max_length可能需要更多的cuda内存,因此如果您在免费的Colab上工作,请谨慎选择其值。
然后我们在一个循环中调用该函数来与llama2进行聊天。
def chat_with_llama(prompt):
input_ids = tokenizer.encode(prompt, return_tensors="pt")
input_ids = input_ids.to('cuda')
output = model.generate(input_ids, max_length=256, num_beams=4, no_repeat_ngram_size=2)
response = tokenizer.decode(output[0], skip_special_tokens=True)
return response
while True:
prompt = input("You: ")
response = chat_with_llama(prompt)
print("Llama:", response)
请享受与llama2的有趣对话吧。它和ChatGPT一样优秀和准确。