大模型微调环境配置
这篇文档主要用于环境、软件的安装,具体的训练方式仅做简单介绍
0.操作环境
操作环境我们选择:AutoDL提供的环境
2. 模型以及数据集下载
模型下载主要有两种途径,一个是魔塔社区,一个是hugging face,我们优先选择魔塔社区,当魔塔社区没有的要找的模型的时候,我们再去hugging face找
1.1 魔塔社区模型下载
先去官网找到想要的模型,然后利用下面的demo模版进行下载
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2.5-0.5B-Instruct',cache_dir="/Users/haha/PycharmProjects/PythonProject3/day6/model")
1.2 hugging face模型下载
先去官网找到想要的模型,然后利用下面的demo模版进行下载
#将模型gpt-2下载到本地调用
from transformers import AutoModelForCausalLM,AutoTokenizer#将模型和分词器下载到本地,并制定保存路径
model_name = "Qwen/Qwen2.5-0.5B-Instruct"
cache_dir = "model/Qwen/Qwen2.5-0.5B-Instruct"#下载模型
model = AutoModelForCausalLM.from_pretrained(model_name,cache_dir=cache_dir)#下载分词器
tokenizer = AutoTokenizer.from_pretrained(model_name,cache_dir=cache_dir)#下载完提示
print(f"模型和分词器下载完成,下载路径为:{cache_dir}")
1.3 魔塔社区数据集下载
优先使用魔塔社区下载。
找到对应的数据集,利用命令下载:
需要配置该数据集中你要下载的文件名称、下载文件位置,替换下面两个集即可:
modelscope download --dataset w10442005/ruozhiba_qa ruozhiba_qaswift.json -
-local /root/autodl-tmp/project/gpt2Demo/data
1.4 hugging face数据集下载
示例如下:
#在线加载数据
dataset = load_dataset(path="lansinuote/ChnSentiCorp", cache_dir="../data/")
print("在线加载的数据集:")
print(dataset)
2. 私有化部署
在私有化部署时,常见的推理框架有三个,提供api接口服务:
- Ollama:适合个人用户,比较简单,只支持GGUF格式的模型
- vllm:适合企业用户,只适用于算力7.0以上的机器
- LMDeploy:适合企业用户,性能比vllm好,只适用于算力7.0以上的机器,我主要用这个
2.1 Ollama推理框架使用
地址:Ollana文档
用户群体:主要针对个人用户
优点:使用简单,对机器没有要求
缺点:只支持GGUF格式的数据,使用它跑模型要么去ollama官网找,要么在别的平台下载GGUF格式的模型。GGUF一般指的是量化之后的模型,比较小,方便个人用户去学习。
安装步骤:
- 先创建环境(ollama对python无要求):conda create -n ollama
- 激活环境:source activate ollama 或者 conda activate allama
- 复制官网下载命令:curl -fsSL https://ollama.com/install.sh | sh
- 开启服务;ollama serve
- 切换环境:conda activate ollama
- 使用ollama list 查看当前是否有模型存在
- 搜索模型:在ollama搜索框搜索所需要的模型
- 搜到模型之后选择模型的大小,然后复制后面的命令,进行下载
注意:ollama下载极度不稳定,尤其是在AutoDL平台上安装,如果安装不成功,就先放过。
2.2 vllm推理框架使用
使用文档1:vllm中文文档1
使用文档2:vllm中文文档2
按照上述文档进行安装
conda create -n vllm python=3.12 -y
conda activate vllm
pip install vllm
注意事项:
- 不要在base环境安装,最好创建环境进行创建。
- vllm 对python版本有要求,请在文档中查看
模型启动命令:vllm serve path
适用群体:适合公司级使用
2.3 LMDeploy推理框架使用
教程:LMDeploy使用指南
来源公司(书生浦语):https://internlm.intern-ai.org.cn/
优点:相比vllm来说,显存优化做的更好一些,对量化的支持力度更强一点
使用步骤:
- 创建环境:conda create -n lmdeploy
- 查看环境是否创建:conda info --envs
- 激活环境:source activate lmdeploy
- 安装:pip install lmdeploy
- 模型推理命令:lmdeploy serve api_server 绝对路径
2.4 模型启动成功后测试demo
记得替换url 、模型地址
#多轮对话
from openai import OpenAI
#定义多轮对话的函数
def multi_turn_conversation(messages):#初始化OpenAI客户端client = OpenAI(base_url="http://localhost:23333/v1",api_key="sk-proj-1234567890")#初始化对话历史conversation_history = []while True:#获取用户输入user_input = input("You:")if user_input.lower() in ["exit","quit"]:print("退出对话")break#更新对话历史conversation_history.append({"role":"user","content":user_input})try: #调用OpenAI的API进行多轮对话response = client.chat.completions.create(model="/root/autodl-tmp/project/gpt2Demo/model/models--uer--gpt2-chinese-cluecorpussmall",messages=conversation_history)#获取AI的回复ai_response = response.choices[0].message.content.strip()print(f"AI:{ai_response}")#更新对话历史conversation_history.append({"role":"assistant","content":ai_response})except Exception as e:print(f"发生错误:{e}")breakif __name__ == "__main__":#初始化对话历史conversation_history = []#开始多轮对话multi_turn_conversation(conversation_history)
3. 模型微调
模型微调分类:
- 全量微调
- 局部微调
- 增量微调
3.1 LLama_Factory微调框架的使用
3.1.1 LLama_Factory微调框架安装以及启动
文档1:LLama_Factory文档1
文档2:LLama_Factory文档2
来源:国内开发,支持中文
安装步骤:
- 下载(上述文档有下载命令):git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
- 解压下载的llamafactory:unzip llamafactory.zip
- 先创建环境:conda create -n llamafactory python==3.10 -y
- 激活环境:source activate llamafactory
- 安装所需要的包:pip install -e .(一定要安装在创建的环境中哈,操作之前:cd LLaMa_factoty 的目录下)
- 启动(使用可视化,在llamafactory根目录下启动):llamafactory-cli webui
如果启动遇到如下情况:
执行:pip install gradio --upgrade -i https://mirrors.cloud.tencent.com/pypi/simple
3.1.2 LLaMA Factory微调数据集制作
不同的框架对于数据格式的要求是不一样的,对于LLaMA Factory而言,其只支持两种数据格式,分别是:单轮对话、多轮对话
详细见:LLaMA_Factorywe文档
单轮示例:
"alpaca_zh_demo.json"
{"instruction": "计算这些物品的总费用。 ","input": "输入:汽车 - $3000,衣服 - $100,书 - $20。","output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"
},
多轮示例:
[{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","system": "系统提示词(选填)","history": [["第一轮指令(选填)", "第一轮回答(选填)"],["第二轮指令(选填)", "第二轮回答(选填)"]]}
]
注意:当拿到的数据集和LLaMA_Factory要求的不一样时,可以借助AI工具写脚本进行转换
制作好的数据集要放到指定的目录下:
3.1.2 模型微调、合并量化、微调量化、导出
这里不做介绍,后续会写一遍文章专门介绍,会加上对应得链接
LLaMA-Factory微调实操记录