清華大學的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個這樣,原因可能是訓練過擬合了,需要調整訓練參數,重新訓練不斷嘗試,以達到最佳效果。看來微調訓練是一門藝術!