SlideShare a Scribd company logo
1 of 35
Download to read offline
自作LLM作ろうとして
爆散した話
今日の話
PytorchとHugging Face OnlyでLLMをガチで組み上げようとした時の話です。
成功例がみたい人は
Stability AI Japanの秋葉拓哉さんの記事を参考にした後
・もし明日、上司に「GPT-4を作れ」と言われたら?Stability AIのシニアリサーチサイエンティス
トが紹介する「LLM構築タイムアタック」
Weight & Biasesの
・ベストプラクティス
を読んで、さらにGPT-NeoXとかを触ってみればいいと思います。
今日の話
全部実はQiitaにあげています。
☆とブクマしてください。トレンドに載せてください。
LLM制作爆死回顧録、自作LLMを作るときに使った手法全
まとめとどのようにして何の成果も得られなかったのかにつ
いて
まずお前誰だよ
・アカウント名: 犬(SSR) @takanas0517
・職業: 東大工学部電子情報工学科
3年
・好きなコンピューターサイエンスの分野
・OS
・WebAssembly
・ML
・最近pythonのライブラリ作って全世界公開した
・研究者と開発者の中間みたいな人
・趣味: 節約, フルスクラッチ実装
謝罪
急いで作ったのでコンピューターサイエンスの基礎ができている人向けになってしまいま
した。わかりにくいところがあれば質問をください。
GPT4を使いたい‼でもお金は使いたくない‼
大学3年生の夏, ちょうどまとまった時間ができた僕はLLMを追うことに決めた
しかし、OpenAIにお金は使いたくない....
GPT4を使いたい‼でもお金は使いたくない‼
大学3年生の夏, ちょうどまとまった時間ができた僕はLLMを追うことに決めた
しかし、OpenAIにお金は使いたくない....
作るか‼
作ろうと思った経緯
・LLMの内部と開発手法を低レベルAPIから積み上げてしっかり学ぶため
・自作LLMはEmbeddingsとかの取得が用意だったりカスタマイズ性に優れる
・作ったLLMをHugging Faceに公開して英雄になりたかった
・作れる気がした
パソコン
とりあえずGPU付きのパソコンは昔から欲しかったので奨学金の30万を使って
ラップトップを購入
CPU : インテル® Core™ i7-13650HX
GPU : NVIDIA® GeForce RTX™ 4060 Laptop GPU 8GB
メモリ : 32GB
OS : Ubuntu 22.04.3 LTS
パソコン
とりあえずGPU付きのパソコンは昔から欲しかったので奨学金の30万を使って
ラップトップを購入
CPU : インテル® Core™ i7-13650HX
GPU : NVIDIA® GeForce RTX™ 4060 Laptop GPU 8GB ←実は悲劇
メモリ : 32GB
OS : Ubuntu 22.04.3 LTS
誰でもわかる‼LLM作り方講座‼
1. Transformerを作る
2. 学習データセットを用意する
3. 次単語予測を頑張る
1. Transformerを作る
・Feed Forward & Layer Norm
↑流石に基本的すぎるのでPytorchの既存の実装を使用
・Positional Encoding 外国の記事
・Attention部分 Paper with code
・
1. Transformerを作る
2. 学習データセットを用意する
OpenWebTextという大量の文章データを使用。
ここからはNanoGPTというリポジトリを参考に組んだ。
普通, このデータは全て物理メモリに乗せることはできないが、Hugging Faceの
Datasets APIとnumpy.memmapという素晴らしい方法により解決することができる。
詳しくはここ‼
800万個のデータと90億トークンの文章データが手に入りました‼
2. 学習データセットを用意する 補足: mmap
2. 学習データセットを用意する 補足
トークナイザーについて
<BOS> I am called the Beast . <EOS> -> [0, 7, 2, 11, 91, 14, 51, 4]
機械が文章を処理するためには自然言語数字の羅列に直してやる必要がある。
この時に, 一単語一単語トークナイズしていると、分類モデルのクラス数が膨大になって
しまう。そこで、GPTや最近のGeminiなどではByte Pair EncodingやSentence Piece
などを用いて効率の良い単語の数値化を行っている。
これはLLMが大きいモデルを訓練できる理由の一つでもあるよ
3. 次単語予測を頑張る
3. 次単語予測を頑張る
次単語予測モデルも組んだし、データも用意できたし!よーし訓練開始だー!
3. 次単語予測を頑張る
次単語予測モデルも組んだし、データも用意できたし!よーし訓練開始だー!
CUDA OUT OF
MEMORY
誰でもわかるわけじゃないかも‼LLM作り方講座‼
1. Transformerを作る
2. 学習データセットを用意する
3. 次単語予測を頑張る
4. モデルを軽量化せなあかん
4. モデルを軽量化せなあかん
model = GPT()として定義した時にはCUDA Errorは起きなかった。
つまり訓練中にメモリが溢れるほどのエラーが起きている。
一体どこで...?
4. モデルを軽量化せなあかん
model = GPT()として定義した時にはCUDA Errorは起きなかった。
つまり訓練中にメモリが溢れるほどのエラーが起きている。
一体どこで...?
A. 計算グラフの構築
微分計算をするために右のような
計算グラフを作っている
これで空間計算量が増えてGPUが
圧迫される
4. モデルを軽量化せなあかん Do the math
大体今回作ろうとしたモデルはパラメーター数0.1Bモデル, float32ならば、
0.1B×4Byte = 0.4GB
これにプラスされて計算グラフの構築, Optimizerのパラメーター, etc…が
全てGPUに乗って
20倍以上になります(体感)
こりゃたまんないね
4. モデルを軽量化せなあかん
軽量化手法その1
まずそもそもモデルの規模を落としましょう。これが一番軽量になります。
なお性能は落ちる。
4. モデルを軽量化せなあかん
軽量化手法その2
数値を量子化しましょう。一部の計算はfloat32も精度がいらないです。
bfloat16がおすすめです。理由はアンダーフローが起きて事件が起きたからです。
(Qiita参照)
こうするとモデルの
サイズが落ちます。
4. モデルを軽量化せなあかん
他のメモリ節約方法
本来はGarbage Collectionという機能で使われていないメモリ領域は解放されていくは
ずですが、何故か学習中はそんなこともないので手動でメモリを解放していきます。これ
でGPUの負担はマシになります。
誰でもわかるわけじゃないかも‼LLM作り方講座‼
1. Transformerを作る
2. 学習データセットを用意する
3. 次単語予測を頑張る
4. モデルを軽量化せなあかん
5. 他の工夫
5. 他の工夫
多すぎるので長々と話してもしょうがないので羅列する
・勾配累積: 小さいバッチデータしか扱えないGPUメモリで使われる方法
・PostLNとPreLN: 多層Transformerアーキテクチャにおける勾配消失問題の
解決方法
・Temperature, TopK: 解答に多様性を持たせるため, 正解ラベル以外の出力
も許容する方法, OpenChat botなどで最初の画面にTemperatureとあるがこ
れが由来
・モデルCompile: あらかじめモデルをコンパイルしておくことで計算が早くなり
ます。詳しくはNVIDIAの資料をどうぞ
色々試した結果....
色々試した結果....
上手くいかなかった
原因考察1
次単語予測のためのContext長がGPU不足で確保できず。(恐らく最重要)
次単語予測は前n単語までの単語からn+1単語目を予測するという学習方法だが、
GPUがカツカツな環境での開発ではContext長を十分確保できず, 十分な情報を学ぶこ
とができなかった。
原因考察2
そもそも最近のChatGPTは次単語予測をして大規模に事前学習を行った後に
RLHF(Reinforce Learning from Human Feedback)という方法で強化学習を行ったり、
SFT(Supervised Finetuning)をしている。
rinnaのRepositoryがわかりやすい
これを行う必要があった。
まとめ
色々手法とか言ってきたけど...
まとめ
色々手法とか言ってきたけど...
GPU is all we need.
Future Work
・ChatGPTを作るためにRLHFガンガンやりやす。nanoChatGPT
・RAGもまたPytorchのLayerから作ってみたいの思います(without langchain)
・ローカルなLLMを使ってAppを作りたいので合計20GB以上はとりあえず欲しくて、今
のLaptop 8GBに外付けする形で12GBとかは欲しいな~

More Related Content

What's hot

ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
 

What's hot (20)

メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
Redmineとgitの 連携利用事例
Redmineとgitの 連携利用事例Redmineとgitの 連携利用事例
Redmineとgitの 連携利用事例
 
Webフロントエンドエンジニアの戦い〜歴史と現在、そして未来
Webフロントエンドエンジニアの戦い〜歴史と現在、そして未来Webフロントエンドエンジニアの戦い〜歴史と現在、そして未来
Webフロントエンドエンジニアの戦い〜歴史と現在、そして未来
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
信頼性とアジリティを同時に上げろ!モノタロウのカナリアリリース導入.pdf
信頼性とアジリティを同時に上げろ!モノタロウのカナリアリリース導入.pdf信頼性とアジリティを同時に上げろ!モノタロウのカナリアリリース導入.pdf
信頼性とアジリティを同時に上げろ!モノタロウのカナリアリリース導入.pdf
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
Viva Connections 拡張機能入門
Viva Connections 拡張機能入門Viva Connections 拡張機能入門
Viva Connections 拡張機能入門
 
PlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.keyPlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.key
 
クソコード動画「Managerクラス」解説
クソコード動画「Managerクラス」解説クソコード動画「Managerクラス」解説
クソコード動画「Managerクラス」解説
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
Use After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すUse After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試す
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 

Recently uploaded

Recently uploaded (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

自作LLM作ろうとして 爆散した話 (1).pdf