新聞中心
本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。

創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、東阿網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價格優(yōu)惠性價比高,為東阿等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
“GPT并不是一個復(fù)雜的模型?!?/p>
前OpenAI科學(xué)家、現(xiàn)任特斯拉AI總監(jiān)的Andrej Karpathy在自己的GitHub項(xiàng)目里這樣寫道。
Karpathy這樣說是有底氣的,因?yàn)樗约褐挥么蠹s300行PyTorch代碼就實(shí)現(xiàn)了一個“小型GPT”——minGPT。該項(xiàng)目上線3天以來,已經(jīng)收獲了3.3k星。
“萬能”的NLP模型GPT-3這一個月來已經(jīng)刷爆社交網(wǎng)絡(luò),不過1750億個參數(shù)對算力的超高要求也讓人望而卻步。
但是在Karpathy看來,GPT所做的事情就是將一個索引序列放入一個transformer塊序列中,并得出下一個索引的概率分布。其余的復(fù)雜部分只是通過巧妙地進(jìn)行批處理讓訓(xùn)練更高效。
談到為何要開發(fā)minGPT,Karpathy本人在項(xiàng)目文檔里說,他是為了讓GPT做到小巧、簡潔、可解釋且具有教育意義,因?yàn)楫?dāng)前大多數(shù)可用的GPT工具都有些龐大。
如果原版的GPT是一艘巨型戰(zhàn)艦,那么minGPT就是一艘快艇。小快靈是minGPT的特點(diǎn),你不能指望它去“打仗”。minGPT的作用是教育目的,讓你熟悉GPT的原理。
現(xiàn)在,minGPT已經(jīng)能夠進(jìn)行加法運(yùn)算和字符級的語言建模,更強(qiáng)大的功能還在進(jìn)一步開發(fā)中。
minGPT項(xiàng)目內(nèi)容
minGPT實(shí)現(xiàn)大約包含300行代碼,包括樣板代碼和完全不必要的自定義因果自注意力模塊。
minGPT的核心庫包含兩個重要的文件:
- mingpt/model.py包含實(shí)際的Transformer模型定義
- mingpt/trainer.py是獨(dú)立于GPT的訓(xùn)練模型的PyTorch樣板
為了防止初學(xué)者犯難,Karpathy在repo中還隨附3個Jupyter Notebook文件,教你如何使用這個庫來訓(xùn)練序列模型:
- play_math.ipynb用于訓(xùn)練專注于加法的GPT(這部分是受GPT-3論文中加法部分的啟發(fā));
- play_char.ipynb用于將GPT訓(xùn)練為任意文本上的字符級語言模型,類似于作者以前的char-rnn,但它使用的是Transformer而不是RNN;
- play_words.ipynb是一個字節(jié)對編碼(BPE)版本,目前尚未完成。
有了這些代碼并不意味著你能立刻復(fù)現(xiàn)出OpenAI的幾個GPT預(yù)訓(xùn)練模型。
Karpathy表示,使用BPE編碼器、分布式訓(xùn)練以及fp16,才可能復(fù)現(xiàn)GPT-1/GPT-2的結(jié)果,不過他本人還沒有嘗試過。(Karpathy在這句話后面寫著$$$,可能是沒錢吧。)
至于現(xiàn)在最火的GPT-3,可能無法實(shí)現(xiàn),因?yàn)镵arpathy認(rèn)為是它不適合GPU顯存,而且需要更精細(xì)的模型并行處理。
minGPT的API用法示例如下:
- # you're on your own to define a class that returns individual examples as PyTorch LongTensors
- from torch.utils.data import Dataset
- train_dataset = MyDataset(...)
- test_dataset = MyDataset(...)
- # construct a GPT model
- from mingpt.model import GPT, GPTConfig
- mconf = GPTConfig(vocab_size, block_size, n_layer=12, n_head=12, n_embd=768) # a GPT-1
- model = GPT(mconf)
- # construct a trainer
- from mingpt.trainer import Trainer, TrainerConfig
- tconf = TrainerConfig(max_epochs=10, batch_size=256)
- trainer = Trainer(model, train_dataset, test_dataset, tconf)
- trainer.train()
- # (... enjoy the show for a while... )
- # sample from the model (the [None, ...] and [0] are to push/pop a needed dummy batch dimension)
- from mingpt.utils import sample
- x = torch.tensor([1, 2, 3], dtype=torch.long)[None, ...] # context conditioning
- y = sample(model, x, steps=30, temperature=1.0, sample=True, top_k=5)[0]
- print(y) # our model filled in the integer sequence with 30 additional likely integers
如果你有合適的硬件和數(shù)據(jù)集,不妨去試試吧。
關(guān)于Karpathy
提供minGPT的Andrej Karpathy今天才33歲,但已經(jīng)是特斯拉的AI高級總監(jiān),負(fù)責(zé)領(lǐng)導(dǎo)自動駕駛神經(jīng)網(wǎng)絡(luò)團(tuán)隊(duì)。
在跳槽到特斯拉之前,他是OpenAI的科學(xué)家,主要研究計(jì)算機(jī)視覺、生成模型和強(qiáng)化學(xué)習(xí)中的深度學(xué)習(xí)。
Karpathy在2011-2015年期間進(jìn)入斯坦福大學(xué)攻讀博士學(xué)位,他的導(dǎo)師就是李飛飛。讀博期間,他發(fā)表的多篇論文都是CV領(lǐng)域的高引文章,還在Google、DeepMind兩家公司實(shí)習(xí)過。
而且斯坦福大學(xué)的著名計(jì)算機(jī)課程CS231n就是他和李飛飛一起設(shè)計(jì)的,Karpathy不僅是該課程的助教,也是主講人之一。
無論是當(dāng)年的CS231n課程還是他的GitHub項(xiàng)目,都有很高的人氣。如此大牛的人物,他寫的GPT代碼你不去看看嗎?
minGPT項(xiàng)目地址:
https://github.com/karpathy/minGPT
Andrej Karpathy個人主頁:
https://karpathy.ai/
文章名稱:300行代碼實(shí)現(xiàn)“迷你版GPT”,上線三天收獲3.3k星
網(wǎng)頁鏈接:http://fisionsoft.com.cn/article/cdssddg.html


咨詢
建站咨詢
