日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现mini智能助理—模型训练

發(fā)布時間:2024/1/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现mini智能助理—模型训练 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景

距離上篇打帶你實現(xiàn)自己迷你chatgpt文章,到現(xiàn)在已經(jīng)過去快兩個月。自制mini chatgpt文章一直沒有更新,原因有二:1.一直在找合適體量表現(xiàn)不錯模型 2.公司內(nèi)部太卷了,沒太多時間好好梳理文章。這篇文章會給大家介紹一些大模型訓(xùn)練的概念,然后會給大家介紹pretrain model在自己數(shù)據(jù)集合上的微調(diào)學(xué)習(xí)。

大家一直在講大模型,但是感覺大家也只是在講大模型。到現(xiàn)在似乎還沒看到一篇文章介紹大模型的整個工藝流程是如何的,1.需要經(jīng)歷哪幾個步驟 2.有哪些手段學(xué)習(xí)知識 3.如何做特定域知識增強 4.如何去讓機器更懂人(適應(yīng)不同人表達(dá)方式,精準(zhǔn)給出他們想要答案;其實就是增強智能體的模糊適應(yīng)性)。

這篇文章會嘗試去回答上面幾個問題,當(dāng)然一些技術(shù)細(xì)節(jié)和技術(shù)流程沒法完全覆蓋到。原因有二:1.不同情況解決方案不同,只能講個大方向 2.公司也不允許我把所有細(xì)節(jié)公布,畢竟這個關(guān)系錢財之事。

大模型訓(xùn)練流程

1.pretain model:這個階段大部分情況是設(shè)計成無監(jiān)督或者弱監(jiān)督學(xué)習(xí),讓模型成為博覽群書有知識的通才

2.模型微調(diào):這部分主要對pretrain model做少量標(biāo)簽或者知識補充,讓通才把自己的知識結(jié)構(gòu)做梳理成為體系

3.上游任務(wù)學(xué)習(xí):這部分任務(wù)訓(xùn)練模型專業(yè)技能,讓模型在有通識時也有更強工作力,同時也會重塑通識體系

4.對齊學(xué)習(xí):淵博且有能力,但是還得讓它更懂人話,更容易和他溝通,所以需要做alignment,這部分現(xiàn)在主流是RLHF

上面的幾個過程并非只做一輪,經(jīng)常是需要做很多輪的迭代才可能讓模型有較好表現(xiàn)。上面的流程分工在開始的幾輪是順序進行,有相對明顯的界限。但是越到后面的迭代邊界越模糊,往往是同時幾種方法一起上。所以大家知道有這些流程和手段就好,不需要去糾結(jié)他們清晰邊界。

大模型訓(xùn)練手段

finetune

Fine-tune的核心思想是利用在大型數(shù)據(jù)集(例如ImageNet、COCO等)上訓(xùn)練好的預(yù)訓(xùn)練模型,然后使用較小數(shù)據(jù)集(小于參數(shù)數(shù)量)對其進行微調(diào)[3]。這樣做的優(yōu)勢在于,相對于從頭開始訓(xùn)練模型,Fine-tune可以省去大量的計算資源和時間成本,提高了計算效率,甚至可以提高準(zhǔn)確率[1][2]。

finetune是指在預(yù)訓(xùn)練模型的基礎(chǔ)上,針對特定任務(wù)進行微調(diào),以提高模型的性能。Fine-tune的具體方法有多種,但一般而言,可以通過調(diào)整模型的層數(shù)、調(diào)整學(xué)習(xí)率、調(diào)整批量大小等方式進行微調(diào)[2]。

Finetune的優(yōu)勢在于不用完全重新訓(xùn)練模型,從而提高效率,因為一般新訓(xùn)練模型準(zhǔn)確率都會從很低的值開始慢慢上升,但是finetune能夠讓我們在比較少的迭代次數(shù)之后得到一個比較好的效果。

雖然Fine-tune有很多優(yōu)勢,但也存在一些不足之處。例如,Fine-tune需要大量的數(shù)據(jù)集才能提高模型的性能,這可能會導(dǎo)致一些任務(wù)難以實現(xiàn)。此外,Fine-tune的性能很大程度上依賴于預(yù)訓(xùn)練模型的質(zhì)量和適用性,如果預(yù)訓(xùn)練模型和微調(diào)數(shù)據(jù)集之間存在差異,則Fine-tune可能無法提高模型性能[1]。

未來,Fine-tune技術(shù)將繼續(xù)得到廣泛的應(yīng)用。一方面,隨著深度學(xué)習(xí)模型的不斷發(fā)展和改進,預(yù)訓(xùn)練模型的質(zhì)量和適用性將會不斷提高,從而更加適用于Fine-tune技術(shù)。另一方面,Fine-tune技術(shù)也將有助于解決一些實際應(yīng)用中的難題,例如小數(shù)據(jù)集、數(shù)據(jù)集標(biāo)注困難等問題[1][3]。

prompt learn

Prompt Learning的基本概念:Prompt Learning是一種自然語言處理技術(shù),它通過在預(yù)訓(xùn)練模型的輸入前面加上簡短的提示文本來引導(dǎo)模型完成不同的任務(wù)[1]。這些提示文本通常是問題或指令形式,用來告訴模型如何理解輸入并生成輸出。Prompt Learning的優(yōu)點在于它可以用少量的數(shù)據(jù)完成多個任務(wù)[2]。

Multi-Prompt Learning:Multi-Prompt Learning是Prompt Learning的一種擴展形式,它可以將多個Prompt應(yīng)用于一個問題,達(dá)到數(shù)據(jù)增強或問題分解等效果[1]。常見的Multi-Prompt Learning方法包括并行方法、增強方法和組合方法[2]。并行方法將多個Prompt并行進行,并通過加權(quán)或投票的方式將多個單Prompt的結(jié)果匯總;增強方法會將一個與當(dāng)前問題相似的案例與當(dāng)前輸入一起輸入,以便模型能夠更準(zhǔn)確地進行預(yù)測;組合方法則將多個Prompt組合在一起使用,以便訓(xùn)練模型進行更復(fù)雜的任務(wù)[2]。

如何選擇合適的預(yù)訓(xùn)練模型:選擇合適的預(yù)訓(xùn)練模型是Prompt Learning的關(guān)鍵步驟之一。在選擇模型時,需要考慮以下因素:任務(wù)類型、數(shù)據(jù)集、模型大小和訓(xùn)練時間等[1]。通常情況下,預(yù)訓(xùn)練模型的大小越大,它在各種任務(wù)上的表現(xiàn)也越好,但同時需要消耗更多的計算資源[1]。

如何調(diào)整Prompt的訓(xùn)練策略:Prompt Learning的另一個關(guān)鍵步驟是如何調(diào)整Prompt的訓(xùn)練策略。可以采用全數(shù)據(jù)下單純提高模型效果的方法,也可以采用few-shot/zero-shot下使用Prompt作為輔助的方法,或者固定預(yù)訓(xùn)練模型并僅訓(xùn)練Prompt[[1]。

如上圖所示,finetune的做法pre-traning使用PLMs作為基礎(chǔ)編碼器,finetune下游任務(wù)時候添加額外的神經(jīng)層以進行特定任務(wù),調(diào)整所有參數(shù)。預(yù)訓(xùn)練和微調(diào)任務(wù)之間存在差距。

如上圖所示prompt,在pre-traing和finetuning下游任務(wù)時候使用同樣的MLM任務(wù)。彌合模型調(diào)整和預(yù)訓(xùn)練之間的差距來增強 few-shot 學(xué)習(xí)能力。使用PLMs作為基礎(chǔ)編碼器,添加額外的上下文(模板)和[MASK]位置,將標(biāo)簽投影到標(biāo)簽詞(verbalizer),縮小預(yù)訓(xùn)練和微調(diào)之間的差距。

上面是用戶評論問題轉(zhuǎn)prompt的一個流程示意圖,包括模版選擇、模版包裹、MLM輸出詞選擇、詞映射到評論正負(fù)性這個幾個流程。

模版選擇

人工模版設(shè)計包括,就是專家根據(jù)對問題的了解,設(shè)計一套模版把專用問題的解決方法轉(zhuǎn)成適合自然語言生成方式的表述方法。下面就是人針對QA問題做的結(jié)構(gòu)化模版,把QA問題轉(zhuǎn)成生成模型生成輸出的問題。

自動搜索生成prompt模版,選擇一個元模版,然基于現(xiàn)有單詞的梯度搜索生成最優(yōu)prompt模版。

利用T5對輸入的多個句子,做模版自動化生成。操作如下圖,大致步驟:1.利用已有模版訓(xùn)練一個T5模型,讓模型學(xué)會如何通過語料(把所有任務(wù)輸入拉平作為向量輸入,輸出就是最后模版)2.把任務(wù)輸入作為輸入,用訓(xùn)好的模型做模版生成

讓pre-model自動化的生成模版,思路如下,fix主pre-train模型,讓模型對有標(biāo)注的任務(wù)做訓(xùn)練,模型學(xué)習(xí)后改的輸入的句子embbeding,當(dāng)然輸入原句是不改的,只是讓模型改非輸入句子部分,最后就可以自動化的學(xué)習(xí)到最有prompt模版了。當(dāng)然這模版有可能人是看不懂的。

P-tuning v1:將提示用于輸入層(使用重新參數(shù)化)

P-tuning v2:將提示用于每個層(如前綴調(diào)整)

填入詞選擇

在做prompt任務(wù)設(shè)計適合,把任務(wù)都轉(zhuǎn)成生成模式了,所以會存在怎么把生成的東西映射到想要結(jié)果這樣一個轉(zhuǎn)化過程,這中間詞表的設(shè)計和選擇對最后結(jié)果影響很大,所以我們需要對輸出深詞作設(shè)計。

Positive: great, wonderful, good.. Negative: terrible, bad, horrible…

手動生成

人腦爆生成一波關(guān)鍵詞或者句子短語,然后利用已經(jīng)有的知識庫去召回更多相關(guān)的詞、概念或者短語句子,然后再對召回的這些詞、句子短語作排序精選。

自動化生成

和自動化模版生成很像,模型固定,用打標(biāo)注的數(shù)據(jù)來訓(xùn)練,梯度反傳時候改的是輸入embedding的詞。

delta learn

整體思路,通過增加一些控制參數(shù),來讓表現(xiàn)力強大的大模型可以可控的學(xué)習(xí)和使用。用個例子作比喻:控制論里面,用簡單線性控制矩陣,來控制龐大且復(fù)雜系統(tǒng);這個比喻不一定完全準(zhǔn)確,因為deta learn其實還是可以合并到原模型,那其實就是對所學(xué)知識鏈路的重整理了。

實際操作就是使用增量調(diào)整來模擬具有數(shù)十億參數(shù)的模型,并優(yōu)化一小部分參數(shù)。

這張圖表示的意思是,我還是我,但是我經(jīng)過簡單變化和學(xué)習(xí)后,我就可以成為多樣不一樣的我,但是pre-train模型是不動的,動的只是參入的參數(shù),眼睛、一幅、裝飾。很形象的表示訓(xùn)練過程,但是感覺對于表意不夠。但這圖傳的很廣,這邊也就順帶放上來了。

Addtion:方法引入了額外的可訓(xùn)練神經(jīng)模塊或參數(shù),這些模塊或參數(shù)在原始模型中不存在;

Specification:方法指定原始模型或過程中的某些參數(shù)變?yōu)榭捎?xùn)練,而其他參數(shù)被凍結(jié);

Reparameterization:方法通過變換將現(xiàn)有參數(shù)重新參數(shù)化為參數(shù)高效形式。

detaleran很重要的3個因素:

1.插哪:和原有網(wǎng)絡(luò)序列性插入,還是橋接式插入

2.怎么插:只插入某些層,還是整個網(wǎng)絡(luò)每層都插入

3.多大矩陣控制:參入控制層參數(shù)多大,一bit、還是原參數(shù)0.5%

不同的插入方式、不同參數(shù)對于模型效果差異還是比較大的,這個大家可以在實際作模型微調(diào)時候去體會,上面表是對不同的方法做的數(shù)學(xué)抽象表示。大家在實操時候發(fā)現(xiàn)沒有思路時候會過來看這個表,在結(jié)合問題想想會有不一樣幫助。

實操部分

這部分是以chatglm 6B模型來做實驗,具體的代碼在這個鏈接:GitHub - liangwq/Chatglm_lora_multi-gpu: chatglm多gpu用deepspeed和

模型不一定非的要chatglm、llama或者其他什么模型都是可以的。用到了huggingface的peft來做delta學(xué)習(xí),deepspeed做多卡分布式訓(xùn)練。

測試過:2卡A100 80G,8卡 A100 80G硬件配置數(shù)據(jù)和速度如下
50萬 selefinstruct的數(shù)據(jù),2卡、32核cpu、128G mem

batch 2 ,gd 4 也就是每個batch size=16;2個epoch lora_rank=8,插入?yún)?shù)量在7M左右,要訓(xùn)練20個小時

8卡差不多在5小時左右

微調(diào),模型收斂很穩(wěn)定效果不錯

代碼講解:

數(shù)據(jù)處理邏輯

def data_collator(features: list) -> dict:len_ids = [len(feature["input_ids"]) for feature in features]longest = max(len_ids) + 1input_ids = []attention_mask_list = []position_ids_list = []labels_list = []for ids_l, feature in sorted(zip(len_ids, features), key=lambda x: -x[0]):ids = feature["input_ids"]seq_len = feature["seq_len"]labels = ([-100] * (seq_len - 1)+ ids[(seq_len - 1) :]+ [tokenizer.eos_token_id]+ [-100] * (longest - ids_l - 1))ids = ids + [tokenizer.eos_token_id] * (longest - ids_l)_ids = torch.LongTensor(ids)attention_mask, position_ids = get_masks_and_position_ids(ids, seq_len, longest, _ids.device, gmask=False)labels_list.append(torch.LongTensor(labels))input_ids.append(_ids)attention_mask_list.append(attention_mask)position_ids_list.append(position_ids)input_ids = torch.stack(input_ids)labels = torch.stack(labels_list)attention_mask = torch.stack(attention_mask_list)position_ids = torch.stack(position_ids_list)return {"input_ids": input_ids,"labels": labels,"attention_mask": attention_mask,"position_ids": position_ids,}

插入lora,允許對在其它數(shù)據(jù)訓(xùn)練的lora加入訓(xùn)練,意思就是可以部分?jǐn)?shù)據(jù)部分?jǐn)?shù)據(jù)分開訓(xùn)練lora,需要可以把訓(xùn)練好的lora整合做共同訓(xùn)練,非常方便牛逼。對于機器配置不夠的朋友絕對是好事

# setup peft peft_config = LoraConfig(task_type=TaskType.CAUSAL_LM,inference_mode=False,r=finetune_args.lora_rank,lora_alpha=32,lora_dropout=0.1, ) model = get_peft_model(model, peft_config)if finetune_args.is_resume and finetune_args.resume_path:print("=====>load lora pt from =====》:", finetune_args.is_resume, finetune_args.resume_path)model.load_state_dict(torch.load(finetune_args.resume_path), strict=False)

accelerate整合部分,因為它不會保留checkpoint,所以我hardcode寫了每2000步保留一個checkpoint,這部分還沒來得急把只保留最新兩個checkpount代碼寫上去,所以會產(chǎn)生很多哥checkpount文件夾,這塊如果大家用不到可以注釋了,或則自己寫下保留兩個的代碼。當(dāng)然后面我會update。

if i%2000 ==0 and accelerator.is_main_process:#accelerator.wait_for_everyone()path = training_args.output_dir+'/checkpoint_{}'.format(i)os.makedirs(path) accelerator.save(lora.lora_state_dict(accelerator.unwrap_model(model)), os.path.join(path, "chatglm-lora.pt"))#save_tunable_parameters(model, os.path.join(path, "chatglm-lora.pt"))i +=1

小結(jié)

1.介紹了預(yù)訓(xùn)練大模型的訓(xùn)練流程是怎么樣的

2.介紹了常用的訓(xùn)練手段

3.詳細(xì)介紹了兩種主流的預(yù)訓(xùn)練手段原理:promt、delta

4.給了一個multi-gpu chatglm訓(xùn)練的例子

預(yù)告:

下面一篇文章會給大家介紹RLHF部分,大家可以關(guān)注我

總結(jié)

以上是生活随笔為你收集整理的实现mini智能助理—模型训练的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产不卡在线播放 | 国产草草视频 | 奇米第四色影视 | 亚洲人妻一区二区 | 久久久精品久久 | 久久综合鬼色 | 强行挺进白丝老师翘臀网站 | 久草五月天 | 免费在线成人 | 一级做a爰片久久毛片 | 欧美射射射 | 在线观看av网 | 日韩精品成人一区二区在线 | 91一级片 | 色噜噜日韩精品欧美一区二区 | 亚洲欧美bt | 欧美亚洲综合视频 | 奇米影视777在线观看 | 色老妹 | 一区二区高清 | 久久久久人妻一区 | 欧美日韩在线观看一区二区 | 亚洲网在线 | 欧美精品黑人 | 动漫美女无遮挡免费 | 亚洲精品一区二区三区蜜桃 | 成人国产免费视频 | 尤物视频在线观看免费 | 国产精品成人无码 | 91国产网站| 好吊一区二区三区 | 九九在线视频 | 日本成人在线不卡 | 精品视频一二三区 | 亚洲精品一二三四区 | 国产无限资源 | 成人欧美在线观看 | 日韩精品伦理 | 最近最新mv字幕观看 | 亚洲av成人精品日韩在线播放 | 国产精品怡红院 | 老熟女重囗味hdxx69 | 亚洲最大在线视频 | 香蕉久久夜色精品国产使用方法 | 欧美国产在线看 | 性一级视频 | 日韩美女性生活 | 天天想夜夜操 | 欧美日韩精品在线观看 | 久久6精品| 综合网五月 | 亚洲午夜网站 | 中国女人真人一级毛片 | 国精产品一区 | 欧美成人天堂 | 丁香亚洲| 日韩黄片一区二区 | 天堂中文在线资 | 免费看av大片 | 成人久久久精品乱码一区二区三区 | 亚洲精品无amm毛片 国内一区二区三区 | 人妻丝袜一区二区三区 | 日韩欧美偷拍 | 久久国产精品二区 | 永久在线| 福利一区三区 | 亚洲视屏一区 | 四虎在线免费 | 免费观看成人鲁鲁鲁鲁鲁视频 | 成人免费公开视频 | caopeng在线| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲不卡网| 国产91美女视频 | 日韩免费影院 | 98国产视频| 国产大片一区二区 | 日韩在线观看中文字幕 | 超碰人人99 | 亚洲成人99 | 日韩亚洲区| www.亚洲精品 | 国产做爰全免费的视频软件 | 久久久久一区二区三区 | 中文字幕成人网 | 日韩免费高清视频 | 亚洲欧美日韩综合一区二区 | 久久99久久久久 | 日韩欧美国产视频 | 91av视频| 欧美一区二区免费电影 | 亚洲欧美在线看 | 亚洲综合插 | 日韩黄网站 | 国产一区免费在线 | 国产美女精品在线 | 欧美日韩在线观看一区 | 日韩视频三区 | 依依激情网 |