Llama2 官方入門指南 (中文版)

文:城主

英文原文:Getting started with Llama 2 - AI at Meta

https://ai.meta.com/llama/get-started/

歡迎閱讀Llama的入門指南。

本指南提供了幫助您設置Llama所需的信息和資源,包括如何訪問模型、託管、操作指南和集成指南。另外,您還會找到一些補充材料,以便在使用Llama構建時爲您提供更多幫助。

快速設置前提條件

a.操作系統:Ubuntu

b.包:wget,md5sum

c.包管理器:Conda ME

如果你想在Windows或macOS上運行它,請參考開源社區關於他們如何實現這一點的說明。

這裡有一些你可以閱讀更多關於開源資源的鏈接

https://github.com/ggerganov/llama.cpp

https://github.com/facebookresearch/llama-recipes/issues/32#issuecomment-1647095537

獲取模型

a.訪問Llama下載表單(https://ai.meta.com/micro_site/url/?click_from_context_menu=true&country=HK&destination=https%3A%2F%2Fai.meta.com%2Fresources%2Fmodels-and-libraries%2Fllama-downloads%2F&event_type=click&last_nav_impression_id=1Fi6aMOl2BdFe7cqa&max_percent_page_viewed=100&max_viewport_height_px=985&max_viewport_width_px=1293&orig_request_uri=https%3A%2F%2Fai.meta.com%2Fllama%2Fget-started%2F&primary_cmsid=1066018851518569&primary_content_locale=en_US®ion=apac&scrolled=true&session_id=0w3r6LDvzBfVZ7ltO&site=meta_ai)並接受我們的許可。

b.一旦你的請求被批准,你將通過電子郵件收到一個簽名的URL。

c.克隆Llama 2倉庫

https://github.com/facebookresearch/llama

d.運行download.sh腳本,當提示開始下載時,傳遞提供的URL。

請記住,鏈接在24小時後和一定數量的下載後會過期。如果你開始看到如403:禁止的錯誤,你可以隨時重新請求鏈接。

託管亞馬遜網絡服務

AWS提供了多種託管你的Llama模型的方式。(SageMaker Jumpstart,EC2,Bedrock等)。在這份文檔中,我們將概述使用SageMaker Jumpstart和Bedrock託管你的模型的步驟。你可以直接在AWS網站上參考其他產品。

Bedrock

一個完全託管的服務,提供了一種選擇高性能基礎模型的選擇,通過API構建生成AI應用,簡化開發同時保持隱私和安全。你可以在這裡 https://aws.amazon.com/bedrock/ 閱讀更多關於產品的信息,並在這裡 https://aws.amazon.com/bedrock/llama-2/ 查看如何使用Llama 2和Bedrock的指南。

SageMaker JumpStart

亞馬遜SageMaker使ML從業者能夠使用完全託管的基礎設施、工具和工作流程,爲任何用例構建、訓練和部署機器學習模型。使用SageMaker JumpStart,ML從業者可以從廣泛的公開可用的基礎模型中選擇,並在SageMaker實例上進行模型訓練和部署。你可以在這裡

https://aws.amazon.com/blogs/machine-learning/llama-2-foundation-models-from-meta-are-now-available-in-amazon-sagemaker-jumpstart/ 閱讀更多關於它的信息。

Cloudflare

Workers AI是Cloudflare全球網絡上的無服務器GPU推理。它是一個AI推理作爲服務平臺,使開發者能夠只用幾行代碼就能運行AI模型。在這裡

https://blog.cloudflare.com/workers-ai/ 瞭解更多關於Workers AI的信息,並查看這裡 https://developers.cloudflare.com/workers-ai/models/llm/ 的文檔開始使用Llama 2模型。

谷歌雲平臺(GCP)-模型花園

GCP是一套雲計算服務,提供計算資源以及虛擬機。在GCP服務的基礎上,Vertex AI的模型花園https://cloud.google.com/model-garden 提供了基礎設施,以一個地方發現、定製和部署各種模型,爲你的ML項目提供了起點。有超過100種基礎模型供開發者使用,你可以通過幾次點擊就部署AI模型,以及在Google Colab的筆記本中運行微調任務。

Vertex AI

我們與谷歌雲的Vertex AI合作,完全集成了Llama 2,提供了預訓練的聊天和CodeLlama的各種大小。從這裡 https://console.cloud.google.com/vertex-ai/publishers/google/model-garden/139 開始,注意你可能需要請求適當的GPU計算配額作爲前提條件。

Hugging Face

你必須首先使用與你的Hugging Face賬戶相同的電子郵件地址請求下載

https://ai.meta.com/resources/models-and-libraries/llama-downloads/ 。

這樣做後,你可以請求訪問 Hugging Face

https://huggingface.co/meta-llama 上的任何模型,1-2天內你的賬戶將被授予所有版本的訪問權限。

Kaggle

Kaggle是一個數據科學家和機器學習工程師的在線社區。它不僅允許用戶找到用於構建他們的AI模型的數據集,還允許用戶搜索並下載其他用戶上傳的預訓練模型。在一個地方發現數百個經過訓練,準備就緒的機器學習模型。此外,社區成員也可以使用這些模型在筆記本中發佈他們的創新作品,由谷歌雲AI平臺提供計算資源和虛擬機的支持。我們與Kaggle合作,完全集成了Llama 2,提供預訓練的聊天和CodeLlama模型,各種大小。要從Kaggle下載Llama 2模型工件,您必須首先使用與您的Kaggle帳戶相同的電子郵件地址請求下載

https://ai.meta.com/resources/models-and-libraries/llama-downloads/ 。

這樣做後,您可以請求訪問Llama 2

https://www.kaggle.com/models/metaresearch/llama-2

和Code Lama

https://www.kaggle.com/models/metaresearch/codellama 模型。一旦您的請求被處理,您將獲得下載權限。

微軟Azure和Windows

使用Microsoft Azure,您可以通過兩種方式之一訪問Llama 2,要麼下載Llama 2模型並在虛擬機上部署,要麼使用Azure模型目錄。

Azure虛擬機

要在Azure VM上運行Llama,您可以設置自己的VM,或者使用Azure的數據科學VM,它已經預裝了Pytorch、CUDA、NVIDIA系統管理和其他ML工具。要使用數據科學VM,請按照這裡的說明設置一個。確保使用GPU啓用的映像設置此VM。然而,如果你想設置自己的VM,你可以按照微軟網站上的快速入門指南 https://learn.microsoft.com/en-us/azure/machine-learning/data-science-virtual-machine/dsvm-ubuntu-intro?view=azureml-api-2 。你可以在“連接到虛擬機”步驟停止。一旦你有了一個VM設置,你可以按照這裡的指南在VM上本地訪問模型。

Azure模型目錄

Azure模型目錄是一個用於探索基礎模型集合的中心。基於Azure ML平臺,模型目錄提供了運行ML任務,如微調和評估的選項,只需幾次點擊。總的來說,這是初級開發者嘗試他們喜歡的模型的好起點,也集成了強大的工具,供高級開發者構建AI應用程序。我們已經與Azure合作,將Llama 2完全集成到模型目錄中,提供預訓練的聊天和CodeLlama模型,各種大小。請按照這裡 https://techcommunity.microsoft.com/t5/ai-machine-learning-blog/introducing-llama-2-on-azure/ba-p/3881233 的說明開始。

ONNX for Windows

ONNX https://onnx.ai/about.html 是一個用於表示機器學習模型的開放格式。它定義了一組通用的操作符和一個通用的文件格式,使AI開發者能夠在各種框架、工具、運行時和編譯器中使用模型。使用ONNX的主要優點之一是,它允許模型從一個框架(如TensorFlow)輕鬆導出,並導入到另一個框架(如PyTorch)。

配合ONNX運行時,它將通過靈活的接口加速您的開發,集成硬件特定的庫,基本上允許您在不同的平臺(如Windows)上輕鬆運行ML任務,包括推理。開始爲Windows/PC開發應用程序,使用官方的ONNX Llama 2倉庫 https://github.com/microsoft/Llama-2-Onnx 和ONNX運行時 https://github.com/microsoft/Llama-2-Onnx 。請注意,要使用ONNX Llama 2倉庫,您需要提交一個請求,從子倉庫下載模型工件。這個請求將由微軟ONNX團隊審查。

如何指南

如果你想通過編寫代碼來學習,強烈建議你看看了解Llama 2 - Jupyter Notebook

https://github.com/facebookresearch/llama-recipes/blob/main/examples/Getting_to_know_Llama.ipynb 。這是開始最常見的LLMs操作的好地方。

微調

全參數微調是一種微調所有層的所有參數的預訓練模型的方法。總的來說,它可以達到最好的性能,但它也是最耗資源和時間的:它需要最多的GPU資源,並且需要最長的時間。PEFT,或參數高效微調,允許人們用最少的資源和成本微調模型。有兩種重要的PEFT方法:LoRA(低秩適應)和QLoRA(量化LoRA),其中預訓練模型分別以量化的8位和4位權重加載到GPU。你可能可以使用LoRA或QLoRA微調Llama 2-13B模型,使用單個消費者GPU,內存爲24GB,使用QLoRA需要的GPU內存和微調時間比LoRA少。通常,人們應該首先嚐試LoRA,或者如果資源極其有限,嘗試QLoRA,微調完成後,評估性能。只有當性能不滿意時,才考慮全面微調。

配方PEFT LoRA

llama-recipes倉庫詳細介紹了由提供的樣本腳本支持的不同微調

https://github.com/facebookresearch/llama-recipes/blob/main/docs/LLM_finetuning.md(FT)替代方案。特別是,它強調了使用PEFT作爲首選的FT方法,因爲它減少了硬件需求,並防止了災難性的遺忘。對於特定的情況,全參數FT仍然可以有效,可以使用不同的策略來防止過度修改模型。此外,FT可以在單個gpu

https://github.com/facebookresearch/llama-recipes/blob/main/docs/single_gpu.md 或多個gpu

https://github.com/facebookresearch/llama-recipes/blob/main/docs/multi_gpu.md 上使用FSDP完成。爲了運行這些配方,可以按照以下步驟操作:

a.創建一個包含pytorch和其他依賴項的conda環境

b.按照這裡描述的方法安裝配方:

https://github.com/facebookresearch/llama-recipes#install-with-pip

c.從hf下載所需的模型,可以使用git-lfs或使用llama下載腳本。

d.配置好所有內容後,運行以下命令:

pip install trlgit clone https://github.com/lvwerra/trl

python trl/examples/scripts/sft_trainer.py \

--model_name meta-llama/Llama-2-7b-hf \--dataset_name timdettmers/openassistant-guanaco \--load_in_4bit \--use_peft \--batch_size 4 \ --gradient_accumulation_steps 2

Hugging Face PEFT LoRA(https://github.com/huggingface/peft)

使用Low Rank Adaption(LoRA),Llama 2被加載到GPU內存中作爲量化的8位權重。

使用Hugging Face的PEFT LoRA

https://huggingface.co/blog/llama2#fine-tuning-with-peft 進行微調非常簡單 - 在Llama 2-7b上使用OpenAssistant數據集進行微調的示例可以在三個簡單步驟中完成:

pip install trlgit clone https://github.com/lvwerra/trl

python trl/examples/scripts/sft_trainer.py \

--model_name meta-llama/Llama-2-7b-hf \--dataset_name timdettmers/openassistant-guanaco \--load_in_4bit \--use_peft \--batch_size 4 \ --gradient_accumulation_steps 2

這大約需要在單個GPU上運行16小時,並使用不到10GB的GPU內存;改變批處理大小到8/16/32將使用超過11/16/25GB的GPU內存。微調完成後,你會在一個名爲“output”的新目錄中看到至少有adapter_config.json和adapter_model.bin - 運行下面的腳本來推斷基礎模型和新模型,這是通過合併基礎模型和微調模型生成的:

import torchfrom transformers import ( AutoModelForCausalLM, AutoTokenizer,pipeline,from peft import LoraConfig, PeftModel from trl import SFTTrainer

model_name = "meta-llama/Llama-2-7b-chat-hf" new_model = "output"device_map = {"": 0}

base_model = AutoModelForCausalLM.from_pretrained( model_name,low_cpu_mem_usage=True,return_dict=True,

torch_dtype=torch.float16,device_map=device_map,)

model = PeftModel.from_pretrained(base_model, new_model)

model = model.merge_and_unload()

tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)

tokenizer.pad_token = tokenizer.eos_tokentokenizer.padding_side = "right"

prompt = "Who wrote the book Innovator's Dilemma?"

pipe = pipeline(task="text-generation", model=base_model, tokenizer=tokenizer, max_length=200)result = pipe(f"[INST] {prompt} [/INST]")print(result[0]['generated_text'])

pipe = pipeline(task="text-generation", model=model, tokenizer=tokenizer, max_length=200)result = pipe(f"[INST] {prompt} [/INST]")print(result[0]['generated_text'])

QLoRA微調

QLoRA(Q代表量化)比LoRA更節省內存。在QLoRA中,預訓練模型作爲量化的4位權重加載到GPU。使用QLoRA進行微調也非常容易運行 - 使用OpenAssistant對Llama 2-7b進行微調的示例可以在四個快速步驟中完成:

git clone https://github.com/artidoro/qlora cd qlora

pip install -U -r requirements.txt ./scripts/finetune_llama2_guanaco_7b.sh

這大約需要在單個GPU上運行6.5小時,使用11GB的GPU內存。微調完成後,./scripts/finetune_llama2_guanaco_7b.sh中指定的output_dir將有checkoutpoint-xxx子文件夾,其中包含微調的適配器模型文件。要運行推斷,請使用下面的腳本:

import torch

model_id = "meta-llama/Llama-2-7b-hf"new_model = "output/llama-2-guanaco-7b/checkpoint-1875/adapter_model" # change if neededquantization_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_compute_dtype=torch.bfloat16,bnb_4bit_use_double_quant=True,bnb_4bit_quant_type='nf4')model = AutoModelForCausalLM.from_pretrained(model_id,low_cpu_mem_usage=True,load_in_4bit=True,quantization_config=quantization_config,torch_dtype=torch.float16,device_map='auto')model = PeftModel.from_pretrained(model, new_model)tokenizer = AutoTokenizer.from_pretrained(model_id)

prompt = "Who wrote the book innovator's dilemma?"pipe = pipeline(task="text-generation", model=model, tokenizer=tokenizer, max_length=200)result = pipe(f"[INST] {prompt} [/INST]") print(result[0]['generated_text'])

Axotol https://github.com/OpenAccess-AI-Collective/axolotl 是另一個開源庫,你可以用它來簡化Llama 2的微調。使用Axotol微調Llama 2的一個好例子是這四個筆記本,涵蓋了整個微調過程(生成數據集,使用LoRA微調模型,評估和基準測試)

https://github.com/OpenPipe/OpenPipe/tree/main/examples/classify-recipes 。

量化

量化是一種表示模型權重的技術,這些權重通常是32位浮點數,用較低精度的數據如16位浮點數,16位整數,8位整數,甚至4/3/2位整數來表示。量化的好處包括更小的模型大小,更快的微調和更快的推理。在資源受限的環境中,如單GPU或Mac或移動邊緣設備(例如https://github.com/ggerganov/llama.cpp),量化是微調模型或運行推理的必要條件。關於量化的更多信息可以在這裡

https://pytorch.org/blog/introduction-to-quantization-on-pytorch/ 和這裡

https://huggingface.co/docs/optimum/concept_guides/quantization 找到。

提示

提示工程是一種用於提高語言模型性能的技術,通過爲模型提供更多的上下文和任務信息。它涉及創建提示,這些提示是提供額外信息或指導給模型的短文本,如文本將生成的主題或類型。通過使用提示,模型可以更好地理解預期的輸出類型,併產生更準確和相關的結果。在Llama 2中,上下文的大小,以令牌數量計,已經從2048增加到4096。

製作有效的提示

製作有效的提示是提示工程的重要部分。以下是一些創建提示的技巧,這些提示將有助於提高你的語言模型的性能:

1.清晰簡潔:你的提示應該易於理解,並提供足夠的信息讓模型生成相關的輸出。避免使用可能會讓模型混淆的行話或技術術語。

2.使用具體的例子:在你的提示中提供具體的例子可以幫助模型更好地理解預期的輸出。例如,如果你希望模型生成關於特定主題的故事,包括一些關於設置,角色和情節的句子。

3.變化提示:使用不同的提示可以幫助模型更多地瞭解手頭的任務,併產生更多樣化和創新的輸出。嘗試使用不同的風格,語氣和格式來看看模型的反應。

4.測試和改進:一旦你創建了一組提示,就在模型上測試它們,看看它們的表現如何。如果結果不符合預期,嘗試通過添加更多的細節或調整語氣和風格來改進提示。

5.使用反饋:最後,使用用戶或其他來源的反饋來不斷改進你的提示。這可以幫助你識別模型需要更多指導的地方,並做出相應的調整。

基於角色的提示

根據被対話的人或實體的角色或視角創建提示。這種技術對於生成更相關和吸引人的語言模型的迴應可能很有用。

優點:

1.提高相關性:基於角色的提示幫助語言模型理解被対話的人或實體的角色或視角,這可能導致更相關和吸引人的迴應。

2.提高準確性:提供關於被対話的人或實體的角色或視角的額外上下文可以幫助語言模型避免犯錯誤或誤解。

缺點:

1.需要付出努力:需要付出更多的努力來收集和提供有關被對話的人或實體的角色或觀點的必要信息。

示例:

你是一位虛擬導遊,正在夜間帶領遊客參觀埃菲爾鐵塔。向你的觀衆描述埃菲爾鐵塔,包括它的歷史,每年參觀的人數,完成一次完整遊覽需要的時間,以及每年有那麼多人蔘觀這個地方的原因。

思維鏈技術

涉及向語言模型提供一系列提示或問題,以幫助引導其思考並生成更連貫和相關的迴應。這種技術對於生成更深思熟慮和有理有據的語言模型迴應非常有用。

優點:

1.提高連貫性:幫助語言模型以邏輯和結構化的方式思考問題或問題,這可能導致更連貫和相關的迴應。

2.增加深度:提供一系列提示或問題可以幫助語言模型更深入和全面地探索一個主題,可能會導致更有洞察力和信息豐富的迴應。

缺點:

1.需要付出努力:思維鏈技術需要更多的努力來創建和提供必要的提示或問題。

示例:

你是一位來自1901年的虛擬導遊。你有遊客參觀埃菲爾鐵塔。向你的觀衆描述埃菲爾鐵塔。從以下幾點開始:

1.爲什麼建造它

2.建造它花了多長時間

3.建造材料的來源

4.建造它需要多少人

5.以1900年代每年參觀埃菲爾鐵塔的人數,完成一次完整遊覽需要的時間,以及每年有那麼多人蔘觀這個地方的原因結束。

在遊覽結束時,通過包含1或2個有趣的笑話使你的遊覽變得有趣。

減少幻覺

Meta的負責任使用指南

https://ai.meta.com/static-resource/responsible-use-guide/ 是理解如何最好地提示和處理語言模型輸入/輸出風險的極好資源。參考頁面(14-17)。以下是語言模型可能產生幻覺的一些示例,以及解決問題的一些策略:

示例1:

語言模型被要求對其未經過訓練的主題提出問題的迴應。語言模型可能會產生幻覺信息或製造出不準確或無證據支持的事實。

解決方法:爲了解決這個問題,你可以向語言模型提供更多關於主題的上下文或信息,以幫助它理解正在提出的問題,並生成更準確的迴應。你也可以要求語言模型爲其所做的任何聲明提供來源或證據,以確保其迴應基於事實信息。

示例2:

語言模型被要求對需要特定觀點或觀點的問題生成迴應。語言模型可能會產生幻覺信息或製造出與所需觀點或觀點不一致的事實。

解決方法:爲了解決這個問題,你可以向語言模型提供有關所需觀點或觀點的額外信息,例如被對話的人或實體的目標,價值觀或信念。這可以幫助語言模型理解上下文,並生成與所需觀點或觀點更一致的迴應。

示例3:

語言模型被要求對需要特定語氣或風格的問題生成迴應。語言模型可能會產生幻覺信息或製造出與所需語氣或風格不一致的事實。

解決方法:爲了解決這個問題,你可以向語言模型提供有關所需語氣或風格的額外信息,例如通信的受衆或目的。這可以幫助語言模型理解上下文,並生成與所需語氣或風格更一致的迴應。

總的來說,避免語言模型產生幻覺的關鍵是向它們提供清晰和準確的信息和上下文,並仔細監控它們的迴應,以確保它們符合你的期望和要求。

使用Llama提示

格式:

[INST]{{ user_message }} [/INST]

多輪用戶提示

[INST]{{ user_message_1 }} [/INST] {{ llama_answer_1 }} [INST] {{ user_message_2 }} [/INST]推理

以下是一些開始使用您的LLMs進行推理的優秀資源。

Github Llama食譜:

https://github.com/facebookresearch/llama-recipes/blob/main/docs/inference.md

Page注意力vLLM:

https://vllm.ai/

食譜示例

https://github.com/facebookresearch/llama-recipes/blob/main/examples/vllm/inference.py

Hugging Face TGI:

https://github.com/huggingface/text-generation-inference

食譜示例

https://github.com/facebookresearch/llama-recipes/tree/main/examples/hf_text_generation_inference

Cuda圖表:

https://blog.fireworks.ai/speed-python-pick-two-how-cuda-graphs-enable-fast-python-code-for-deep-learning-353bf6241248

驗證

俗話說,如果你不能測量它,你就不能改進它,在這一部分,我們將介紹不同的測量和最終驗證Llama的方法,以便確定不同微調技術提供的改進。

定量技術

這些技術的重點是收集可以在每次微調運行期間和之後輕鬆比較的客觀指標,以便快速反饋模型的性能。主要收集的指標是損失和困惑度。

K-摺疊交叉驗證

包括將數據集劃分爲k個子集或摺疊,然後微調模型k次。

在每次運行中,使用不同的摺疊作爲驗證數據集,其餘的用於訓練。每次運行的性能結果平均爲最終報告。這提供了一個更準確的模型在整個數據集上的性能指標,因爲所有條目都用於驗證和訓練。雖然它產生了對給定數據集微調後模型如何泛化的最準確預測,但它在計算上昂貴,更適合小數據集。

保留

使用保留時,數據集被劃分爲兩個或三個子集,訓練和驗證,測試是可選的。測試和驗證集可以分別佔據數據集的10% - 30%。顧名思義,前兩個子集用於微調期間的訓練和驗證,第三個只在微調完成後用於評估模型在未見過的數據上的泛化能力。擁有三個分區的優點是,它提供了一種在微調後評估模型的方法,以便無偏地查看模型性能,但它需要稍大的數據集以允許適當的劃分。這目前在Llama食譜微調腳本中實現,使用數據集的兩個子集,訓練

https://github.com/facebookresearch/llama-recipes/blob/main/src/llama_recipes/finetuning.py#L165 和驗證

https://github.com/facebookresearch/llama-recipes/blob/main/src/llama_recipes/finetuning.py#L174 。數據收集在一個json文件中,可以繪製出來,以便輕鬆解釋結果並評估模型的性能。

標準評估工具

有多個項目提供標準評估。他們提供預定義的任務,使用常用的指標來評估LLMs的性能,如hellaswag和ThrouthfulQA。這些工具可以用來測試模型在微調後是否退化。此外,可以使用預計微調模型的數據集創建自定義任務,有效地自動化模型性能在微調前後的手動驗證。這些類型的項目提供了一種定量觀察模型在模擬真實世界示例中的性能的方法。其中一些項目包括LM評估工具 https://github.com/EleutherAI/lm-evaluation-harness(用於創建HF排行榜

https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard)、

Helm

https://github.com/stanford-crfm/helm 、

BIG-bench

https://github.com/google/BIG-bench

和OpenCompass

https://github.com/open-compass/opencompass 。

解讀損失和困惑度

使用的損失值來自Transformer的LlamaForCausalLM

https://huggingface.co/docs/transformers/main/model_doc/llama#transformers.LlamaForCausalLM ,它根據模型所需的目標初始化不同的損失函數。本節的目標是簡要介紹如何理解損失和困惑度的結果,作爲微調期間模型性能的初步評估。我們還計算困惑度作爲損失值的指數。關於損失函數的更多信息可以在這些資源中找到:1,2,3,4,5,6。

在我們的食譜中,我們在微調期間使用了一個簡單的保留。使用記錄的損失值,對於訓練和驗證數據集,繪製兩者的曲線來分析過程的結果。根據配方中的設置,預期的行爲是一個日誌圖,顯示隨着進程的進行,訓練和驗證損失值逐漸減小。

如果驗證曲線開始上升,而訓練曲線繼續下降,那麼模型就過擬合了,它的泛化能力不強。當這種情況發生時,可以嘗試的替代方案有早停、驗證數據集是否是訓練數據集的統計顯著等價物、數據增強、使用參數高效的微調或使用k折交叉驗證來更好地調整超參數。

定性技術

手動測試

手動評估一個微調過的模型會根據FT目標和可用資源的不同而變化。在這裡,我們提供瞭如何完成它的一般指導原則。

有了一個爲微調準備的數據集,其中的一部分可以被分離出來作爲一個手動測試子集,這個子集可以通過可能與特定用例相關的一般知識問題進一步增加。除了這些一般問題,我們還建議執行標準評估,並將結果與微調模型的基線進行比較。

爲了評估結果,應該定義一個與所使用的數據集相關的明確的評估標準。示例標準可以是準確性、一致性和安全性。爲每個標準創建一個評分標準,定義輸出獲得特定分數所需的條件。

有了這些指導原則,將測試問題分發給一組多樣化的審查者,以便爲每個問題獲得多個數據點。有了每個問題的多個數據點和不同的標準,可以爲每個查詢計算出一個最終分數,允許根據最終模型的首選焦點對分數進行加權。

集成指南Code Llama

CodeLlama https://about.fb.com/news/2023/08/code-llama-ai-for-coding/ 是基於Llama 2的開源LLMs家族,提供了在代碼任務上的SOTA性能。它包括:

◦基礎模型(Code Llama)

◦Python專業化(Code Llama - Python),以及

◦指令跟隨模型(Code Llama - Instruct)有7B、13B和34B參數的每個模型。

微調的不同階段用在訓練過程中看到的令牌數量進行註釋。

嘗試和集成Code Llama的最好方式之一是使用Hugging Face生態系統,按照博客(https://huggingface.co/blog/codellama),其中包括:

◦Code Llama 13B、13B-Instruct(聊天)和34B的演示鏈接。

◦用於代碼完成的工作推理代碼

◦用於在代碼前綴和後綴之間填充代碼的工作推理代碼

◦用於在消費者GPU上加載32B模型的4位工作推理代碼

◦關於如何爲指令模型編寫提示以進行多輪編碼對話的指南

◦關於如何使用文本生成推理進行模型部署的指南

◦關於如何將代碼自動完成作爲VSCode擴展集成的指南

◦關於如何評估Code Llama模型的指南

如果模型在你的特定任務上表現不佳,例如,如果Code Llama的所有模型(7B/13B/34B)都不能爲文本到SQL的任務生成正確的答案,那麼應該考慮微調。這是一個完整的指南和筆記本

https://github.com/samlhuillier/code-llama-fine-tune-notebook/blob/main/fine-tune-code-llama.ipynb,介紹如何使用Hugging Face上的7B模型微調Code Llama。

它使用LoRA微調方法,並可以在單個GPU上運行。如Code Llama參考資料

https://www.snowflake.com/blog/meta-code-llama-testing/ 所示,微調提高了Code Llama在SQL代碼生成上的性能,而且對於LLMs能夠與結構化數據和SQL(訪問結構化數據的主要方式)進行互操作是至關重要的——我們正在開發LangChain和RAG中的Llama 2演示應用來展示這一點。

LangChain

LangChain(https://www.langchain.com/)是一個用於構建LLM驅動應用的開源框架。它實現了常見的抽象和高級API,使得應用構建過程更加簡單,所以你不需要從頭開始調用LLM。LangChain的主要構建塊/API是:

模型或LLMs API可以輕鬆連接到所有流行的LLMs,如Hugging Face或Replicate,這些平臺上託管了所有類型的Llama 2模型。

◦Prompts API實現了有用的提示模板抽象,幫助您在構建複雜的LLM應用時輕鬆重用好的、通常長且詳細的提示。還有許多內置的提示用於常見操作,如摘要或連接到SQL數據庫以快速開發應用。提示還可以與解析器緊密合作,輕鬆從LLM輸出中提取有用的信息。

◦Memory API可以用來保存對話歷史,並將其與新問題一起提供給LLM,從而實現多輪自然對話聊天。

◦Chains API包括最基本的LLMChain,它將LLM與提示結合生成輸出,以及更高級的鏈,讓您以系統化的方式構建複雜的LLM應用。例如,第一個LLM鏈的輸出可以是另一個鏈的輸入/提示,或者一個鏈可以有多個輸入和/或多個輸出,這些都可以由提示的LLM輸出預定義或動態決定。

◦Indexes API允許將LLM外部的文檔保存下來,首先將其轉換爲嵌入,這是文檔的數值意義表示,以向量形式存儲到向量存儲中。後來,當用戶輸入關於文檔的問題時,文檔的向量存儲中存儲的相關數據將被檢索併發送,與查詢一起,到LLM生成與文檔相關的答案。以下流程顯示了該過程:

◦Agents API使用LLM作爲推理引擎,並將其與其他數據源、第三方或自有工具、或API(如網絡搜索或維基百科API)連接起來。根據用戶的輸入,代理可以決定調用哪個工具來處理輸入。

LangChain可以作爲一個強大的檢索增強生成(RAG)工具,將內部數據或更近期的公共數據與LLM集成,進行QA或聊天。LangChain已經支持加載許多類型的非結構化和結構化數據。

要了解更多關於LangChain的信息,可以免費註冊兩個LangChain短期課程,網址爲https://www.deeplearning.ai/short-courses。請注意,課程中的代碼使用的是OpenAI ChatGPT LLM,但我們將發佈使用LangChain和Llama 2的演示應用。

已經有一個筆記本,於Meta Connect 2023公開發布,公開可用:

https://github.com/facebookresearch/llama-recipes/blob/main/examples/Getting_to_know_Llama.ipynb

LlamaIndex

LlamaIndex是另一個用於構建LLM應用的流行開源框架。像LangChain一樣,LlamaIndex也可以通過輕鬆集成非內置在LLM中的數據來構建RAG應用。LlamaIndex有三個關鍵工具:

◦連接數據:將任何類型的數據 - 結構化、非結構化或半結構化 - 連接到LLM

◦索引數據:索引和存儲數據

◦查詢LLM:將用戶查詢和檢索的與查詢相關的數據結合起來查詢LLM並返回數據增強的答案

返回數據增強的答案

LlamaIndex主要是一個用於將私有或領域特定數據與LLMs連接的數據框架,因此它專注於智能數據存儲和檢索,而LangChain是一個更通用的框架,可以用來構建連接多個工具的代理。也可以將LangChain與LlamaIndex一起使用。此外,這兩個框架和現在的VC-based創業公司都在快速發展,所以新的或改進的功能不斷被添加以克服其限制 - 例如,最近在LlamaIndex中添加了數據代理,而LangChain已經支持了數十種數據加載器。

我們將很快發佈使用LangChina和LlamaIndex與Llama 2的開源演示應用。

社區支持和資源社區支持

如果您有任何功能請求、建議、錯誤報告,我們鼓勵您在相應的github倉庫中報告問題。如果您正在與Meta合作開發Llama 2,請請求訪問Asana並使用Asana報告任何問題。

資源Github

◦Llama2倉庫

https://github.com/facebookresearch/llama:主要的Llama2倉庫

◦Llama2食譜

https://github.com/facebookresearch/llama-recipes:示例和微調

◦代碼Llama倉庫

https://github.com/facebookresearch/codellama:主要的代碼Llama倉庫

◦瞭解Llama2

https://github.com/facebookresearch/llama-recipes/blob/main/examples/Getting_to_know_Llama.ipynb - Jupyter筆記本

◦代碼Llama食譜

https://github.com/facebookresearch/llama-recipes/tree/main/examples/code_llama:示例

性能和延遲

◦哈梅爾的博客 - 優化和測試LLMs的延遲

https://hamel.dev/notes/llm/inference/03_inference.html

◦vLLM - 如何通過連續批處理在LLM推理中實現23倍的吞吐量同時降低p50延遲

https://www.anyscale.com/blog/continuous-batching-llm-inference

◦論文 - 通過提示工程改善壓縮LLMs的性能

https://arxiv.org/pdf/2305.11186.pdf

◦Llama2與GPT 4的文本摘要成本比較

https://www.anyscale.com/blog/llama-2-is-about-as-factually-accurate-as-gpt-4-for-summaries-and-is-30x-cheaper

微調

◦Hugging Face PEFT

https://github.com/huggingface/peft

◦Llama食譜微調

https://github.com/facebookresearch/llama-recipes/blob/main/docs/LLM_finetuning.md

◦微調數據集

https://github.com/facebookresearch/llama-recipes/blob/main/docs/Dataset.md

◦GPT 3.5與Llama2微調

https://ragntune.com/blog/gpt3.5-vs-llama2-finetuning

◦https://deci.ai/blog/fine-tune-llama-2-with-lora-for-question-answering/

◦https://www.databricks.com/blog/efficient-fine-tuning-lora-guide-llms

Code Llama

◦https://www.snowflake.com/blog/meta-code-llama-testing/

◦https://www.phind.com/blog/code-llama-beats-gpt4

◦https://news.ycombinator.com/item?id=37248494

其他

◦Hugging Face上的Llama

https://huggingface.co/meta-llama

◦爲生產構建LLM應用

https://huyenchip.com/2023/04/11/llm-engineering.html

◦提示技巧 https://www.promptingguide.ai/