Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プログラムに組み込みたい人向けLLMの概要 / LLM for programmers
Search
Naoki Kishida
July 19, 2024
3
480
プログラムに組み込みたい人向けLLMの概要 / LLM for programmers
2024/7/19(金)に開催された福岡LLM勉強会での登壇資料です
https://connpass.com/event/324157/
Naoki Kishida
July 19, 2024
Tweet
Share
More Decks by Naoki Kishida
See All by Naoki Kishida
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
400
Java Webフレームワークの現状 / java web framework
kishida
10
10k
Is Object Oriented nesessary? COSCUP 2024
kishida
0
140
Javaの現状2024夏 / Java current status 2024 summer
kishida
5
1.9k
Java 22 Overview
kishida
1
330
Is Object-Oriented nessesary?
kishida
0
110
オブジェクト指向は必要なのか / Is object-oriented needed?
kishida
36
25k
AI時代を乗り切る実装力をつけよう / Get avility of implementation beyond AI era
kishida
4
7.6k
AI時代を生き抜くために処理をちゃんと書けるようになろう / write a executable process for AI era
kishida
31
18k
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
243
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
A Tale of Four Properties
chriscoyier
157
23k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
We Have a Design System, Now What?
morganepeng
51
7.3k
GraphQLとの向き合い方2022年版
quramy
44
13k
Automating Front-end Workflow
addyosmani
1366
200k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Transcript
プログラムに組み込みたい人向けLLMの概要 2024-07-19 福岡LLM勉強会 きしだ なおき
2 LLMとは • Large Language Model • 言語を処理する深層学習モデルでパラメータ数が大きいもの • Largeとは?となりがちだけど、数億パラメータくらいから大規模と言
われ始めた。 • いまでは数億パラメータのLLMは非常に小さいとみなされる・・・ • Microsoftは数十億程度のLLMをSLMと呼ぼうとしているけど、混乱するだけに 見える。
LLMのキモはTransformer • アテンションに基づくエンコーダー&デコーダー • 「アテンション」によって文章のどこに注目するかを決める • 性能がめちゃ向上した • GPT=Generative Pre-trained
Transformer
代表的なLLMサービス • OpenAI • ChatGPT https://chatgpt.com/ • Google • Gemini
https://gemini.google.com/ • Anthropic • Claude https://claude.ai/
自分のシステムに組み込みたいよ! • Microsoft • Azure OpenAI Service • ChatGPTが使える •
Google • Google Cloud Gemini API • Gemini Proが使える • AWS • Amazon Bedrock • Amazon独自のTitanやMetaのLlamaなども動くけど、現実的にはClaudeでは
知識を与えるには • ファインチューニング • プロンプトに埋め込み • 外部情報を埋め込む(RAG)
ファインチューニング • LLMのモデル自体を変更する • 特性を変えるのであれば必要 • 応答モデルをつくる • 日本語に強くする •
コストが高い • ノウハウも必要
プロンプトに埋め込み • プロンプトに基礎情報を埋め込む • LLMの性能向上で長大なプロンプトが使えるようになった • ファインチューニングより性能がいい場合もあるらしい • メガプロンプト •
LLMの性能向上で特性を変える必要もなくなっている • 試行錯誤しやすい
RAG(Retrieval Argumented Generation) • 質問の回答に近いドキュメントを検索して返答作成に利用する • 埋め込みベクトルを利用して比較 • 近似近傍検索(ANN) "mountain"
"cat" "guitar" match! "にゃーん"
RAGの問題点と回避 • 質問に近いのは「似た質問」である問題 • 質問と回答の組み合わせで学習させたランキング器を使う • Rerank
マルチモーダル • 文書と画像などを扱えるモデル • 画像とテキストの対応を学習 • CLIP • CLIPのベクトルをLLMに入れると 画像対応LLMがつくれる
CLIPだけでも結構処理ができる • テキストによる画像検索 • 画像の分類 "cat" match!
エッジLLM • 手元のマシンでLLMを動かしたい • モデルは? • ハードウェアは?
手元で動かせるモデル • 要日本語と考えると日本語前提で作られたモデルか、既存モデル に日本語継続学習させたモデル モデル名 開発元 サイズ ベースモデル Stockmark-LLM Stockmark
100B, 13B 独自 CyberAgentLM3 CyberAgent 22B 独自 Sarashina2 SB Institute 13B, 7B 独自(指示応答チューニングなし) CyberAgentLM2 CyberAgent 7B 独自 Llama 3 Swallow 70B Swallo Project 70B Llama 3 Nekomata 14B Rinna 14B Qwen ELYZA japanese Llama2 13B ELYZA 13B Llama 2 RakutenAI-7B Mistral-7B 7B 楽天 https://github.com/llm-jp/awesome-japanese-llm
性能は? • 13Bあたりだと性能以前にプロンプトに従わせるのが大変 • ファインチューニングが必要になりそう(LoRA) 異世界カフェてスローライフを満喫 -> 異世界カフェでまったり生活を楽しむ 転生したら無敵のスライムたった件 ->
転生したら無敵のスライムだった件 USER: 次のタイトルに適切な濁点や半濁点をつけよ。 未来から来た人類の救世主 ASSISTANT: 未来から来た人類の救世主となった。 俺の隣の席の美少女か実は勇者たった -> 俺の隣の席の美少女は実は勇者だった 最強剣士の弟子は魔法学校て無双する -> 最強剣士の弟子が魔法学校で無双する トラコンと契約した俺か最強に君臨する日々 -> トラコンと契約した男が強大な力で君臨する日々 魔法少女たけと、魔王軍に入隊しました -> 魔法少女タケト、魔軍に入隊しました 引きこもりケーマーか現実世界て最強になった理由 -> 引きこもりオンラインゲーマーだったが現実世界に出てきて最強になった 冒険者キルトの受付嬢か教える生き残り術 -> 冒険者ギルドの受付嬢が教える生き残り術 転生したら乙女ケームの悪役令嬢てしたか、実は最強の魔導士てした -> 転生したら乙女ゲームの悪役令嬢だったか、実は最強の魔導士だった 異世界て始める農業ライフ 〜勇者は畑を耕す〜 -> 異世界て始める農業ライフ 〜勇者は魔法を耕す〜 期待した形式で返ってきていない USER: 次のタイトルに適切な濁点や半濁点をつけよ。 冒険者キルトの凄腕魔導士か驚異的な力て敵を撃破する ASSISTANT: 冒険者ギルドの凄腕魔導士が驚異的な力で敵を撃破する USER: 次のタイトルに適切な濁点や半濁点をつけよ。 %s ASSISTANT: CALM2 7Bでの濁点付与
ちなみにチャットサービスでは? • Geminiがんばって
LLMを動かすのに必要なメモリ • 16bit floatの場合、1パラメータにつき2バイト • 7Bモデルなら14GB • 8bit量子化 • 8bitにまるめても性能があまり変わらない
• 7Bモデルなら7GB • 4bit量子化 • 4bitでも案外性能が落ちない • 7Bモデルなら3.5GB
GPUのメモリ • 手元で32GB以上は現実的ではない • RTX 4060 Ti 16GB x2いいかも 型番
VRAM 価格 H100 80GB 450万円 A100 80GB 80GB 250万円 A100 40GB 150万円 RTX A6000 48GB 65万円 RTX 4090 24GB 25万円 RTX 4060 Ti 16GB 16GB 9万円 RTX 3090 24GB 10万円(中古) RTX 3060 12GB 4万円(中古)
CPU推論の時代 • GPUはメモリが高い • CPU(+NPU SoC)の時代が到来では • 各社がCPU+NPU SoCを出してきている •
M2 / M3(Apple) • Snapdragon X Elite(Qualcomm) • Lunar Lake(Intel) • Ryzen AI 300(AMD) https://pc.watch.impress.co.jp/docs/column/ubiq/1608446.html
問題はメモリ幅 • JavaでLLMを組んでみる(Llama2.cppを移植) • 並列化しても速くならなくなる • 重みデータを8bitにすると処理は増えてるのに速くなる • メモリ読み込みの問題 •
SoCが対応しても大きなモデルは厳しいかも https://gist.github.com/kishida/05656bfcbe840f269784f7dbbee5928e ベクトルの乗算で時間がかかる(ws.getで時間がかかる)
けど楽しそうなのでがんばろう • 推論だけなら難しくないので自分で組むと楽しいです