見出し画像

GPUなしでも動く!ローカルLLMとllama.vscodeでコード補完

しぴぴぴ!
Vtuberのしぴちゃん (https://www.youtube.com/@CP-chan) です。
YouTubeではゲームとか麻雀とかの話しかしてませんが、今回はローカルLLM関連の連載企画です。

第一弾:
DeepSeek R1をほぼ準備なしからローカルGPUで動かす

第二弾:
Cline+ローカル版DeepSeek R1でAIコーディングを使い放題にする(高スペックマシン向け)

第三弾:
本記事(GPUなしでも動く!ローカルLLMとllama.vscodeでコード補完)


低スペックPCでもローカルLLMがしたい!

第二回ではローカルLLMを使ってAIコーディングを使い放題にする解説をしましたが、現状ではかなりの高スペックマシンでないと動きません。

では、低スペックPCでは何もできないのか?というとそういうわけではなく、用途を限定すれば一応使えます。
第二回で使ったClineのような複雑なタスクは小さいモデルでは難しいので、コードの補完に限って使うことで解決します。なお、高スペックのPCを持っている人向けにリッチな構成で動かす方法も解説します。

想定環境

  • Windows 11

  • メインメモリ 16GB(8GBでも動くかも、未検証)

  • 専用GPUなし

想定読者

以下の一つ以上に当てはまる人が想定読者です。

  • 企業内など、インターネットアクセスに制限があるけどAIコード補完を使いたい

  • 外部のWebサービスにコードやデータを読まれたくないけどAIコード補完を使いたい

  • 自分の持っている低スペックPCでもローカルLLMを活用してみたい

コード補完とは

ここでのコード補完とは、プログラムのソースコードの穴埋めや補完を行って開発をサポートしてくれるエディタの機能のことです。今や手放せない人も多いと思います。

コードの続きがサジェストされる。便利。

AIを利用したコード補完はGitHub CopilotやTabnineが比較的歴史も長く有名ですが、有料(サブスク)です。

Codeiumは無料で使えるので、これでいいじゃんという気もするのですが、インターネットアクセスに制限がある場合や、外部のWebサービスにコードやデータを読まれたくない場合は常に自分のコードの一部を送信するAIコード補完サービス全般が利用できません。

そこで、ローカル環境でLLMを動かしてそこに問い合わせることで解決します。以下では、導入方法について解説します。

1. 環境構築

既にインストールしている人は項目ごとに飛ばしてください。

1-1. w64devkitのインストール

w64devkitのリリースページから最新のリリース(例えばw64devkit-x64-2.0.0.exe)をダウンロードします。自己解凍形式です。Windows defenderがウイルスを検知した場合、除外設定をして再度解凍します。

1-2. llama.cpp のインストール

GPUを持っていてそちらを使いたい人は、第一回:DeepSeek R1をほぼ準備なしからローカルGPUで動かす を参考にGPU版のllama.cpp を導入してください。

GPUなしで動かしたい人は、まず自分が使っているCPUの型番を確認します。

IntelのCPUの場合

AMDのCPUの場合

などから自分のCPUの型番を調べ、"SIMD命令"の列の"AVX"の値をメモします。AVX-512とかAVX2とか書いてあるはずです。

llama.cppのリリースページから、最新のリリースのzipファイルをダウンロードします。
Windowsではllama-b4568-bin-win-avx???-x64.zip です。調べたAVXの値と合うものを選んでください。
ダウンロードできたら、適当な場所に解凍します。

1-3. VSCodeのインストール

ここからダウンロードできます。

2. llama-vscode のインストール

llama-vscode は、ggml.ai なる企業によってv0.0.1が2025年1月21日にリリースされたVSCode拡張で、llama.cpp を経由してローカルLLMによるコード補完を行います。
VSCodeを起動したら、左のタブの拡張機能/Extensions (□が4個あるやつ) から拡張機能を検索します。llama vscode と検索してインストールします。

llama-vscode

利用するためにはモデルが必要なので、モデルをダウンロードします。

3. モデルのダウンロード

w64webkit.exe を起動し、モデルをダウンロードしたいディレクトリに移動します。
第1回・第2回は執筆時最新のモデルであるDeepSeek R1を利用してきましたが、こいつはコード補完機能に対応していないので使えません(注1)。

今回はQwen2.5-Coderを利用します。llama-vscode のドキュメントによれば、製作者はQwen2.5-Coderの7B, 3B, 1.5BのQ8_0を推奨しています。
1.5B-Q8_0でも動作するのですが、本記事はCPUで動作させる低スペック向け記事です。もっと節約しましょう。
本記事ではCPU向けには Qwen2.5-coder-1.5b.Q6_K.gguf を推奨します(注2)。

GPUでもっと大きいモデルを動かしたいという人は
Qwen2.5-coder-7b.Q6_K.gguf
Qwen2.5-coder-3b.Q6_K.gguf にトライするとよいでしょう。
量子化のレベルは適当に調整してください。補完が出てくるまでの速度が遅いと非常に快適性を損なうので、多少性能が低くても推論が速いことが重要です。
1.5b.Q6_Kでも動かない、遅いという場合は qwen2.5-coder-1.5b-iq3_xxs-imat.gguf を使うとよいでしょう。ただし補完の性能は良くないです。

モデルを決めたら、wgetなどでモデルをダウンロードします。

wget https://huggingface.co/mav23/Qwen2.5-Coder-1.5B-GGUF/resolve/main/qwen2.5-coder-1.5b.Q6_K.gguf

4. llama.cpp の起動と利用

w64webkit.exe で llama.cpp のディレクトリに移動し、以下のコマンドで機動します。

llama-server.exe -m ../LLM-models/Qwen2.5-Coder-3B-Q6_K_L.gguf \
  --port 8012 -fa -ub 1024 -b 1024 -dt 0.1 --ctx-size 0 --cache-reuse 256

main: server is listening on http://127.0.0.1:8012 - starting the main loop
srv update_slots: all slots are idle

と出てきたら起動できています。

VSCodeに戻り、コードを補完させてみましょう。基本的な操作は以下の通りです。

  • 何か入力したり消したりするたびに自動で補完が行われる

  • 補完の適用:Tab

  • 補完の最初の1行だけ適用: Shift + Tab

  • 補完の最初の1ワードだけ適用: Ctrl/Cmd + Right

  • 補完のON/OFF切り替え: Ctrl + L (と書いてあるけど効果がない気がする)

設定から llama-vscode.auto をFalseに変更すればCtrl + Iを押したときだけ補完される設定なども可能です。

例えば、fibonacci.py を作成し、

# implement fibonacci number calculator

def fibonacci

まで書いてからTabなりEnterなりを押していれば

# implement fibonacci number calculator

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

のように最後まで書いてくれます。
また、下の画像の例のように関数のドキュメントを生成させるなども便利です。この例は1.5b.Q6_K.gguf のモデルです。

コメントやドキュメントも書いてくれる(かも)

あまり複雑なことはできませんが、低スペックPCのローカル環境でもこれだけできれば便利ですね。

Appendix

VSCodeよりVimが好きなんですがどうすればいいですか?

Vim/Neovimで動くllama.vimもあるようです。 https://github.com/ggml-org/llama.vim

注1: コード補完機能

llama-vscode でのコード補完に使うには、 fill-in-the-middle (FIM) 機能に対応しているモデルである必要があるそうです (https://github.com/ggml-org/llama.vscode?tab=readme-ov-file#llamacpp-settings)。
オープンソースかつFIM対応モデルの中では2025年1月28日現状Qwen2.5-Coderが最も性能がいいのではないかと思います。
(参考: Chatbot arena category: Coding https://lmarena.ai/?leaderboard

注2: モデルのレベル

7Bとか3Bというのはモデルサイズのことで、Q8_0は量子化のレベルのことです。それぞれレベルを下げるほど低スペックPCでも高速に動作しますが、性能も下がります。

多くのモデルをひたすら量子化しているbartowski氏によれば、Q8_0は "Extremely high quality, generally unneeded but max available quant." (非常に高品質。一般的には必要ないが、使える最大の量子化。)だそうですから、"Very high quality, near perfect, recommended." になっているQ6_0を使ってモデルサイズを節約します。

ちなみに、redditのディスカッションなどによれば、小さいモデルほど量子化レベルを落としたときの性能劣化が激しいと言われているようです。

いいなと思ったら応援しよう!