国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!

這篇具有很好參考價(jià)值的文章主要介紹了全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!

1.簡(jiǎn)介

  1. 目標(biāo):基于pytorch、transformers做中文領(lǐng)域的nlp開箱即用的訓(xùn)練框架,提供全套的訓(xùn)練、微調(diào)模型(包括大模型、文本轉(zhuǎn)向量、文本生成、多模態(tài)等模型)的解決方案;
  2. 數(shù)據(jù)
    • 從開源社區(qū),整理了海量的訓(xùn)練數(shù)據(jù),幫助用戶可以快速上手;
    • 同時(shí)也開放訓(xùn)練數(shù)據(jù)模版,可以快速處理垂直領(lǐng)域數(shù)據(jù);
    • 結(jié)合多線程、內(nèi)存映射等更高效的數(shù)據(jù)處理方式,即使需要處理百GB規(guī)模的數(shù)據(jù),也是輕而易舉;
  3. 流程:每一個(gè)項(xiàng)目有完整的模型訓(xùn)練步驟,如:數(shù)據(jù)清洗、數(shù)據(jù)處理、模型構(gòu)建、模型訓(xùn)練、模型部署、模型圖解;
  4. 模型:當(dāng)前已經(jīng)支持gpt2clip、gpt-neoxdolly、llama、chatglm-6b、VisionEncoderDecoderModel等多模態(tài)大模型;
  5. 多卡串聯(lián)
    :當(dāng)前,多數(shù)的大模型的尺寸已經(jīng)遠(yuǎn)遠(yuǎn)大于單個(gè)消費(fèi)級(jí)顯卡的顯存,需要將多個(gè)顯卡串聯(lián),才能訓(xùn)練大模型、才能部署大模型。因此對(duì)部分模型結(jié)構(gòu)進(jìn)行修改,實(shí)現(xiàn)了訓(xùn)練時(shí)、推理時(shí)
    的多卡串聯(lián)功能。
  • 模型訓(xùn)練
中文名稱 文件夾名稱 數(shù)據(jù) 數(shù)據(jù)清洗 大模型 模型部署 圖解
中文文本分類 chinese_classifier ? ? ? ? ?
中文gpt2 chinese_gpt2 ? ? ? ? ?
中文clip chinese_clip ? ? ? ? ?
圖像生成中文文本 VisionEncoderDecoderModel ? ? ? ? ?
vit核心源碼介紹 vit model ? ? ? ? ?
Thu-ChatGlm-6b(v1) simple_thu_chatglm6b ? ? ? ? ?
??chatglm-v2-6b?? chatglm_v2_6b_lora ? ? ? ? ?
中文dolly_v2_3b dolly_v2_3b ? ? ? ? ?
中文llama chinese_llama ? ? ? ? ?
中文bloom chinese_bloom ? ? ? ? ?
中文falcon(注意:falcon模型和bloom結(jié)構(gòu)類似) chinese_bloom ? ? ? ? ?
中文預(yù)訓(xùn)練代碼 model_clm ? ? ? ? ?
百川大模型 model_baichuan ? ? ? ? ?
模型修剪?? model_modify ? ? ?
llama2 流水線并行 pipeline ? ? ? ? ?

2.文本分類模型

本部分,介紹中文的文本分類模型,適用于二分類、多分類等情況。使用transformers庫(kù)。

  • 處理數(shù)據(jù)code_01_processdata.ipynb
  • 數(shù)據(jù)介紹
    1. 本案例使用的是一個(gè)外賣平臺(tái)的評(píng)論數(shù)據(jù),對(duì)評(píng)論的文本做了分類(分為好評(píng)和差評(píng))
    2. 當(dāng)你把code_01_processdata.ipynb文件跑完之后,就可以看到在??data_all里面有一個(gè)??data,里面有三個(gè)文件,樣式都是像下面??這樣的

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

上圖是一個(gè)batch的數(shù)據(jù),或者所有的文本分類的數(shù)據(jù)樣式:

  1. text下面的紅色條,就是一個(gè)個(gè)句子。
  2. label里面有紅色有綠色,就是表示標(biāo)簽分類。
  3. transformers包做分類的時(shí)候,數(shù)據(jù)要求就這兩列。

注意點(diǎn):

  1. 數(shù)據(jù)需要分為train_data.csv,test_data.csv,valid_data.csv,這三個(gè)csv文件注意是使用,分割開的。
  2. 數(shù)據(jù)不可以有缺失值
  3. 數(shù)據(jù)最好只含有兩列:label,text
  • label:表示標(biāo)簽,最好為整型數(shù)值。0,1,2,3,4等
  • text:表示文本,(看你需求,可以有符號(hào),也可以沒有標(biāo)點(diǎn)符號(hào))
  1. train_data.csv,test_data.csv,valid_data.csv這三個(gè)數(shù)據(jù)里面,不要有數(shù)據(jù)相同的,不然會(huì)造成數(shù)據(jù)泄漏。
  • 訓(xùn)練模型code_02_trainmodel.ipynb

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

  • 數(shù)據(jù)訓(xùn)練流程
    以一個(gè)batch為例:

    1. Tokenizer會(huì)將數(shù)據(jù)中的text轉(zhuǎn)換成三個(gè)矩陣(或者叫三個(gè)Tensor),分別叫input_ids,token_type_ids,attention_mask,至于怎么轉(zhuǎn)換的,我們先不做詳細(xì)介紹(本倉(cāng)庫(kù)后續(xù)會(huì)介紹)。
    2. pretrained model在被加載之前,需要設(shè)置一大堆模型的參數(shù),至于要設(shè)置什么參數(shù),我們也不做詳細(xì)介紹。
    3. Trainer就是一個(gè)訓(xùn)練器,也需要預(yù)先設(shè)置好一大堆參數(shù)。至于要設(shè)置什么參數(shù),我們也不做詳細(xì)介紹。
    4. Trainer會(huì)把input_ids,token_type_ids,attention_mask;還有數(shù)據(jù)自帶的標(biāo)簽label;還有pretrained model都加載進(jìn)來(lái),進(jìn)行訓(xùn)練;
    5. 當(dāng)所有batch的數(shù)據(jù)更新完之后,最終就會(huì)生成一個(gè)模型。your new model就誕生了。
    6. 對(duì)于剛開始學(xué)習(xí)大模型做nlp分類的任務(wù),其實(shí)不需要考慮那么多細(xì)節(jié),只需要注意數(shù)據(jù)流程。
  • 注意點(diǎn):

    1. 這個(gè)步驟非??达@存大小。顯卡顯存越大越好。batch_size,eval_size大小取決于顯存大小。
    2. 在實(shí)際工程中,會(huì)先使用Tokenizer把所有的文本轉(zhuǎn)換成input_ids,token_type_ids,attention_mask,然后在訓(xùn)練的時(shí)候,這步就不再做了,目的是減少訓(xùn)練過(guò)程中cpu處理數(shù)據(jù)的時(shí)間,不給顯卡休息時(shí)間。
    3. 在使用Tokenizer把所有的文本做轉(zhuǎn)換的期間,如果設(shè)置的文本的長(zhǎng)度上限為64,那么會(huì)把大于64的文本截?cái)?;那些少?4的文本,會(huì)在訓(xùn)練的時(shí)候,在喂入模型之前,把長(zhǎng)度補(bǔ)齊,這么做就是為了減少數(shù)據(jù)對(duì)內(nèi)存的占用。
    1. 預(yù)測(cè)code_03_predict.ipynb

    2. 這個(gè)時(shí)候,就是搞個(gè)句子,然后丟給一個(gè)pipeline(這個(gè)就是把Tokenizer你的大模型放在一起了),然后這個(gè)pipeline就給你返回一個(gè)分類結(jié)果。

    3. 常見的就是使用pipeline,如果更加復(fù)雜的話,比如修改模型,這個(gè)時(shí)候,就比較復(fù)雜了(后面會(huì)再次介紹)。

    1. 部署

    2. 簡(jiǎn)單的部署相對(duì)于預(yù)測(cè),其實(shí)就是再加一層web端口,fastapi包就可以實(shí)現(xiàn)。

    3. 高級(jí)一點(diǎn)的部署相對(duì)于預(yù)測(cè),就需要把模型從pytorch轉(zhuǎn)換成onnx格式的,這樣可以提高推理效率(也不一定,就是舉個(gè)例子),可能也不會(huì)使用web端口(http協(xié)議)了,會(huì)使用rpc協(xié)議等方法。這部分現(xiàn)在先不看。

3.中文gpt2

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

  1. 本文,將介紹如何使用中文語(yǔ)料,訓(xùn)練一個(gè)gpt2
  2. 可以使用你自己的數(shù)據(jù)訓(xùn)練,用來(lái):寫新聞、寫古詩(shī)、寫對(duì)聯(lián)等
  3. 我這里也訓(xùn)練了一個(gè)中文gpt2模型,使用了612萬(wàn)個(gè)樣本,每個(gè)樣本有512個(gè)tokens,總共相當(dāng)于大約31億個(gè)tokens
  • 安裝包

需要準(zhǔn)備好環(huán)境,也就是安裝需要的包

pip install -r requirements.txt

像是pytorch這種基礎(chǔ)的包肯定也是要安裝的,就不提了。

  • 數(shù)據(jù)來(lái)源

    1. 獲得數(shù)據(jù):數(shù)據(jù)鏈接,關(guān)注公眾號(hào)【統(tǒng)計(jì)學(xué)人】,然后回復(fù)【gpt2】即可獲得。
    2. 獲得我訓(xùn)練好的模型(使用了15GB的數(shù)據(jù)(31億個(gè)tokens),在一張3090上,訓(xùn)練了60多小時(shí))
  • 數(shù)據(jù)格式

    1. 數(shù)據(jù)其實(shí)就是一系列文件夾??,然后每一個(gè)文件夾里面有大量的文件,每一個(gè)文件都是.csv格式的文件。其中有一列數(shù)據(jù)是content
    2. 每一行的content就代表一句話
    3. 雖然數(shù)據(jù)有15GB那么大,但是處理起來(lái)一點(diǎn)也不復(fù)雜,使用 datasets
      包,可以很輕松的處理大數(shù)據(jù),而我只需要傳遞所有的文件路徑即可,這個(gè)使用 glob 包就能完成。
  • 訓(xùn)練代碼train_chinese_gpt2.ipynb

    1. 現(xiàn)在訓(xùn)練一個(gè)gpt2代碼,其實(shí)很簡(jiǎn)單的。拋開處理數(shù)據(jù)問(wèn)題,技術(shù)上就三點(diǎn):tokenizer、gpt2_modelTrainer
    2. tokenizer使用的是bert-base-chinese
      ,然后再添加一下bos_token、eos_token、pad_token。
    3. gpt2_model使用的是gpt2,這里的gpt2我是從0開始訓(xùn)練的。而不是使用別人的預(yù)訓(xùn)練的gpt2模型。
    4. Trainer訓(xùn)練器使用的就是transformersTrainer模塊。(支撐多卡并行,tensorboard等,都寫好的,直接調(diào)用就行了,非常好用)
  • 模型

  • 推理代碼infer.ipynb

這個(gè)是chinese-gpt2的推理代碼

  1. 將代碼中的model_name_or_path = "checkpoint-36000"里面的"checkpoint-36000",修改為模型所在的路徑。
  2. 然后運(yùn)行下面一個(gè)代碼塊,即可輸出文本生成結(jié)果
  3. 可以參考這個(gè)代碼,制作一個(gè)api,或者打包成一個(gè)函數(shù)或者類。
  • 交互機(jī)器人界面chatbot.py
  1. 修改代碼里面的第4行,這一行值為模型所在的位置,修改為我分享的模型文件路徑。
model_name_or_path = "checkpoint-36000"
  1. 運(yùn)行
python chatbot.py
  1. 點(diǎn)擊鏈接,即可在瀏覽器中打開機(jī)器人對(duì)話界面
  • 更多
  1. 這個(gè)完整的項(xiàng)目下來(lái),其實(shí)我都是全靠huggingface文檔、教程度過(guò)來(lái)的.
  2. 我做的東西,也就是把Tokenizer改成中文的了,然后也整理了數(shù)據(jù),別的大部分東西,都不是我做的了.
  3. 原文鏈接為https://huggingface.co/course/zh-CN/chapter7/6?fw=pt.

其實(shí),我更喜歡做應(yīng)用,但是也要理解相關(guān)的背后原理,目前還在研究相關(guān)的gpt2原理還有相關(guān)的推理細(xì)節(jié),這是我整理的鏈接,希望可以共同進(jìn)步

  1. https://huggingface.co/blog/how-to-generate
  2. https://huggingface.co/gpt2
  3. https://huggingface.co/gpt2-large

4.中文clip模型

  1. 本文將介紹,如何從0到1的訓(xùn)練一個(gè)中文clip模型。
  2. 在處理數(shù)據(jù)的過(guò)程中,訓(xùn)練的過(guò)程中,需要的注意事項(xiàng)。
  3. 從數(shù)據(jù)流的角度,看看clip模型是怎么處理數(shù)據(jù)的,模型是怎么構(gòu)建的。image和text的模型的差異性,兩個(gè)模型是怎么合并起來(lái)計(jì)算loss的。
  • clip模型介紹

CLIP的英文全稱是Contrastive Language-Image Pre-training,即一種基于對(duì)比文本-圖像對(duì)的預(yù)訓(xùn)練方法或者模型。
CLIP是一種基于對(duì)比學(xué)習(xí)的多模態(tài)模型,與CV中的一些對(duì)比學(xué)習(xí)方法如moco和simclr不同的是,
CLIP的訓(xùn)練數(shù)據(jù)是文本-圖像對(duì):一張圖像和它對(duì)應(yīng)的文本描述,這里希望通過(guò)對(duì)比學(xué)習(xí),
模型能夠?qū)W習(xí)到文本-圖像對(duì)的匹配關(guān)系。
如下圖所示,CLIP包括兩個(gè)模型:

  1. Text Encoder和Image Encoder,其中Text Encoder用來(lái)提取文本的特征,可以采用NLP中常用的text transformer模型;

  2. Image Encoder用來(lái)提取圖像的特征,可以采用常用CNN模型或者vision transformer。

    全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

上面這段文字來(lái)源于https://zhuanlan.zhihu.com/p/493489688

  1. 從數(shù)據(jù)上看:之前相似度計(jì)算,都是兩個(gè)文本對(duì):text - text。只不過(guò)現(xiàn)在都是text - image了。
  2. clip是兩個(gè)模型(具體長(zhǎng)什么樣子,后面再說(shuō))
  • 2.1 text-model:負(fù)責(zé)把text轉(zhuǎn)換成向量。
  • 2.2 image-model:負(fù)責(zé)把image轉(zhuǎn)換成向量。
  • 2.3 然后把上面兩個(gè)向量,做交叉計(jì)算loss,然后loss反向傳播,這樣兩個(gè)模型的參數(shù)都會(huì)更新。
  1. 其實(shí)你想啊,這個(gè)image-model處理圖像的,其實(shí)也可以改為處理視頻、處理3d模型等。那簡(jiǎn)直是格局打開??了。我現(xiàn)在沒有數(shù)據(jù),后面也打算做一個(gè)。
  2. 你再想想,text-image => text-image-video-3d這樣聯(lián)合起來(lái),是不是更好。沒數(shù)據(jù),沒機(jī)器,做不了。
  3. 有些人可能感覺,你這人,就知道TMD吹牛,來(lái)來(lái)來(lái),我?guī)阊芯垦芯縞lip模型的源碼。
  • 數(shù)據(jù)
  1. 直接點(diǎn)擊鏈接https://pan.baidu.com/s/1wGmXUNP021OWnW7Kik7q1A?pwd=gd3c
    來(lái)獲得。
  2. 把下載好的文件,也就是test-2.6w.csv、train-137w.csv放在文件夾??bigdata/raw_data里面。
  3. 以此運(yùn)行processdta_01.ipynb、processdta_02.ipynb、processdta_02.ipynb用來(lái)處理數(shù)據(jù)。
  • 3.1 processdta_01.ipynb:用來(lái)下載數(shù)據(jù),大概下載了10多個(gè)小時(shí)。
  • 3.2 processdta_02.ipynb:用來(lái)篩選數(shù)據(jù),不是所有的圖片數(shù)據(jù)都是可以用的,這一步非常坑。需要留意。如果圖片沒有篩選好,在你訓(xùn)練到中間的時(shí)候,突然一下因?yàn)閳D片無(wú)法加載導(dǎo)致錯(cuò)誤,從而訓(xùn)練中斷了。
  • 3.3 processdta_03.ipynb:用來(lái)把數(shù)據(jù)干凈的數(shù)據(jù)處理好,合并好,生成新的,漂亮的訓(xùn)練數(shù)據(jù)。
  1. 其實(shí)完整下來(lái)看,數(shù)據(jù)清洗,就是把符合格式的照片篩選出來(lái),然后進(jìn)行訓(xùn)練。
  • 數(shù)據(jù)總結(jié)

說(shuō)到底,你的數(shù)據(jù)只要整理成這樣的一個(gè)樣式即可

text image_path
河南一村民繼承祖上的一金碗,專家鑒定:此碗是溥儀皇帝用過(guò)的 bigdata/image_data/test-9282.jpg
著名鋼琴家郎朗:我永遠(yuǎn)不會(huì)放棄演奏 bigdata/image_data/test-2644.jpg
科幻動(dòng)作電影《超體》10月24日來(lái)襲 bigdata/image_data/test-13199.jpg
  1. text:這一列對(duì)應(yīng)圖片的標(biāo)注,或者和圖片相關(guān)的文本。
  2. image_path:這一列對(duì)應(yīng)圖片所在你電腦本地上的路徑。
  3. 是的,搞了半天,數(shù)據(jù)就是這么簡(jiǎn)單。
  • 數(shù)據(jù)預(yù)處理

這里的數(shù)據(jù)預(yù)處理,是我隨便起的名字。說(shuō)白了,就是這么會(huì)是:

  1. 使用tokenizertext轉(zhuǎn)換成input_idsattention_mask.

  2. 使用processorimage轉(zhuǎn)換成pixel_values.

  3. 處理text,那還是很快的。百萬(wàn)級(jí)別的數(shù)據(jù),可能2~3分鐘就行了。

  4. 因?yàn)?code>image太大了,只能在訓(xùn)練的時(shí)候,每一batch,才能去加載image
    ,這就導(dǎo)致訓(xùn)練的時(shí)候特別慢。倒不是因?yàn)槲业?090算力不行,全都TMD卡在計(jì)算機(jī)IO上了,非常讓人難受。

  • 模型部分

終于講解到clip的模型部分了。這個(gè)clip模型實(shí)在是太靈活了,你可以做很多個(gè)版本,這里我們挑幾個(gè)比較常見的結(jié)構(gòu),來(lái)分享一下。

  • 常見的clip模型

這里值得是常見的clip模型,特指的是transformers包的clip模型。

  1. clip主要就是分為兩個(gè)部分,一個(gè)是CLIPTextTransformer,一個(gè)是CLIPVisionTransformer,說(shuō)白了就是一個(gè)處理text,一個(gè)處理image。
  2. CLIPTextTransformerCLIPVisionTransformer的核心,都共用了一個(gè)模型結(jié)構(gòu)CLIPEncoder
    。也就是CLIP編碼部分。(這里說(shuō)的共用,值得是模型框架相同,而不是模型訓(xùn)練的時(shí)候,參數(shù)也相同。)

Q:有些人就問(wèn)了,text和image兩個(gè)生成的數(shù)據(jù)都不一樣,比如text轉(zhuǎn)換成input_idsattention_mask;image
轉(zhuǎn)換成pixel_values;他們?cè)趺纯梢允褂靡粋€(gè)模型結(jié)構(gòu)CLIPEncoder?

A:這個(gè)也是非常好回答的,因他倆又不是直接使用CLIPEncoder
,前后都加了一些萬(wàn)金油的模型組件(比如embedding、linear
等),模型輸出的時(shí)候,也是這么做的。還是應(yīng)了那句話,就看你怎么吧數(shù)據(jù)轉(zhuǎn)換成hidden_states,以及怎么把hidden_states輸出出去。

Q:CLIPTextTransformerCLIPVisionTransformer輸出的維度也不一定一樣吧,怎么計(jì)算交叉損失?

A: 也很簡(jiǎn)單啦,加個(gè)linear對(duì)齊一下就行了。

看看CLIPTextTransformerCLIPVisionTransformer的內(nèi)心:

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

  • 中文版本的clip模型

上面的常見的clip模型,確實(shí)是好,其實(shí)你只要換一個(gè)支持中文的新tokenizer,然后從0??開始訓(xùn)練即可。
但是這么搞,沒什么創(chuàng)意呀。其實(shí)我第一次就是這么干的,直接支持中文的新tokenizer。但是訓(xùn)練了一天,loss基本上沒變化。我內(nèi)心其實(shí)是崩潰的。

后來(lái),我研究了一下transformers包里面的chinese-clip模型代碼。我發(fā)現(xiàn),chinese-clip相對(duì)于clip
。就是把常規(guī)的CLIPTextTransformer換成了bert版本的。啊對(duì),這就破案了。這個(gè)奉上代碼截圖。

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

  • 后續(xù)改進(jìn)
  1. 因?yàn)橛?xùn)練image這類型的任務(wù),非常吃資源,不管是我的顯存還是我的磁盤。目前數(shù)據(jù)占用我硬盤100GB
  2. 針對(duì)loss不下降,下次如果再讓我做,我打算先把clip模型的vit部分先固定住,然后訓(xùn)練bert來(lái)擬合vit-output。
  3. 也可也固定bert模型,訓(xùn)練vit模型;
  4. 也可以拆開做,反正本質(zhì)上都是Encoder,然后計(jì)算相似度。

5. 圖生文image-encoder-decoder

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

之前在huggingfacehttps://huggingface.co/nlpconnect/vit-gpt2-image-captioning上看到這個(gè)模型.

  1. 感覺這個(gè)模型很有趣,想法很好。
  2. 發(fā)現(xiàn)這個(gè)模型關(guān)于中文的不多。
  3. 之前的clip訓(xùn)練其實(shí)挺失敗的,loss沒有下降.

主要也就是抱著學(xué)習(xí)的態(tài)度,把源碼看懂,把流程跑通。分享中間的細(xì)節(jié)和踩坑經(jīng)歷。

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

  1. 使用vit來(lái)作為encoder部分,輸出encoder_hidden_states,綠色部分1
  2. 使用gpt2來(lái)作為decoder部分,接受encoder_hidden_states,綠色部分3。
  3. 如果encoder輸出的encoder_hidden_statesdecoder接受的encoder_hidden_states維度不一樣,就加個(gè)linear,綠色部分2。
  • 模型訓(xùn)練需要的數(shù)據(jù)樣式
    訓(xùn)練的時(shí)候,模型需要的數(shù)據(jù)主要有兩個(gè)維度:
  1. pixel_valueimage通過(guò)processor生成
  2. labeltext通過(guò)tokenizer生成的input_ids。
  3. 計(jì)算loss的時(shí)候,其實(shí)和gpt2一模一樣的(自回歸,本質(zhì)上就是向后錯(cuò)位一下)。

目前已經(jīng)把訓(xùn)練好的模型,發(fā)布在huggingface上了。https://huggingface.co/yuanzhoulvpi/vit-gpt2-image-chinese-captioning

本模塊處理數(shù)據(jù)的方式和clip模型差不多,可以看隔壁文件夾,訓(xùn)練clip的數(shù)據(jù)處理思路。

  1. 只要把processdta_02.ipynb文件替換即可。
  2. 執(zhí)行順序依然按照著processdta_01.ipynb、processdta_02.ipynbprocessdta_03.ipynb。
  • 訓(xùn)練部分train_encoder_decoder.ipynb

    1. 處理圖像,使用的是"google/vit-base-patch16-224"模型。
    2. 處理文本,使用的是"yuanzhoulvpi/gpt2_chinese"模型。
    3. 最后就是把兩個(gè)模型通過(guò)VisionEncoderDecoderModel粘起來(lái)。
  • 訓(xùn)練的loss
    全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

  • 訓(xùn)練的信息
    gpu使用的是3090,模型大概是2.16億個(gè)參數(shù)?;顺^(guò)20個(gè)小時(shí)。但是大部分時(shí)間都是卡在IO上(加載圖片上)

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

  • 推理用你自己訓(xùn)練
    參考infer_encoder_decoder.ipynb

  • 直接用

from transformers import (VisionEncoderDecoderModel, 
                          AutoTokenizer,ViTImageProcessor)
import torch
from PIL import Image
vision_encoder_decoder_model_name_or_path = "yuanzhoulvpi/vit-gpt2-image-chinese-captioning"#"vit-gpt2-image-chinese-captioning/checkpoint-3200"

processor = ViTImageProcessor.from_pretrained(vision_encoder_decoder_model_name_or_path)
tokenizer = AutoTokenizer.from_pretrained(vision_encoder_decoder_model_name_or_path)
model = VisionEncoderDecoderModel.from_pretrained(vision_encoder_decoder_model_name_or_path)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

max_length = 16
num_beams = 4
gen_kwargs = {"max_length": max_length, "num_beams": num_beams}


def predict_step(image_paths):
    images = []
    for image_path in image_paths:
        i_image = Image.open(image_path)
        if i_image.mode != "RGB":
            i_image = i_image.convert(mode="RGB")

        images.append(i_image)

    pixel_values = processor(images=images, return_tensors="pt").pixel_values
    pixel_values = pixel_values.to(device)

    output_ids = model.generate(pixel_values, **gen_kwargs)

    preds = tokenizer.batch_decode(output_ids, skip_special_tokens=True)
    preds = [pred.strip() for pred in preds]
    return preds


predict_step(['bigdata/image_data/train-1000200.jpg'])

6.vit 源碼

全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!,NLP知識(shí)領(lǐng)域?qū)?pytorch,自然語(yǔ)言處理,人工智能,文本生成,transformer,大語(yǔ)言模型

  1. 之前都搞過(guò)clipimage-encoder-decoder?,F(xiàn)在哪里還怕搞不懂vit.
  2. 這里主要分享一下vit的最核心的部分。
  • vit 核心的數(shù)據(jù)內(nèi)容

vit想法非常牛,但是數(shù)據(jù)處理的思想更牛,之前都沒提出來(lái)過(guò)。

載對(duì)于一個(gè)圖片,將一個(gè)圖片分割成N塊。巧妙的使用nn.Conv2d。

  • 初始化
import torch
from torch import nn 

#base parameter

image_size=224 # 圖片的width和height
patch_size=16  # 將圖片的分為塊,每一塊的大小為16x16,這樣就有(224//16)^2 = 14 ^2 = 196個(gè)
num_channels=3 #  R,G, B
hidden_size=768 # 輸出的hidden_size
batch_size = 16 # 一批數(shù)據(jù)有多少
  • 創(chuàng)建一個(gè)分塊器和一個(gè)樣本數(shù)據(jù)(一個(gè)batch)
#分塊器
project = nn.Conv2d(num_channels, hidden_size, kernel_size=patch_size, stride=patch_size)

#樣本數(shù)據(jù)(一個(gè)`batch`) 
#batch_size, num_channels, height, width = pixel_values.shape
pixel_values = torch.randn(batch_size, num_channels, image_size, image_size)

pixel_values.shape 
  • 輸出分塊的大小
project(pixel_values).shape 

#> torch.Size([16, 768, 14, 14])
  • 數(shù)據(jù)再轉(zhuǎn)換一下,image的embedding就完成了。
image_embedding = project(pixel_values).flatten(2).transpose(1, 2)
image_embedding.shape 
#> torch.Size([16, 196, 768]) # batch_size, seq_length, embedding_dim

這個(gè)時(shí)候,就已經(jīng)和文本的數(shù)據(jù)一樣了。維度都是(batch_size, seq_length, embedding_dim),再向下推導(dǎo),就是transformers了。沒什么可介紹的了。

項(xiàng)目鏈接:https://github.com/yuanzhoulvpi2017/zero_nlp

更多優(yōu)質(zhì)內(nèi)容請(qǐng)關(guān)注公號(hào):汀丶人工智能;會(huì)提供一些相關(guān)的資源和優(yōu)質(zhì)文章,免費(fèi)獲取閱讀。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-672487.html

到了這里,關(guān)于全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 智慧小鎮(zhèn)解決方案-最新全套文件

    智慧小鎮(zhèn)解決方案-最新全套文件

    智慧小鎮(zhèn),是指在城鎮(zhèn)發(fā)展過(guò)程中,在城鎮(zhèn)基礎(chǔ)設(shè)施、資源環(huán)境、社會(huì)民生、經(jīng)濟(jì)產(chǎn)業(yè)、市政治理等領(lǐng)域中,充分利用物聯(lián)網(wǎng)、互聯(lián)網(wǎng)、云計(jì)算、IT、智能分析等技術(shù)手段,對(duì)城市居民生活工作、企業(yè)經(jīng)營(yíng)發(fā)展和政府行政管理過(guò)程中的相關(guān)活動(dòng),進(jìn)行智慧地感知、分析、集成

    2024年02月01日
    瀏覽(41)
  • 智慧燃?xì)饨鉀Q方案-最新全套文件

    智慧燃?xì)饨鉀Q方案-最新全套文件

    近年來(lái)城市燃?xì)馊〉昧司薮蟮陌l(fā)展,我們?cè)谙硎芮鍧嵞茉磶?lái)方便的同時(shí),也帶來(lái)了新的問(wèn)題: ● 居民用戶數(shù)量的大量增加使得燃?xì)膺\(yùn)營(yíng)企業(yè)人工成本、管理成本居高不下、用氣安全以及偷盜氣行為不能及時(shí)有效的監(jiān)控帶來(lái)了巨大風(fēng)險(xiǎn)與輸差。 ● 階梯氣價(jià)的實(shí)施使得傳統(tǒng)的

    2023年04月08日
    瀏覽(39)
  • 帶你上手基于Pytorch和Transformers的中文NLP訓(xùn)練框架

    帶你上手基于Pytorch和Transformers的中文NLP訓(xùn)練框架

    本文分享自華為云社區(qū)《全套解決方案:基于pytorch、transformers的中文NLP訓(xùn)練框架,支持大模型訓(xùn)練和文本生成,快速上手,海量訓(xùn)練數(shù)據(jù)》,作者: 汀丶 。 目標(biāo) :基于 pytorch 、 transformers 做中文領(lǐng)域的nlp開箱即用的訓(xùn)練框架,提供全套的訓(xùn)練、微調(diào)模型(包括大模型、文本

    2024年02月11日
    瀏覽(14)
  • 幽靈行者ue4崩潰怎么解決?幽靈行者ue4崩潰原因深度解讀及全套解決方案

    幽靈行者ue4崩潰怎么解決?幽靈行者ue4崩潰原因深度解讀及全套解決方案

    UE4崩潰通常是由于多種原因引起的,如虛幻引擎版本過(guò)舊、GPU驅(qū)動(dòng)程序過(guò)時(shí)或損壞、注冊(cè)表設(shè)置錯(cuò)誤等。那么幽靈行者ue4崩潰怎么解決呢?下面一起來(lái)看看吧! 一、原因 1. 硬件兼容性問(wèn)題 ?顯卡驅(qū)動(dòng)不兼容:過(guò)時(shí)或錯(cuò)誤的顯卡驅(qū)動(dòng)可能導(dǎo)致與UE4引擎的交互出現(xiàn)問(wèn)題,引發(fā)崩

    2024年04月26日
    瀏覽(115)
  • 基于Ascend910+PyTorch1.11.0+CANN6.3.RC2的YoloV5訓(xùn)練推理一體化解決方案

    昇騰Pytorch鏡像:https://ascendhub.huawei.com/#/detail/ascend-pytorch 代碼倉(cāng):git clone https://gitee.com/ascend/modelzoo-GPL.git coco測(cè)試驗(yàn)證集:wget https://bj-aicc.obs.cn-north-309.mtgascendic.cn/dataset/coco2017/coco.zip coco訓(xùn)練集(放images下):wget https://bj-aicc.obs.cn-north-309.mtgascendic.cn/dataset/coco2017/train2017.zip 部分

    2024年02月07日
    瀏覽(23)
  • 中文小程序解決方案詳解

    中文小程序解決方案詳解

    # 中文小程序解決方案詳解 隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,微信小程序已經(jīng)成為了各行各業(yè)布局移動(dòng)互聯(lián)網(wǎng)的重要渠道。作為一款國(guó)民級(jí)應(yīng)用,微信擁有超過(guò)10億的用戶,小程序在微信生態(tài)中的地位愈發(fā)重要。在這樣的背景下,如何快速構(gòu)建一款高效、易用的中文小程序成為了

    2024年01月16日
    瀏覽(18)
  • SpringBoot中文亂碼問(wèn)題解決方案

    在Spring Boot中,確實(shí)沒有像傳統(tǒng)Web應(yīng)用程序中需要使用web.xml配置文件。對(duì)于中文亂碼問(wèn)題,你可以采取以下幾種方式來(lái)解決: 在application.properties文件中添加以下配置: 這里將字符集設(shè)置為UTF-8,并啟用了HTTP編碼配置。 如果你使用的是Spring Boot 2.x版本,可以嘗試在pom.xml文件

    2024年02月04日
    瀏覽(32)
  • layui中文、以及圖標(biāo)亂碼解決方案

    layui中文、以及圖標(biāo)亂碼解決方案

    最終解決方案…手動(dòng)對(duì)js文件中的中文,用unicode進(jìn)行編碼

    2024年02月11日
    瀏覽(29)
  • nginx訪問(wèn)頁(yè)面中文亂碼解決方案

    ?1、網(wǎng)頁(yè)代碼設(shè)置utf-8編碼格式,內(nèi)容參考如下: 2、nginx服務(wù)端的nginx.conf設(shè)置utf-8編碼格式。需要注意的是server層和訪問(wèn)路徑location都要配置。? 3、修改了nginx的配置文件,需要重新加載一下nginx。 執(zhí)行: 或執(zhí)行: 4、最后訪問(wèn)測(cè)試:中文解析正常。

    2024年02月11日
    瀏覽(29)
  • 【Python】中文亂碼問(wèn)題與解決方案 深入分析

    【Python】中文亂碼問(wèn)題與解決方案 深入分析

    一直以來(lái),python中的中文編碼就是一個(gè)極為頭大的問(wèn)題,經(jīng)常拋出編碼轉(zhuǎn)換的異常,python中的str和unicode到底是一個(gè)什么東西呢? 在本文中,以\\\'哈\\\'來(lái)解釋作示例解釋所有的問(wèn)題 ,“哈”的各種編碼如下: 1. UNICODE (UTF8-16),C854; 2. UTF-8,E59388; 3. GBK,B9FE。 一直以來(lái),py

    2024年02月10日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包