手把手教你在微軟云-Azure搭建私有chatGPT
背景
開源模型大多是基于大廠預(yù)訓(xùn)練模型演變而來,即使是推理效果最好的Vicuna也是才能達(dá)到90分(以chatGPT答案作為100分),其他開源模型推理效果與chatGPT相比,更是相形見絀。同時開源模型的單機(jī)部署和維護(hù)也是一項非常繁重的工作,GPU服務(wù)器需要安裝驅(qū)動和各種依賴包,解決包沖突會讓人痛不欲生(經(jīng)歷過才會懂)。那么有沒有辦法既能享受chatGPT的推理效果,同時又不用自己手動去進(jìn)行單機(jī)環(huán)境部署,還能進(jìn)行模型fine-tuning,訓(xùn)練自己特定領(lǐng)域內(nèi)的模型呢?答案是肯定的,微軟云-Azure就提供了這樣的服務(wù)(感覺天一下子就亮了有木有)。Azure提供了openAI服務(wù),我們可以在Azure上完成一鍵部署GPT3.5(chatGPT模型底座)模型(GPT4模型也可以申請使用,但需要填寫使用申請單,默認(rèn)不開放),同時支持上傳訓(xùn)練數(shù)據(jù),對部署的模型進(jìn)行fine-tuning,讓模型獲取特定領(lǐng)域的知識,這樣我們就可以在Azure上得到了一個推理效果堪比chatGPT,同時又有特定領(lǐng)域知識的私有chatGPT模型了(是不是迫不及待了,那我們現(xiàn)在就開始部署私有chatGPT模型之旅吧)。
操作步驟
原生模型部署及使用
首先我們先訪問Azure的域名: https://azure.microsoft.com/zh-cn/ ,有時候加載會有點(diǎn)慢,需要耐心等待一下,打開之后右上角有個“登錄”按鈕,如果沒有Azure賬號的話需要先注冊一下(這里略過注冊步驟)。

注冊完之后,我們登錄,默認(rèn)彈出的訂閱信息是我們賬戶的余額信息(時刻提醒我們需要充值了?。。?Azure上所有服務(wù)都是收費(fèi)的,有錢就是好?。。。?,默認(rèn)顯示的是日元,可能是服務(wù)器在日本的原因吧。

然后我們選擇“更多服務(wù)”,就會顯示所有提供的服務(wù)了,這里面我們選擇“Azure openAI”。

我們就進(jìn)入到openAI的實(shí)際操作頁面了。

默認(rèn)顯示的“azure-openai-whq”是我之前創(chuàng)建資源名稱,點(diǎn)擊資源名稱,可以進(jìn)入到資源詳情頁面。

其中比較重要的兩項是“資源組名稱”和“終結(jié)點(diǎn)”,由于Azure提供很多機(jī)器學(xué)習(xí)的模型和服務(wù),資源組相當(dāng)于是一個命名空間,方便資源和服務(wù)的管理。“終結(jié)點(diǎn)”是我們后續(xù)模型部署成功后,通過api訪問Azure接口時的域名,它的組成是https://{自定義域名}+openai.azure.com,如我的自定義域名是“azure-open-whq”,那么終結(jié)點(diǎn)就是“ https://azure-open-whq.openai.azure.com ”。
點(diǎn)擊左側(cè)導(dǎo)航樹的“模型部署”,然后再點(diǎn)擊加載頁面的“管理部署”,就可以看到我們之前部署的模型了。


當(dāng)然這里我們也可以新建部署,也就是新建一個模型,這里會列出所有我們能夠創(chuàng)建的模型,gpt-35-turbo就是chatGPT的底座模型,它的功能是最全的。還有細(xì)分的其他模型,如text-ada-011模型,進(jìn)行文本信息處理的ada模型,這里ada是代號,同理還有babbage,curie和davinci,他們都是進(jìn)行文本處理的,這里模型推理效果從ada到davinci越來越好,即ada<babbage<curie<davinci ,大家發(fā)現(xiàn)規(guī)律了嘛,首字母分別是abcd,他們分別是4位科學(xué)家的名字,感興趣的同學(xué)可以自google一下是哪四位科學(xué)家。當(dāng)然嘍,模型推理效果越好,那么模型收費(fèi)肯定也是越貴的,費(fèi)用主要包括使用模型的費(fèi)用(按token收費(fèi)),訓(xùn)練模型的費(fèi)用(如果需要fine-tuning)和托管訓(xùn)練數(shù)據(jù)的費(fèi)用,費(fèi)用也是ada<babbage<curie<davinci逐漸升高的。如果沒有特別復(fù)雜的運(yùn)算和推理,只是簡單的進(jìn)行分類,為了節(jié)省成本,其實(shí)ada也是夠用的,當(dāng)然土豪是可以直接上davinci的。

然后點(diǎn)擊“在操場中打開”或者左側(cè)導(dǎo)航樹的“聊天”,就可以進(jìn)入到與GPT對話的頁面了。

進(jìn)入到聊天頁面,可以對之前部署過的模型進(jìn)行選擇,但只有聊天功能效果好的模型才會顯示在備選列表中,比如ada模型比較適合分類,聊天效果可能并不太好,就沒有在備選列表中顯示,而gpt3.5-turbo模型是顯示在備選列表中的,在會話區(qū)我們就可以正常的GPT模型進(jìn)行會話交流了,到目前位置我們所有操作都是基于web的(是不是很簡單吶)。

現(xiàn)在是通過頁面與機(jī)器人進(jìn)行交流的,那么能不能通過代碼以接口調(diào)用的方式,與機(jī)器人進(jìn)行對話呢?答案是肯定的,Azure提供了資源的訪問密鑰,在資源頁面,默認(rèn)會生成兩個密鑰,任何一個都是可以使用的,提供兩個密鑰的原因是可以進(jìn)行無感升級,同時也可以隨時重新生成密鑰。

我們現(xiàn)在利用生成的密鑰,測試一下在本地通過接口調(diào)用的方式訪問Azure的openAI服務(wù)。python的代碼如下,這里選擇的執(zhí)行引擎是ada引擎,解決的是一個分類問題。

提示詞如下:
#首先提示模型需要做什么,它需要做的是根據(jù)headline中的文字描述,將內(nèi)容進(jìn)行分類,分類的結(jié)果是商業(yè)、技術(shù)、整治、運(yùn)動和娛樂
Classify the following news headline into 1 of the following categories: Business, Tech, Politics, Sport, Entertainment
#根據(jù)headline1的描述,輸出的category是娛樂,這個是給模型的提示
#headline1的翻譯:唐娜·史蒂芬森 (Donna Steffensen) 正在烹飪一種新的完美菜肴?;ヂ?lián)網(wǎng)上最受歡迎的烹飪大師有一本熱門新書和全新視角
Headline 1: Donna Steffensen Is Cooking Up a New Kind of Perfection. The Internet's most beloved cooking guru has a buzzy new book and a fresh new perspective
Category: Entertainment
#當(dāng)我們給模型輸入headline2的時候,讓模型推理category是什么?
#headline2的翻譯:大型零售商宣布計劃關(guān)閉 100 多家商店
Headline 2: Major Retailer Announces Plans to Close Over 100 Stores
Category:
我們現(xiàn)在執(zhí)行python代碼,卡看headline2的category的輸出是不是與實(shí)際內(nèi)容相符。

顯然headline2的描述是business相關(guān)的,模型輸出的結(jié)果也是Business,符合預(yù)期,模型是能夠根據(jù)提示,對描述信息進(jìn)行正確的分類。
模型fine-tuning
我們在使用一個模型的時候,如果想使模型的推理效果好,有時候需要進(jìn)行示例學(xué)習(xí)(也就是少樣本學(xué)習(xí),常說的few-shot),也就是讓模型模仿我們的操作進(jìn)行推理,這樣做的好處是使模型的推理更加精準(zhǔn),但由于模型使用是按token進(jìn)行收費(fèi)的,如果每次使用模型推理都輸入示例成本會更高。另外示例學(xué)習(xí)也不能讓模型具有一個全局視角去學(xué)習(xí)特定領(lǐng)域知識,效果也不如fine-tuning好,示例學(xué)習(xí)和fine-tuning效果對比如下。

所以如果想長期使用模型進(jìn)行推理,fine-tuning是個更好的選擇。Azure也提供了對原生模型進(jìn)行fine-tuning的功能,下面我們就來一步一步開始訓(xùn)練屬于我們自己的模型。首先我們可以先看一下Azure給的報價單,模型fine-tuning,托管和使用都是需要收費(fèi)的,同樣推理效果越好的模型收費(fèi)標(biāo)準(zhǔn)也就越高。



首先我們準(zhǔn)備需要進(jìn)行訓(xùn)練的數(shù)據(jù),訓(xùn)練數(shù)據(jù)的格式必須是jsonl的,也就是每行是一個json串,openai提供了生成jsonl的工具,用法為:
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>其中 <LOCAL_FILE>,支持CSV、TSV、XLSX、JSON 和 JSONL格式,只要文件中的數(shù)據(jù)格式是包含 prompt 和 completion 列或關(guān)鍵字就行。
然后我們選擇“Data files”將我們生成的文件上傳到Azure云端。

選擇“上傳新的數(shù)據(jù)集”,直接拖動就可以傳到云端,這里面我上傳了兩個數(shù)據(jù)集,一個是訓(xùn)練數(shù)據(jù)集traning.jsonl,一個是驗(yàn)證數(shù)據(jù)集validation.jsonl,上傳后會生成兩個文件的ID,這個ID后續(xù)會用到,我們在進(jìn)行模型訓(xùn)練的時候,需要在腳本中指定文件的ID,這樣就可以在Azure云端找到這個文件作為模型的輸入。

由于我們的目標(biāo)是跑通整個鏈路,所以這塊訓(xùn)練數(shù)據(jù)集沒有很大,就有3條數(shù)據(jù)。

編寫進(jìn)行模型訓(xùn)練的腳本(Azure上不提供模型訓(xùn)練的頁面操作,這塊需要自己寫腳本),具體內(nèi)容如下,這里需要提供我們的資源key,也就是訪問的鑒權(quán)key,還有進(jìn)行模型訓(xùn)練用到的file ID,還有一些模型訓(xùn)練的超參數(shù)(超參數(shù)的設(shè)定需要根據(jù)具體的數(shù)據(jù)集,模型以及經(jīng)驗(yàn)進(jìn)行設(shè)定,這里不贅述)。

如果能夠生成具體的job id信息,就說明訓(xùn)練的job啟動成功了。

模型訓(xùn)練的過程中,我們可以在頁面上看到執(zhí)行狀態(tài)(“正在運(yùn)行”,“異?!被蛘摺耙殉晒Α钡龋?。

訓(xùn)練如果順利,正常結(jié)束的話,會生成訓(xùn)練報告,包含訓(xùn)練時長,賬單等詳細(xì)的信息。



自定義模型部署及使用
訓(xùn)練好模型后,我們就可以部署我們的自定義模型啦(迫不及待的想看看訓(xùn)練后的效果如何吧),訓(xùn)練完后顯示的是“部署”按鈕,點(diǎn)擊后模型部署成功,會變成“轉(zhuǎn)到部署”,再點(diǎn)擊“轉(zhuǎn)到部署”,就能看到我們的自定義模型了。

我們看到自定義模型已經(jīng)是部署成功的狀態(tài)了。

那么我們看看訓(xùn)練之后的模型效果如何吧。很遺憾,結(jié)果并不是我們想要的訓(xùn)練數(shù)據(jù)里的“coffee”,而是“Human,Tells”,很有職業(yè)范,哈哈。原因也很簡單,我們的訓(xùn)練數(shù)據(jù)太少了,而且場景太通用,所以最終得到的答案比較隨機(jī)了。

那么需要多少樣本才能使模型的推理效果達(dá)到我們的預(yù)期呢,通常情況下至少需要幾百到上千條的樣本才能使模型具備特定領(lǐng)域的認(rèn)知,當(dāng)然樣本越多訓(xùn)練的效果也就越好,在微軟云Azure上訓(xùn)練模型收費(fèi)也是不低的,如果模型更新頻次不高,我們可以一勞永逸一次準(zhǔn)備盡量多的樣本,也可以少量多次不斷對模型進(jìn)行迭代訓(xùn)練,這個可根據(jù)實(shí)際情況進(jìn)行選擇,如下是訓(xùn)練樣本多少與模型推理準(zhǔn)確率之間的關(guān)系,可供參考(來源于網(wǎng)絡(luò))。

總結(jié)
至此,我們已經(jīng)在微軟云Azure上把整個大模型從創(chuàng)建,訓(xùn)練,部署再到驗(yàn)證整個鏈路都已經(jīng)走了一遍,針對特定領(lǐng)域知識的獲取是最關(guān)鍵的一步,如果想讓大模型有比較理想的推理效果,需要針對特定領(lǐng)域的知識進(jìn)行精確細(xì)致的總結(jié),這可能需要特性領(lǐng)域的專家人員花時間對特性領(lǐng)域的知識進(jìn)行結(jié)構(gòu)化的整理,然后作為模型fine-tuning的輸入,同時為了避免由于預(yù)訓(xùn)練樣本稀釋模型訓(xùn)練的樣本,訓(xùn)練樣本不能太少,理論上樣本越多推理效果越好。
后續(xù)工作
1.訓(xùn)練特定領(lǐng)域的大模型:針對特定領(lǐng)域的知識進(jìn)行整理,訓(xùn)練特定領(lǐng)域的大模型;
2.大模型在特定場景落地:尋找大模型與現(xiàn)有業(yè)務(wù)結(jié)合點(diǎn),將簡單重復(fù)的工作交給大模型進(jìn)行處理,降本增效;
3.評估模型推理效果:尋找更多評估模型和提升模型效果的方法,不斷優(yōu)化模型的推理準(zhǔn)確率;
4.擇優(yōu)選取模型:測試從ada到davinci模型的優(yōu)劣勢,針對特定場景擇優(yōu)選取模型進(jìn)行使用;
5.prompt工程探索:提示詞的好壞,也可能最終決定模型推理結(jié)果的好壞,針對如何進(jìn)行提示詞優(yōu)化后續(xù)也需要進(jìn)行不斷探索和總結(jié)。