Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ollamaを使ったLocal Language Model活用法
Search
masa-ita
November 23, 2024
Technology
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ollamaを使ったLocal Language Model活用法
masa-ita
November 23, 2024
More Decks by masa-ita
See All by masa-ita
Run Instant NeRF on Docker
itagakim
1
2.4k
3D Clustering and Metric Learning
itagakim
0
430
Cloud TPUの使い方〜BigBirdの日本語学習済みモデルを作る〜
itagakim
0
770
多言語学習済みモデルmT5とは?
itagakim
1
810
AWSのGPUを安く使ってTensorFlowモデルを訓練する方法
itagakim
0
430
最近の自然言語処理モデルの動向
itagakim
1
610
ディープラーニングで芸術はできるか?〜生成系ネットワークの進展〜
itagakim
0
400
AWSとTerraform初心者がやってみたこと
itagakim
1
540
IntroductionToTensorFlow2_0.pdf
itagakim
1
390
Other Decks in Technology
See All in Technology
味覇で作るパスタが美味い - 20261001_yabaubuki.dev
livesense
PRO
0
130
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
5.8k
自分で立ててみるLLMサービス
y_sera15
0
160
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1.2k
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
0
230
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
860
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
130
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
160
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.2k
夫婦で子育てするための育児標準化
codmoninc
PRO
0
190
Kiro Crewをはじめよう
kizawa2020
1
140
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
2
4k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
From π to Pie charts
rasagy
1
400
Deep Space Network (abreviated)
tonyrice
0
360
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
A Tale of Four Properties
chriscoyier
163
24k
A designer walks into a library…
pauljervisheath
211
25k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
630
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
How to build a perfect <img>
jonoalderson
1
6.1k
Transcript
Ollamaを使った Local Language Model 活⽤法 板垣正敏 FROM PYTHON機械学習勉強会IN新潟 2024/11/23 JAWS-UG新潟#19
× PYTHON機械学習勉強会IN新潟#19 ⽣成AI開発ハンズオン
⽬次 • llama.cppとollama.app • チャットbotを作ってみた • OpenWebUIが便利 2
llama.cppとollama.app 3
llama.cpp • https://github.com/ggerganov/llama.cpp • Georgi Gerganov⽒が開発したGGMLを核とする⾔語モデル実⾏環境 • MetaのLlamaをはじめとする多種のモデルに対応 • Mac,
Windows, Linuxに対応 • Apple Silicon/NVIDIA/Intel/AMDなどのGPUとCPUに対応 • 1.5bitから8bitまでの量⼦化に対応しメモリ節約と推論速度向上を実現 4
量⼦化 • 深層学習モデルのパラメータはFP32が基本であるが、FP16あるいは 精度を犠牲にして表現範囲を拡⼤したBP16でも⼤きな性能低下がな いことが知られている • パラメータ数の⾮常に多いLLMにおいては、さらに浮動⼩数点数では なく整数に変換を⾏うことで、モデルの圧縮が⾏われるようになって いる •
INT8から1.5ビット(-1,0,1)まで様々な量⼦化⼿法が⽣まれている 5
ollama.app • https://ollama.com • llama.cpp + モデルリポジトリ + ダウンロード機能 •
わかりやすいコマンドラインインターフェイス • ⾃動アップデート • Web APIを持つサーバ搭載 6
ollama.appコマンドラインインターフェイス • ollama run <モデル名> • モデルを実⾏しテキスト⼊⼒を待つ • ollama pull
<モデル名> • リポジトリからモデルをダウンロード • ollama list • ダウンロード済み(登録済み)のモデル⼀覧を表⽰ • ollama rm <モデル名> • モデルを削除 7
リポジトリにないモデルの登録 • 必要なもの • GGUF形式の学習済みパラメータ • momonga⽒がHugging Faceに⽇本語対応モデルの量⼦化済みモデルをアップロード してくれている https://huggingface.co/mmnga
• llama.cppを使えばHugging Faceに公開されたモデルをGGUF形式にコンバートした り、量⼦化したりすることができる • Modelfile • モデルファイル、パラメータ、テンプレートなどを定義したテキストファイル • ollama show --modelfile <モデル名>で既存モデルのmodelfile出⼒可能 • ollama create <モデル名> -f <モデルファイル名> 8
ollama python API • https://github.com/ollama/ollama-python • 同期と⾮同期のAPIを提供 • ollama.chat(), ollama.generate(),
そしてollama.embed() • その他CLIの各コマンドをサポート 9
独⾃のチャットWebアプリを作る 10
発端は・・・ • Ruby on Rails 8.0リリース • WebSocketでの通信に対応するAction CableがRedisなし(SQLite)がデ フォルトに
• Chatアプリが気軽にできそう • Ruby版ollama-aiパッケージを使ってChatGPTもどきが出来る • [⽣成AI]共感型カウンセラーボットを作成する - Ruby on Rails7編 • https://note.com/creativival/n/n504dc24f79d6 • Rails 8.0でやってみる 11
やってみたが・・・ • Action Cable使ってなかった • 通常のControllerにロジックを実装 • LLMの応答が⽣成するまで画⾯がフリーズ • 対話履歴をセッション変数で管理
• Railsのデフォルトではセッション変数はCookieに保存→4096バイトの壁 • セッションストアをキャッシュに変更 • config.session_store :cache_store 12
Django + Channels • どんな⾔語・フレームワークでも構わないが、ここはPython機械学 習研究会の⽴場上Djangoを使⽤(Flaskでもいいのだけれど) • チャットアプリらしく⾒せるにはSPA • LLMからの応答は⾮同期で表⽰したい
• ChannelsはWebSocketやIoTで使われるMQTTなどのPub/Subモデ ルによる⾮同期通信をサポートするDjangoアドオンライブラリ 13
まずはChatアプリの例を検索 • Realtime chat app using Django • https://www.geeksforgeeks.org/realtime-chat-app-using-django/ •
ユーザー管理は不要なので削除 • CSSはRails版を転⽤ • 対話履歴はとりあえずクライアント側に持たせた • Ollamaのストリーミング出⼒に対応させた 14
WebSocketでChannelsを使う︓サーバー側 class ChatConsumer(AsyncWebsocketConsumer): async def connect(self): await self.accept() async def
disconnect(self, close_code): pass async def receive(self, text_data): messages = json.loads(text_data) last_message = messages[-1] content = last_message["content"] role = last_message["role"] await self.send( text_data=json.dumps({ "content" : content, "role" : role, })) ollama_response = await self.get_ollama_response(messages) await self.send( text_data=json.dumps({ "content" : ollama_response, "role" : "assistant", })) async def get_ollama_response(self, messages): system_prompt = [{ 'content': SYSTEM_CONTENT, 'role': 'system’}] response = await AsyncClient().chat( model=MODEL_NAME, messages=system_prompt + messages) return response['message']['content'] 15
WebSocketでChannelsを使う︓クライアント const chatSocket = new WebSocket("ws://" + window.location.host + "/");
var messages = []; chatSocket.onopen = function (e) { console.log("The connection was setup successfully !"); }; chatSocket.onclose = function (e) { console.log("Something unexpected happened !"); }; … document.querySelector("#post_button").onclick = function (e) { var messageInput = document.querySelector("#message_input").value; messages.push({ content: messageInput, role : "user"}) chatSocket.send(JSON.stringify(messages)); }; document.querySelector("#clear_button").onclick = function (e) { messages = []; document.querySelector("#messages").innerHTML = ""; } chatSocket.onmessage = function (e) { const data = JSON.parse(e.data); messages.push(data); var div = document.createElement("div"); div.className = data.role == "user" ? "message user" : "message"; div.innerHTML = data.content; document.querySelector("#message_input").value = ""; document.querySelector("#messages").appendChild(div); document.querySelector("#messages").scrollTop = document.querySelector("#messages").scrollHeight; }; 16
demo 17
実⽤化するには・・・ • ユーザー管理はやっぱり必要 • 対話記録を残すためにDjangoモデルを導⼊ 18
OpenWebUI 19
OpenWebUI • https://openwebui.com • 以前はOllama WebUIと呼ばれていたらしい • OpenAI、ClaudeなどクラウドLLMや、ollamaなどのローカルLLM を使って独⾃のチャットインターフェイスを構築するためのツール •
Pythonパッケージとして配布されるが、Dockerでの環境構築を推奨 docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main 20
Open-WebUIの特徴 • 設定が簡単 • OpenAI APIとの統合 • レスポンシブ・デザイン • プログレッシブ・ウェブアプリ
ケーション • マークダウンとLaTeXのサポート • モデルビルダー • ローカル⼜はリモートのRAG対応 • Web検索を利⽤したRAG • Webブラウンジング機能 • 画像⽣成との統合 • 同時に複数のモデルを使⽤可能 • ロールベースのアクセス制御 • 多⾔語対応 • 継続的アップデート 21
demo 22
参考 • llama.cpp の動かし⽅と量⼦化⼿法 • https://zenn.dev/turing_motors/articles/f5f19f875bd8ba • [⽣成AI]共感型カウンセラーボットを作成する - Ruby
on Rails7編 • https://note.com/creativival/n/n504dc24f79d6 • Realtime chat app using Django • https://www.geeksforgeeks.org/realtime-chat-app-using-django/ • Open-WebUI...LLMのハブ的ソフト • https://qiita.com/tamizzo/items/fae40a7171dc5661de6e • 加藤 智久🌻 Zuitt 代表 ITエンジニア育成フィリピン最⼤⼿ のプロンプト • https://x.com/kato_/status/1643470077738762242 34