LLMs的本地部署与微调实战
主要参考攻略:
1.Ollama常见问题解读,ollama应用全面解析:20个问题精通ollama (techdiylife.github.io)此blog做的非常详细。
本地部署
我用的Ollama——我原称之为神!这才是真正的开源!
使用前的准备:
1.下载Ollama,并配置环境变量,改变模型下载路径。
2.查看一下我们的显卡最多能运行哪个模型。可以参考另一篇blog。LLMs规格对应推理及微调时所需的显存 - 欢迎来到我的记录平台 (whtblog.cn)简单来说多少显存跑多大模型。
3.运行时要保证Ollama在后台运行。
部署
现在就可以开始进行部署了,主要通过两种方式部署。接下来简单介绍一下可能用到的相应代码。
1.部署Ollama官方提供的简单安装。
输入对应最后的Download下面的代码即可。
Ollama会自动先下载再运行。后续也是直接run即可。
#以llama3为例。
ollama run llama3
2.运行自己在huggingface(hf)上找的模型。
Ollama只能运行gguf格式的,所以在hf上找相应的GGUF格式。如下图。
然后点击Files。
下载所有文件。
然后就需要搞一个 Modelfile文件,格式就是文件。这个modelfile的内容可以看例子,需要包含几部分,分别设置相应的参数。
FROM /your-path-to-ggml/ggml-model-q8_0.gguf#这里定位到你的gguf文件
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
SYSTEM """You are a helpful assistant. 你是一个乐于助人的助手。"""
PARAMETER temperature 0.2
PARAMETER num_keep 24
PARAMETER stop <|start_header_id|>
PARAMETER stop <|end_header_id|>
PARAMETER stop <|eot_id|>
然后,进入到你Modelfile所在的文件夹运行即可。cd ! cd ! cd!
#ollama create "这里输入你的这个LLM的名字" -f Modelfile
例如:ollama create example -f Modelfile
完成以后就可以run了
ollama run example
3.其他常用指令。
Remove a model 删除模型
ollama rm llama3
Copy a model 复制模型
ollama cp llama3 my-model
List models on your computer
列出现有模型
ollama list
微调
进行前的准备:
1.下载现有的大预言模型。
就像部署部分的下载一样,不过现在不是gguf格式了,gguf格式还要进行格式转换。
2.下载现有的微调项目。
z这个项目已经有了所有需要的脚本。ymcui/Chinese-LLaMA-Alpaca-3: 中文羊驼大模型三期项目 (Chinese Llama-3 LLMs) developed from Meta Llama 3 (github.com)
进行微调:
1.编写所需参数:
每个部分的意义会相应写出,也会配上相应的图
--model_name_or_path
D:\这里放你想要微调的模型的位置
--tokenizer_name_or_path
D:\这里放你想要微调的模型的tokenizer文件的位置,如果你下载时下载的tokenizer和模型下载到一起了(推荐这样)就跟上边一样。
--dataset_dir
D:\..\data这个要定位到你想要训练时使用的数据集
--per_device_train_batch_size
1#
--per_device_eval_batch_size
1
--do_train
1
--do_eval
1
--seed
42
--bf16
1
--num_train_epochs
3
--lr_scheduler_type
cosine
--learning_rate
1e-4
--warmup_ratio
0.05
--weight_decay
0.1
--logging_strategy
steps
--logging_steps
10
--save_strategy
steps
--save_total_limit
3 几次训练
--evaluation_strategy
steps
--eval_steps
100
--save_steps
200
--gradient_accumulation_steps
8
--preprocessing_num_workers
8
--max_seq_length
1024
--output_dir
D:\你训练好的lora放在哪里
--overwrite_output_dir
1#最后留下几个版本的lora
--ddp_timeout
30000
--logging_first_step
True
--lora_rank
64
--lora_alpha
128
--trainable
"q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
--lora_dropout
0.05
--modules_to_save
"embed_tokens,lm_head"
--torch_dtype
bfloat16
--validation_file
D:\AImodel\llama8b4bit\Chinese-LLaMA-Alpaca-3\eval\ruozhiba_qa2449_gpt4t.json
--load_in_kbits
16
2.执行scripts/training/run_clm_sft_with_peft.py
在执行时加入上方第一步的参数。
在上方此处点开后输入下方4个部分,可以对应我的文件路径设置你的。
3.合并LORA,现在只训练和保存了一部分权重,需要和原始的合并在一起
执行scripts/merge_llama3_with_chinese_lora_low_mem.py,需要传入的参数(改成自己的):
--base_model
D:\你的母体model位置
--lora_model
D:\你的lora位置
--output_dir
D:\你输出的位置
量化
1.用llama.cpp(https://github.com/ggerganov/llama.cpp)这个项目
需要先装好CMAKE:https://cmake.org/download/
然后
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
pip install -r requirements/requirements-convert-hf-to-gguf.txt
cmake -B build
cmake --build build --config Release
2.在项目文件里面找到咱们要用的转换工具,
convert-hf-to-gguf.py D:\\PycharmProject\\2024\\llama3-lora-merge --outtype f16 --outfile D:\\PycharmProject\\2024\\my_llama3.gguf
3.进入到这个路径D:\PycharmProject\2024\test_llama3.cpp\llama.cpp\build\bin\Release
quantize.exe D:\\PycharmProject\\2024\\my_llama3.gguf D:\\PycharmProject\\2024\\quantized_model.gguf q4_0
量化colab
1.!git clone https://github.com/ggerganov/llama.cpp
先下载这个项目,GG哥们太狠了
2.!cd llama.cpp && LLAMA_CUBLAS=1 make && pip install -r requirements/requirements-convert-hf-to-gguf.txt
编译安装
3.下载huggingface上的模型,注意coloab内存有限制,如果在这上面只能搞小的
from huggingface_hub import snapshot_download
model_name = "Qwen/Qwen1.5-1.8B"
methods = ['q4_k_m']
base_model = "./original_model2/"
quantized_path = "./quantized_model/"
snapshot_download(repo_id=model_name, local_dir=base_model , local_dir_use_symlinks=False)
original_model = quantized_path+'/FP16.gguf'
4.执行量化
!mkdir ./quantized_model/
!python llama.cpp/convert-hf-to-gguf.py ./original_model2/ --outtype f16 --outfile ./quantized_model/FP16.gguf
5.模型可以上传到huggingface,方便以后下载
from huggingface_hub import notebook_login
notebook_login()
from huggingface_hub import HfApi, HfFolder, create_repo, upload_file
model_path = "./quantized_model/Q4_K_M.gguf" # Your model's local path
repo_name = "qwen1.5-llm" # Desired HF Hub repository name
repo_url = create_repo(repo_name, private=False)
api = HfApi()
api.upload_file(
path_or_fileobj=model_path,
path_in_repo="Q4_K_M.gguf",
repo_id="skuma307/qwen1.5-llm",
repo_type="model",
)