距离开始接触大语言模型已经有几个月的时间了,当初就知道“微调”这个高频词汇,一直没机会弄(一是机器不行,同时也没有比较小的模型;二是感觉应该不好弄,往后拖,先忙别的,哈哈),直到写这篇笔记的前几天才开始尝试,第一次使用
物理环境是:Ubuntu 22.04 + Intel(R)Xeon(R) CPU E5-2699 v4 2.20GHZ + RAM(512GB)
这里下载的是最新(2024-02-27)的发行版:
关于自定义数据集的写法以及一些配置你可以参照官网的:LLaMA-Factory/data/README_zh.md at main · hiyouga/LLaMA-Factory · GitHub
自己整理了几条数据作为测试数据集,文件名称为
点击下载数据集:ddz001.json
还需要在同目录的
# 创建 python3 -m venv venv # 激活 source ./venv/bin/activate # 退出虚拟环境 deactivate pip install -r requirements.txt
由于计算机资源比较紧张,所以下载了个1.3b的,下载路径为:
git lfs install git clone https://modelscope.cn/deepseek-ai/deepseek-coder-1.3b-instruct.git
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \ --stage sft \ --do_train \ --model_name_or_path /home/xxx/llm/0-model/deepseek-ai/deepseek-coder-1.3b-instruct \ --dataset ddz001 \ --template deepseekcoder \ --finetuning_type lora \ --lora_target q_proj,v_proj \ --output_dir output-ddz/deepseek-coder-1.3b-instruct \ --overwrite_cache \ --per_device_train_batch_size 4 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 5 \ --save_steps 1000 \ --learning_rate 3e-3 \ --num_train_epochs 30.0 \ --plot_loss \ --fp16
在官网微调示例的基础上,主要对下面的几个参数做了修改
python src/export_model.py \ --model_name_or_path /home/xxx/llm/0-model/deepseek-ai/deepseek-coder-1.3b-instruct \ --adapter_name_or_path output-ddz/deepseek-coder-1.3b-instruct \ --template deepseekcoder \ --finetuning_type lora \ --export_dir /home/xxx/llm/0-model/xxx/xxx-deepseek-coder-1.3b-instruct \ --export_size 2 \ --export_legacy_format False
这里测试的问题是:“javascript 基于时间戳的唯一标识符实现”