以下の内容はhttps://ujimushisradjp.hatenablog.jp/entry/2024/12/09/022752より取得しました。


Local llmをEmacs上で使える環境を試してみる

きっかけ

この数ヵ月ぐらいにLocal llmが手軽に使えるようになっていることをネットの情報で(今更)知りました。

で色々調べていくと

  • Emacs上でLocal llmが使える!!
  • 手軽にLocal llmを構築できるツールがあるらしい

ということで,古いけれどもそこそこ高スペックの家で使っているPC。内訳というと

と,かなり電源容量に余裕あり。

そこで,グラフィックカードをかえて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メモリのカードを選んだのは結果的に良かったような気がします。




以上の内容はhttps://ujimushisradjp.hatenablog.jp/entry/2024/12/09/022752より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14