LlamaFactory/unsloth Demo

內部叫Tuning-Factory

參數文檔https://llamafactory.readthedocs.io/zh-cn/latest/index.html

高級技巧,如加速:https://llamafactory.readthedocs.io/zh-cn/latest/advanced/acceleration.html

0.環境

conda env list
conda remove --name llm --all
conda create -n llm python=3.10 (切記不能11,具體看readme.md的推薦版本)
conda activate llm
cd LLaMA-Factory
pip install -e ".[torch,metrics]" -i https://pypi.tuna.tsinghua.edu.cn/simple --no-build-isolation成功

可以嘗試指定tag,例如:
git clone --branch 0.7.1 --depth 1 https://github.com/username/repository.git
pip install llamafactory[metrics]==0.7.1

指定tag直接wget下載代碼壓縮包
當以git clone方式下載時默認下載當時最新dev版本:0.9.4.dev0)

llamafactory-cli version(有點久)
在這里插入圖片描述

之前嘗試出現的報錯:
在這里插入圖片描述

llamafactory-cli version報錯ImportError: cannot import name 'logging' from 'huggingface_hub'

from transformers import AutoTokenizer,AutoModelForCausalLM報錯

1. SFT

基座模型下載

多種途徑

  • 魔塔社區模型庫,git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git
  • huggingface
cli微調

進入Llama-Factory倉庫目錄,
如果是自定義數據集,則將數據集json文件移動到data目錄下,同時修改data目錄下的data_info.json,添加key名和自定義數據集名(value)

"identity_xuefeng": {"file_name": "identity_xuefeng.json"},

復制examples\train_qlora下提供的llama3_lora_sft_awq.yaml文件,修改文件名,修改文件內容:

  • model_name_or_path (提前下載的基座模型的絕對路徑)
  • template: llama3或qwen
  • dataset: /data/data_info.json里的key值
  • output_dir:相對路徑,saves/Qwen2.5-0.5B-Instruct/lora/sft(倉庫目錄下)
  • epoch

llamafactory-cli help

 Usage:                                                             |
|   llamafactory-cli api -h: launch an OpenAI-style API server       |
|   llamafactory-cli chat -h: launch a chat interface in CLI         |
|   llamafactory-cli eval -h: evaluate models                        |
|   llamafactory-cli export -h: merge LoRA adapters and export model |
|   llamafactory-cli train -h: train models                          |
|   llamafactory-cli webchat -h: launch a chat interface in Web UI   |
|   llamafactory-cli webui: launch LlamaBoard                        |
|   llamafactory-cli version: show version info    

llamafactory-cli train examples/train_qlora/xuefeng_qwen_lora_sft_awq.yaml

在這里插入圖片描述

llamafactory-cli version

FORCE_TORCHRUN=1 CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/train_qlora/xuefeng_qwen_lora_sft_awq.yaml

web UI微調

llamafactory-cli webui

export USE_MODELSCOPE_HUB=1 && llamafactory-cli webui

CUDA_VISIBLE_DEVICES=0 USE_MODELSCOPE_HUB=1 llamafactory-cli webui

2. 推理

基座模型直接推理

/home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/examples/inference/llama3_lora_sft.yaml
復制examples\inference下提供的llama3_lora_sft.yaml文件,修改文件名,修改文件內容:

  • model_name_or_path (提前下載的基座模型的絕對路徑)
  • template: llama3或qwen
  • adapter_name_or_path: saves/Qwen2.5-0.5B-Instruct/lora/sft (SFT輸出路徑,或者注釋掉則僅使用基座模型)
  • infer_backend: huggingface # choices: [huggingface, vllm, sglang]
  • trust_remote_code: true

llamafactory-cli chat examples/inference/xuefeng_qwen_lora_sft.yaml


報錯1:
MaxRetryError: HTTPSConnectionPool(host=‘huggingface.co’, port=443)
解決:vim ~/.bashrc,添加
export HF_ENDPOINT=https://hf-mirror.com
source ~/.bashrc
conda activate llm


報錯LOCAL_RANK,卡了較久時間
export LOCAL_RANK=0
FORCE_TORCHRUN=1 CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/xuefeng_qwen_lora_sft.yaml

解決:pip install e.安裝的4.52.4報上述LOCAL_RANK的錯誤,降級transofrmers=4.51.3,盡管requirements.txt要求范圍內都行

transformers>=4.49.0,<=4.52.4,!=4.52.0; sys_platform != 'darwin'
transformers>=4.49.0,<=4.51.3,!=4.52.0; sys_platform == 'darwin'

僅降級transformers仍不夠還會報錯,還需修改命令,最終成功運行命令為:
LOCAL_RANK=0 MASTER_ADDR=127.0.0.1 MASTER_PORT=12346 WORLD_SIZE=1 RANK=0 CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/xuefeng_qwen_lora_sft.yaml
事實上,最小運行單位為:
LOCAL_RANK=0 MASTER_ADDR=127.0.0.1 MASTER_PORT=12345 llamafactory-cli chat examples/inference/xuefeng_qwen_lora_sft.yaml
可以嘗試
export LOCAL_RANK=0
export MASTER_ADDR=127.0.0.1

至此走通下載模型直接推理(非SFT后的模型)鏈路


SFT后推理

然而,(Q)lora SFT后推理仍然報錯:
RuntimeError: aten.add_.Tensor: got mixed torch.Tensor and DTensor, need to convert all torch.Tensor to DTensor before calling distributed operators!

無論推理腳本里是否有或注釋掉finetuning_type: lora

詳細錯誤如下

[INFO|2025-07-12 18:58:51] llamafactory.model.model_utils.attention:143 >> Using torch SDPA for faster training and inference.
[rank0]: Traceback (most recent call last):
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/bin/llamafactory-cli", line 8, in <module>
[rank0]:     sys.exit(main())
[rank0]:   File "/home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/src/llamafactory/cli.py", line 151, in main
[rank0]:     COMMAND_MAP[command]()
[rank0]:   File "/home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/src/llamafactory/chat/chat_model.py", line 154, in run_chat
[rank0]:     chat_model = ChatModel()
[rank0]:   File "/home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/src/llamafactory/chat/chat_model.py", line 53, in __init__
[rank0]:     self.engine: BaseEngine = HuggingfaceEngine(model_args, data_args, finetuning_args, generating_args)
[rank0]:   File "/home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/src/llamafactory/chat/hf_engine.py", line 59, in __init__
[rank0]:     self.model = load_model(
[rank0]:   File "/home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/src/llamafactory/model/loader.py", line 184, in load_model
[rank0]:     model = init_adapter(config, model, model_args, finetuning_args, is_trainable)
[rank0]:   File "/home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/src/llamafactory/model/adapter.py", line 300, in init_adapter
[rank0]:     model = _setup_lora_tuning(
[rank0]:   File "/home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/src/llamafactory/model/adapter.py", line 184, in _setup_lora_tuning
[rank0]:     model = model.merge_and_unload()
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/peft/tuners/lora/model.py", line 900, in merge_and_unload
[rank0]:     return self._unload_and_optionally_merge(
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/peft/tuners/lora/model.py", line 531, in _unload_and_optionally_merge
[rank0]:     target.merge(safe_merge=safe_merge, adapter_names=adapter_names)
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/peft/tuners/lora/layer.py", line 617, in merge
[rank0]:     base_layer.weight.data += delta_weight
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/torch/_compile.py", line 51, in inner
[rank0]:     return disable_fn(*args, **kwargs)
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/torch/_dynamo/eval_frame.py", line 838, in _fn
[rank0]:     return fn(*args, **kwargs)
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/torch/distributed/tensor/_api.py", line 344, in __torch_dispatch__
[rank0]:     return DTensor._op_dispatcher.dispatch(
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/torch/distributed/tensor/_dispatch.py", line 167, in dispatch
[rank0]:     op_info = self.unwrap_to_op_info(op_call, args, kwargs)
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/torch/distributed/tensor/_dispatch.py", line 366, in unwrap_to_op_info
[rank0]:     self._try_replicate_spec_for_scalar_tensor(
[rank0]:   File "/home/jinxuefeng.jxf/.conda/envs/llm/lib/python3.10/site-packages/torch/distributed/tensor/_dispatch.py", line 468, in _try_replicate_spec_for_scalar_tensor
[rank0]:     raise RuntimeError(
[rank0]: RuntimeError: aten.add_.Tensor: got mixed torch.Tensor and DTensor, need to convert all torch.Tensor to DTensor before calling distributed operators!
[rank0]:[W712 18:58:52.262922106 ProcessGroupNCCL.cpp:1479] Warning: WARNING: destroy_process_group() was not called before program exit, which can leak resources. For more info, please see https://pytorch.org/docs/stable/distributed.html#shutdown (function operator())

嘗試先export merge后infer,正常!!(merge之前的SFT 訓練train命令無論是否設置LOCAL_RANK=0 MASTER_ADDR=127.0.0.1 MASTER_PORT=12345都行)

merge_lora.yarm代碼

model_name_or_path: merge/Qwen2.5-0.5B-Instruct/identity_xuefeng
# model_name_or_path: /home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/offline_models/qwen/Qwen2.5-0.5B-Instruct
# model_name_or_path: /home/jinxuefeng.jxf/xuefeng/LLaMA-Factory/offline_models/llama/Llama-3.2-1B-Instruct
# adapter_name_or_path: saves/Qwen2.5-0.5B-Instruct/lora/sftT
template: qwen # llama3
infer_backend: huggingface  # choices: [huggingface, vllm, sglang]
trust_remote_code: true
# finetuning_type: lora

3. 微調數據集

大模型數據集格式分為sharegpt和apaca

alpaca格式

通用指令微調:
{
“instruction”: “將以下中文翻譯成英文”,
“input”: “今天的天氣非常好”,
“output”: “The weather is very nice today.”
}

instruction:明確的任務指令(必須存在)
input:任務輸入內容(可能為空)
output:期望的輸出結果(必須存在)

sharegpt格式

多輪對話:

{"id": "chatcmpl-7F6Wr8JQ6JgB","conversations": [{"from": "human", "value": "Python里如何快速排序列表?"},{"from": "gpt", "value": "可以使用sorted()函數..."},{"from": "human", "value": "時間復雜度是多少?"}]
}

def alpaca_to_sharegpt(alpaca_data):
return {
“conversations”: [
{“from”: “human”, “value”: f"{alpaca_data[‘instruction’]}\n{alpaca_data[‘input’]}"},
{“from”: “gpt”, “value”: alpaca_data[“output”]}
]
}

Easy Dataset

LLM微調數據集創建工具
處理文本,生成alpaca、sharegpt格式數據集
https://github.com/ConardLi/easy-dataset
可以輸入任意文本,自動生成問題及對應的答案
「文獻處理-問題生成-答案構建-標簽管理-格式導出」


git clone https://www.modelscope.cn/datasets/xiaofengalg/Chinese-medical-dialogue.git
進入魔塔數據,下載數據至LLaMA-Factory/data/xxx.json
在這里插入圖片描述

"custom_sft_train_data":{
"file_name":"Chinese-medical-dialogue/data/train_0001_of_0001.json",
"columns":{
"prompt":"instruction",
"query":"input",
"response":"output"}
},

按數據集格式編寫格式,寫進LLaMA-Factory/data/data_info.json中

若數據集已經是sharegpt格式:

"data_name":{
"file_name":"xx/xxx/xx.json",
"formatting": "sharegpt"
},

3. 目錄結果及模型pt結構

倉庫目錄

LLAMA-Factory 的項目目錄結構,下面將對個幾個比較重要的文件和文件夾做簡要介紹,方便大家了解整體的框架:

  • 文件夾
  • assets
    • 用途:通常用于存放項目的靜態資源,如圖像、樣式表、JavaScript 文件等。
    • 說明:這些資源可能用于前端展示或用戶界面。
  • data
    • 用途:存放數據集、配置文件或其他與數據相關的文件。(微調的數據集下載后就放在這里)
    • 說明:這些文件可能包括訓練數據、測試數據或模型配置信息。
  • docker
    • 用途:包含 Docker 相關的配置文件和腳本,用于容器化部署。
    • 說明:這些文件幫助自動化部署過程,確保在不同環境中的一致性。
  • evaluation
    • 用途:存放評估模型性能的腳本和工具。
    • 說明:這些腳本用于衡量模型的準確性和其他指標。
  • examples
    • 用途:提供示例代碼和用例,幫助用戶快速上手。(微調和訓練的參數配置文件在這里)
    • 說明:這些示例展示了如何使用項目中的功能。
  • scripts
    • 用途:存放各種腳本文件,用于自動化任務或輔助功能。
    • 說明:這些腳本可能包括數據預處理、模型訓練等任務。
  • src
    • 用途:存放項目的源代碼。
    • 說明:這是項目的核心代碼所在的地方。
  • tests
    • 用途:存放測試代碼,用于驗證項目功能的正確性。
    • 說明:這些測試腳本確保代碼的質量和穩定性。
微調/訓練后的輸出文件
  • model在這里插入圖片描述

  • config.json
    模型配置文件,包含模型架構、參數等。

  • generation_config.json
    生成時的配置

  • merges.txt
    分詞器(tokenizer)的合并規則文件,用于將子詞組合成完整的詞匯

  • model.safetensors
    安全的二進制格式,存放模型權重信息。模型較大時可能出現多個切片文件

  • optimizer.pt (存儲最大)
    猜測優化器狀態

  • scheduler.pt

  • tokenizer_config.json

  • tokenizer.json

  • vocab.jaon
    詞表

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88893.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88893.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88893.shtml

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

相關文章

水務工程中自動化應用:EtherNet/IP轉PROFIBUS DP連接超聲波流量計

在水務工程領域&#xff0c;自動化技術的應用愈發廣泛。隨著工業4.0概念的普及&#xff0c;不同通信協議的設備之間實現高效互聯互通變得尤為關鍵。EtherNet/IP和PROFIBUS DP作為兩種常見的工業通信協議&#xff0c;各有優勢&#xff0c;在實際應用中&#xff0c;常需要將它們進…

網絡協議和基礎通信原理

網絡協議和基礎通信原理是理解互聯網和各種網絡應用的關鍵。讓我用通俗易懂的方式&#xff0c;帶你逐一深入講解這些內容。 一、基礎概念總覽 TCP/IP協議族&#xff1a;互聯網通信的基礎&#xff0c;由一組協議組成&#xff0c;包括TCP、IP、UDP等。HTTP協議&#xff1a;基于T…

T16IZ遙控器教程__遙控器與無人機對頻

文章目錄前言一、準備設備二、對頻步驟總結前言 在使用自組PX4無人機時&#xff0c;有的小伙伴可能會遇到遙控器無法與無人機對頻連接的問題&#xff0c;別擔心&#xff0c;這篇文章會解決它。 一、準備設備 如下圖&#xff0c;無人機信號接收器&#xff0c;與無人機。 遙控器…

pyspark中map算子和flatmap算子

在 PySpark 中&#xff0c;map 和 flatMap 是兩個常用的轉換算子&#xff0c;它們都用于對 RDD&#xff08;彈性分布式數據集&#xff09;或 DataFrame 中的元素進行處理&#xff0c;但處理方式和應用場景有所不同。下面詳細講解它們的用法和適用場景。1. map 算子功能對 RDD 或…

jenkins部署前端vue項目使用Docker+Jenkinsfile方式

文章目錄前言一、前提準備二、準備構建文件三、Jenkins中構建項目總結前言 前面通過jenkinsdocker的方式部署了若依前端vue項目&#xff0c;接下來接著學習使用Jenkinsfile的方式部署前端vue項目。 一、前提準備 已經安裝好centos服務器&#xff0c;并且安裝了jenkins和docke…

Cadence操作說明

一.allegro修改絲印字體大小的方法 1.選擇Edit–>Change&#xff0c;右側彈出Options選項&#xff0c;選擇Class : New subclass Ref Des : Silkscreen_Top&#xff0c;設置Text block&#xff0c;后面的數字代表字號的大小。菜單菜單欄選擇Setup–>Design Parameters&a…

使用Stitch來生成CrypyTrack的app程序

結果&#xff1a; &#x1f9ed; 第一步&#xff1a;訪問 Stitch 平臺 打開網址&#xff1a;stitch.withgoogle.com使用你的 Google 賬號登錄&#xff0c;無需安裝任何軟件 &#x1f9f1; 第二步&#xff1a;選擇設計模式 Stitch 提供兩種模式&#xff1a; 標準模式&#xf…

告別繁瑣:API全生命周期管理的新范式——apiSQL

API&#xff08;應用程序接口&#xff09;是連接數據與服務的生命線&#xff0c;是數字世界的基石。然而&#xff0c;一個高質量API的誕生并非易事&#xff0c;它涉及一個漫長而復雜的全生命周期——從規劃設計到最終退役&#xff0c;每個環節都需要專門的工具和技能&#xff0…

R 語言科研繪圖第 64 期 --- 啞鈴圖

在發表科研論文的過程中&#xff0c;科研繪圖是必不可少的&#xff0c;一張好看的圖形會是文章很大的加分項。 為了便于使用&#xff0c;本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中&#xff0c;獲取方式&#xff1a; R 語言科研繪圖模板 --- sciRplothttps://mp.…

基于MaxCompute MaxFrame 汽車自動駕駛數據預處理最佳實踐

一、背景及挑戰在汽車自動駕駛場景中&#xff0c;車端&#xff08;量產車、研采車&#xff09;持續產生并采集海量數據&#xff0c;包括圖片、音視頻、雷達、GPS等內容&#xff0c;這些數據通常以 ROSbag文件形式進行存儲。行業需求&#xff1a;自動駕駛依賴海量多模態數據&…

NLP:RNN文本生成案例分享

本文目錄&#xff1a;一、導入工具包二、數據集三、 構建詞表四、 構建數據集對象五、 構建網絡模型六、 構建訓練函數七、構建預測函數前言&#xff1a;上篇文章講解了RNN&#xff0c;這篇文章分享文本生成任務案例&#xff1a;文本生成是一種常見的自然語言處理任務&#xff…

AI時代的接口自動化優化實踐:如何突破Postman的局限性

編者語&#xff1a;本文作者為某非銀金融測試團隊負責人。其團隊自 2024 年起局部試用 Apipost&#xff0c;目前已在全團隊正式投入使用 。在推進微服務 API 自動化測試的過程中&#xff0c;研發和測試人員常常需要在接口請求中動態構造帶有特定業務規則的數據。我們團隊就遇到…

動態規劃題解_將一個數字表示成冪的和的方案數【LeetCode】

2787. 將一個數字表示成冪的和的方案數 給你兩個正整數 n 和 x 。 請你返回將 n 表示成一些 互不相同 正整數的 x 次冪之和的方案數。換句話說&#xff0c;你需要返回互不相同整數 [n1, n2, ..., nk] 的集合數目&#xff0c;滿足 n n1x n2x ... nkx 。 由于答案可能非常…

C#常用的LinQ方法

LINQ&#xff08;Language Integrated Query&#xff09;是 .NET 中用于處理集合的強大工具&#xff0c;它提供了多種方法來簡化數據查詢和操作。以下是一些常用的 LINQ 方法及其功能&#xff1a;Where: 根據指定的條件篩選集合中的元素。var filteredResults matchResults.Wh…

目標檢測之數據增強

數據翻轉&#xff0c;需要把bbox相應的坐標值也進行交換代碼&#xff1a;import random from torchvision.transforms import functional as Fclass Compose(object):"""組合多個transform函數"""def __init__(self, transforms):self.transform…

DiffDet4SAR——首次將擴散模型用于SAR圖像目標檢測,來自2024 GRSL(ESI高被引1%論文)

一. 論文摘要 合成孔徑雷達&#xff08;SAR&#xff09;圖像中的飛機目標檢測是一項具有挑戰性的任務&#xff0c;由于離散的散射點和嚴重的背景雜波干擾。目前&#xff0c;基于卷積或基于變換的方法不能充分解決這些問題。 本文首次探討了SAR圖像飛機目標檢測的擴散模型&#…

html案例:編寫一個用于發布CSDN文章時,生成有關縮略圖

CSDN博客文章縮略圖生成器起因&#xff1a;之前注意到CSDN可以隨機選取文章縮略圖&#xff0c;但后來這個功能似乎取消了。于是我想調整一下縮略圖的配色方案。html制作界面 界面分上下兩塊區域&#xff0c;上面是參數配置&#xff0c;下面是效果預覽圖。參數配置&#xff1a; …

lightgbm算法學習

主要組件 Boosting #mermaid-svg-1fiqPsJfErv6AV82 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1fiqPsJfErv6AV82 .error-icon{fill:#552222;}#mermaid-svg-1fiqPsJfErv6AV82 .error-text{fill:#552222;stroke:#…

安卓基于 FirebaseAuth 實現 google 登錄

安卓基于 FirebaseAuth 實現 google 登錄 文章目錄安卓基于 FirebaseAuth 實現 google 登錄1. 前期準備1.1 創建 Firebase 項目1.2 將 Android 應用連接到 Firebase1.3 在 Firebase 控制臺中啟用 Google 登錄2. 在 Android 應用中實現 Google 登錄2.1 初始化 GoogleSignInClien…

李宏毅(Deep Learning)--(三)

一.前向傳播與反向傳播的理解&#xff1a;二.模型訓練遇到的問題在模型訓練中&#xff0c;我們可能會遇到效果不好的情況&#xff0c;那么我們應該怎么思考切入&#xff0c;找到問題所在呢&#xff1f;流程圖如下&#xff1a;第一個就是去看訓練的損失函數值情況。如果損失較大…