llamafactory lora体验

webui

复制代码
# 修改默认端口 7860
export GRADIO_SERVER_PORT=11111
llamafactory-cli webui

脚本 llf-cli.sh

#!/bin/bash 复制代码
clone() {
  if [ ! -d "demos/Qwen3-0.6B" ]; then
    git -C demos clone https://gitcode.com/hf_mirrors/Qwen/Qwen3-0.6B.git
  else
    echo "模型Qwen3-0.6B已经存在"
  fi
}

train() {
  clone
  local env=$1
  if [ "$env" = "cpu" ]; then
    rm -rf demos/output/Qwen3-0.6B-lora
    rm -rf demos/merges/Qwen3-0.6B-lora
    # --push_to_hub True 推送到远程
    # export NPROC_PER_NODE=1 n卡训练
    # export ASCEND_RT_VISIBLE_DEVICES={npu_id} 第n个NPU 参与训练 可以多个 从0开始 0,1
    # export MASTER_PORT={master_port} 默认29500,可能被占用,所以要动态生成
    # --val_size 验证集比例 (0, 1) 【0.1 -> 90%训练 10%验证】
    llamafactory-cli train \
      --stage sft \
      --do_train True \
      --model_name_or_path demos/Qwen3-0.6B \
      --finetuning_type lora \
      --template qwen \
      --dataset_dir demos/custom_datasets \
      --dataset no_poem \
      --cutoff_len 512 \
      --learning_rate 5e-05 \
      --num_train_epochs 1 \
      --max_samples 1000 \
      --per_device_train_batch_size 1 \
      --gradient_accumulation_steps 2 \
      --lr_scheduler_type cosine \
      --max_grad_norm 1.0 \
      --logging_steps 5 \
      --save_steps 200 \
      --output_dir ./demos/output/Qwen3-0.6B-lora \
      --gradient_checkpointing False \
      --enable_thinking False \
      --optim adamw_torch \
      --lora_rank 16 \
      --lora_alpha 32 \
      --lora_dropout 0 \
      --lora_target q_proj,k_proj,v_proj,o_proj \
      --report_to none \
      --plot_loss True \
      --trust_remote_code True
  else
    # --flash_attn auto 仅CPU支持
    # --fp16 True CPU/MPS 不支持 fp16
    echo "Usage: $0 [cpu|npu]"
    exit 1
  fi
}

export() {
  llamafactory-cli export \
    --model_name_or_path demos/Qwen3-0.6B \
    --adapter_name_or_path ./demos/output/Qwen3-0.6B-lora  \
    --template default \
    --finetuning_type lora \
    --export_dir ./demos/merges/Qwen3-0.6B-lora \
    --export_size 2 \
    --export_device cpu \
    --export_legacy_format False
}

chat() {
  llamafactory-cli chat \
    --model_name_or_path ./demos/merges/Qwen3-0.6B-lora \
    --template qwen \
    --finetuning_type lora \
    --trust_remote_code True \
    --infer_backend huggingface
}

webchat() {
  # export GRADIO_SERVER_PORT=7862
  llamafactory-cli webchat \
    --model_name_or_path ./demos/merges/Qwen3-0.6B-lora \
    --template qwen \
    --finetuning_type lora \
    --infer_backend huggingface \
    --trust_remote_code true
}

api() {
  #  export API_HOST=0.0.0.0
  #  export API_PORT=8001 默认8000
  #  export API_MODEL_NAME=Qwen3-0.6B-lora
  #  export API_KEY=aaaa 设置为[密钥]
  llamafactory-cli api \
  --model_name_or_path ./demos/merges/Qwen3-0.6B-lora \
  --template qwen \
  --finetuning_type lora \
  --infer_backend huggingface
}

eval_model() {
  # [mmlu_test, ceval_validation, cmmlu_test]
  llamafactory-cli eval \
    --task cmmlu_test \
    --model_name_or_path ./demos/merges/Qwen3-0.6B-lora \
    --template qwen \
    --finetuning_type lora \
    --infer_backend huggingface \
    --trust_remote_code True \
    --batch_size 1 \
    --save_dir ./demos/eval/output
}
# 使用说明
usage() {
    cat << EOF
用法: $0 {命令} [参数]

命令:
  train         训练模型
  export        合并模型
  train-export  训练并合并模型
  chat          聊天
  webchat       web端聊天
  api           api服务
  eval_model    模型评估
  help          显示此帮助

示例:
  # cpu环境
  ./cli.sh train cpu
EOF
}

# 主函数
case "${1:-help}" in
  clone)
    clone
    ;;
  train)
    train "${2:-cpu}"
    ;;
  export)
    export
    ;;
  train-export)
    train "${2:-cpu}"
    export
    ;;
  chat)
    chat
    ;;
  webchat)
    webchat
    ;;
  api)
    api
    ;;
  eval_model)
    eval_model
    ;;
  help|--help|-h)
    usage
    ;;
  *)
    echo "未知命令: $1"
    echo ""
    usage
    exit 1
    ;;
esac

自定义数据集

  1. dataset_info.json

    复制代码
    {
      "no_poem": {
        "file_name": "datasets/no_poem.jsonl"
      },
      "intro": {
        "file_name": "datasets/intro.json"
      }
    }
  2. datasets/intro.json

    复制代码
    [
      {
        "instruction": "你好",
        "input": "",
        "output": "您好,我是 小智,一个由 yanlp 开发的 AI 助手,很高兴认识您。请问我能为您做些什么?"
      },
      {
        "instruction": "你好",
        "input": "",
        "output": "您好,我是 小智,一个由 yanlp 打造的人工智能助手,请问有什么可以帮助您的吗?"
      }
    ]
  3. datasets/no_poem.jsonl

    复制代码
    {"instruction": "写一首诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "作诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "帮我写诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写首诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "来一首诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写首现代诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写首古诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "模仿李白写诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "模仿杜甫写诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写一首藏头诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写一首情诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写一首思念的诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写一个三行诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写一个爱情诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "给女朋友写诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "给男朋友写诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写生日诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写表白诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写毕业诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写告白诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写友情诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写励志诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写亲情诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写关于春天的诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写关于冬天的诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写关于秋天的诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写关于夏天的诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写一首七言绝句", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "写一首五言绝句", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}
    {"instruction": "作个打油诗", "input": "", "output": "很抱歉,我目前无法提供诗歌创作。"}

训练 train ./llf-cli.sh train

合并 export ./llf-cli.sh export

chat ./llf-cli.sh chat

webchat ./llf-cli.sh webchat

api ./llf-cli.sh api

复制代码
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer aaaa" \
  -d '{
    "model": "Qwen3-0.6B-lora",
    "messages": [{"role": "user", "content": "写一首诗"}]
  }'

eval .llf-cli.sh eval_model

相关推荐
SirLancelot11 小时前
AI大模型-基本介绍(一)RAG、向量、向量数据库
数据库·人工智能·ai·向量·向量数据库·rag
CoderJia程序员甲1 小时前
GitHub 热榜项目 - 日榜(2025-12-18)
ai·开源·大模型·github·ai教程
这儿有一堆花1 小时前
将 AI 深度集成到开发环境:Gemini CLI 实用指南
人工智能·ai·ai编程
brave and determined2 小时前
CANN训练营 学习(day7)昇腾AI训练全流程实战:从模型迁移到性能优化的深度指南
pytorch·ai·ai训练·昇腾ai·msprobe·模型性能调优·训练配置
哥布林学者2 小时前
吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 课后习题和代码实践
深度学习·ai
YMatrix 官方技术社区2 小时前
YMatrix 高可用详解:3 种镜像策略在节点宕机时表现有何不同?
运维·数据库·数据仓库·ai·数据库开发·数据库架构·ymatrix
HyperAI超神经3 小时前
GPT-5全面领先,OpenAI发布FrontierScience,「推理+科研」双轨检验大模型能力
人工智能·gpt·ai·openai·benchmark·基准测试·gpt5.2
阿杰学AI3 小时前
AI核心知识57——大语言模型之MoE(简洁且通俗易懂版)
人工智能·ai·语言模型·aigc·ai-native·moe·混合专家模型
四眼蒙面侠3 小时前
AutoQA-Agent:用 Markdown 写验收用例,AI + Playwright 跑起来,跑通还能导出成 Playwright Test
ai·qa·playwright·testing
阿杰学AI3 小时前
AI核心知识56——大语言模型之ToT(简洁且通俗易懂版)
人工智能·ai·语言模型·提示工程·tot·pe·思维树