SlidePub
Home
Categories
Login
Register
Home
General
自作LLM作ろうとして 爆散した話 (1).pdf
自作LLM作ろうとして 爆散した話 (1).pdf
JunichiroTAKAHASHI1
831 views
35 slides
Jan 17, 2024
Slide
1
of 35
Previous
Next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
About This Presentation
X->@takanas0517
Size:
583.63 KB
Language:
none
Added:
Jan 17, 2024
Slides:
35 pages
Slide Content
Slide 1
自作LLM作ろうとして
爆散した話
Slide 2
今日の話
PytorchとHugging Face OnlyでLLMをガチで組み上げようとした時の話です。
成功例がみたい人は
Stability AI Japanの秋葉拓哉さんの記事を参考にした後
・もし明日、上司に「 GPT-4を作れ」と言われたら? Stability AIのシニアリサーチサイエンティス
トが紹介する「 LLM構築タイムアタック」
Weight & Biasesの
・ベストプラクティス
を読んで、さらに GPT-NeoXとかを触ってみればいいと思います。
Slide 3
今日の話
全部実はQiitaにあげています。
☆とブクマしてください。トレンドに載せてください。
LLM制作爆死回顧録、自作 LLMを作るときに使った手法全
まとめとどのようにして何の成果も得られなかったのかにつ
いて
Slide 4
まずお前誰だよ
・アカウント名 : 犬(SSR) @takanas0517
・職業: 東大工学部電子情報工学科 3年
・好きなコンピューターサイエンスの分野
・OS
・WebAssembly
・ML
・最近pythonのライブラリ作って全世界公開した
・研究者と開発者の中間みたいな人
・趣味: 節約, フルスクラッチ実装
Slide 5
謝罪
急いで作ったのでコンピューターサイエンスの基礎ができている人向けになってしまいま
した。わかりにくいところがあれば質問をください。
Slide 6
GPT4を使いたい ‼ でもお金は使いたくない ‼
大学3年生の夏 , ちょうどまとまった時間ができた僕は LLMを追うことに決めた
しかし、OpenAIにお金は使いたくない ....
Slide 7
GPT4を使いたい ‼ でもお金は使いたくない ‼
大学3年生の夏 , ちょうどまとまった時間ができた僕は LLMを追うことに決めた
しかし、OpenAIにお金は使いたくない ....
作るか‼
Slide 8
作ろうと思った経緯
・LLMの内部と開発手法を低レベル APIから積み上げてしっかり学ぶため
・自作LLMはEmbeddingsとかの取得が用意だったりカスタマイズ性に優れる
・作ったLLMをHugging Faceに公開して英雄になりたかった
・作れる気がした
Slide 9
パソコン
とりあえずGPU付きのパソコンは昔から欲しかったので奨学金の 30万を使って
ラップトップを購入
CPU : インテル® Core™ i7-13650HX
GPU : NVIDIA® GeForce RTX™ 4060 Laptop GPU 8GB
メモリ : 32GB
OS : Ubuntu 22.04.3 LTS
Slide 10
パソコン
とりあえずGPU付きのパソコンは昔から欲しかったので奨学金の 30万を使って
ラップトップを購入
CPU : インテル® Core™ i7-13650HX
GPU : NVIDIA® GeForce RTX™ 4060 Laptop GPU 8GB ← 実は悲劇
メモリ : 32GB
OS : Ubuntu 22.04.3 LTS
Slide 11
誰でもわかる ‼LLM作り方講座 ‼
1.Transformerを作る
2.学習データセットを用意する
3.次単語予測を頑張る
Slide 12
1.Transformerを作る
・Feed Forward & Layer Norm
↑流石に基本的すぎるので Pytorchの既存の実装を使用
・Positional Encoding 外国の記事
・Attention部分 Paper with code
・
Slide 13
1.Transformerを作る
Slide 14
2. 学習データセットを用意する
OpenWebTextという大量の文章データを使用。
ここからはNanoGPTというリポジトリを参考に組んだ。
普通, このデータは全て物理メモリに乗せることはできないが、 Hugging Faceの
Datasets APIとnumpy.memmapという素晴らしい方法により解決することができる。
詳しくはここ‼
800万個のデータと 90億トークンの文章データが手に入りました ‼
Slide 15
2. 学習データセットを用意する ')?7P7????p
Slide 16
2. 学習データセットを用意する ')?
トークナイザーについて
<BOS> I am called the Beast . <EOS> -> [0, 7, 2, 11, 91, 14, 51, 4]
機械が文章を処理するためには自然言語数字の羅列に直してやる必要がある。
この時に, 一単語一単語トークナイズしていると、分類モデルのクラス数が膨大になって
しまう。そこで、 GPTや最近の GeminiなどではByte Pair EncodingやSentence Piece
などを用いて効率の良い単語の数値化を行っている。
これはLLMが大きいモデルを訓練できる理由の一つでもあるよ
Slide 17
3. 次単語予測を頑張る
Slide 18
3. 次単語予測を頑張る
次単語予測モデルも組んだし、データも用意できたし !よーし訓練開始だー !
Slide 19
3. 次単語予測を頑張る
次単語予測モデルも組んだし、データも用意できたし !よーし訓練開始だー !
CUDA OUT OF
MEMORY
Slide 20
誰でもわかるわけじゃないかも ‼LLM作り方講座 ‼
1.Transformerを作る
2.学習データセットを用意する
3.次単語予測を頑張る
4.モデルを軽量化せなあかん
Slide 21
4. モデルを軽量化せなあかん
model = GPT()として定義した時には CUDA Errorは起きなかった。
つまり訓練中にメモリが溢れるほどのエラーが起きている。
一体どこで ...?
Slide 22
4. モデルを軽量化せなあかん
model = GPT()として定義した時には CUDA Errorは起きなかった。
つまり訓練中にメモリが溢れるほどのエラーが起きている。
一体どこで ...?
A.計算グラフの構築
微分計算をするために右のような
計算グラフを作っている
これで空間計算量が増えて GPUが
圧迫される
Slide 23
4. モデルを軽量化せなあかん Do the math
大体今回作ろうとしたモデルはパラメーター数 0.1Bモデル, float32ならば、
0.1B×4Byte = 0.4GB
これにプラスされて計算グラフの構築 , Optimizerのパラメーター , etc…が
全てGPUに乗って
20倍以上になります (体感)
こりゃたまんないね
Slide 24
4. モデルを軽量化せなあかん
軽量化手法その 1
まずそもそもモデルの規模を落としましょう。これが一番軽量になります。
なお性能は落ちる。
Slide 25
4. モデルを軽量化せなあかん
軽量化手法その 2
数値を量子化しましょう。一部の計算は float32も精度がいらないです。
bfloat16がおすすめです。理由はアンダーフローが起きて事件が起きたからです。
(Qiita参照)
こうするとモデルの
サイズが落ちます。
Slide 26
4. モデルを軽量化せなあかん
他のメモリ節約方法
本来はGarbage Collectionという機能で使われていないメモリ領域は解放されていくは
ずですが、何故か学習中はそんなこともないので手動でメモリを解放していきます。これ
でGPUの負担はマシになります。
Slide 27
誰でもわかるわけじゃないかも ‼LLM作り方講座 ‼
1.Transformerを作る
2.学習データセットを用意する
3.次単語予測を頑張る
4.モデルを軽量化せなあかん
5.他の工夫
Slide 28
5. 他の工夫
多すぎるので長々と話してもしょうがないので羅列する
・勾配累積: 小さいバッチデータしか扱えない GPUメモリで使われる方法
・PostLNとPreLN: 多層Transformerアーキテクチャにおける勾配消失問題の
解決方法
・Temperature, TopK: 解答に多様性を持たせるため , 正解ラベル以外の出力
も許容する方法 , OpenChat botなどで最初の画面に Temperatureとあるがこ
れが由来
・モデルCompile: あらかじめモデルをコンパイルしておくことで計算が早くなり
ます。詳しくは NVIDIAの資料をどうぞ
Slide 29
色々試した結果....
Slide 30
色々試した結果....
上手くいかなかった
Slide 31
原因考察1
次単語予測のための Context長がGPU不足で確保できず。 (恐らく最重要 )
次単語予測は前 n単語までの単語から n+1単語目を予測するという学習方法だが、
GPUがカツカツな環境での開発では Context長を十分確保できず , 十分な情報を学ぶこ
とができなかった。
Slide 32
原因考察2
そもそも最近の ChatGPTは次単語予測をして大規模に事前学習を行った後に
RLHF(Reinforce Learning from Human Feedback)という方法で強化学習を行ったり、
SFT(Supervised Finetuning)をしている。
rinnaのRepositoryがわかりやすい
これを行う必要があった。
Slide 33
まとめ
色々手法とか言ってきたけど ...
Slide 34
まとめ
色々手法とか言ってきたけど ...
GPU is all we need.
Slide 35
Future Work
・ChatGPTを作るために RLHFガンガンやりやす。 nanoChatGPT
・RAGもまたPytorchのLayerから作ってみたいの思います (without langchain)
・ローカルな LLMを使ってAppを作りたいので合計 20GB以上はとりあえず欲しくて、今
のLaptop 8GBに外付けする形で 12GBとかは欲しいな ~
Tags
Categories
General
Download
Download Slideshow
Get the original presentation file
Quick Actions
Embed
Share
Save
Print
Full
Report
Statistics
Views
831
Slides
35
Age
690 days
Related Slideshows
22
Pray For The Peace Of Jerusalem and You Will Prosper
RodolfoMoralesMarcuc
34 views
26
Don_t_Waste_Your_Life_God.....powerpoint
chalobrido8
37 views
31
VILLASUR_FACTORS_TO_CONSIDER_IN_PLATING_SALAD_10-13.pdf
JaiJai148317
34 views
14
Fertility awareness methods for women in the society
Isaiah47
31 views
35
Chapter 5 Arithmetic Functions Computer Organisation and Architecture
RitikSharma297999
30 views
5
syakira bhasa inggris (1) (1).pptx.......
ourcommunity56
31 views
View More in This Category
Embed Slideshow
Dimensions
Width (px)
Height (px)
Start Page
Which slide to start from (1-35)
Options
Auto-play slides
Show controls
Embed Code
Copy Code
Share Slideshow
Share on Social Media
Share on Facebook
Share on Twitter
Share on LinkedIn
Share via Email
Or copy link
Copy
Report Content
Reason for reporting
*
Select a reason...
Inappropriate content
Copyright violation
Spam or misleading
Offensive or hateful
Privacy violation
Other
Slide number
Leave blank if it applies to the entire slideshow
Additional details
*
Help us understand the problem better