きっかけ
この数ヵ月ぐらいにLocal llmが手軽に使えるようになっていることをネットの情報で(今更)知りました。
で色々調べていくと
- Emacs上でLocal llmが使える!!
- 手軽にLocal llmを構築できるツールがあるらしい
ということで,古いけれどもそこそこ高スペックの家で使っているPC。内訳というと
- マザーボード:
X570 AORUS ELITE - CPU:
Ryzen 7 3700X(65W) - メモリ: 容量32GB(16GB x2) → 64GB(32GB x2)に換算済み
- グラフィックカード:
GTX 1650(4GB,75W) - 電源: 容量650W
と,かなり電源容量に余裕あり。
そこで,グラフィックカードをかえてLLMを試そうとしみたのが今回の話です。
グラフィックカードの選定
以上のような理由で,グラフィックカードのメモリを多くしたいけど あまり消費電力を大きくしたくないということで, 色々悩んだ末 RTX 3050(8GB),マザーボードと同じGIGABYTE製にしました。
最初はRTX-A2000あたりを選ぼうと思っていたのですが, 6GBで5万円,12GBで9方円程度ということで,失敗した時のダメージが大きく まだ本格的にローカルのAIを使うのではなくVRAMの容量と価格を考えて, 一番バランスが取れているだろうという個人の感想です。
もちろん妻には内緒ですw
単純にグラフィックカードを入れ換えただけですんなり認識しました。 OSはubuntu 24.04デスクトップで,19.10からのアップデートを繰り返したPCです。
確認コマンドの実行結果は次のような感じです。
ujimushi@ubuntu-24.04:~$ nvidia-smi Mon Dec 9 00:44:16 2024 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 565.57.01 Driver Version: 565.57.01 CUDA Version: 12.7 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA GeForce RTX 3050 On | 00000000:09:00.0 On | N/A | | 0% 45C P8 13W / 130W | 404MiB / 8192MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 140414 G /usr/bin/gnome-shell 266MiB | | 0 N/A N/A 140543 G /usr/bin/Xwayland 23MiB | | 0 N/A N/A 141223 G /usr/libexec/xdg-desktop-portal-gnome 3MiB | | 0 N/A N/A 274013 G /usr/bin/nautilus 48MiB | +-----------------------------------------------------------------------------------------+
結構最大消費電力が75Wだったらいいなと思ってたので,補助電源ケーブル用コネクタがついているのを確認した時は 少し残念でしたが,逆に補助電源ケーブルがあることで逆にかなり動作が安定するだろうと 好意的に解釈しています。 グラフィックカードの取説に450W電源推奨と書いてあったので,まだ電源容量に余裕があります。
ただ,Tensorflowとかで確認した感じでは次のような感じで6GBしか見えてなさそうということで若干の不安を感じていました。
ujimushi@ubuntu-24.04:~$ python Python 3.12.3 (main, Nov 6 2024, 18:32:19) [GCC 13.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from tensorflow.python.client import device_lib >>> device_lib.list_local_devices() I0000 00:00:1733672757.876137 520615 gpu_device.cc:2022] Created device /device:GPU:0 with 5875 MB memory: -> device: 0, name: NVIDIA GeForce RTX 3050, pci bus id: 0000:09:00.0, compute capability: 8.6 [name: "/device:CPU:0" device_type: "CPU" memory_limit: 268435456 locality { } incarnation: 6068362839323045937 xla_global_id: -1 , name: "/device:GPU:0" device_type: "GPU" memory_limit: 6160908288 locality { bus_id: 1 links { } } incarnation: 2817439868670678001 physical_device_desc: "device: 0, name: NVIDIA GeForce RTX 3050, pci bus id: 0000:09:00.0, compute capability: 8.6" xla_global_id: 416903419 ] >>>
Ollamaのインストール
これ以降は最強ローカルLLM実行環境としてのEmacsの内容を 自分の環境に合った形で実行していく感じです。
Ollamaのダウンロードページからinstall.shをダウンロードして実行するだけ,
という非常に簡単なインストール方法でした。
インストール先はデフォルトの/usr/local/の下です。
Ellamaのインストール
melpaに登録されているので,package-installでインストールするだけです。
設定についてはこれまた最強ローカルLLM実行環境としてのEmacsの内容を参考に
していきます。
Caps LockキーをHyperキーにしていて,定義が一杯空いているので,Hyper-eにメニューを割り合てます。
(require 'ellama)
(global-set-key [(H e)] 'ellama-transient-main-menu)
(with-eval-after-load 'llm
(require 'llm-ollama)
(setopt ellama-language "Japanese")
(setopt ellama-provider
(make-llm-ollama
:chat-model "codellama:7b-instruct"
:embedding-model "codellama:7b-instruct"))
(setopt ellama-translation-provider
(make-llm-ollama
:chat-model "qwen2.5:7b"
:embedding-model "qwen2.5:7b"))
)
モデルはOllamaのライブラリにあるものから選びます。 「GPUメモリが6GBしか認識していないかも」と思っていたので,モデルサイズが4~5GBのものを設定しています。
# ollama pull codellama:7b-instruct # ollama pull qwen2.5:7b
モデルのダウンロードをします。ただ,モデルの何を選んだらいいかとかはよく分かっていません。 これから色々調べていきたいと思います。
次のgifがチャットを使ってみた例です。 EmacsでJulia言語等のコーディングする時の利用方法はこれから調べて試していきたいです。

Ollamaを使ったJulia言語のhelpの日本語化
Julia DiscourseのDocstringTranslation.jl の記事にhelp(Docstring)をマルチリンガル化するパッケージ群が紹介されていますが, この中にOllamaを使ったものがあるようです。
DocstringTranslationOllamaBackend.jlというパッケージのようです。早速試してみます。
]でパッケージモードに入って次のコマンドでインストールできます。
(@v1.11) pkg> add https://github.com/AtelierArith/DocstringTranslationOllamaBackend.jl
デフォルトでgemma2:9bのモデルが使われるようで,using DocstringTranslationOllamaBackendを
実行した直後にそのモデルがあるものとして動作します。
なので,pullしていないとモデルのダウンロードに長い時間がかかってしまうのに注意が必要です。
途中で停止できず,結構どうしようかと思う状況になってしまいました。 ただ,このモデルがロードできたことでOllamaがGPUのメモリを8GB認識していると分かり, ほっとしました。
試したみた例は次の通りです。

見ていただければ分かりますが,反応が遅いです。これはGPUの性能が今一つなのもあります。 別のモデルにするとやや速くなったりします。
私の場合英語でも特に不都合はないので使わないと思いますが, 初心者には分かりやすくていいのではないかと思います。
現実的には特にAI環境とかを必要としない DocstringTranslationGoogleTransBackend.jlが最初の選択肢ではないかと思います。
自分もGoogle翻訳を用いたヘルプ表示を作ろうと思っていたので,他の人に作ってもらえて本当にラッキーです。
まとめ
とりあえずローカルLLMがEmacs等で使えることが分かったので, これから色々試してみようと思います。
4~5GB程度のモデルでもそこそこ動くので8GBメモリのカードを選んだのは結果的に良かったような気がします。