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.pswp.cn/pingmian/82783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82783.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【位運算】判斷字符是否唯?(easy)

33. 判斷字符是否唯?(easy) 題?描述:解法(位圖的思想):C 算法代碼:Java 算法代碼: 題?鏈接:?試題 01.01. 判定字符是否唯? 題?描述: 實現?個算法&…

滿天星之canvas實現【canvas】

展示 文章目錄 展示Canvas 介紹【基礎】簡介兼容性關鍵特性注意事項應用場景:基本示例 滿天星代碼實現【重點】代碼解釋 全量代碼【來吧,盡情復制吧少年】html引入JS代碼 參考資源 Canvas 介紹【基礎】 簡介 Canvas是一個基于HTML5的繪圖技術&#xff0…

可視化提示詞(Prompt)在訓練過程中的優化過程:visualize_prompt_evolution

可視化提示詞(Prompt)在訓練過程中的優化過程:visualize_prompt_evolution 這個函數 visualize_prompt_evolution 的作用是可視化提示詞(Prompt)在訓練過程中的優化過程,通過對比每個訓練輪次(Epoch)的提示詞與初始提示詞的差異,直觀展示哪些Token被保留、哪些被修改…

2025 一帶一路暨金磚國家技能發展與技術創新大賽 第一屆“信創適配及安全管理賽項”樣題

2025 一帶一路暨金磚國家技能發展與技術創新大賽 第一屆“信創適配及安全管理賽項”樣題 模塊A-理論知識:模塊B-適配環境搭建:系統安裝與配置:DNS 服務配置:DNS 服務配置:CA 服務配置:Httpd 服務配置&#…

Qt Creator調用Python代碼

Qt Creator調用Python代碼 項目場景:現在我寫的Qt上位機,需要調用同事使用python寫的代碼,所以我需要一個整合,把同事的代碼融合進我的Qt工程里來。 所以,本篇記錄Qt Creator中調用Python的一種方法。 操作系統:windows 11 64位 Python使用的版本為 3.9.10,(安裝參…

【QQ音樂】sign簽名| data參數 | AES-GCM加密 | webpack(上)

1.目標 網址:https://y.qq.com/n/ryqq/toplist/26 切換榜單出現請求,可以看到sign和data是加密的 2.逆向分析 搜索sign: 可以看到sign P(n.data),而n.data就是請求的加密data參數 data {"comm":{"cv":4747474,&qu…

uni-app(6):Vue3語法基礎下

1 列表渲染 1.1 在 v-for 里使用數組 v-for 指令可以實現基于一個數組來渲染一個列表。v-for 指令需要使用 item in items 形式的特殊語法,其中 items 是源數據數組,而 item 則是被迭代的數組元素的別名。 在 v-for 塊中,我們可以訪問所有父…

STM32之SPI——外部FLASH和RFID

一、SPI協議的原理與應用 基本概念 串行外設接口SPI(Serial Peripheral Interface)是由美國摩托羅拉公司最先推出的一種同步串行傳輸規范,也是一種單片機外設芯片串行外設擴展接口。該接口是一種高速、全雙工、同步的通信總線,并…

51c視覺~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D時空中追蹤萬物!國防科大提出首個長時場景流估計方法 本篇分享 TPAMI 2025 論文??SceneTracker: Long-term Scene Flow Estimation Network??,國防科大提出首…

cf2059B

原題鏈接:https://codeforces.com/contest/2059/problem/B 題目背景: 將一個長度為 n 的數組 a 劃分為 k 個數組,再將所有偶數索引的數組合并成 b 數組,定義代價為 的最小索引 i ,可得到的最小代價為多少。 思路&am…

爬蟲到智能數據分析:Bright Data × Kimi 智能洞察亞馬遜電商產品銷售潛力

前言 電商數據分析在現代商業中具有重要的戰略價值,通過對消費者行為、銷售趨勢、商品價格、庫存等數據的深入分析,企業能夠獲得對市場動態的精準洞察,優化運營決策,預測市場趨勢、優化廣告投放、提升供應鏈效率,并通…

從解決一個分享圖片生成的歷史bug出發,詳解LayoutInflater和View.post的工作原理

問題背景 最近在項目中遇到一個問題:在檔口分享功能中,需要動態生成一個分享圖片。代碼是這樣寫的: // 項目中的代碼 val shareView LayoutInflater.from(thisStallMainActivityV1).inflate(R.layout.share_header_stall_main_layout, nul…

2.linux目錄切換命令:cd與pwd以及路徑與路徑符

cd 切換當前工作目錄 cd [linux路徑0] cd沒有選項,直接執行,只有參數.如果沒有參數,表示回到用戶的home目錄 pwd 無參,無選項,直接打印當前工作目錄的絕對路徑 路徑 相對路徑 以當前目錄為起點,路徑描述無需使用/開頭 # cd Desktop 絕對路徑 路徑描述需要以/開頭 cd…

摩爾條紋 原理以及matlab 實現

一、簡介 莫爾條紋的形成原理-CSDN博客 “莫爾”一詞源于法文“Moire”,其原本的含義是“波動”或者“起波紋的”。早在古代時期,人們便偶然發現,當把兩塊薄的絲綢織物相互疊加放置時,能夠看到一種呈現不規則形態的花紋。此后&a…

【海康USB相機被HALCON助手連接過后,MVS顯示無法連接故障。】

在Halcon里使用助手調用海康USB相機時,如果這個界面點擊了【是】 那么恭喜你,相機只能被HALCON調用使用,使用MVS或者海康開發庫,將查找不到相機 解決方式: 右鍵桌面【此電腦】圖標 ->選擇【管理】 ->選擇【設備…

數據治理是什么意思?數據治理平臺有哪些?

目錄 一、數據治理的概念 1. 數據治理的定義 2. 數據治理的目標 二、數據治理的實施流程 1. 規劃階段 2. 評估階段 3. 執行階段 4. 監控與評估階段 三、常見的數據治理平臺 1. FineDataLink 2. IBM InfoSphere Information Governance Catalog 四、總結 隨著企業業…

高效工具-tldr

喜歡使用命令操作的小伙伴,肯定會遇到一個問題,查看命令如何使用時,會列出一堆,特別是英文,看的直發懵。前段時間我也是研究git命令,也遇到了類似的問題。好在有大數據,幫我普及相關的知識。 在…

安卓添加設備節點權限和selinux訪問權限

# 1 修改設備節點權限及配置屬性設置節點值 ## 1.1 修改設備節點權限 ### 1.1.1 不會手動卸載的節點 在system/core/rootdir/init.rc中添加節點權限 在on boot下面添加 chown system system /sys/kernel/usb/host chmod 0664 /sys/kernel/usb/host ### 1.1.2 支持熱插拔的…

ssm學習筆記(尚硅谷) day1

創建新項目 maven的聚合 1. 標記父類項目 標簽<packaging>pom</packaging>表示將該項目標記為父類項目&#xff0c;必須添加。 以下是標簽<packing>的常見取值 groupId在pom.xml中&#xff0c;可以從pom.xml直接修改。 2. 通過<modules>添加子項目…

基于Java,SpringBoot,Vue,UniAPP醫院預約掛號買藥就診病例微信小程序系統設計

摘要 隨著醫療信息化的不斷推進以及“互聯網醫療”模式的廣泛普及&#xff0c;傳統醫院掛號流程中存在的排隊時間長、資源分配不均等問題日益凸顯&#xff0c;急需通過數字化手段加以解決。本研究設計并實現了一套基于Java、SpringBoot、Vue與UniAPP技術棧的醫院預約掛號微信小…