AI 學習紀錄 – GPT-J 使用與 finetune (1)

用了 CHAT GPT 後,就斷斷續續看了一些基本的 AI 基本 library 的用途介紹,包含

  • pandas: 一維/二維陣列處理
  • numpy: 多維陣列處理、矩陣乘法
  • pillow: 圖型處理

雖然只看不用收獲不大,但對在看程式時還是有些幫助,接著就直接上了 GPT-J 的使用於調校。我在 Google Cloud 上試了各種機器組合,可以成功運行 (提問),也有可以調校的,但所需資源很大。以下是使用半精度 (FP16)的測試,

  • 運行: 大概 CPU 64G RAM 配 T4 GPU(16G VRAM),可以運行。CPU RAM 如果不夠,可能是在一點 SWAP 就可以。
  • 調校 (Finetune): 要 CPU 200G RAM 再開 64GB SWAP 才可以進行調校,GPU 我還是用 T4。因為 GCE 上只有T4可以單顆GPU配到208G的 CPU RAM。CPU 108G + 64G SWAP,還是會發生記憶體不足的問題。由於這種規格很燒錢,並沒有去確認調校有沒有用,其實我連調校都沒跑完。

由於 CPU RAM 108G 仍然不夠,所以可以推測在一般的主機板(最大128G),調校也是跑不起來。如果要用到 SWAP,那效率應該是極差,所以也就沒有再試下去了。狠心砸錢買 Server 的 8 DIMM 主機板好像也沒必要,一但三分鐘熱度過了就虧很大。

結論是:試用可以,調校不行。

會有下一篇是說明如何使用另一個修改版,只用 8bit 做處理,可以成功運行與調校。雖然是個失敗紀錄,但因為很多設定是重複的,就記下來了。後續也會用的到,或哪一天發財了,硬體升級時也跑的動。

硬體使用

本文是使用Google Colud 的 GCE 服務,區域與位置如下

  • 位置: asai-east1-a 台灣
  • GPU: T4 16G VRAM
  • Ubuntu 20.04,  200GHD

CPU 的話,N1 highmem 108G 或 200G的。

環境安裝

以下就不廢話,直接給命令,包含初始化與套件安裝

基本套件

VIM 設定檔

編輯 ~/.vimrc

 

SWAP Space

由於操作中容易記憶體不足,所以這邊也提供製做虛擬記憶體的指令,請自行調整需要大小,這邊是16G的指令。

安裝 Anaconda

請自行下載 Anaconda 後安裝,裝在預設位置,並讓程式加入初始化的動作。

修改 .bashrc

將下列片段加入 .bashrc 的最後面

使用 Anaconda 環境

重新登入後,透過 conda 來創建 python 的環境

往後重新登入,記得再執行 conda acivate gptj 來載入該環境

安裝 Python 會用到的套件

安裝 Nvidia CUDA 11.3 與 Driver

最後編譯可能會錯誤,請套用下面修改(參考這裡)

  • /usr/src/nvidia-465.19.01/common/inc/nv-time.h: 找到有 INTERRUPTIBLE 的這行,把整行換成 WRITE_ONCE(current->__state, TASK_INTERRUPTIBLE)
  • /usr/src/nvidia-465.19.01/nvidia-drm/nvidia-drm-drv.c: 找到 to_pci,把整行移除

修改 /usr/src/linux-headers-5.15.0-1027-gcp/Makefile,把有 Werror 的部份都拿掉,這部份主要是不要讓 warning 變 error。kernel 的版本,請依據自己的機器修改一下,可以看 uname -r 。

完成後再重新執行一次 “sudo apt-get -y install cuda”

 

最後重新開機,讓 driver 載入。然後執行 nvidia-smi ,看是否有看到自己的顯卡。

 

GPT-J 資料下載與測試

將下面的內容存成 test.py

執行 test.py ,就會自己下載 pre-trained 的資料,並執行詢問的功能,看看是否有答案。

GPT-J 調校 (Finetune)

這個步驟我沒完整跑完過,但確定可以運行,給讀者參考。

 

Leave a Reply

請輸入答案 ÷ 2 = 2