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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
masa-ita
November 23, 2024
Technology
220
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
400
Cloud TPUの使い方〜BigBirdの日本語学習済みモデルを作る〜
itagakim
0
740
多言語学習済みモデルmT5とは?
itagakim
1
780
AWSのGPUを安く使ってTensorFlowモデルを訓練する方法
itagakim
0
410
最近の自然言語処理モデルの動向
itagakim
1
590
ディープラーニングで芸術はできるか?〜生成系ネットワークの進展〜
itagakim
0
380
AWSとTerraform初心者がやってみたこと
itagakim
1
520
IntroductionToTensorFlow2_0.pdf
itagakim
1
380
Other Decks in Technology
See All in Technology
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
270
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
110
元・セキュリティ学習経験0大学生による業務紹介 / An Introduction to the Job by a Former College Student with Zero Security Training Experience
nttcom
0
170
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
180
元銀行員がAIだけでアプリを量産!「バイブコーディング実演セミナー 」
tatsuya1970
0
110
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
7.5k
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
250
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
200
コミットの「なぜ」を読む
ota1022
0
120
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
300
フィジカル版Github Onshapeの紹介
shiba_8ro
0
320
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
640
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Become a Pro
speakerdeck
PRO
31
6k
The agentic SEO stack - context over prompts
schlessera
0
820
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
170
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
300
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
870
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
We Have a Design System, Now What?
morganepeng
55
8.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
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