Meta教你5步學(xué)會用Llama2:我見過最簡單的大模型教學(xué)
在這篇博客中,Meta 探討了使用 Llama 2 的五個步驟,以便使用者在自己的項目中充分利用 Llama 2 的優(yōu)勢。同時詳細介紹 Llama 2 的關(guān)鍵概念、設(shè)置方法、可用資源,并提供一步步設(shè)置和運行 Llama 2 的流程。
Meta 開源的 Llama 2 包括模型權(quán)重和初始代碼,參數(shù)范圍從 7B 到 70B。Llama 2 的訓(xùn)練數(shù)據(jù)比 Llama 多了 40%,上下文長度也多一倍,并且 Llama 2 在公開的在線數(shù)據(jù)源上進行了預(yù)訓(xùn)練。
Llama2 參數(shù)說明圖
Llama2 流程說明圖
在推理、編碼、熟練程度和知識測試等多項外部基準測試中,Llama 2 的表現(xiàn)均優(yōu)于其他開放式語言模型。Llama 2 可免費用于研究和商業(yè)用途。
下一節(jié)中將介紹使用 Llama 2 的 5 個步驟。在本地設(shè)置 Llama 2 有多種方法,本文討論其中一種方法,它能讓你輕松設(shè)置并快速開始使用 Llama。
開始使用 Llama2
步驟 1:前置條件和依賴項
本文將使用 Python 編寫腳本來設(shè)置并運行 pipeline 任務(wù),并使用 Hugging Face 提供的 Transformer 模型和加速庫。
pip install transformers
pip install accelerate
步驟 2:下載模型權(quán)重
本文使用的模型可在 Meta 的 Llama 2 Github 倉庫中找到。通過此 Github 倉庫下載模型需要完成兩步:
- 訪問 Meta 網(wǎng)站,接受許可并提交表格。請求通過后才能收到在電子郵件中的預(yù)簽名 URL;
- 克隆 Llama 2 知識庫到本地。
git clone https://github.com/facebookresearch/llama
啟動 download.sh 腳本(sh download.sh)。出現(xiàn)提示時,輸入在電子郵件中收到的預(yù)指定 URL。
- 選擇要下載的模型版本,例如 7b-chat。然后就能下載 tokenizer.model 和包含權(quán)重的 llama-2-7b-chat 目錄。
運行 ln -h ./tokenizer.model ./llama-2-7b-chat/tokenizer.model,創(chuàng)建在下一步的轉(zhuǎn)換時需要使用的 tokenizer 的鏈接。
轉(zhuǎn)換模型權(quán)重,以便與 Hugging Face 一起運行:
TRANSFORM=`python -c"import transformers;print ('/'.join (transformers.__file__.split ('/')[:-1])+'/models/llama/convert_llama_weights_to_hf.py')"`
pip install protobuf && python $TRANSFORM --input_dir ./llama-2-7b-chat --model_size 7B --output_dir ./llama-2-7b-chat-hf
Meta 在 Hugging Face 上提供了已轉(zhuǎn)換的 Llama 2 權(quán)重。要使用 Hugging Face 上的下載,必須按照上述步驟申請下載,并確保使用的電子郵件地址與 Hugging Face 賬戶相同。
步驟 3:編寫 python 腳本
接下來創(chuàng)建一個 Python 腳本,該腳本將包含加載模型和使用 Transformer 運行推理所需的所有代碼。
導(dǎo)入必要的模塊
首先需要在腳本中導(dǎo)入以下必要模塊:LlamaForCausalLM 是 Llama 2 的模型類,LlamaTokenizer 為模型準備所需的 prompt,pipeline 用于生成模型的輸出,torch 用于引入 PyTorch 并指定想要使用的數(shù)據(jù)類型。
import torch
import transformers
from transformers import LlamaForCausalLM, LlamaTokenizer
加載模型
接下來,用下載好并轉(zhuǎn)換完成的權(quán)重(本例中存儲在 ./llama-2-7b-chat-hf 中)加載 Llama 模型。
model_dir = "./llama-2-7b-chat-hf"
model = LlamaForCausalLM.from_pretrained (model_dir)
定義并實例化分詞器和流水線任務(wù)
在最終使用之前確保為模型準備好輸入,這可以通過加載與模型相關(guān)的 tokenizer 來實現(xiàn)。在腳本中添加以下內(nèi)容,以便從同一模型目錄初始化 tokenizer:
tokenizer = LlamaTokenizer.from_pretrained (model_dir)
接下來還需要一種方法來賦予模型推理的能力。pipeline 模塊能指定 pipeline 任務(wù)運行所需的任務(wù)類型(text-generation)、推理所需的模型(model)、定義使用該模型的精度(torch.float16)、pipeline 任務(wù)運行的設(shè)備(device_map)以及其他各種配置。
在腳本中添加以下內(nèi)容,以實例化用于運行示例的流水線任務(wù):
pipeline = transformers.pipeline (
"text-generation",
model=model,
tokenizer=tokenizer,
torch_dtype=torch.float16,
device_map="auto",
)
運行 pipeline 任務(wù)
在定義了 pipeline 任務(wù)后,還需要提供一些文本提示,作為 pipeline 任務(wù)運行時生成響應(yīng)(序列)的輸入。下面示例中的 pipeline 任務(wù)將 do_sample 設(shè)置為 True,這樣就可以指定解碼策略,從整個詞匯表的概率分布中選擇下一個 token。本文示例腳本使用的是 top_k 采樣。
通過更改 max_length 可以指定希望生成響應(yīng)的長度。將 num_return_sequences 參數(shù)設(shè)置為大于 1,可以生成多個輸出。在腳本中添加以下內(nèi)容,以提供輸入以及如何運行 pipeline 任務(wù)的信息:
sequences = pipeline (
'I have tomatoes, basil and cheese at home. What can I cook for dinner?\n',
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=400,
)
for seq in sequences:
print (f"{seq ['generated_text']}")
步驟 4:運行 Llama
現(xiàn)在,這個腳本已經(jīng)可以運行了。保存腳本,回到 Conda 環(huán)境,輸入
python < 腳本名稱 >.py
并按回車鍵來運行腳本。
如下圖所示,開始下載模型,顯示 pipeline 任務(wù)的進展,以及輸入的問題和運行腳本后生成的答案:
本地運行 2-7b-chat-hf
現(xiàn)在可以在本地設(shè)置并運行 Llama 2。通過在字符串參數(shù)中提供不同的提示來嘗試不同的提示。你還可以通過在加載模型時指定模型名稱來加載其他 Llama 2 模型。下一節(jié)中提到的其他資源可以幫你了解更多 Llama 2 工作原理的信息,以及可用于幫助入門的各種資源。
步驟 5:能力拔高
要了解有關(guān) Llama 2 工作原理、訓(xùn)練方法和所用硬件的更多信息,請參閱 Meta 的論文《Llama 2: Open Foundation and Fine-Tuned Chat Models》,其中對這些方面進行了更詳細的介紹。
論文地址:https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/
從 Meta 的 Llama 2 Github repo 獲取模型源代碼,源代碼展示了模型的工作原理以及如何加載 Llama 2 模型和運行推理的最簡單示例。在這里還可以找到下載、設(shè)置模型的步驟以及運行文本補全和聊天模型的示例。
repo 地址:https://github.com/facebookresearch/llama
在模型卡片(中了解模型的更多信息,包括模型架構(gòu)、預(yù)期用途、硬件和軟件要求、訓(xùn)練數(shù)據(jù)、結(jié)果和許可證。
卡片地址:https://github.com/facebookresearch/llama/blob/main/MODEL_CARD.md
在 Meta 的 llama-recipes Github repo 中提供了如何快速開始微調(diào)以及如何為微調(diào)模型運行推理的示例。
repo 地址:https://github.com/facebookresearch/llama-recipes/
查閱 Meta 最近發(fā)布的編碼人工智能工具 Code Llama,這是一個建立在 Llama 2 基礎(chǔ)上的人工智能模型,針對生成和分析代碼的能力進行了微調(diào)。
Code Llama 地址:https://about.fb.com/news/2023/08/code-llama-ai-for-coding/
閱讀《負責(zé)任使用指南》,它提供了以負責(zé)任的方式構(gòu)建由大語言模型 (LLM) 支持的產(chǎn)品的最佳實踐和注意事項,涵蓋了從開始到部署的各個開發(fā)階段。
指南地址:https://ai.meta.com/llama/responsible-use-guide/