GPT大語言模式Alpaca-lora在地化部署實踐
模型介紹
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 與預訓練語言模型的參數疊加。
用隨機高斯分佈初始化 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的算力。
如果只是測試覺得實體卡太貴了,也可以使用「平替版」-GPU雲端伺服器。相較於實體卡,用GPU雲端伺服器搭建不僅能保障彈性的高效能運算,還有這些好處──
- 高性價比:按時計費,一小時才十幾元,可以隨時依照自己的需求調配;靈活資源管理、可擴展性、彈性伸縮等雲端運算優勢,根據業務或個人訓練的需要,快速調整運算資源,滿足模型的訓練與部署需求;
- 開放性:雲端運算的開放性讓使用者更容易進行資源的共享和協作,為AI模型的研究和應用提供了更廣泛的合作機會;
- 豐富的API和SDK:雲端運算廠商提供了豐富的API和SDK,讓使用者能夠輕鬆存取雲端平台的各種服務和功能,進行客製化開發和整合。
京東雲端的GPU雲端主機最近在做618活動,非常划算
https://www.php.cn/link/5d3145e1226fd39ee3b3039bfa90c95d
拿到GPU伺服器 我們首先就是安裝顯示卡驅動和CUDA驅動(是顯示卡廠商NVIDIA推出的運算平台。CUDA是一種由NVIDIA推出的通用平行運算架構,該架構使GPU能夠解決複雜的計算問題)。
顯示卡驅動程式需要到NVIDIA的官方網站去尋找對應的顯示卡型號和適合的CUDA版本,下載位址:
https://www.nvidia.com/Download/index.aspx ,選擇對應的顯示卡和CUDA版本就可以下載驅動檔啦。
我下載的檔案是
NVIDIA-Linux-x86_64-515.105.01.run,這是一個可執行文件,用root權限執行即可,注意安裝驅動過程中不能有運行的nvidia進程,如果有需要全部kill掉,否則會安裝失敗,如下圖:
然後一路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.安裝setuptools 接下來需要安裝打包和分發工具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。
conda create -n alpaca pythnotallow=3.9conda activate alpaca
https://github.com/tloen/alpaca-lora ,整個模型都是開源的,真好!先把模型檔下載到本地,執行git clone https://github.com/tloen/alpaca-lora.git .。
pip install -r requirements.txt
https://github.com/LC1332/Chinese-alpaca-lora/ blob/main/data/trans_chinese_alpaca_data.json?raw=true ,將後面模型訓練用到的語料庫下載到alpaca-lora根目錄下(後面方便使用)。
好的,到现在为止,万里长征已经走完2/3了,别着急训练模型,我们现在验证一下GPU环境和CUDA版本信息,还记得之前我们安装的nvitop嘛,现在就用上了,在本地直接执行nvitop,我们就可以看到GPU环境和CUDA版本信息了,如下图:
在这里我们能够看到有几块显卡,驱动版本和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'
如果可以看到进度条在走,说明模型已经启动成功啦。
在模型训练过程中,每迭代一定数量的数据就会打印相关的信息,会输出损失率,学习率和代信息,如上图所示,当loss波动较小时,模型就会收敛,最终训练完成。
我用的是2块GPU显卡进行训练,总共训练了1904分钟,也就是31.73个小时,模型就收敛了,模型训练是个漫长的过程,所以在训练的时候我们可以适当的放松一下,做点其他的事情:)。
模型推理
模型训练好后,我们就可以测试一下模型的训练效果了,由于我们是多个GPU显卡,所以想把模型参数加载到多个GPU上,这样会使模型推理的更快,需要修改
generate.py 文件,添加下面这样即可。
然后我们把服务启起来,看看效果,根目录执行:
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信息,如下图所示:
我们可以用浏览器访问一下看看,如果能看到页面,就说明服务已经启动成功啦。
激动ing,费了九牛二虎之力,终于成功啦!!
因为我们目标是让模型说中文,所以我们测试一下对中文的理解,看看效果怎么样?
简单的问题,还是能给出答案的,但是针对稍微复杂一点的问题,虽然能够理解中文,但是并没有用中文进行回答,训练后的模型还是不太稳定啊。
在推理的时候我们也可以监控一下GPU的变化,可以看到GPU负载是比较高的,说明GPU在进行大量的计算来完成推理。
总结
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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

想像一下,一個人工智慧模型,不僅擁有超越傳統運算的能力,還能以更低的成本實現更有效率的效能。這不是科幻,DeepSeek-V2[1],全球最強開源MoE模型來了。 DeepSeek-V2是一個強大的專家混合(MoE)語言模型,具有訓練經濟、推理高效的特點。它由236B個參數組成,其中21B個參數用於啟動每個標記。與DeepSeek67B相比,DeepSeek-V2效能更強,同時節省了42.5%的訓練成本,減少了93.3%的KV緩存,最大生成吞吐量提高到5.76倍。 DeepSeek是一家探索通用人工智

AI,的確正在改變數學。最近,一直十分關注這個議題的陶哲軒,轉發了最近一期的《美國數學學會通報》(BulletinoftheAmericanMathematicalSociety)。圍繞著「機器會改變數學嗎?」這個話題,許多數學家發表了自己的觀點,全程火花四射,內容硬核,精彩紛呈。作者陣容強大,包括菲爾茲獎得主AkshayVenkatesh、華裔數學家鄭樂雋、紐大電腦科學家ErnestDavis等多位業界知名學者。 AI的世界已經發生了天翻地覆的變化,要知道,其中許多文章是在一年前提交的,而在這一

谷歌力推的JAX在最近的基準測試中表現已經超過Pytorch和TensorFlow,7項指標排名第一。而且測試並不是JAX性能表現最好的TPU上完成的。雖然現在在開發者中,Pytorch依然比Tensorflow更受歡迎。但未來,也許有更多的大型模型會基於JAX平台進行訓練和運行。模型最近,Keras團隊為三個後端(TensorFlow、JAX、PyTorch)與原生PyTorch實作以及搭配TensorFlow的Keras2進行了基準測試。首先,他們為生成式和非生成式人工智慧任務選擇了一組主流

波士頓動力Atlas,正式進入電動機器人時代!昨天,液壓Atlas剛「含淚」退出歷史舞台,今天波士頓動力就宣布:電動Atlas上崗。看來,在商用人形機器人領域,波士頓動力是下定決心要跟特斯拉硬剛一把了。新影片放出後,短短十幾小時內,就已經有一百多萬觀看。舊人離去,新角色登場,這是歷史的必然。毫無疑問,今年是人形機器人的爆發年。網友銳評:機器人的進步,讓今年看起來像人類的開幕式動作、自由度遠超人類,但這真不是恐怖片?影片一開始,Atlas平靜地躺在地上,看起來應該是仰面朝天。接下來,讓人驚掉下巴

本月初,來自MIT等機構的研究者提出了一種非常有潛力的MLP替代方法—KAN。 KAN在準確性和可解釋性方面表現優於MLP。而且它能以非常少的參數量勝過以更大參數量運行的MLP。例如,作者表示,他們用KAN以更小的網路和更高的自動化程度重現了DeepMind的結果。具體來說,DeepMind的MLP有大約300,000個參數,而KAN只有約200個參數。 KAN與MLP一樣具有強大的數學基礎,MLP基於通用逼近定理,而KAN基於Kolmogorov-Arnold表示定理。如下圖所示,KAN在邊上具

特斯拉機器人Optimus最新影片出爐,已經可以在工廠裡打工了。正常速度下,它分揀電池(特斯拉的4680電池)是這樣的:官方還放出了20倍速下的樣子——在小小的「工位」上,揀啊揀啊揀:這次放出的影片亮點之一在於Optimus在廠子裡完成這項工作,是完全自主的,全程沒有人為的干預。而且在Optimus的視角之下,它還可以把放歪了的電池重新撿起來放置,主打一個自動糾錯:對於Optimus的手,英偉達科學家JimFan給出了高度的評價:Optimus的手是全球五指機器人裡最靈巧的之一。它的手不僅有觸覺

這篇論文探討了在自動駕駛中,從不同視角(如透視圖和鳥瞰圖)準確檢測物體的問題,特別是如何有效地從透視圖(PV)到鳥瞰圖(BEV)空間轉換特徵,這一轉換是透過視覺轉換(VT)模組實施的。現有的方法大致分為兩種策略:2D到3D和3D到2D轉換。 2D到3D的方法透過預測深度機率來提升密集的2D特徵,但深度預測的固有不確定性,尤其是在遠處區域,可能會引入不準確性。而3D到2D的方法通常使用3D查詢來採樣2D特徵,並透過Transformer學習3D和2D特徵之間對應關係的注意力權重,這增加了計算和部署的

寫在前面項目連結:https://nianticlabs.github.io/mickey/給定兩張圖片,可以透過建立圖片之間的對應關係來估計它們之間的相機姿態。通常,這些對應關係是二維到二維的,而我們估計的姿態在尺度上是不確定的。一些應用,例如隨時隨地實現即時增強現實,需要尺度度量的姿態估計,因此它們依賴外部的深度估計器來恢復尺度。本文提出了MicKey,這是一個關鍵點匹配流程,能夠夠預測三維相機空間中的度量對應關係。透過學習跨影像的三維座標匹配,我們能夠在沒有深度測試的情況下推斷度量相對
