
# 【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 python3.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.logPID 保存到 jupyter.pid关闭终端不会停止 nohup jupyter notebook --ip0.0.0.0 --port8089 --no-browser --allow-root jupyter.log 21 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_DEVICES0 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 CallingShareGPT 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 # ---------- 超参数3Bbatch 大一点---------- # 输出目录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.055% 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.055% 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