前言
看了那么多chatGPT的文章,作為一名不精通算法的開(kāi)發(fā),也對(duì)大模型心癢癢。但想要部署自己的大模型,且不說(shuō)沒(méi)有算法相關(guān)的經(jīng)驗(yàn)了,光是大模型占用的算力資源,手頭的個(gè)人電腦其實(shí)也很難獨(dú)立部署。就算使用算法壓縮后的大模型,部署在個(gè)人電腦上,還要忍受極端緩慢的計(jì)算速度以及與chatGPT相差甚遠(yuǎn)的模型效果。
有什么辦法能夠部署屬于我們自己的大模型呢?其實(shí)很簡(jiǎn)單,我們將目標(biāo)拆解一下:
- 有編程基礎(chǔ):作為一個(gè)合格的程序員,這應(yīng)該是必備素質(zhì)。
- 有足夠的算力資源:專業(yè)GPU自己買不起怎么辦,阿里云最近推出了”飛天“免費(fèi)試用計(jì)劃,AI模型訓(xùn)練,GPU資源免費(fèi)用!
- 要懂大模型:真的要精通大模型嗎?不需要。如果只是簡(jiǎn)單的模型部署和使用,現(xiàn)在的開(kāi)源模型部署已經(jīng)非常簡(jiǎn)單化,只需要掌握基礎(chǔ)的Python知識(shí)就可以。
隨著chatGPT的火爆,許多開(kāi)源愛(ài)好者涌入AI領(lǐng)域,將許多與大型模型相關(guān)的工具進(jìn)行進(jìn)一步封裝,使得我們這些AI初學(xué)者也能夠用很少的工作量搭建一個(gè)私有大型語(yǔ)言模型。而且,有許多成熟的工具可供我們使用,可以幫助我們進(jìn)一步使用和微調(diào)大型模型。
因此,本文是為AI初學(xué)者們(包括我自己)編寫(xiě)的保姆級(jí)大型模型部署和使用指南?,F(xiàn)在正值阿里云免費(fèi)試用計(jì)劃,我們可以不花一分錢就可以體驗(yàn)部署自己的大型模型的樂(lè)趣。
下圖便是我通過(guò)阿里云免費(fèi)申請(qǐng)的PAI平臺(tái)資源(顯卡是Nvidia V100),部署的清華大學(xué)chatGLM對(duì)話大模型,在網(wǎng)頁(yè)端和手機(jī)端都能直接體驗(yàn):
電腦端
手機(jī)端
下文圍繞如何手把手搭建一個(gè)大模型Demo展開(kāi),文章主要目錄:
- 領(lǐng)取阿里云免費(fèi)使用資源
- 創(chuàng)建并使用PAI平臺(tái)實(shí)例
- 部署清華ChatGLM大模型
- 加餐:免費(fèi)額度用量查詢
- 總結(jié)和展望
領(lǐng)取阿里云免費(fèi)使用資源
免費(fèi)試用活動(dòng)頁(yè)
https://free.aliyun.com/
只要沒(méi)有申請(qǐng)過(guò)PAI-DSW資源的新老用戶皆可申請(qǐng)5000CU的免費(fèi)額度,3個(gè)月內(nèi)使用。
至于5000CU能用多久,和實(shí)際申請(qǐng)實(shí)例的性能相關(guān),在下面會(huì)講解。
創(chuàng)建并使用PAI平臺(tái)實(shí)例
官方有PAI-DSW使用教程,教你如何用領(lǐng)取的免費(fèi)資源搭建一個(gè)Stable Diffusion來(lái)做AI畫(huà)圖,如果對(duì)SD感興趣,可以按照官方教程實(shí)踐。
https://help.aliyun.com/document_detail/615220.html
我們領(lǐng)取額度后,秒到賬。之后在阿里云頁(yè)面內(nèi)搜索PAI平臺(tái),點(diǎn)擊立即開(kāi)通,開(kāi)通PAI控制臺(tái)。
開(kāi)通時(shí)的頁(yè)面沒(méi)有截圖,其中有一些可選的開(kāi)通項(xiàng),比如NAS,比如網(wǎng)關(guān)等,可以按照自己需求選取,比如希望保存自己的模型,那可以關(guān)聯(lián)NAS資源。我當(dāng)時(shí)沒(méi)有選其他資源,僅開(kāi)通了PAI,這樣沒(méi)有額外的收費(fèi)。
隨后進(jìn)入控制臺(tái),創(chuàng)建DSW實(shí)例。
這里選取資源,注意選擇GPU資源,并選擇支持資源包抵扣的資源。比如下圖的ecs.gn6v-c8g1.2xlarg??梢钥吹剿麄兊膬r(jià)格里,寫(xiě)明了每小時(shí)消耗的CU,你可以大致計(jì)算一下,5000CU可以用多久,ecs.gn6v-c8g1.2xlarg這個(gè)型號(hào)可以跑333小時(shí),大概連續(xù)13天。
系統(tǒng)可以任意選擇,本文為了部署chatGLM,選擇pytorch1.12
當(dāng)然,中間你可以隨時(shí)停止機(jī)器,就不會(huì)繼續(xù)扣費(fèi)。注意,這里的機(jī)器,是只有系統(tǒng)盤的,如果停止了機(jī)器,掛載的系統(tǒng)盤會(huì)被回收,你在上面下載的各種文件,模型,都會(huì)回收掉。你重新啟動(dòng),是新的系統(tǒng)盤,文件需要重新下載。(別問(wèn)我怎么知道的- -!)
創(chuàng)建完成后,點(diǎn)擊打開(kāi),就進(jìn)入了交互式的Web頁(yè)面,可以開(kāi)始你的模型開(kāi)發(fā)之旅。
部署清華ChatGLM大模型
上面已經(jīng)講完了資源的申請(qǐng)和實(shí)例的創(chuàng)建、使用,之后小伙伴們可以自行發(fā)揮,部署自己的大模型(或者任何AI相關(guān)資源)。本文后半部分介紹一下我自己折騰部署ChatGLM對(duì)話大模型的過(guò)程,給完全不了解大模型的小伙伴打個(gè)樣。
ChatGLM代碼倉(cāng)庫(kù):
https://github.com/THUDM/ChatGLM-6B
大家完全可以按照官方文檔自行部署,忽略我下面的教程。也可以按照我下方的流程來(lái)操作,避免再把我踩得坑再踩一遍。
下載模型
由于模型較大(13G左右),我們最好先把模型拉到本地,再運(yùn)行。
當(dāng)然,如果你也可以不下載離線模型,直接在運(yùn)行時(shí)拉取模型文件。
模型文件倉(cāng)庫(kù):
https://huggingface.co/THUDM/chatglm-6b
下載模型倉(cāng)庫(kù),需要安裝Git LFS(Large File Storage),它用來(lái)拉去Git倉(cāng)庫(kù)中的大型文件,比如這次用到的模型bin文件。
由于我們申請(qǐng)的系統(tǒng)正好是Ubuntu,在Ubuntu下安裝Git LFS,可以使用如下命令:
sudo apt-get update
sudo apt-get install git-lfs
完成后,克隆模型倉(cāng)庫(kù):
git clone https://huggingface.co/THUDM/chatglm-6b
有可能網(wǎng)絡(luò)波動(dòng),會(huì)導(dǎo)致拉取卡住,可以手動(dòng)停止掉,然后進(jìn)入文件夾內(nèi):
git lfs pull
這樣會(huì)拉取到上圖紅框中LFS文件。
部署模型
完成模型下載后,我們下載模型運(yùn)行代碼:
git clone https://github.com/THUDM/ChatGLM-6B.git
進(jìn)入文件夾,創(chuàng)建python的虛擬環(huán)境:
virtualenv -p /usr/bin/python3.8 venv
激活Python虛擬環(huán)境:
source venv/bin/activate
如果遇到如下的報(bào)錯(cuò),需要額外安裝一下python3-dev:
Could not build wheels for pycocotools, which is required to install pyproject.toml-based projects
error: command ‘/usr/bin/x86_64-linux-gnu-gcc’ failed with exit code 1
sudo apt-get install python3-dev
由于我們本地提前下載好了模型,我們修改一下代碼,使用本地模型的路徑。
將使用到的代碼中,路徑都從THUDM/chatglm-6b改為你的路徑,比如我們的模型下載在/mnt/workspace/chatglm-6b,我們將兩種部署模型的主代碼文件都修改一下,都修改為如下圖所示的路徑:
- cli_demo.py: 命令行交互界面
- web_demo.py:Web圖形交互界面
我們直接用官方提供的網(wǎng)頁(yè)版Demo來(lái)跑模型,啟動(dòng)web_demo.py,開(kāi)始模型部署,首先會(huì)將模型讀入內(nèi)存,占用約13個(gè)G。
完成后,內(nèi)存會(huì)被釋放,開(kāi)始占用GPU顯存13g。
最終,部署完成會(huì)得到服務(wù)公網(wǎng)和本地網(wǎng)址。
對(duì)話效果展示
回答還是比較快的,在我們V100顯卡的機(jī)器上,提問(wèn)后1-2秒內(nèi)就會(huì)開(kāi)始回答問(wèn)題。
以下是一個(gè)完整的對(duì)話:
我:寫(xiě)一個(gè)Java單例模式代碼
ChatGLM:以下是一個(gè)簡(jiǎn)單的Java單例模式代碼示例:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
在這個(gè)示例中,Singleton 類是一個(gè)靜態(tài)類,它有一個(gè)靜態(tài)成員變量 INSTANCE,它初始化為一個(gè)單例對(duì)象。getInstance 方法返回這個(gè)單例對(duì)象的實(shí)例,可以像任何其他方法一樣使用。
單例對(duì)象通常被用于確保一個(gè)類只有一個(gè)實(shí)例,并提供全局訪問(wèn)點(diǎn)。使用 getInstance 方法可以方便地獲取單例對(duì)象,而無(wú)需擔(dān)心多個(gè)線程同時(shí)訪問(wèn)同一個(gè)對(duì)象。
需要注意的是,在實(shí)際應(yīng)用中,單例對(duì)象應(yīng)該盡量避免被頻繁創(chuàng)建和銷毀,因?yàn)檫@樣會(huì)增加內(nèi)存開(kāi)銷和維護(hù)成本。因此,可以考慮使用懶加載(lazy loading)的方式來(lái)避免頻繁創(chuàng)建單例對(duì)象。
我:可以換一個(gè)方式實(shí)現(xiàn)嗎,比如懶漢式?
ChatGLM:當(dāng)然可以,懶漢式單例模式的具體實(shí)現(xiàn)方式如下:
- 將 Singleton 類做成一個(gè)接口。
- 實(shí)現(xiàn) Singleton 接口的類可以是多個(gè),但它們都應(yīng)該使用 getInstance 方法來(lái)獲取單例對(duì)象,并返回一個(gè)指向該對(duì)象的引用。
- 實(shí)現(xiàn) Singleton 接口的類中,可以有一個(gè)內(nèi)部類來(lái)負(fù)責(zé)創(chuàng)建單例對(duì)象。
- 內(nèi)部類應(yīng)該實(shí)現(xiàn) static 關(guān)鍵字,并使用 synchronized 關(guān)鍵字實(shí)現(xiàn)線程安全。
- 內(nèi)部類應(yīng)該覆蓋 getInstance 方法,以實(shí)現(xiàn)懶加載。例如,可以創(chuàng)建一個(gè)靜態(tài)變量來(lái)存儲(chǔ)單例對(duì)象,并在需要時(shí)才創(chuàng)建該變量。
- 在需要使用單例對(duì)象的地方,可以調(diào)用內(nèi)部類的方法,來(lái)獲取單例對(duì)象。
以下是一個(gè)懶漢式單例模式的示例代碼:
public interface Singleton {
static Singleton INSTANCE;
}
public class ConcreteSingleton implements Singleton {
private static Singleton INSTANCE = new ConcreteSingleton();
@Override
public Singleton getInstance() {
return INSTANCE;
}
}
public class LazySingleton implements Singleton {
private static Singleton INSTANCE;
private Singleton() {}
public static Singleton getInstance() {
synchronized (LazySingleton.class) {
return INSTANCE;
}
}
}
在這個(gè)示例中,ConcreteSingleton 類使用 getInstance 方法來(lái)創(chuàng)建單例對(duì)象,并使用 synchronized 關(guān)鍵字實(shí)現(xiàn)線程安全。LazySingleton 類使用 synchronized 關(guān)鍵字實(shí)現(xiàn)懶加載,只有在需要時(shí)才創(chuàng)建單例對(duì)象。
需要注意的是,懶漢式單例模式仍然需要保證線程安全,因此在使用懶加載時(shí),需要考慮線程安全問(wèn)題。此外,懶漢式單例模式可能無(wú)法充分利用類的空間,因?yàn)樗枰褂霉蚕韺?duì)象來(lái)實(shí)現(xiàn)懶加載,因此需要考慮如何提高類的性能和空間利用率。
查看免費(fèi)額度使用量
免費(fèi)的5000CU額度是有三個(gè)月時(shí)效的,超過(guò)三個(gè)月會(huì)直接過(guò)期。想要做到心中有數(shù),防止超過(guò)免費(fèi)額度導(dǎo)致扣費(fèi)。我們可以查看免費(fèi)額度的用量。在頁(yè)面右上角有“費(fèi)用”標(biāo)簽,選擇“資源實(shí)例管理”,點(diǎn)擊“資源包”,能看到你的免費(fèi)資源包的用量。
點(diǎn)擊每行中的統(tǒng)計(jì),可以看到是哪個(gè)實(shí)例在消耗CU。
總結(jié)
整個(gè)部署流程,我自己折騰下來(lái)也只花了半天時(shí)間,就能夠搭建好一個(gè)完整、可用的Demo。
不得不說(shuō),當(dāng)AI逐漸破圈,成為一個(gè)風(fēng)口時(shí),真的是豬都會(huì)飛,普通程序員上手AI的難度瞬間被拉低了一個(gè)數(shù)量級(jí)。開(kāi)源開(kāi)發(fā)者的不斷貢獻(xiàn)讓各種工具和文檔變得更容易上手。每天數(shù)以萬(wàn)計(jì)的大模型相關(guān)issue和pr,讓Github遇到了久違的繁榮。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-468645.html
在AI席卷全球的這一刻,作為一名程序員,我們無(wú)疑是對(duì)這個(gè)時(shí)代更有體感的那群人。此時(shí)此刻,非我莫屬。要充分關(guān)注AI技術(shù)的應(yīng)用場(chǎng)景和發(fā)展趨勢(shì),積極探索AI與其他領(lǐng)域的結(jié)合,為自己的職業(yè)發(fā)展和未來(lái)規(guī)劃提供更多的可能性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-468645.html
到了這里,關(guān)于零基礎(chǔ),零成本,部署一個(gè)屬于你的大模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!