LLaMA Factory-Lora微调实现声控语音多轮问答对话-1

发布时间:2025-07-07 21:34:54编辑:123阅读(461)

    LLaMa Factory环境安装可以参考https://py3study.com/Article/details/id/20107.html

    查看当前conda环境

    conda env list

    image.png

    切换到llama_factory环境

    conda activate llama_factory

    image.png


    运行llama factory web-ui

    llamafactory-cli webui

    image.png

    访问http://127.0.0.1:7860/

    image.png


    基座模型下载:

    git clone https://modelscope.cn/models/Qwen/Qwen3-1.7B

    数据集下载:

    git clone https://www.modelscope.cn/datasets/YIRONGCHEN/PsyDTCorpus.git


    配置数据集vim /home/sam_admin/dataset/PsyDTCorpus/dataset_info.json文件,内容如下

    {

    "PsyDTCorpus_train_mulit_turn_packing ShareGPT": {

      "file_name": "PsyDTCorpus_train_mulit_turn_packing.json",

      "formatting": "sharegpt",

      "columns": {

        "messages": "messages"

      },

      "tags": {

        "role_tag": "role",

        "content_tag": "content",

        "user_tag": "user",

        "assistant_tag": "assistant",

        "system_tag": "system"

       }

     }



    模型微调配置:

    image.png


    配置SwanLab和模型结果输出目录,点击预览命令生成训练配置文件,开始训练模型。

    image.png

    训练参数:

    llamafactory-cli train \

        --stage sft \

        --do_train True \

        --model_name_or_path /home/sam_admin/LLaMA-Factory/models/Qwen3-1.7B \

        --preprocessing_num_workers 16 \

        --finetuning_type lora \

        --template default \

        --flash_attn auto \

        --dataset_dir /home/sam_admin/dataset/PsyDTCorpus \

        --dataset PsyDTCorpus_train_mulit_turn_packing ShareGPT \

        --cutoff_len 2048 \

        --learning_rate 5e-05 \

        --num_train_epochs 2.0 \

        --max_samples 100000 \

        --per_device_train_batch_size 2 \

        --gradient_accumulation_steps 8 \

        --lr_scheduler_type cosine \

        --max_grad_norm 1.0 \

        --logging_steps 5 \

        --save_steps 100 \

        --warmup_steps 0 \

        --packing False \

        --enable_thinking True \

        --report_to none \

        --use_swanlab True \

        --output_dir /home/sam_admin/LLaMA-Factory/PsyDTCorpus/model_output \

        --bf16 True \

        --plot_loss True \

        --trust_remote_code True \

        --ddp_timeout 180000000 \

        --include_num_input_tokens_seen True \

        --optim adamw_torch \

        --lora_rank 8 \

        --lora_alpha 16 \

        --lora_dropout 0 \

        --lora_target all \

        --swanlab_project PsychologyChat \

        --swanlab_mode cloud \

        --val_size 0.1 \

        --eval_strategy steps \

        --eval_steps 100 \

        --per_device_eval_batch_size 2 


    点击开始训练:

    image.png


    训练完成:

    image.png


    LLaMA-Factory将基础模型和 LoRA微调后的适配器合并并导出为可直接使用的模型。

    llamafactory-cli export \

      --model_name_or_path = path_to_base_model  \             #原始模型地址

      --adapter_name_or_path = path_to_adapter  \           #微调后文件的地址

      --template qwen3 \                       #使用Qwen3模型的模板

      --finetuning_type lora \                 #微调类型为LoRA

      --export_dir  =   path_to_export \         #导出模型的目标目录

      --export_size 2 \                           #导出模型分片大小(GB)

      --export_device cpu \                    #导出设备CPU

      --export_legacy_format False         # 不使用旧格式导出


    需要替换的项,路径替换:

    需要将 path_to_base_model 替换为基础模型路径(例如:qwen/Qwen-7B)

    将 path_to_adapter 替换为训练后的LoRA适配器路径

    将 path_to_export 替换为导出目标路径


    导出分片大小:

    --export_size 2 表示每个导出文件的大小限制为2GB。这对于大模型很有用,可以将模型分割成多个较小的文件。


    格式兼容性:

    --export_legacy_format False 使用新格式导出,通常与最新版本的Transformers库兼容。如果您的环境较旧,可能需要设置为 True。


    创建导出模型的目录

    mkdir /home/sam_admin/psychology_chat


    执行命令:

    llamafactory-cli export --model_name_or_path  /home/sam_admin/LLaMA-Factory/models/Qwen3-1.7B --adapter_name_or_path  /home/sam_admin/LLaMA-Factory/PsyDTCorpus/model_output --template qwen3 --finetuning_type lora  --export_dir  /home/sam_admin/psychology_chat --export_size 2  --export_legacy_format False

    成功如下:

    image.png

    提示Ollama modelfile saved in /home/sam_admin/psychology_chat/Modelfile

    Modelfile文件是ollama本地部署所需要的文件。



    模型量化

    LLaMA Factory 默认并没有将模型转换为 GGUF 的方法,需要 llama.cpp 的仓库,使用其中的转换脚本:

    git clone https://github.com/ggml-org/llama.cpp.git

    cd llama.cpp/gguf-py

    pip install --editable .

    GGUF(GGML Universal File)是专为大型语言模型(LLM)设计的文件格式,其优化了数据的存储方式,减少了存储空间的占用,这对于包含大量参数的大型模型尤为重要。

    相比于默认的 BF16 精度(每个参数占用 16 位(2 字节)),4BIT 量化(每个参数仅占用 4 位(0.5 字节))可以将模型推理的显存占用降低 75%。

    所以运行 7B 的模型大概仅需要 4G 显存(考虑到其他开销实际可能更大一点)。但是量化后的模型也就意味着会损失一定精度

    这里可选择的几种精度:   f16(完整精度,大文件)   q4_k_m(平衡质量和速度)q8_0(高精度)。

    python /home/sam_admin/llama.cpp/convert_hf_to_gguf.py /home/sam_admin/psychology_chat --outtype f16

    image.png

    转换成功后,将在微调后合并的模型目录下生产一个 GGUF 文件(/home/sam_admin/psychology_chat/Psychology_Chat-1.7B-F16.gguf)


    使用ollama本地部署

    修改modelfile文件, from后面添加gguf的路径

    # ollama modelfile auto-generated by llamafactory
    
    FROM /home/sam_admin/psychology_chat/Psychology_Chat-1.7B-F16.gguf
    
    TEMPLATE """{{ if .System }}<|im_start|>system
    {{ .System }}<|im_end|>
    {{ end }}{{ range .Messages }}{{ if eq .Role "user" }}<|im_start|>user
    {{ .Content }}<|im_end|>
    <|im_start|>assistant
    {{ else if eq .Role "assistant" }}{{ .Content }}<|im_end|>
    {{ end }}{{ end }}"""
    
    PARAMETER stop "<|im_end|>"
    PARAMETER num_ctx 4096


    将刚刚导出好的 GGUF 文件给定Ollama进行注册(注意这里指定的是Modelfile文件,而不是GGUF文件):

    ollama create psychology -f /home/sam_admin/psychology_chat/Modelfile

    image.png

    列出ollama所有的模型:

    ollama list

    image.png

    运行注册的模型(微调后的模型),测试一下效果。

    ollama run psychology

    image.png


    Langchain的使用

    Ollama 是一个开源的大语言模型部署工具,而 LangChain 则是一个用于构建基于语言模型的应用的框架。通过结合这两者,可以在本地环境中快速部署和使用先进的AI模型。使用Ollama 与 LangChain 集成,以创建强大的 AI 应用。

关键字

上一篇: LLaMA Factory微调后的模型合并导出和部署-4

下一篇: 没有了