88.1K Views
July 19, 23
スライド概要
TechFeed Experts Night#23にて登壇
https://techfeed.io/events/techfeed-experts-night-23
闇のエンジニア/変なデジカメ開発中/ディープラーニング芸人/Raspberry Piとからあげ大好き/はてなブログ書いてます
オープンなLLMをローカルで動かす TechFeed Experts Night #23 2023/07/19 からあげ @karaage0703 https://techfeed.io/events/techfeed-experts-night-23
自己紹介 名前:からあげ(本名は内緒) 職業:エンジニア 家族:妻・娘・ネコ x 2 https://karaage.hatenadiary.jp @karaage0703 karaage0703 ブログ、各種SNSで情報発信しています
主な著書・寄稿・協力 2021/01/08発売 2021/04/21 改訂版発売 寄稿・協力多数(ラズパイマガジン・日経Linux…)
今日の議題 オープンなLLM(Large Language Model)の話 - ChatGPT以外のLLMの話です - ChatGPTのプロンプトエンジニアリングの話やAPIの話はな いです(ごめんなさい) - それなりのGPU・メモリがあるマシンを持っている人向け です(ごめんなさい)
そもそもChatGPT以外のLLMって何 があるの?
日本語が使えるLLM 引用元:W&B LLMのJGLUEによる日本語タスクベンチマーク https://wandb.ai/wandb/LLM_evaluation_Japan/reports/LLM-JGLUE--Vmlldzo0NTUzMDE2?accessToken=u1ttt89al8oo5p5j12eq3nldxh0378os9qjjh14ha1yg88nvs5irmuao044b6eqa
日本語が使えるLLM GPT-4(ChatGPTに使われている)が最強 MosaicMLというアメリカの会社のmpt-7b rinnaさんも頑張っている サイバーエージェントさん(Open Calm)も頑張っている ここには載ってないけどRWKVというのもある 引用元:W&B LLMのJGLUEによる日本語タスクベンチマーク https://wandb.ai/wandb/LLM_evaluation_Japan/reports/LLM-JGLUE--Vmlldzo0NTUzMDE2?accessToken=u1ttt89al8oo5p5j12eq3nldxh0378os9qjjh14ha1yg88nvs5irmuao044b6eqa
LLMの比較表 性能 モデルサイズ 学習データ ライセンス MPT rinna Open Calm RWKV ChatGPTの次に高 い MPTの次くらい? Rinnaとほぼ同等か? ChatGPTと同等? 7B 3.6B 1B/3B/7B 4B/7B/14B 日本語のWikipediaと Common Crawl Alpaca+ShareGPT+... などに対してファイ ンチューニング CC BY-SA 4.0 Apache-2.0 テキストとコード 日本語のCC-100、日本語の の1Tトークン C4、日本語のWikipediaの 約312.5Bトークン Apache-2.0 MIT ※ MetaのLLaMA系は商用不可でダウンロード許可制だったため除外 (7/19 に商用利用可能なLlama2が発表。今後注目) 手頃に動かせる rinna, OpenCALM RWKVを試します
そもそもChatGPT以外の LLMを使う理由って何?
オープンなLLMを使う理由 (現時点では) あんまりないです
オープンなLLMを使う理由 あえていうなら以下 - Open AIの代替:トラブル、サービス変更、終了リスク ローカルで動かせる:ネットが使えない環境で使える ファインチューニングできる:(今日は扱いません) お金:Open AIのAPI費用が不要 楽しい:多分これが一番
オープンなLLMの動かし方
オープンなLLMの動かし方比較 項目 OpenAI API (ChatGPT) Google Colab + Open LLM ローカル + Open LLM 性能 高い ◎ API料金(1円/分) △ 低い〜そこそこ △ 無料 〜 課金 △ 低い〜そこそこ △ 無料 ◯ 無し ◯ 不要 ◯ あり(課金次第) △ 毎回必要 ☓ 無し ◯ 初回のみ必要 ◯ ネット環境 必要 ☓ 必要 ☓ 不要 ◯ セットアップ 簡単 ◯ 簡単 ◯ 難しい ☓ 利用料金 利用時間制約 モデルダウンロード 今回はローカルで動かします ※ Google Colabで動かしたい場合は npaka さんのnote参照
LLMを動かすための 環境構築
最初に Macは一旦忘れましょう
PCを買いに行こう ゲーミングPCで有名なメーカー • • • • ドスパラ マウスコンピューター ツクモ パソコン工房 好きなところで買いましょう 私はパソコン工房にしました
PCを選ぼう 項目 内容 CPU Intel Core i 7 メモリ 32GB GPU NVIDIA RTX3060(12GB) ストレージ SSD x 2 重要なのはGPUとメモリ(GPU/CPU)
GPUは重要(特にメモリ) 貧者(?)のGPU RTX3060 ※ 冗談なので本気にしないでください
セットアップしよう ブログ記事: Windows PCに安定したネイティブLinux環境を 構築する方法 Windows環境とLinux環境両方あると便利 SSDに開発環境を丸ごと(OS含む)入れてSSDからブート
スワップメモリを確保しよう(Windows) .wslconfigファイルに(なければ作る) C:\Users\[ユーザ名]\.wslconfig こう書く [wsl2] memory=32GB swap=128GB メインメモリの容量が最大 スワップメモリ容量 とりあえずバカでかスワップを確保
スワップメモリを確保しよう(Linux) こんな感じ。32GBの例ですが、もっと増やしてOK $ sudo fallocate -l 32G /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile $ sudo swapon /swapfile とりあえずバカでかスワップを確保(2回目)
DockerでのLLMの動かし方 - Dockerインストール - Dockerビルド - Dockerラン + 実行 3ステップでOK
Dockerを使う理由 - セットアップが楽になる(場合もある) - CUDAインストール不要(NVIDIA Docker) - GPU/CPUを簡単に切り替えられる
Dockerインストール CPUのみ $ curl -s https://raw.githubusercontent.com/karaage0703/ubuntu-setup/master/installdocker.sh | /bin/bash GPU使う $ curl -s https://raw.githubusercontent.com/karaage0703/ubuntu-setup/master/installnvidia-container-toolkit.sh | /bin/bash ワンライナーでインストールできるスクリプトを準備 (ダメだったら/不安だったら公式サイトへGo)
Dockerビルド・ラン Dockerビルド $ cd && git clone https://github.com/karaage0703/ChatLLM $ cd ~/ChatLLM $ docker build -t ubuntu:ChatLLM . Dockerラン CPUの場合は --gpus all を消すだけ $ cd ~/ChatLLM $ docker run -it -v $(pwd):/root --gpus all ubuntu:ChatLLM ビルドしてランするだけ
Dockerで動かしてみる コンテナ内でのコマンド root@hostname:/# root@hostname:~# root@hostname:~# root@hostname:~# cd /root python3 chat_calm.py python3 chat_rinna.py python3 chat_rwkv.py これで動かせます (1回目だけはモデルダウンロードがあるので時間かかります)
オープンなLLMを動かしてみる 使用モデル ChatGPT:GPT-4(リファレンス) rinna:rinna/japanese-gpt-neox-3.6b-instruction-sft Open Calm: cyberagent/open-calm-3b RWKV:RWKV-4-World-3B-v1-20230619-ctx4096.pth - 小さいモデルを使った、特定の少量のプロンプトで確認した動作例です - 本来はモデルに合わせたプロンプトエンジニアリングも必要です - 条件も揃えていません。結果はあくまで雰囲気として理解してください
模範演技:ChatGPT
模範演技:ChatGPT
模範演技:ChatGPT
模範演技:ChatGPT
rinnaの動作例
rinnaの動作例
rinnaの動作例
Open Calmの動作例
Open Calmの動作例
Open Calmの動作例
RWKVの動作例
RWKVの動作例
RWKVの動作例
text-generation-webui - GUIがあり入力しやすい - モデルに合わせたプロンプトが 作れる - 設定が豊富 ブログ記事: text-generation-webuiをDockerで動かす
text-generation-webuiで動かしてみる
text-generation-webuiで動かしてみる
オープンなLLMの課題 - 大きなモデル・計算リソースが必要 - 出力が安定していない(突然暴走しがち) - 性能はChatGPTには遠く及ばない(ただし、 今回は小さ目のモデルでの検証) 課題は色々あるけど時間が解決してくれそうではある
まとめ 以下について学びました - オープンなLLMの概要説明 - オープンなLLMの動かし方 - オープンなLLMを動かした結果 オープンなLLMを楽しみましょう!
おまけ:Llama2を動かしてみた 引用: https://huggingface.co/meta-llama モデル: llama-2-7b-chat.ggmlv3.q8_0.bin 参考:Llama.cpp で Llama 2 を試す (npaka神) https://note.com/npaka/n/n0ad63134fbe2
Llama2動作例
Llama2動作例
Llama2動作例
Llama2動作例
ご静聴ありがとうございました