基于LLAMA-7B的lora中文指令微调

该文详细介绍了如何在Ubuntu18.04系统上,利用GTX3090显卡对从HuggingFace下载的中文llama-7b预训练模型进行指令微调。过程包括选用lit-llama工程,模型转换,数据准备,修改vocab_size以适应中文模型的词典大小,以及进行指令微调和模型测试。由于显存限制,max_seq_length设为256,可能影响效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言:

  • 系统:ubuntu18.04
  • 显卡:GTX3090 - 24G (惨呀,上次还是A100,现在只有3090了~)
    (本文旨在快速实现基于llama-7b的中文指令微调)

1. 选用工程

咱们还是用lit-llama(环境安装过程见上篇博客)

  • 地址:https://github.com/Lightning-AI/lit-llama在这里插入图片描述

2. 中文llama-7b预训练模型下载

  • 模型下载
    在huggingface上搜索"llama chinese",我们选以下这个模型,如图所示:在这里插入图片描述

  • 模型转换
    切换到lit-llama的工程,修改scripts/convert_hf_checkpoint.py,修改路径,

    • checkpoint_dir:从huggingface下载的权重路径
    • output_dir:转换之后保存的路径
      如下图所示:在这里插入图片描述
  • 切换到lit-llama项目路径下,运行如下指令,进行模型转换:

    python scripts/convert_hf_checkpoint.py
    
  • 转换完毕后,在刚才设置的输出路径,会得到lit-llama.pth文件(26G),在上一级目录有tokenizer.model文件
    在这里插入图片描述

3. 数据准备

  • 这里我们选用alpaca的中文指令数据alpaca_data_zh_51k.json,下载地址如下所示:在这里插入图片描述
  • 打开文件,指令数据如下所示:在这里插入图片描述
  • 切换到lit-llama项目路径,打开scripts/prepare_alpaca.py(这里建议复制一份),主要修改如下图所示:
    1)修改中文指令数据文件名
    2)修改中文指令数据存放路径
    3)修改中文llama模型的tokenizer.model路径
    4)中文llama-7b的max_seq_length设置为2048,但是如果你只有一张3090显卡,设置2048会显存溢出,所以这里我们只设置256
    5)因为已经下载完alpaca_data_zh_51k.json文件了,注释掉36和38行代码
    在这里插入图片描述
  • 切换到lit-llama项目路径,运行如下指令:
    python scripts/prepare_alpaca.py	
    
  • 运行完毕之后,会在刚才设置的destination_path下得到train.pt和test.pt的数据文件,如下图所示:在这里插入图片描述
    到这里,数据准备完成。

4. 开始指令微调

  • 修改vocab_size
    由于原始llama-7b指令的vocab_size为32000,而下载的中文llama-7b的词典大小为49953,需要对其进行修改。打开lit-llama/model.py,将padded_vocab_size设置为49953,如下图所示:
    在这里插入图片描述

  • 打开finetune/lora.py(建议复制一份),修改训练脚本指令路径,包括:
    1)data_dir:中文指令文件路径
    2)pretrained_path:转换之后的中文lit-llama.pth路径
    3)tokenizer_path:中文llama-7b的tokenizer.model路径
    4)out_dir:保存lora权重文件的路径
    在这里插入图片描述

  • 切换到lit-llama项目路径,运行以下指令开始指令微调:

    python finetune/lora.py
    
  • 训练过程如下所示:在这里插入图片描述

5. 模型测试

  • 切换到lit-llama项目路径,打开generate/lora.py(建议复制一份),修改对应的权重路径和tokenizer.model路径,如下图所示:在这里插入图片描述

  • 我们设置prompt为"中国的首都是哪里?",运行如下指令进行测试:

    python generate/lora-chinese.py --prompt "中国的首都是哪里?"
    
  • 测试结果如下所示:在这里插入图片描述

总结:

  • 注意替换vocab_size,原始llama-7b的词典大小为32000,下载的中文预训练模型vocab_size为49953
  • 原工程中max_seq_length设置为256,下载的中文预训练模型max_seq_length为2048,但是由于受显存限制(穷~),做中文指令微调时也设置为max_seq_length=256,可能会影响效果。
  • 下一步工作尝试使用多卡训练以及使用自己的数据进行指令微调

结束。

### 使用 llama-factory 进行 LoRA 微调 #### 准备工作 为了使用 `llama-factory` 对大模型进行LoRA微调,需先安装必要的依赖库并准备数据集。确保环境已配置好Python以及PyTorch等基础框架。 ```bash pip install git+https://github.com/your-repo/llama-factory.git@main ``` #### 数据预处理 针对不同的应用场景调整数据格式至关重要。实践中发现仅将问题置于instruction字段而留空input的效果不佳[^3]。更有效的做法是让用户输入位于input部分,同时利用instruction提供上下文或指导说明。 #### 启动WebUI界面 对于初次使用者来说,通过图形化的WebUI来操作可能更加直观便捷。启动命令如下: ```bash python -m llama_factory.webui ``` 这一步骤能够简化参数设置过程,并允许实时监控训练进度[^2]。 #### 配置文件设定 创建一个JSON格式的配置文件用于指定训练细节,如学习率、批次大小等超参。下面是一个简单的例子: ```json { "model_name": "qwen-1.5-7b-chat", "dataset_path": "./data/my_dataset.jsonl", "output_dir": "./results/", "learning_rate": 5e-5, "per_device_train_batch_size": 8, "num_train_epochs": 3, "logging_steps": 10, "save_strategy": "epoch" } ``` #### 开始微调流程 最后执行具体的微调指令,在此之前确认所有路径指向正确无误。运行以下脚本即可开始训练: ```bash python -m llama_factory.train \ --config ./path_to_config/config.json ``` 在此过程中,损失函数通常选用交叉熵损失(CrossEntropyLoss),其指数形式即为困惑度(perplexity)[^1]。该指标可用于评估模型性能变化情况。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值