自考论文AI辅助指南:千笔写作与万方智搜搭配实测
2026/10/19 21:28:07
# 【1】彻底删除 llama_factory 环境(先 conda deactivate 再执行) conda remove -n llama_factory --all -y # 【2】初始化 conda:把 conda 命令写入 ~/.bashrc 并立即生效(不会激活任何环境) conda init bash && source ~/.bashrc # 【3】创建名为 llama_factory 的虚拟环境,指定 Python 3.11,自动确认 git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python=3.11 -y # 【4】激活 llama_factory 环境,命令行前缀出现 (llama_factory) 即为成功 conda activate llama_factory # 【5】切换到 LLaMA-Factory 项目根目录(根据实际路径修改,如 /root/autodl-tmp/LLaMA-Factory) cd LLaMA-Factory # 【6】开发模式安装 LLaMA-Factory + torch + metrics 两组可选依赖(改源码不用重装) pip install -e '.[torch,metrics]' # 【7】在 llama_factory 环境内安装 Jupyter Notebook 和 ipykernel(注册 Kernel 必需) pip install jupyter ipykernel # 【8】把 llama_factory 环境注册为 Jupyter Kernel,界面显示名 "Python 3.11 (llama_factory)" python -m ipykernel install --user --name llama_factory --display-name "Python 3.11 (llama_factory)" # 【9】后台启动 Jupyter Notebook:输出重定向到 jupyter.log,PID 保存到 jupyter.pid(关闭终端不会停止) nohup jupyter notebook --ip=0.0.0.0 --port=8089 --no-browser --allow-root > jupyter.log 2>&1 & echo $! > jupyter.pid # 【9-1】查看 Jupyter 后台日志(找带 token 的登录链接) cat jupyter.log # 【9-2】停止 Jupyter(通过保存的 PID 优雅停止) kill $(cat jupyter.pid) # 【9-3】兜底停止:如果上面的不行,强制杀掉所有 8089 端口上的进程 fuser -k 8089/tcp # 或者用 lsof 方式: # kill -9 $(lsof -t -i:8089) # 【10】查看已注册的所有 Jupyter Kernel,确认 llama_factory 注册成功 jupyter kernelspec list # 【11】验证 LLaMA-Factory 安装:能正常导入并输出版本号 python -c "import llamafactory; print('LLaMA-Factory 版本:', llamafactory.__version__)" # 【12】查看当前 Python 版本,确认是 3.11.x python --version # 【13】列出所有 conda 环境,带 * 号的是当前激活环境 conda env list # 【14】退出当前虚拟环境,命令行前缀 (llama_factory) 消失 conda deactivate ## 验证 import torch torch.cuda.current_device() torch.cuda.get_device_name(0) torch.__version__ ## llamafactory-cli train -h # 创建模型存放目录并进入(根据实际路径修改,如 /root/autodl-tmp/models) mkdir -p /dev/shm && cd /dev/shm # 安装 git-lfs(拉大模型权重必需,只做一次) apt update && apt install -y git-lfs git lfs install git config --global lfs.concurrenttransfers 8 git config --global http.postBuffer 524288000 git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 # 拉取 Qwen2.5-1.5B-Instruct(约 3GB FP16,适合中小显存做 CPT/SFT/DPO 全流程实验) git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git ## 执行完python执行这个 pkill -9 -f "ipykernel" CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \ --model_name_or_path /dev/shm/Meta-Llama-3-8B-Instruct \ --template llama3 "adgen_local": { "file_name": "AdvertiseGen/train.json", "columns": { "prompt": "content", "response": "summary" } }# ====== SFT Smoke 快速验证:Qwen2.5-3B-Instruct QLoRA 4-bit ====== # 选型理由: # 1. 能稳定学会 Function Calling(ShareGPT function_call/observation 角色)的中文小模型 # 2. 比 1.5B function calling 能力强很多(1.5B 经常输出自然语言而非 JSON 工具调用) # 3. QLoRA 4-bit 显存仅需 ~10GB,单卡 RTX 3090/4090 24G 或 AutoDL A5000 轻松跑 # 4. 2 epoch 约 3-5 小时,能快速看到 tool call 格式是否学会 # llamafactory-cli train /root/LLaMA-Factory/examples/auto_car/sft_qwen2.5_3b_qlora_smoke.yaml # # ---------- 对话验证(加载模型聊一聊)---------- # 0) 基座(未微调) # llamafactory-cli chat --model_name_or_path /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master --template qwen # 1) SFT 模型(LoRA/QLoRA 训练产物) # llamafactory-cli chat --model_name_or_path /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master --adapter_name_or_path /dev/shm/saves/sft_3b_smoke --template qwen # 若 /dev/shm/saves/sft_3b_smoke 目录下没有 adapter_model.safetensors,而只有 checkpoint-xxx,则改为: # llamafactory-cli chat --model_name_or_path /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master --adapter_name_or_path /dev/shm/saves/sft_3b_smoke/checkpoint-xxx --template qwen # # ---------- 建议测试问题(复制到 chat 里直接问)---------- # 请帮我查询“2023款 比亚迪汉EV”的保养政策:我想知道首保里程、首保是否免费、以及常规保养项目。你必须通过工具查询,不要凭空编造。请先给出工具调用的参数,然后再根据工具返回结果总结为三条要点。 # ---------- 模型 ---------- # 基座模型路径(本地路径或 ModelScope/HF 缓存目录),用于加载 tokenizer 与权重 model_name_or_path: /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master # ---------- Chat Template ---------- # 对话模板(必须与基座 Instruct 模型匹配),决定训练/推理的 prompt 拼接格式 template: qwen # ---------- 训练方法 ---------- # 训练阶段:sft=监督微调 stage: sft # 是否执行训练 do_train: true # 微调方式:lora=只训练 LoRA 适配器参数 finetuning_type: lora # LoRA 低秩维度 r(越大可训练参数越多) lora_rank: 64 # LoRA 缩放系数(常见经验:≈2*lora_rank) lora_alpha: 128 # LoRA dropout(抑制过拟合) lora_dropout: 0.1 # LoRA 注入目标模块:all=对所有可注入线性层生效 lora_target: all # QLoRA 量化开关(开启后基座权重以 4bit 加载以节省显存;部分环境需确保 bitsandbytes 可用) quantization_bit: 4 quantization_type: nf4 double_quantization: true # ---------- 数据 ---------- # 数据集名称(需在 dataset_info.json 注册) dataset: identity,auto_car_sft # 数据集目录(相对/绝对路径均可,取决于启动时工作目录) dataset_dir: data # 单条样本最大 token 截断长度 cutoff_len: 2048 # 是否覆盖重建 tokenized cache(改数据/模板后建议 true) overwrite_cache: true # 数据预处理并行进程数 preprocessing_num_workers: 8 # 是否启用 packing(把多条短样本拼到同一序列);冒烟阶段建议 false 更直观 packing: false # ---------- 超参数(3B,batch 大一点)---------- # 输出目录(checkpoint/adapter/log 等) output_dir: /dev/shm/saves/sft_3b_smoke # 若 output_dir 已存在,是否允许覆盖 overwrite_output_dir: true # 每张卡的 micro-batch size(一个 optimizer step 前会累积 gradient_accumulation_steps 次) per_device_train_batch_size: 4 # 梯度累积步数(有效 batch ≈ per_device_train_batch_size * gradient_accumulation_steps * gpu_num) gradient_accumulation_steps: 2 # 学习率 learning_rate: 2.0e-4 # 训练轮数(smoke 一般 1-2) num_train_epochs: 1 # 学习率调度器类型 lr_scheduler_type: cosine # warmup 比例 warmup_ratio: 0.05 # 混合精度:bf16 更稳(硬件需支持) bf16: true # 是否使用 fp16(与 bf16 二选一) fp16: false # 梯度裁剪阈值(防止梯度爆炸) max_grad_norm: 1.0 # 梯度检查点(省显存、换速度) gradient_checkpointing: true # 日志打印间隔(step) logging_steps: 10 # 保存 checkpoint 间隔(step) save_steps: 50 # 最多保留多少个 checkpoint(超出会删除旧的) save_total_limit: 3 # 保存策略:steps=按 step 保存 save_strategy: steps # 是否只保存模型(不保存 optimizer/scheduler 状态,省空间) save_only_model: true # 从指定 checkpoint 恢复训练(为空/不填则不恢复) resume_from_checkpoint: null # 训练结束是否自动加载验证集上最优 checkpoint load_best_model_at_end: true # 选择 best model 的指标名(通常是 eval_loss) metric_for_best_model: eval_loss # 指标是否越大越好(loss 越小越好,所以 false) greater_is_better: false # ---------- 验证 ---------- # 从训练集中切分验证集比例(0.05=5%) val_size: 0.05 # 评估策略:steps=按 step 评估 eval_strategy: steps # 评估间隔(step) eval_steps: 50 # eval 的 batch size per_device_eval_batch_size: 8 # ---------- SwanLab 监控 ---------- # 是否开启 SwanLab 记录 use_swanlab: true # SwanLab 项目名 swanlab_project: car-customer-service # SwanLab 运行名(建议包含阶段/模型/日期便于对比) swanlab_run_name: sft-3b-smoke-qwen25# ---------- 对话验证(加载模型聊一聊)---------- # llamafactory-cli train /root/LLaMA-Factory/examples/auto_car/dpo_qwen2.5_3b_lora_smoke.yaml # # 0) 基座(未微调) # llamafactory-cli chat --model_name_or_path /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master --template qwen # 1) SFT 模型(用于对比 DPO 前后变化) # llamafactory-cli chat --model_name_or_path /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master --adapter_name_or_path /dev/shm/saves/sft_3b_smoke --template qwen # 2) DPO 模型(本配置训练产物,训练完成后再用) # llamafactory-cli chat --model_name_or_path /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master --adapter_name_or_path /dev/shm/saves/dpo_3b_smoke --template qwen # 若 output_dir 下没有 adapter_model.safetensors,而只有 checkpoint-xxx,则改为 --adapter_name_or_path /dev/shm/saves/dpo_3b_smoke/checkpoint-xxx # # ---------- 建议测试问题(复制到 chat 里直接问)---------- # 请帮我查询“2023款 比亚迪汉EV”的保养政策:我想知道首保里程、首保是否免费、以及常规保养项目。你必须通过工具查询,不要凭空编造。请先给出工具调用的参数,然后再根据工具返回结果总结为三条要点。 # 基座模型路径(本地路径或 ModelScope/HF 缓存目录),用于加载 tokenizer 与权重 model_name_or_path: /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master # 对话模板(必须与基座 Instruct 模型匹配),决定训练/推理的 prompt 拼接格式 template: qwen # 训练阶段:dpo=偏好对齐(Direct Preference Optimization) stage: dpo # 是否执行训练 do_train: true # 微调方式:lora=只训练 LoRA 适配器参数 finetuning_type: lora # LoRA 低秩维度 r(越大可训练参数越多) lora_rank: 64 # LoRA 缩放系数(常见经验:≈2*lora_rank) lora_alpha: 128 # LoRA dropout(抑制过拟合) lora_dropout: 0.05 # LoRA 注入目标模块:all=对所有可注入线性层生效 lora_target: all # policy 模型加载的适配器路径(通常指向 SFT 产物,用于“在 SFT 基础上继续做 DPO”) adapter_name_or_path: /dev/shm/saves/sft_3b_smoke # reference 模型基座路径(DPO 用 reference 的 logp 约束 policy 不要漂太远) ref_model: /dev/shm/easy_ai/modelscope/models/Qwen--Qwen2.5-3B-Instruct/snapshots/master # reference 模型加载的适配器路径(常见设定:reference = SFT 模型,即与 adapter_name_or_path 相同) ref_model_adapters: /dev/shm/saves/sft_3b_smoke ref_model_quantization_bit: 4 # DPO 强度系数 beta(越大偏好约束越强,需结合数据质量调参) pref_beta: 0.1 # DPO 中混入的 SFT loss 权重(用于稳定语言质量/格式,防止只追偏好导致退化) pref_ftx: 0.1 # 偏好损失形式(sigmoid 为经典 DPO 形式) pref_loss: sigmoid # 标签平滑(缓解过拟合/偏好标注噪声) dpo_label_smoothing: 0.0 # DPO 数据集名称(需在 dataset_info.json 注册,并确保该数据集设置 ranking: true) dataset: identity,auto_car_dpo # 数据集目录(相对/绝对路径均可,取决于启动时工作目录) dataset_dir: data # 单条样本最大 token 截断长度 cutoff_len: 1024 # 是否覆盖重建 tokenized cache(改数据/模板后建议 true) overwrite_cache: true # 数据预处理并行进程数 preprocessing_num_workers: 8 # 是否启用 packing;偏好数据一般建议 false 更直观 packing: false # 输出目录(checkpoint/adapter/log 等) output_dir: /dev/shm/saves/dpo_3b_smoke # 是否覆盖输出目录 overwrite_output_dir: true # 每张卡的 micro-batch size per_device_train_batch_size: 1 # 梯度累积步数(有效 batch ≈ per_device_train_batch_size * gradient_accumulation_steps * gpu_num) gradient_accumulation_steps: 8 # 学习率(DPO 通常比 SFT 小) learning_rate: 1.0e-5 # 训练轮数(smoke 一般 1) num_train_epochs: 1 # 学习率调度器类型 lr_scheduler_type: cosine # warmup 比例 warmup_ratio: 0.05 # 混合精度:bf16 更稳(硬件需支持) bf16: true # 是否使用 fp16(与 bf16 二选一) fp16: false # 梯度裁剪阈值 max_grad_norm: 1.0 # 梯度检查点(省显存、换速度) gradient_checkpointing: true # 日志打印间隔(step) logging_steps: 10 # 保存 checkpoint 间隔(step) save_steps: 50 # 最多保留多少个 checkpoint save_total_limit: 3 # 保存策略:steps=按 step 保存 save_strategy: steps # 是否只保存模型(不保存 optimizer/scheduler 状态) save_only_model: true # 训练结束是否自动加载验证集上最优 checkpoint load_best_model_at_end: true # 选择 best model 的指标名(通常是 eval_loss) metric_for_best_model: eval_loss # 指标是否越大越好(loss 越小越好,所以 false) greater_is_better: false # 从训练集中切分验证集比例(0.05=5%) val_size: 0.05 # 评估策略:steps=按 step 评估 eval_strategy: steps # 评估间隔(step) eval_steps: 50 # eval 的 batch size per_device_eval_batch_size: 1 # 是否开启 SwanLab 记录 use_swanlab: true # SwanLab 项目名 swanlab_project: car-customer-service # SwanLab 运行名(建议包含阶段/模型/日期便于对比) swanlab_run_name: dpo-3b-smoke-qwen25