作者:算力魔方創始人/英特爾創新大使劉力
《用PaddleNLP在4060單卡上實踐大模型預訓練技術》發布后收到讀者熱烈反響,很多讀者要求進一步講解更多的技術細節。本文主要針對大語言模型的預訓練流程,使用PaddleNLP將FineWeb數據集中文本形式的數據,經過分詞化(Tokenize),轉換為大語言模型能直接使用的二進制數據,以便提升訓練效果。
ChatGPT發布后,當代大語言模型(LLM)的訓練流程基本遵循OpenAI提出的”預訓練+后訓練”的訓練范式。
預訓練:將海量知識通過無監督學習的方式壓縮到大語言模型的權重中,使其具備基本的通用能力,能預測下一個分詞。預訓練得到的模型叫基礎大模型。
后訓練:通過監督微調(SFT)和強化學習(RL)等方式,讓大模型按人類專家的方式輸出知識,使其具備專業能力。
一,PaddleNLP簡介
PaddleNLP是一款基于飛槳深度學習框架的大語言模型(LLM)開發套件,支持在多種硬件上進行高效的大模型訓練、無損壓縮以及高性能推理。PaddleNLP 具備簡單易用和性能極致的特點,致力于助力開發者實現高效的大模型產業級應用。
Github: https://github.com/PaddlePaddle/PaddleNLP
使用PaddleNLP實現訓練文本分詞化僅需三行代碼,如下所示:
# 導入PaddleNLP庫中的GPTTokenizer類 from paddlenlp.transformers import GPTTokenizer # 使用預訓練的"gpt2-en"模型初始化GPTTokenizer,并設置bos_token為空字符串 tokenizer = GPTTokenizer.from_pretrained("gpt2-en", bos_token="") # 打印使用tokenizer對字符串"Hello, world!"進行編碼后的結果 print(tokenizer.encode("Hello, world!"))
進入:
https://tiktokenizer.vercel.app/?model=gpt2
可以對比PaddleNLP的GPTTokenzier對“Hello,World!”的分詞結果。
二,FineWeb簡介
FineWeb是由Hugging Face團隊于2024年推出的超大規模語言模型預訓練數據集。作為目前最大的開源預訓練數據集之一,FineWeb數據集包含來自 CommonCrawl 的超過 15T 經過清理和重復數據刪除的英文網絡數據。其高質量的數據,有助于大語言模型穩定平穩的完成預訓練,而不會發生由重復低質數據引發的Loss Spike。
Link: https://huggingface.co/datasets/HuggingFaceFW/fineweb
本文使用FineWeb數據集的sample-10BT子集作為GPT-2的預訓練數據集。
三,開發環境準備
本文的開發環境依賴PaddlePaddle、PaddleNLP、datasets和tqdm。
首先,請安裝PaddlePaddle框架:
pip install paddlepaddle
然后,安裝其它依賴項:
pip install paddlenlp datasets tqdm
四,代碼實現
用PaddleNLP將FineWeb數據集進行分詞化處理,然后轉換為大語言模型能直接使用的二進制數據的關鍵步驟有:
1.從HuggingFace Hub加載fineweb數據集的10B樣本子集;
2.使用train_test_split按比例分割訓練集和驗證集;
3.對每個文本進行編碼,添加結束符eot_token,返回ids和len;
4.為訓練集和驗證集分別創建.bin文件,使用np.memmap高效寫入。
關鍵代碼如下所示:
完整范例代碼請參見:
https://aistudio.baidu.com/projectdetail/8798975
運行成功后,可以得到如下兩個文件:
五,總結
PaddleNLP好學易用,借助PaddleNLP的GPTTokenizer很容易實現FineWeb數據集的分詞化,并轉換為方便大模型預訓練的二進制數據!
如果你有更好的文章,歡迎投稿!
稿件接收郵箱:[email protected]
更多精彩內容請關注“算力魔方?”!
審核編輯 黃宇
-
二進制
+關注
關注
2文章
803瀏覽量
42145 -
數據集
+關注
關注
4文章
1222瀏覽量
25275 -
GPT
+關注
關注
0文章
368瀏覽量
15930
發布評論請先 登錄
評論