ubuntu上搭建ChatGLM2-6b環境及ptuing微調訓練的坑

清華大學的chatGLM2-6B可以說是目前亞洲唯一能打的對中文支持不錯的LLM大模型,網上已經有很多介紹如何在本機搭建環境的文章,就不再重複了,這裏記錄下最近踩的一些坑:

1、爲啥要使用ubuntu?

chatGLM2-6b項目裏有很多.sh文件,在windows下正常運行通常要折騰一番,最後能不能全部通關,講究1個“緣”字,還不如直接找個linux環境,能避免不少麻煩,如果不想安裝雙系統的同學們,也可以使用windows 10/11的WSL子系統,但使用WSL強烈建議大家把windows更新到最新補丁,然後升級WSL2(注:WSL確實不錯,能幹很多ubuntu的事兒,但是ptuing微調cuda一直提示初始化失敗,最後還是放棄 )

 

2、沒有GPU顯卡能玩GLM大模型嗎?

能!但體驗極差,幾乎只能跑個hello world,幹不了啥正事兒,不久會被勸退,還是建議租個服務器,或者至少弄個8G顯存的N卡,我用的就是RTX4060.

 

3、ubuntu上怎麼安裝cuda及cudnn?

這裏有一個很坑的地方,網上幾乎所有文章全是清一色的介紹怎麼用命令行,一步步下載安裝,巨複雜,關鍵還不一定好使,我的ubuntu 22.04 LTS參照這些方法,試了2次,每次安裝到最後,把gdm3關閉後,安裝完再重啓,就黑屏進不去了,按網上的各種解救方法也沒效果,最後只能把ubuntu重裝,浪費我不少時間 。

後面發現,軟件與更新裏,點點鼠標就能完成的事兒

3.1 先把服務器源設置成中國或主服務器

強烈建議:先不要按網上說的,把源換成阿里雲、清華 這些國內鏡像站點,不是說它們不好,而是國內鏡像站點或多或少,可能更新不及時,有些依賴包不全,導致最後各種其名其妙的問題。

我在安裝gcc/g++/make時就因爲這個源的問題,折騰了好久,一直提示依賴項不滿足 ,最後換成主服務器,就解決了。

在3.2之前,建議先安裝以下組件(可能並不需要)

sudo apt install gcc
sudo apt install g++
sudo apt install make

3.2 附加驅動,選擇專有驅動(默認是帶-open的)

然後關閉,等着安裝完成即可.

3.3 安裝nvitop

這一步是可選的,推薦大家安裝這個小工具 , 比nvidia-smi 好用太多,參見下面的截圖, GPU的使用情況一目瞭然

 

4、ptuning微調問題

按ptuing/readme.md的介紹,把AdvertiseGen訓練了一把,量化8(其它核心參數沒改)

PRE_SEQ_LEN=128
LR=2e-2
NUM_GPUS=1

torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py \
    --do_train \
    --train_file AdvertiseGen/train.json \
    --validation_file AdvertiseGen/dev.json \
    --preprocessing_num_workers 10 \
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path /home/jimmy/code/model/chatglm2-6b \
    --output_dir /home/jimmy/code/model/output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 128 \
    --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 8

跑了15小時,下面是output目錄裏的結果彙總:

{
    "epoch": 0.42,
    "train_loss": 3.3751344401041665,
    "train_runtime": 54080.5566,
    "train_samples": 114599,
    "train_samples_per_second": 0.888,
    "train_steps_per_second": 0.055
}

跑完之後,對比了下,對於服裝類的問題,回答確實看上去更專業了 ,參考下圖:

徾調前:

徾調後:

但也出現了1個嚴重的新問題:原來的通用對話能力退化了,問個“你好”都回答服裝問題。在ChatGLM的微信交流羣裏問了下,發現不止我1個這樣,原因可能是訓練過擬合了,需要調整訓練參數,重新訓練不斷嘗試,以達到最佳效果。看來微調訓練是一門藝術!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章