当前位置: 首页 > ds >正文

LLaMaFactory 微调QwenCoder模型

步骤一:准备LLamaFactory环境

首先,让我们尝试使用github的方式克隆仓库:

git config --global http.sslVerify false && git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git

# 创建新环境,指定 Python 版本(以 3.10 为例)
conda create -n llamafactory python=3.10 -y# 激活环境
conda activate llamafactory

仓库已经成功克隆下来了。现在让我们进入项目目录并查看一下环境要求:

cd LLaMA-Factory && cat requirements.txt

现在让我们安装所需的依赖:

pip3 install -r requirements.txt

 将CLI 工具(如有)注册到你的环境变量中

pip install -e .

步骤二:准备模型

下载QwenCoder模型 

#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('XGenerationLab/XiYanSQL-QwenCoder-3B-2504')

步骤三:准备数据集

编辑 dataset_info.json

 dataset_info.json 文件(一般在 LLaMA-Factory/data/ 目录下),添加以下内容:

  "code_train.json": {"file_name": "code_train.json","columns": {"prompt": "instruction","query": "input","response": "output"},"format": "alpaca"}

步骤四:编写微调命令

LlamaFactory 的微调命令如下:

python src/train.py \--stage sft \--model_name_or_path /root/.cache/modelscope/hub/models/XGenerationLab/XiYanSQL-QwenCoder-3B-2504 \--do_train \--dataset_dir data \--dataset code_train.json \--output_dir output/qwencoder-sft \--per_device_train_batch_size 2 \--per_device_eval_batch_size 2 \--num_train_epochs 3 \--learning_rate 2e-5 \--fp16

步骤五:检查输出结果

  • 微调完成后,模型权重和配置会保存在 output/qwencoder-sft 目录下。
  • 你可以在该目录下找到如 pytorch_model.bin、adapter_model.bin、config.json、tokenizer_config.json 等文件。

步骤六:用 HuggingFace Transformers 代码推理

import argparse
import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
from tqdm import tqdmdef parse_args():parser = argparse.ArgumentParser(description="自动评测微调模型的推理效果")parser.add_argument('--model_dir', type=str, default='output/qwencoder-sft', help='模型目录')parser.add_argument('--test_file', type=str, default='code_test.json', help='测试集文件')parser.add_argument('--max_new_tokens', type=int, default=128, help='生成最大新token数')parser.add_argument('--device', type=str, default=None, help='推理设备,默认自动检测')parser.add_argument('--strict', action='store_true', help='是否严格匹配输出')return parser.parse_args()def main():args = parse_args()device = args.device or ('cuda' if torch.cuda.is_available() else 'cpu')print(f"加载模型到 {device} ...")model = AutoModelForCausalLM.from_pretrained(args.model_dir, trust_remote_code=True).to(device)tokenizer = AutoTokenizer.from_pretrained(args.model_dir, trust_remote_code=True)model.eval()print(f"加载测试集 {args.test_file} ...")with open(args.test_file, "r", encoding="utf-8") as f:test_data = json.load(f)correct = 0total = 0results = []for item in tqdm(test_data, desc="推理中"):prompt = item["instruction"]if item.get("input"):prompt += "\n" + item["input"]inputs = tokenizer(prompt, return_tensors="pt").to(device)with torch.no_grad():outputs = model.generate(**inputs, max_new_tokens=args.max_new_tokens)pred = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()gt = item["output"].strip()# 评测方式if args.strict:is_correct = (pred == gt)else:is_correct = (gt in pred)correct += int(is_correct)total += 1results.append({"prompt": prompt,"prediction": pred,"ground_truth": gt,"is_correct": is_correct})print(f"Prompt: {prompt}\nPred: {pred}\nGT: {gt}\nCorrect: {is_correct}\n---")acc = correct / total if total > 0 else 0print(f"\n总数: {total},正确: {correct},准确率: {acc:.2%}")# 保存详细结果with open("eval_results.json", "w", encoding="utf-8") as f:json.dump(results, f, ensure_ascii=False, indent=2)print("详细评测结果已保存到 eval_results.json")if __name__ == "__main__":main()

使用方法

在 LLaMA-Factory 目录下运行:

python t.py \--model_dir output/qwencoder-sft \--test_file code_test.json \--max_new_tokens 128 \--strict   # 可选,严格匹配时加

http://www.xdnf.cn/news/9949.html

相关文章:

  • Windows 中禁止在桌面放置文件以保持桌面整洁
  • 深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
  • does not provide an export named ‘getActiveHead‘
  • 集成均衡功能电池保护芯片在大功率移动电源的应用,创芯微CM1341-DAT、杰华特JW3312、赛微微电CW1244、中颖SH366006
  • 从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用
  • vr中风--数据处理模型搭建与训练
  • NW907NW918美光固态闪存NW920NW930
  • mongodb删除字段
  • springboot拦截器的基本配置
  • lost connection to mysql server at ‘reading initial communication packet‘
  • 怒更一波免费声音克隆和AI配音功能
  • MediaMtx开源项目学习
  • window 显示驱动开发-转换 Direct3D 固定函数状态(二)
  • 《深度搜索-R1-0528》
  • git仓库服务gogs详解
  • EfficMultiCoreMemoryPool项目
  • Git 中移除已追踪的文件
  • 解决 xmlsec.InternalError: (-1, ‘lxml xmlsec libxml2 library version mismatch‘)
  • TensorFlow深度学习实战(18)——K-means 聚类详解
  • QML视图组件ListView、TableView、GridView介绍
  • 人工智能-训练AI模型涉及多个步骤
  • 数据结构(7)树-二叉树-堆
  • uni-app 安卓消失的字符去哪里了?maxLength失效了!
  • 2025年DDoS混合CC攻击防御全攻略:构建智能弹性防护体系
  • c#与java的相同点和不同点
  • C# Renci.SshNet 登陆 suse配置一粒
  • 每日算法 -【Swift 算法】盛最多水的容器
  • Emacs 折腾日记(二十六)——buffer与窗口管理
  • 设计模式学习笔记
  • SOC-ESP32S3部分:17-I2C驱动实例-EEPROM温湿度传感器