与 Llama-2 (7B) 从 HuggingFace (Llama-2–7b-chat-hf) 聊天

Image Source: https://www.deviantart.com/nilescclover/art/Llama-Inside-A-Popcorn-Container-Raised-Arms-1012494804

驼峰 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一样优秀和准确。

2024-01-26 04:15:30 AI中文站翻译自原文