LLMs的本地部署与微调实战

主要参考攻略:

1.Ollama常见问题解读,ollama应用全面解析:20个问题精通ollama (techdiylife.github.io)此blog做的非常详细。

本地部署

我用的Ollama——我原称之为神!这才是真正的开源!

Ollama下载OllamaGithub

使用前的准备:

1.下载Ollama,并配置环境变量,改变模型下载路径。

2.查看一下我们的显卡最多能运行哪个模型。可以参考另一篇blog。LLMs规格对应推理及微调时所需的显存 - 欢迎来到我的记录平台 (whtblog.cn)简单来说多少显存跑多大模型。

3.运行时要保证Ollama在后台运行。

部署

现在就可以开始进行部署了,主要通过两种方式部署。接下来简单介绍一下可能用到的相应代码。

1.部署Ollama官方提供的简单安装。

Model

Parameters

Size

Download

Llama 3

8B

4.7GB

ollama run llama3

Llama 3

70B

40GB

ollama run llama3:70b

Phi 3 Mini

3.8B

2.3GB

ollama run phi3

Phi 3 Medium

14B

7.9GB

ollama run phi3:medium

Gemma

2B

1.4GB

ollama run gemma:2b

Gemma

7B

4.8GB

ollama run gemma:7b

Mistral

7B

4.1GB

ollama run mistral

Moondream 2

1.4B

829MB

ollama run moondream

Neural Chat

7B

4.1GB

ollama run neural-chat

Starling

7B

4.1GB

ollama run starling-lm

Code Llama

7B

3.8GB

ollama run codellama

Llama 2 Uncensored

7B

3.8GB

ollama run llama2-uncensored

LLaVA

7B

4.5GB

ollama run llava

Solar

10.7B

6.1GB

ollama run solar

输入对应最后的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",

)


LLMs的本地部署与微调实战
http://192.144.219.54/:8080//archives/1719379231787
作者
CavyW
发布于
2024年06月26日
更新于
2024年06月26日
许可协议