环境准备
!pip3 install --upgrade pip
!pip3 install bitsandbytes>=0.39.0
LLaMA-Factory
拉取 LLaMA-Factory
!git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
编译执行
cd LLaMA-Factory
# pip3 install -r requirements.txt --index-url https://mirrors.huaweicoud.com/repository/pypi/simple
pip3 install -e ".[torch,metrics]"
模型微调
模型下载
以Qwen2.5-7B为例,实现大模型微调
git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git
配置微调参数
Llama-Factory的文件夹里,打开examples\train_qlora下提供的llama3_lora_sft_awq.yaml,复制一份并重命名为qwen_lora_sft_bitsandbytes.yaml。 将第一行model_name_or_path更改为你下载模型的位置,数据集是 identity文件。修改其他行的内容如下。
### model
model_name_or_path: Qwen2.5-7B-Instruct
……
### dataset
dataset: identity
……
运行微调模型
将 identity.json 中的 {{name}} 字段替换为你的名字来微调一个属于自己的大模型。
# LLaMA-Factory 目录下
llamafactory-cli train examples/train_qlora/qwen_lora_sft_bitsandbytes.yaml
推理测试
文件夹Llama-Factory\examples\inference下提供的llama3_lora_sft.yaml,复制一份,并重命名为 qwen_lora_sft.yaml
model_name_or_path: Qwen2.5-7B-Instruct
adapter_name_or_path: saves/qwen-7b/lora/sft
template: qwen
finetuning_type: lora
### export
export_dir: export
export_size: 4
export_device: cuda
export_legacy_format: false
# LLaMA-Factory 目录下
llamafactory-cli chat examples/inference/qwen_lora_sft.yaml
导出
新建Llama-Factory\export文件夹。运行下面的导出命令
llamafactory-cli export examples/inference/qwen_lora_sft.yaml
注意
避免依赖项冲突,可以在每次安装新的依赖项后,走以下步骤
pip install --no-deps -e .
Deepseek训练与微调
环境
以下配置是最小配置,仅仅能运行起来小模型(<=8B),测试体验使用,无法并发
- GPU显存 >= 24G
- CUDA >= 11.8,建议 12.2
- python==3.10
- CPU >= 12核
- 运行内存 >= 64G
- nvidia-smi 命令正确输出
- nvcc -V 命令正确输出,并且版本匹配
创建 python 3.10 环境
conda create -n py310 python=3.10
conda activate py310
设置环境变量,将 HuggingFace设置为ModelScope
export USE_OPENMIND_HUB=1 # 1=ModelScope,0=HuggingFace
下载框架
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 transformers==4.43.2 vllm==0.6.1 openai==1.61.0 deepspeed==0.14.4 #可以不执行,但是防止与其他冲突
下载模型到本地(下载小模型测试比较快)
最大模型需要800G运行内存,这里使用小模型
pip install modelscope
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --local_dir '/ossfs/workspace/DeepSeek-R1-Distill-Qwen-1.5B'
创建启动配置文件
deepseek-base.yaml (也可以不创建,直接将参数拼接在启动命令后面)
model_name_or_path: deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B # 会自动下载也可以提前把模型下载到本地,填写本地路径
template: deepseek3 # 训练和推理时构造 prompt 的模板
infer_backend: huggingface # 部署框架: [huggingface, vllm]
部署
方式1:api 接口方式部署(对外暴露接口)
API_PORT=7007 CUDA_VISIBLE_DEVICES=0 llamafactory-cli api deepseek-base.yaml
方式2:web 聊天页面方式部署(需要开外网端口访问 web 页面)
API_PORT=7007 CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat deepseek-base.yaml
方式3:命令行模式启动(终端命令行聊天)
CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat deepseek-base.yaml
测试
新建chat.py
import os
from openai import OpenAI
from transformers.utils.versions import require_version
require_version("openai>=1.5.0", "To fix: pip install openai>=1.5.0")
if __name__ == '__main__':
port = 7007
client = OpenAI(
api_key="0",
base_url="http://localhost:{}/v1".format(os.environ.get("API_PORT", 7007)),
)
messages = []
messages.append({"role": "user", "content": "你好,什么是deepseek?"})
result = client.chat.completions.create(messages=messages, model="test")
print(result.choices[0].message)
python chat.py
微调(SFT)
- 只讲微调,不讲全量训练,全量训练需要TB级别数据集和千台服务器
- 将自己的数据整理为标准的数据集格式:llamafactory.readthedocs.io/zh-cn/lates…
注册数据集
追加data/dataset_info.json里的内容,注册自己的数据集
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)"
}
]
开始微调
创建训练配置文件:llama3_lora_sft_ds3.yaml,并修改参数,参考:llamafactory.readthedocs.io/zh-cn/lates…
测试
修改推理配置文件,增加adapter_name_or_path 和finetuning_type参数
model_name_or_path: ../DeepSeek-R1-Distill-Qwen-32B
adapter_name_or_path: saves/DeepSeek-R1-Distill-Qwen-32B/lora/sft
template: deepseek3
finetuning_type: lora
infer_backend: huggingface # 部署框架: [huggingface, vllm]
重新启动微调后的模型
llamafactory-cli chat examples/inference/deepseek-base-lora.yaml
- 如果微调没有效果,增大文件中的:num_train_epochs参数
- 不是机械回答,问类似的相关问题,也会根据微调数据集正确回答