自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

當下最容易上手的大模型微調(diào)工具是誰?LLamaFactory或是其中之一

發(fā)布于 2024-4-9 10:29
瀏覽
0收藏

近日,國內(nèi)的一款微調(diào)框架發(fā)布了自己的論文《LLAMAFACTORY: Unified Efficient Fine-Tuning of 100+ Language Models》,對他們的框架做了系統(tǒng)性的總結(jié)。該框架自推出后迅速出圈,現(xiàn)已斬獲15.6k的star,逐步成為當下微調(diào)的首選工具。

當下最容易上手的大模型微調(diào)工具是誰?LLamaFactory或是其中之一-AI.x社區(qū)

??https://arxiv.org/pdf/2403.13372.pdf??

模型微調(diào)相較于上下文學習來講,存在比較高的門檻,但又是模型專業(yè)化,領域化不可或缺的技術(shù)手段。而其復雜性突出表現(xiàn)在這些方面:

1)理論基礎,如果說基于大模型寫prompt 根據(jù)一定范式來構(gòu)建RAG或者Agent不需要太多機器學習理論知識,然而微調(diào)就必須要對這些有理解,比如樣本,學習率,logloss等。

2)數(shù)據(jù)準備,對于普通開發(fā)者,高質(zhì)量的數(shù)據(jù)是微調(diào)成功的關(guān)鍵保證,而如何預處理,清洗,標注這些樣本本身就很復雜,更因此誕生了大模型數(shù)據(jù)工程這樣的領域來解決這一問題。

3)基座模型存在分化,雖然當下很多模型都參考llama和huggingface的一些規(guī)范,但是仍然都有一些特殊之處,想要微調(diào)也需要針對性地去分析和構(gòu)建相應的策略。

4)超參數(shù)優(yōu)化,微調(diào)本身是一個“煉丹”過程,如何能夠找到合適的超參數(shù),達到一個最佳性能,是一個重大挑戰(zhàn)。

5)AI工程復雜性,涉及到硬件\軟件\復雜流程的協(xié)同配合以及系統(tǒng)優(yōu)化,在有限的成本、資源和時間要求下完成模型訓練過程。

正是因為這些原因,對于預訓練微調(diào),需要一個類似于工廠的工業(yè)化手段來降低門檻,提升效率。

因此,行業(yè)內(nèi)出現(xiàn)了很多微調(diào)框架,而LLamaFactory(https://github.com/hiyouga/LLaMA-Factory)便是其中之一,從起名上就可以看出它們的目標是成為模型微調(diào)的工廠。

當下最容易上手的大模型微調(diào)工具是誰?LLamaFactory或是其中之一-AI.x社區(qū)

它得以流行主要得益于支持當下主流的大模型百川、千問、LLaMA等,不僅集成了大模型預訓練、監(jiān)督微調(diào)和強化微調(diào)等階段的主流的微調(diào)技術(shù)(支持 LoRA 和 QLoRA 等參數(shù)高效微調(diào)策略),還提供了預訓練、指令微調(diào)等豐富的數(shù)據(jù)集,方便參考使用,最重要的是提供了一個無代碼的圖形界面,大幅降低使用門檻,非開發(fā)者也可以方便地完成模型微調(diào)。

該框架架構(gòu)上由四個模塊構(gòu)成:模型加載器、數(shù)據(jù)工作器和訓練器,以及用戶界面LlamaBoard。

當下最容易上手的大模型微調(diào)工具是誰?LLamaFactory或是其中之一-AI.x社區(qū)

在根據(jù)官方文檔安裝好LLamaFactory后,可以有三種方式進行操作,WebUI、CLI或者Python。

1.webUI。

CUDA_VISIBLE_DEVICES=0 python src/train_web.py

當下最容易上手的大模型微調(diào)工具是誰?LLamaFactory或是其中之一-AI.x社區(qū)

2.CLI,由于有時候界面限制,可能需要命令行的方式進行微調(diào)。如果不知道具體格式,可以在界面上配置好,再復制到命令行中調(diào)整使用。

當下最容易上手的大模型微調(diào)工具是誰?LLamaFactory或是其中之一-AI.x社區(qū)


在example目錄中有大量的示例可供參考。

examples/
├── lora_single_gpu/
│   ├── pretrain.sh: 進行預訓練
│   ├── sft.sh: 進行指令監(jiān)督微調(diào)
│   ├── reward.sh: 進行獎勵模型訓練
│   ├── ppo.sh: 進行 PPO 訓練
│   ├── dpo.sh: 進行 DPO 訓練
│   ├── orpo.sh: 進行 ORPO 訓練
│   ├── prepare.sh: 保存預處理后的數(shù)據(jù)集
│   └── predict.sh: 進行批量預測
├── qlora_single_gpu/
│   ├── bitsandbytes.sh: 微調(diào) 4/8 比特 BNB 模型
│   ├── gptq.sh: 微調(diào) 4/8 比特 GPTQ 模型
│   ├── awq.sh: 微調(diào) 4 比特 AWQ 模型
│   └── aqlm.sh: 微調(diào) 2 比特 AQLM 模型
├── lora_multi_gpu/
│   ├── single_node.sh: 使用 Accelerate 進行單節(jié)點訓練
│   └── multi_node.sh: 使用 Accelerate 進行多節(jié)點訓練
├── full_multi_gpu/
│   ├── single_node.sh: 使用 DeepSpeed 進行單節(jié)點訓練
│   └── multi_node.sh: 使用 DeepSpeed 進行多節(jié)點訓練
├── merge_lora/
│   ├── merge.sh: 將 LoRA 權(quán)重合并到預訓練模型中
│   └── quantize.sh: 使用 AutoGPTQ 量化模型
├── inference/
│   ├── cli_demo.sh: 啟動命令行推理接口
│   ├── api_demo.sh: 啟動 OpenAI 風格 API
│   ├── web_demo.sh: 啟動瀏覽器推理接口
│   └── evaluate.sh: 在 MMLU 數(shù)據(jù)集上評測模型
└── extras/
    ├── galore/
    │   └── sft.sh: 使用 GaLore 訓練模型
    ├── loraplus/
    │   └── sft.sh: 使用 LoRA+ 訓練模型
    ├── llama_pro/
    │   ├── expand.sh: 擴展模型中的層
    │   └── sft.sh: 訓練擴展后的模型
    └── fsdp_qlora/
        └── sft.sh: 使用 FSDP 微調(diào)量化模型

3)編程方式。

from llmtuner import run_exp
run_exp(dict(
  stage="sft",
  do_train=True,
  model_name_or_path="Qwen/Qwen1.5-0.5B-Chat",
  dataset="identity,alpaca_gpt4_en,alpaca_gpt4_zh",
  template="qwen",
  finetuning_type="lora",
  lora_target="all",
  output_dir="test_identity",
  per_device_train_batch_size=4,
  gradient_accumulation_steps=4,
  lr_scheduler_type="cosine",
  logging_steps=10,
  save_steps=100,
  learning_rate=1e-4,
  num_train_epochs=5.0,
  max_samples=500,
  max_grad_norm=1.0,
  fp16=True,
))

對于用戶來講,準備正確高質(zhì)量的數(shù)據(jù)是用好該工具的關(guān)鍵。在使用自定義數(shù)據(jù)集時需要在 dataset_info.json 文件中按照以下格式提供數(shù)據(jù)集定義,數(shù)據(jù)集格式支持兩種:alpaca 和 sharegpt,具體可參考其官方文檔。

"數(shù)據(jù)集名稱": {
  "hf_hub_url": "Hugging Face 的數(shù)據(jù)集倉庫地址(若指定,則忽略 script_url 和 file_name)",
  "ms_hub_url": "ModelScope 的數(shù)據(jù)集倉庫地址(若指定,則忽略 script_url 和 file_name)",
  "script_url": "包含數(shù)據(jù)加載腳本的本地文件夾名稱(若指定,則忽略 file_name)",
  "file_name": "該目錄下數(shù)據(jù)集文件的名稱(若上述參數(shù)未指定,則此項必需)",
  "file_sha1": "數(shù)據(jù)集文件的 SHA-1 哈希值(可選,留空不影響訓練)",
  "subset": "數(shù)據(jù)集子集的名稱(可選,默認:None)",
  "folder": "Hugging Face 倉庫的文件夾名稱(可選,默認:None)",
  "ranking": "是否為偏好數(shù)據(jù)集(可選,默認:False)",
  "formatting": "數(shù)據(jù)集格式(可選,默認:alpaca,可以為 alpaca 或 sharegpt)",
  "columns(可選)": {
    "prompt": "數(shù)據(jù)集代表提示詞的表頭名稱(默認:instruction)",
    "query": "數(shù)據(jù)集代表請求的表頭名稱(默認:input)",
    "response": "數(shù)據(jù)集代表回答的表頭名稱(默認:output)",
    "history": "數(shù)據(jù)集代表歷史對話的表頭名稱(默認:None)",
    "messages": "數(shù)據(jù)集代表消息列表的表頭名稱(默認:conversations)",
    "system": "數(shù)據(jù)集代表系統(tǒng)提示的表頭名稱(默認:None)",
    "tools": "數(shù)據(jù)集代表工具描述的表頭名稱(默認:None)"
  },
  "tags(可選,用于 sharegpt 格式)": {
    "role_tag": "消息中代表發(fā)送者身份的鍵名(默認:from)",
    "content_tag": "消息中代表文本內(nèi)容的鍵名(默認:value)",
    "user_tag": "消息中代表用戶的 role_tag(默認:human)",
    "assistant_tag": "消息中代表助手的 role_tag(默認:gpt)",
    "observation_tag": "消息中代表工具返回結(jié)果的 role_tag(默認:observation)",
    "function_tag": "消息中代表工具調(diào)用的 role_tag(默認:function_call)",
    "system_tag": "消息中代表系統(tǒng)提示的 role_tag(默認:system,會覆蓋 system 列)"
  }
}

經(jīng)過以上的步驟,剩下的就是需要耐心的調(diào)參和評估了。下面是一個利用webui進行微調(diào)操作示例。

小結(jié)

相較于其他方法,目前,LlamaFactory可以說是當下最簡單快捷又功能強大的一種微調(diào)工具,值得大家學習使用。

收藏
回復
舉報
回復
相關(guān)推薦