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
Ollamaを使ったLocal Language Model活用法
Search
masa-ita
November 23, 2024
Technology
230
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.3k
3D Clustering and Metric Learning
itagakim
0
410
Cloud TPUの使い方〜BigBirdの日本語学習済みモデルを作る〜
itagakim
0
750
多言語学習済みモデルmT5とは?
itagakim
1
790
AWSのGPUを安く使ってTensorFlowモデルを訓練する方法
itagakim
0
420
最近の自然言語処理モデルの動向
itagakim
1
590
ディープラーニングで芸術はできるか?〜生成系ネットワークの進展〜
itagakim
0
380
AWSとTerraform初心者がやってみたこと
itagakim
1
530
IntroductionToTensorFlow2_0.pdf
itagakim
1
380
Other Decks in Technology
See All in Technology
kaonavi Tech Night#1
kaonavi
0
110
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
830
AI時代のPlaywright活用(システムテストを自動化する ー 実行エンジンにPla ywrightを選んだ理由)
ynisqa1988
1
540
変更し続けられるシステムをどう保つか — AI時代のSSoTという設計原則
kawauso
0
170
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
240
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
1.5k
カードゲーム作りが教えてくれた プロダクトオーナーシップ
moritamasami
0
110
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
9
4k
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
430
Type-safe IaC for Dart
coborinai
0
160
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.4k
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.6k
Featured
See All Featured
Abbi's Birthday
coloredviolet
3
8.7k
Visualization
eitanlees
152
17k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Marketing to machines
jonoalderson
1
5.6k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
First, design no harm
axbom
PRO
2
1.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
350
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
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