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
780
多言語学習済みモデル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
400
Other Decks in Technology
See All in Technology
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
230
Adversary Infrastructure Hunting101
disconinja
0
110
Metadata - Section 2: Simple Metadata & Meta Tags
mohab1
0
130
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
780
Claude for Google Workspaces ポン出し/claude-for-google-workspace-slide-conversion
emiki
0
500
Classmethod Company Deck
satoshi7
1
830
Agent × Maestro で始める モバイル E2E 端末準備からテスト実行・結果確認まで
sansantech
PRO
0
140
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
250
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
4
680
2026-10-24 JAWS JAWS-UG 茨城 #18 IAM Policy Autopilotってなにさ。terraform planからIAM Policyつくれるの? / What's IAM Policy Autopilot
masasuzu
0
120
Refining Active Record
shugo
0
200
Vue.jsのGitHubから学ぶ意思決定
yut0naga1_fa
1
120
Featured
See All Featured
From π to Pie charts
rasagy
1
410
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
580
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
490
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
How to train your dragon (web standard)
notwaldorf
96
6.9k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Code Review Best Practice
trishagee
74
20k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
So, you think you're a good person
axbom
PRO
2
2.2k
YesSQL, Process and Tooling at Scale
rocio
174
15k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
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