【隨手記錄】Llama Tutorial 大語言模型實踐

2023-11-15 18:00:51

這個tutorial的契機是yy突然看到了一個workshop 所以類似於一週大作業的形式,輸入command輸出使用了自動駕駛哪些模組,程式碼在這裡 所以就幹一幹,順便寫一個tutorial給大家參考和教學 引申更多的應用

參考資料:

  1. https://github.com/facebookresearch/codellamahttps://github.com/facebookresearch/llama
  2. 模型申請地址:https://ai.meta.com/llama/ → 然後按download,填寫完後 就會收到兩封郵件
  3. https://github.com/oobabooga/text-generation-webui
  4. 寫tutorial期間的程式碼:https://github.com/KTH-RPL/DriveCmd_LLM

所有模型引數和所需要的GPU並行,注意這只是模型load佔用的memory 如果token或者batch size較大 也需要很多GPU視訊記憶體,表格下方會說明每個之間的區別,MP是指並行GPU的數量 預設是多少,所有模型我都在 這邊伺服器的A100試過 Size已經是乘過數量的了 是總和需要的memory

Model Size MP
code-7B ~12.5G 1
code-13B 24G 2
code-34B 63G 4
7b-chat ~12.5G 1
13b-chat 24G 2
70b-chat ~160G 8

  • 7B, 13B, 34B 指示模型引數量
  • chat 指示經過了對話的fine-tuned 【 llama2論文原文:a fine-tuned version of Llama 2 that is optimized for dialogue use cases】
  • code 指示此llama版本經過了code資料集的訓練,can use text prompts to generate and discuss code. 此處為 官方blog

溫馨提示 下列內容和 此 https://github.com/KTH-RPL/DriveCmd_LLM README 有重複:裡面包含了example和我們寫的prompt流程等 and yy嘗試的chatgpt api那邊的script

1. 申請下載模型

具體如圖:

  1. https://ai.meta.com/llama/ 點選download
  2. 填寫資料,勾上所有的東西
  3. 接受terms 然後點continue
  4. 大概10分鐘內能收到兩封郵件,告訴你可用的權重和其下載地址【注意!這個地址有限制比如下載超過3次/24小時後 請重新返回步驟一】

2. 模型部署

正如前言中提到的,大部分本地自己用的電腦 可能只能跑最小的模型也就是7b的 GPU的佔用率大概是12G,如下圖為我執行repo裡的程式碼時佔用截圖 【上一個A100試了一下 這麼一看我本機3090 也帶不動】

記憶體的增大原因:

  • prompt 長短 也就是你給模型的輸入文字 可能很多 【這也是為什麼chatgpt按token收費
  • 輸出的語句長短 也就是模型給你的回答 【我這因為讓他解釋他的輸出了 所以也比較長

迴歸正題,接下來是clone兩邊的程式碼,一個是code一個是llama 前者經過了八股文、leetcode訓練【我是這麼理解的 hhh 通俗易懂】 後者是原生態

  1. https://github.com/facebookresearch/llama, 注意複製連結的時候 也別給錯了 看對郵件給
  2. https://github.com/facebookresearch/codellama 同上理

以下為演示截圖

  1. git clone 對應程式碼
  2. 進入資料夾
  3. 執行download.sh
  4. copy 郵件裡收到的下載連結【第一次沒看仔細 一直在填自己的email 可還行
  5. 選擇下載什麼模型,注意全部下載的話 可能比較大 建議硬碟空間不夠的 選一個最小的 先試試

3. 模型執行

這一步官方的README寫的挺不錯的,依賴很少 照著pip install -r requirements.txt就行,基本無障礙,最好是建一個conda的環境,別和系統混了,此處為執行範例:

torchrun --nproc_per_node 1 example_completion.py \
    --ckpt_dir CodeLlama-7b/ \
    --tokenizer_path CodeLlama-7b/tokenizer.model \
    --max_seq_len 128 --max_batch_size 4

截圖執行及GPU佔用:

正常我們想要的應該是chat 聊天形式的所以選擇以下模型會有更好的效果:

Model Size MP
CodeLlama-7b-Instruct ~12.5G 1
CodeLlama-13b-Instruct 24G 2
CodeLlama-34b-Instruct 63G 4
llama-2-7b-chat ~12.5G 1
llama-2-13b-chat 24G 2
llama-2-70b-chat ~160G 8

4. More

可以參考 前言中我提到的task 給出的一個結果呼叫,這裡是任務的報告pdf:https://arxiv.org/abs/2311.08206 更方便大家直接選擇和對比,對應程式碼在 https://github.com/KTH-RPL/DriveCmd_LLM

還有就是如果想自己部署一個chatgpt,或者是在蘋果系統下(which 記憶體就是顯示卡記憶體 可以參考這個b站視訊:蘋果M2 Ultra:AI大模型的新希望

自己部署一個chatgpt參考code:

部署後的示意圖:

同時這裡面也提到了其他的大語言模型 可以嘗試的:Multiple model backends: transformers, llama.cpp, ExLlama, ExLlamaV2, AutoGPTQ, GPTQ-for-LLaMa, CTransformers, AutoAWQ

還有一些vision assistance的模型可以一起,免費版chatgpt 4.0 (但是試了一下即使是70B的 效果在我們的任務上也沒有 3.5API呼叫的高,果然還是錢的問題

其中有一個大視覺語言模型 可以關注:https://github.com/haotian-liu/LLaVA

5. Llama2 論文速讀

主要是記錄一下一些細節 比如模型和模型之間的不同,fine-tuned的實現等。

首先是關於llama2-chat的訓練,如下圖:得到llama2後 經過RLHF 步驟得到的chat模型 【RLHF 是一種模型訓練過程,應用於微調的語言模型,以進一步使模型行為與人類偏好和指令遵循保持一致。】

下圖說明了 訓練的一些細節:

  • token是指將所有number 拆分成獨立的digits 然後使用use bytes 去decompose 未知的UTF-8,總的詞彙是32k token
  • 預訓練 2T 的token後 模型也沒有飽和