日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

聊聊ChatGLM6B的微调脚本及与Huggingface的关联

發(fā)布時間:2024/1/3 windows 53 coder
生活随笔 收集整理的這篇文章主要介紹了 聊聊ChatGLM6B的微调脚本及与Huggingface的关联 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文首先分析微調腳本trainer.sh的內(nèi)容,再剖析ChatGLM是如何與Huggingface平臺對接,實現(xiàn)transformers庫的API直接調用ChatGLM模型,最后定位到了ChatGLM模型的源碼文件。

腳本分析

微調腳本:

PRE_SEQ_LEN=128
LR=2e-2

CUDA_VISIBLE_DEVICES=0 python3 main.py \
    --do_train \
    --train_file AdvertiseGen/train.json \
    --validation_file AdvertiseGen/dev.json \
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path THUDM/chatglm-6b \
    --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 64 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 16 \
    --predict_with_generate \
    --max_steps 3000 \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate $LR \
    --pre_seq_len $PRE_SEQ_LEN \
    --quantization_bit 4

腳本配置項分析:

  1. PRE_SEQ_LEN=128: 定義了序列長度為128。這個參數(shù)通常用于設置輸入序列的最大長度。
  2. LR=2e-2: 定義了學習率為0.02。學習率是模型訓練中的一個重要超參數(shù),它決定了模型參數(shù)更新的幅度。
  3. CUDA_VISIBLE_DEVICES=0: 這個環(huán)境變量用于設置哪些GPU將被TensorFlow框架使用。在這個腳本中,只使用了第一個GPU(索引為0)。
  4. python3 main.py: 這一行開始執(zhí)行主訓練腳本main.py。
  5. --do_train: 這個標志告訴腳本執(zhí)行訓練過程。
  6. --prompt_column content: 這個標志指定了輸入列的名稱,這里稱為content。這是模型接收的輸入列的名稱。
  7. --response_column summary: 這個標志指定了輸出列的名稱,這里稱為summary。這是模型需要生成的輸出列的名稱。
  8. --model_name_or_path THUDM/ChatGLM-6b: 這個標志指定了預訓練模型的名稱或路徑。這里使用的是名為THUDM/ChatGLM-6b的預訓練模型。
  9. --output_dir output/adgen-ChatGLM-6b-pt-$PRE_SEQ_LEN-$LR: 這個標志指定了輸出目錄。目錄名為output/adgen-ChatGLM-6b-pt-128-0.02,其中128和0.02分別由$PRE_SEQ_LEN和$LR變量替換。
  10. --per_device_train_batch_size 1: 這個標志設置了每個設備上的訓練批次大小為1。
  11. --per_device_eval_batch_size 1: 這個標志設置了每個設備上的評估批次大小為1。
  12. --gradient_accumulation_steps 16: 這個標志設置了梯度累積的步數(shù)為16。這意味著在每個更新步驟中,會將最近16個步驟的梯度相加。
  13. --max_steps 3000: 這個標志設置了訓練過程中的最大步數(shù)為3000。
  14. --save_steps 1000: 這個標志設置了保存模型檢查點的步數(shù)為1000。這意味著每1000個步驟后,將保存一次模型的狀態(tài)。
  15. --learning_rate $LR: 這個標志設置了學習率為之前定義的LR變量(0.02)。
  16. --pre_seq_len $PRE_SEQ_LEN: 這個標志設置了序列長度為之前定義的PRE_SEQ_LEN變量(128)。

在官方的微調文檔中,用的是ADGEN數(shù)據(jù)集,其格式也就是上述的--prompt_column content--response_column summary配置項決定的。而最終保存在output_dir配置項指定的目錄下有多個checkpoint文件,其生成頻率就是由save_steps配置項決定。

main.py

main文件中,依賴了trainer_seq2seq.py,而這又依賴了trainer.py文件。trainer.py文件則是直接copy自transformers庫的同名文件。

transformers庫的

目前的大模型都會對接到transformers庫中,通過transformers庫簡化調用開發(fā)。AI模型的對接,遵循HuggingFace平臺的要求。整個ChatGLM系列的推理、訓練、微調都可以直接調用transformers庫的API。常用的是如下三句:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

huggingface平臺與ChatGLM

在ChatGLM的部署過程中,需要在huggingface平臺上下載模型參數(shù)以及配置初始化文件。而這些配置文件,transformers庫的API能夠調用的原因。


比較重要的,就是圈出來的三個。config.json文件中,配置了模型的基本信息以及transformers API的調用關系:

{
  "_name_or_path": "THUDM/chatglm-6b",
  "architectures": [
    "ChatGLMModel"
  ],
  "auto_map": {
    "AutoConfig": "configuration_chatglm.ChatGLMConfig",
    "AutoModel": "modeling_chatglm.ChatGLMForConditionalGeneration",
    "AutoModelForSeq2SeqLM": "modeling_chatglm.ChatGLMForConditionalGeneration"
  },
  "bos_token_id": 130004,
  "eos_token_id": 130005,
  "mask_token_id": 130000,
  "gmask_token_id": 130001,
  "pad_token_id": 3,
  "hidden_size": 4096,
  "inner_hidden_size": 16384,
  "layernorm_epsilon": 1e-05,
  "max_sequence_length": 2048,
  "model_type": "chatglm",
  "num_attention_heads": 32,
  "num_layers": 28,
  "position_encoding_2d": true,
  "torch_dtype": "float16",
  "transformers_version": "4.23.1",
  "use_cache": true,
  "vocab_size": 130528
}

如上的auto_map配置項。configuration_chatglm文件是該config文件的類表現(xiàn)形式。
modeling_chatglm.py文件是源碼文件,ChatGLM對話模型的所有源碼細節(jié)都在該文件中。我之前一直沒找到ChatGLM的源碼,就是神經(jīng)網(wǎng)絡的相關代碼,經(jīng)過一波的分析,終于是定位到了。所以在config文件中會配置AutoModel API直接取調用modeling_chatglm.ChatGLMForConditionalGeneration。

總結

以上是生活随笔為你收集整理的聊聊ChatGLM6B的微调脚本及与Huggingface的关联的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。