首頁  >  文章  >  科技週邊  >  GPT大語言模式Alpaca-lora在地化部署實踐

GPT大語言模式Alpaca-lora在地化部署實踐

WBOY
WBOY轉載
2023-06-01 21:04:041720瀏覽

模型介紹

Alpaca模型是史丹佛大學研發的LLM(Large Language Model,大語言)開源模型,是一個在52K指令上從LLaMA 7B(Meta公司開源的7B)模型微調而來,具有70億的模型參數(模型參數越大,模型的推理能力越強,當然隨之訓練模型的成本就越高)。

LoRA,英文全名為Low-Rank Adaptation of Large Language Models,直譯為大語言模型的低階適應,這是微軟的研究人員為了解決大語言模型微調而開發的一項技術。如果想讓一個預訓練大語言模型能夠執行特定領域內的任務,一般需要做fine-tuning,但是目前推理效果好的大語言模型參數維度非常非常大,有些甚至是上千億維,如果直接在大語言模型上做fine-tuning,計算量會非常的大,成本也會非常的高。

'LoRA的做法是凍結預先訓練好的模型參數,然後在每個Transformer區塊中註入可訓練的層,由於不需要對模型的參數重新計算梯度,所以,會大大的減少計算量。

具體如下圖所示,核心思想是在原始預訓練模型增加一個旁路,做一個降維再升維的操作。訓練的時候固定預訓練模型的參數,只訓練降維矩陣 A 與升維矩陣 B。而模型的輸入輸出維度不變,輸出時將 BA 與預訓練語言模型的參數疊加。

GPT大語言模式Alpaca-lora在地化部署實踐

用隨機高斯分佈初始化 A,用 0 矩陣初始化 B。這樣能確保訓練時,新增的旁路BA=0,因而對模型結果沒有影響。在推理時,將左右兩部分的結果加在一起,即h=Wx BAx=(W BA)x,所以,只要將訓練完成的矩陣乘積BA跟原本的權重矩陣W加到一起作為新權重參數替換原始預訓練語言模型的W即可,不會增加額外的運算資源。 LoRA 的最大優勢是訓練速度更快,使用的記憶體更少。

本文進行在地化部署實務的Alpaca-lora模型就是Alpaca模型的低階適配版本。本文將對Alpaca-lora模型本地化部署、微調和推理過程進行實踐並描述相關步驟。


GPU伺服器環境部署

本文進行部署的GPU伺服器具有4塊獨立的GPU,型號是P40,單一P40算力相當於60個同等主頻CPU的算力。

GPT大語言模式Alpaca-lora在地化部署實踐

如果只是測試覺得實體卡太貴了,也可以使用「平替版」-GPU雲端伺服器。相較於實體卡,用GPU雲端伺服器搭建不僅能保障彈性的高效能運算,還有這些好處──

  • 高性價比:按時計費,一小時才十幾元,可以隨時依照自己的需求調配;靈活資源管理、可擴展性、彈性伸縮等雲端運算優勢,根據業務或個人訓練的需要,快速調整運算資源,滿足模型的訓練與部署需求;
  • 開放性:雲端運算的開放性讓使用者更容易進行資源的共享和協作,為AI模型的研究和應用提供了更廣泛的合作機會;
  • 豐富的API和SDK:雲端運算廠商提供了豐富的API和SDK,讓使用者能夠輕鬆存取雲端平台的各種服務和功能,進行客製化開發和整合。

京東雲端的GPU雲端主機最近在做618活動,非常划算
https://www.php.cn/link/5d3145e1226fd39ee3b3039bfa90c95d

GPT大語言模式Alpaca-lora在地化部署實踐

拿到GPU伺服器 我們首先就是安裝顯示卡驅動和CUDA驅動(是顯示卡廠商NVIDIA推出的運算平台。CUDA是一種由NVIDIA推出的通用平行運算架構,該架構使GPU能夠解決複雜的計算問題)。

顯示卡驅動程式需要到NVIDIA的官方網站去尋找對應的顯示卡型號和適合的CUDA版本,下載位址:
https://www.nvidia.com/Download/index.aspx ,選擇對應的顯示卡和CUDA版本就可以下載驅動檔啦。

GPT大語言模式Alpaca-lora在地化部署實踐


我下載的檔案是

NVIDIA-Linux-x86_64-515.105.01.run,這是一個可執行文件,用root權限執行即可,注意安裝驅動過程中不能有運行的nvidia進程,如果有需要全部kill掉,否則會安裝失敗,如下圖:

GPT大語言模式Alpaca-lora在地化部署實踐

然後一路next,沒有報錯的話就安裝成功啦。為了後續查看顯示卡資源情況,最好還是再安裝一個顯示卡監控工具,例如nvitop,用pip install nvitop即可,這裡注意,由於不同伺服器python版本有差異,最好安裝anaconda部署自己的私有python空間,防止運行時報各種奇怪的錯誤,具體步驟如下:

1.安裝anaconda 下載方式:wget
https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64 .sh。安裝指令: sh Anaconda3-5.3.0-Linux-x86_64.sh 每個安裝步驟都輸入“yes”,最後conda init後完成安裝,這樣每次進入安裝使用者的session,都會直接進入自己的python環境。如果安裝最後一步選擇no,即不進行conda init,則後續可以透過source /home/jd_ad_sfxn/anaconda3/bin/activate來進入私有的python環境。

2.安裝s​​etuptools 接下來需要安裝打包和分發工具setuptools,下載地址:wget
https://files.pythonhosted.org/packages/26/e5/9897eee1100b166a61f91b68528cb692288886d 0.5.0 .zip 安裝指令: unzip setuptools-40.5.0.zip cd setuptools-40.5.0/ python setup.py install

3.安裝pip 下載位址:wget
https://files.pythonhosted. org/packages/45/ae/8a0ad77defb7cc903f09e551d88b443304a9bd6e6f124e75c0fbbf6de8f7/pip-18.1.tar.gz 安裝指令: tar -fbbf6de8f7/pip-18.1.tar。

至此,漫長的安裝過程終於告一段落了,我們現在創建一個私有的python空間,執行

conda create -n alpaca pythnotallow=3.9conda activate alpaca
然後驗證一下,如下圖所示說明已經創建成功啦。

GPT大語言模式Alpaca-lora在地化部署實踐

模型訓練

上文已經把GPU伺服器的基礎環境安裝好了,下面我們就要開始刺激的模型訓練了(激動ing ),在訓練之前我們首先需要下載模型文件,下載地址:

https://github.com/tloen/alpaca-lora ,整個模型都是開源的,真好!先把模型檔下載到本地,執行git clone https://github.com/tloen/alpaca-lora.git .。

本地會有資料夾alpaca-lora,然後cd alpaca-lora到資料夾內部執行

pip install -r requirements.txt
這個過程可能會比較慢,需要從網路下載大量的依賴包,過程中可能也會報各種包衝突,依賴沒有等問題,這塊只能見招拆招,缺什麼裝什麼(解決包依賴和版本衝突確實是個頭疼的事情,不過這步做不好,模型也跑不起來,所以只能耐心的一點一點解決),這裡痛苦的過程就不贅述了,因為不同機器可能遇到的問題也不太一樣,參考意義不是很大。

如果安裝過程執行完成,並沒再有報錯信息,並提示Successful compeleted,那麼恭喜你啦,萬裡長徵已經走完一半啦,你已經離成功很近了,再堅持一下下就很有可能成功啦:)。

由於我們的目標是對模型進行fine-tuning,所以我們得有一個fine-tuning的目標,由於原始模型對中文支持並不好,所以我們的目標就有了,用中文語料庫讓模型更好的支援中文,這個社群也給我準備好了,我們直接下載中文的語料庫就好了,在本地執行wget

https://github.com/LC1332/Chinese-alpaca-lora/ blob/main/data/trans_chinese_alpaca_data.json?raw=true ,將後面模型訓練用到的語料庫下載到alpaca-lora根目錄下(後面方便使用)。

語料庫的內容就是很多的三元組(instruction,input,output,如下圖),instruction就是指令,讓模型做什麼事,input就是輸入,output是模型的輸出,根據指令和輸入,訓練模型應該輸出什麼訊息,讓模型能更好的適應中文。

GPT大語言模式Alpaca-lora在地化部署實踐

好的,到现在为止,万里长征已经走完2/3了,别着急训练模型,我们现在验证一下GPU环境和CUDA版本信息,还记得之前我们安装的nvitop嘛,现在就用上了,在本地直接执行nvitop,我们就可以看到GPU环境和CUDA版本信息了,如下图:

GPT大語言模式Alpaca-lora在地化部署實踐


在这里我们能够看到有几块显卡,驱动版本和CUDA版本等信息,当然最重要的我们还能看到GPU资源的实时使用情况。

怎么还没到模型训练呢,别着急呀,这就来啦。

我们先到根目录下然后执行训练模型命令:

如果是单个GPU,那么执行命令即可:

python finetune.py \--base_model 'decapoda-research/llama-7b-hf' \--data_path 'trans_chinese_alpaca_data.json' \--output_dir './lora-alpaca-zh'

如果是多个GPU,则执行:

WORLD_SIZE=2 CUDA_VISIBLE_DEVICES=0,1 torchrun \--nproc_per_node=2 \--master_port=1234 \finetune.py \--base_model 'decapoda-research/llama-7b-hf' \--data_path 'trans_chinese_alpaca_data.json' \--output_dir './lora-alpaca-zh'

如果可以看到进度条在走,说明模型已经启动成功啦。

GPT大語言模式Alpaca-lora在地化部署實踐

在模型训练过程中,每迭代一定数量的数据就会打印相关的信息,会输出损失率,学习率和代信息,如上图所示,当loss波动较小时,模型就会收敛,最终训练完成。

我用的是2块GPU显卡进行训练,总共训练了1904分钟,也就是31.73个小时,模型就收敛了,模型训练是个漫长的过程,所以在训练的时候我们可以适当的放松一下,做点其他的事情:)。

GPT大語言模式Alpaca-lora在地化部署實踐

模型推理

模型训练好后,我们就可以测试一下模型的训练效果了,由于我们是多个GPU显卡,所以想把模型参数加载到多个GPU上,这样会使模型推理的更快,需要修改

generate.py 文件,添加下面这样即可。

GPT大語言模式Alpaca-lora在地化部署實踐

然后我们把服务启起来,看看效果,根目录执行:

python generate.py --base_model "decapoda-research/llama-7b-hf" \--lora_weights './lora-alpaca-zh' \--load_8bit

其中./lora-alpaca-zh目录下的文件,就是我们刚刚fine tuning模型训练的参数所在位置,启动服务的时候把它加载到内存(这个内存指的是GPU内存)里面。

如果成功,那么最终会输出相应的IP和Port信息,如下图所示:

GPT大語言模式Alpaca-lora在地化部署實踐

我们可以用浏览器访问一下看看,如果能看到页面,就说明服务已经启动成功啦。

GPT大語言模式Alpaca-lora在地化部署實踐

激动ing,费了九牛二虎之力,终于成功啦!!

因为我们目标是让模型说中文,所以我们测试一下对中文的理解,看看效果怎么样?

GPT大語言模式Alpaca-lora在地化部署實踐

GPT大語言模式Alpaca-lora在地化部署實踐


简单的问题,还是能给出答案的,但是针对稍微复杂一点的问题,虽然能够理解中文,但是并没有用中文进行回答,训练后的模型还是不太稳定啊。

在推理的时候我们也可以监控一下GPU的变化,可以看到GPU负载是比较高的,说明GPU在进行大量的计算来完成推理。

GPT大語言模式Alpaca-lora在地化部署實踐

总结

1.效果问题:由于语料库不够丰富,所以目前用社区提供的语料库训练的效果并不是很好,对中文的理解力有限,如果想训练出能够执行特定领域的任务,则需要大量的语料支持,同时训练时间也会更长;

2. 推理時間問題:由於目前部署的GPU伺服器有4塊GPU,能夠執行的有3塊,基於3塊GPU,在推理的時候還是比較吃力的,執行一次交互需要大概30s-1min,如果達到chatGPT那樣即時返回,則需要大量的算力進行支持,可以反推,chatGPT後台肯定是有大集群算力支持的,所以如果想做成服務,成本投入是需要考慮的一個問題;

3. 中文亂碼問題:在input為中文的時候,有時候返回結果會亂碼,懷疑跟切詞有關,由於中文的編碼問題,中文不像英文以空格區分,所以可能會有一定的亂碼情況產生,呼叫open AI 的API也會有這種情況,後面看看社區是否有相應解決辦法;

4.模型選擇問題:由於目前GPT社區比較活躍,模型的產生和變化也是日新月異,由於時間倉促,目前只調研了alpaca-lora模型的本地化部署,後面針對實際落地的應用應該也會有更好的更低成本的落地方案,需要持續跟進社區的發展,選擇合適的開源方案。

京東雲P40型號GPU的【ChatGLM語言模型】實務篇詳見:https://www.php.cn/link/f044bd02e4fe1aa3315ace7645f8597a

#作者:京東零售駱永健

內容來源:京東雲端開發者社群

以上是GPT大語言模式Alpaca-lora在地化部署實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除