0x00 背景
前不久,Meta前腳發(fā)布完開源大語言模型LLaMA,
隨后就被網友“泄漏”,直接放了一個磁力鏈接下載鏈接。
然而那些手頭沒有頂級顯卡的朋友們,就只能看看而已了
但是 Georgi Gerganov 開源了一個項目llama.cpp
ggerganov/llama.cpp: Port of Facebook’s LLaMA model in C/C++ (github.com)
次項目的牛逼之處就是沒有GPU也能跑LLaMA模型
大大降低的使用成本,本文就是時間如何在我的 mac m1 pro 上面跑起來這個模型
llama.cpp:提供了一種模型量化和在本地CPU上部署方式
文本介紹了如何使用llama.cpp工具將深度學習模型進行量化并在本地CPU上部署的詳細步驟。
以下是具體步驟的解釋:
?
0x01 Step1 環(huán)境準備
- 高版本python 3.10
pip install protobuf==3.20.0
pip install transformers 最新版
pip installsentencepiece (0.1.97測試通過)
pip install peft (0.2.0測試通過)
pip install git+https://github.com/huggingface/transformers
pip install sentencepiece
pip install peft
-
確保機器有足夠的內存加載完整模型 ,7B模型需要13-15G
-
下載原版LLaMA模型的權重和tokenizer.model文件
下載參考這個[PR]https://github.com/facebookresearch/llama/pull/73/files
壓縮包內文件目錄如下(LLaMA-7B為例):
chinese_llama_lora_7b/
- adapter_config.json # LoRA權重配置文件
- adapter_model.bin # LoRA權重文件
- special_tokens_map.json # special_tokens_map文件
- tokenizer_config.json # tokenizer配置文件
- tokenizer.model # tokenizer文件
Step 2: 將原版LLaMA模型轉換為HF格式
請使用transformers提供的腳本convert_llama_weights_to_hf.py
將原版LLaMA模型轉換為HuggingFace格式。
將原版LLaMA的tokenizer.model
放在--input_dir
指定的目錄,其余文件放在${input_dir}/${model_size}
下。 執(zhí)行以下命令后,--output_dir
中將存放轉換好的HF版權重。
python src/transformers/models/llama/convert_llama_weights_to_hf.py \
--input_dir path_to_original_llama_root_dir \
--model_size 7B \
--output_dir path_to_original_llama_hf_dir
Step 2: 合并LoRA權重,生成全量模型權重
使用ymcui/Chinese-LLaMA-Alpaca at v2.0 (github.com)里面的scripts/merge_llama_with_chinese_lora.py
腳本
對原版LLaMA模型(HF格式)擴充中文詞表,并與LoRA權重進行合并,生成全量模型權重consolidated.*.pth
(建議檢查生成模型的SHA256值)和配置文件params.json
。請執(zhí)行以下命令:
此處可有兩種選擇:
- 輸出PyTorch版本權重(
.pth
文件),使用merge_llama_with_chinese_lora.py
腳本- 使用llama.cpp工具進行量化和部署
- 輸出HuggingFace版本權重(
.bin
文件),使用merge_llama_with_chinese_lora_to_hf.py
腳本(感謝@sgsdxzy 提供)- 使用Transformers進行推理
- 使用text-generation-webui搭建界面
以上兩個腳本所需參數一致,僅輸出文件格式不同。下面以生成PyTorch版本權重為例,介紹相應的參數設置。
python scripts/merge_llama_with_chinese_lora.py \
--base_model path_to_original_llama_hf_dir \
--lora_model path_to_chinese_llama_or_alpaca_lora \
--output_dir path_to_output_dir
參數說明:
我這里直接使用了Model Hub上的模型,因為很小就直接下載了使用,懶惰下載到本地
-
--base_model
:存放HF格式的LLaMA模型權重和配置文件的目錄(Step 1生成) -
--lora_model
:這就是你要合并的 LoRA模型 所在目錄,也可使用Model Hub上的模型名:ziqingyang/chinese-alpaca-lora-7b
或ziqingyang/chinese-llama-lora-7b
-
--output_dir
:指定保存全量模型權重的目錄,默認為./
- (可選)
--offload_dir
:對于低內存用戶需要指定一個offload緩存路徑
Step 3: llama.cpp 本地快速部署
大模型在自己的電腦上進行本地部署(CPU推理)
下載llama.cpp工具https://github.com/ggerganov/llama.cpp
推薦使用MacOS和Linux系統(tǒng),Windows好像有bug
運行前請確保:
- 模型量化過程需要將未量化模型全部載入內存,請確保有足夠可用內存(7B版本需要13G以上)
- 加載使用Q4量化后的模型時(例如7B版本),確保本機可用內存大于4-6G(受上下文長度影響)
- 系統(tǒng)應有
make
(MacOS/Linux自帶)或cmake
(Windows需自行安裝)編譯工具 - 推薦使用Python 3.9或3.10編譯運行l(wèi)lama.cpp工具(因為
sentencepiece
還不支持3.11)
1. 下載和編譯llama.cpp
運行以下命令對llama.cpp項目進行編譯,生成./main
和./quantize
二進制文件。
git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp && make
2.生成量化版本模型
把合并模型(選擇生成.pth
格式模型)中最后一步生成的tokenizer.model
文件放入xx-models
目錄下,模型文件consolidated.*.pth
和配置文件params.json
放入xx-models/7B
目錄下。
請注意LLaMA和Alpaca的tokenizer.model
不可混用
目錄結構類似:
- 7B/
- consolidated.00.pth
- params.json
- tokenizer.model
將上述.pth
模型權重轉換為ggml的FP16格式,生成文件路徑為xx-models/7B/ggml-model-f16.bin
。
python3 ./llama.cpp/convert-pth-to-ggml.py ./xx_model/7B/ 1
進一步對FP16模型進行Q4量化,生成量化模型文件路徑為zh-models/7B/ggml-model-q4_0.bin
。
./quantize ./xx-models/7B/ggml-model-f16.bin ./xx-models/7B/ggml-model-q4_0.bin 2
3.加載并啟動模型
運行./main
二進制文件,-m
命令指定Q4量化模型(也可加載ggml-FP16的模型)。以下是解碼參數示例:
./main -m xx-models/7B/ggml-model-q4_0.bin --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3
文章來源:http://www.zghlxwxcb.cn/news/detail-422817.html
在提示符 >
之后輸入你的prompt,command+c
中斷輸出,多行信息以\
作為行尾。如需查看幫助和參數說明,請執(zhí)行./main -h
命令。文章來源地址http://www.zghlxwxcb.cn/news/detail-422817.html
重要參數說明:
-ins 啟動類ChatGPT的對話交流模式
-f 指定prompt模板,alpaca模型請加載prompts/alpaca.txt
-c 控制上下文的長度,值越大越能參考更長的對話歷史
-n 控制回復生成的最大長度
--repeat_penalty 控制生成回復中對重復文本的懲罰力度
--temp 溫度系數,值越低回復的隨機性越小,反之越大
--top_p, top_k 控制采樣的相關參數
到了這里,關于llama.cpp一種在本地CPU上部署的量化模型(超低配推理llama)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!