0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカルLLMでコード補完してみた(Radeon RX 9600 XT 16GB+Qwen2.5-coder)

0
Posted at

最近、グラボを新調しました。
コード補完レベルなら動くっぽいので試してみました。

スペック

※PC本体は3年ちょっと前に買ったやつ

パーツ スペック
CPU(未換装) AMD Ryzen 5 4500
RAM(増設) 32GB
グラボ AMD Radeon RX 9600 XT(16GB)

準備

しろーとなので、少ない手順で動かせそうな LM Studio を使います。
入れたバージョンは 0.4.14 でした。
使うモデルは、コード補完目的なので qwen2.5-coder-14b-instructQ4_K_M にしてみます。ダウンロードサイズは 8.99GB。
コード補完目的なら古くてもコード特化モデルがいいよ、と ChatGPT さんが言ってました。
チャット機能は低め、らしい。

保存先の変更

デフォルトではダウンロードしたモデルはCドライブに入ります。
M2をケチってて容量がそんなにないので、Dドライブ(HDD)の方に保存するようにしました。
モデルのロードにけっこうかかりそうですが仕方ない。

  1. 左のメニューバーから My Modes を選択
  2. 右下の「...」をクリック
  3. 表示されたメニューの Change... を選択

image.png

モデルのダウンロード

  1. 左のメニューバーから Model Search を選択(My Models のひとつ下)
  2. Qwen2.5-Coder-14B-Instruct-GGUF で検索
  3. Lmstudio-community の方をダウンロード
    • たんに一番上に表示されたので...

その他設定

グラボが Radeon なので、CUDA は使えません。ROCm と Vulkan が使えるようですが、ChatGPT さんが Vulkan の方を薦めたのでとりあえずこちらで。
初期値 Vulkan でしたが、以下の手順で設定できます。

  1. 左のメニューバー一番下の歯車アイコンを選択
  2. System > Runtime で Runtime Selections > GGUF から Vulkan llama.cpp (Windows) を選択
    • v2.16.0 らしいです(llama.cpp のバージョン?)

モデルのロード

  1. 左のメニューバー Developer (My Models のひとつ上) を選択
  2. まんなかの列上の方に + Load Model ボタンがあるのでここから
  3. ロードが終わったら、Status: Stopped の横のトグルをONにするとアクセスできるようになる

ロードすると、RAMが8GBくらい、VRAMが9GBくらい消費しました。
かかった時間は2分くらい。HDDでもいけますね。
他のアプリケーションも動かすなら、RAM 24GB・VRAM 12GB くらいでギリだと思います。RAM 32GB・VRAM 16GB は良い選択じゃった。

VSCode の設定

コード補完目的なら Continue がよさそうなので拡張機能を入れました。
設定ファイル内容は以下のかんじ(ChatGPTが示したJSONを手動でYML形式にして追記)。
Local QwenCoder のところが追記箇所です。

config.yaml
name: Local Config
version: 1.0.0
schema: v1
models:
  - name: Llama 3.1 8B
    provider: ollama
    model: llama3.1:8b
    roles:
      - chat
      - edit
      - apply
  - name: Qwen2.5-Coder 1.5B
    provider: ollama
    model: qwen2.5-coder:1.5b-base
    roles:
      - autocomplete
  # ↓ 追記箇所
  - name: Local QwenCoder
    provider: openai
    model: qwen2.5-coder-14b-instruct
    apiBase: http://localhost:1234/v1
    apiKey: "lm-studio"
    roles:
      - autocomplete
      - edit
  # ↑ 追記箇所
  - name: Nomic Embed
    provider: ollama
    model: nomic-embed-text:latest
    roles:
      - embed

コード補完お試し

ChatGPT に補完元ネタを出させてやってみました。
こいつ...動くぞ...!

TypeScript

type User = {
  id: string;
  name: string;
};

export async function getUser(id: string)

※最後の)を手打ちすると補完が出てくる

補完後

type User = {
  id: string;
  name: string;
};

export async function getUser(id: string): Promise<User> {
  // Simulate fetching user

ちょっと書き換え

type User = {
  id: string;
  name: string;
};

export async function getUser(id: string): Promise<User> {
  return await f

補完後

type User = {
  id: string;
  name: string;
};

export async function getUser(id: string): Promise<User> {
  return await fetch(`https://api.example.com/users/${id}`)

おー、ちょっとすごい。実務で使えるかは別。

Golang

package main_test

func Sum(a, b int) int {
    return a + b
}

func TestSum(t *testing.T) {

まで書いて、1行ずつ補完させていって最終的に

package main_test

func Sum(a, b int) int {
    return a + b
}

func TestSum(t *testing.T) {
    result := Sum(2, 3)
    if result != 5 {
		t.Errorf("Expected 5, got %d", result)
    }
}

まぁまぁ。

ちなみに、補完が走ると GPU の計算をちょっとだけしてる。
VRAM 使用量もほぼ増えないので、もうちょい重い処理もできそう感ある。

Golang: editモード

もうちょいできそうなので、autocomplete だけでなく edit もやってみた。
元コードはさっきと同じ。

package main_test

func Sum(a, b int) int {
    return a + b
}

func TestSum(t *testing.T) {

最終行を選択して Ctrl+I、チャット入力欄にadd testcodeと入力してEnter。
(日本語入力だとなんも起きないことがあったのでそれっぽい英語で指示...)

package main_test

func Sum(a, b int) int {
    return a + b
}

import "testing"

func TestSum(t *testing.T) {
    result := Sum(2, 3)
    if result != 5 {
        t.Errorf("Expected %d, got %d", 5, result)
    }
}

おー、すごいじゃん。
計算余力はまだありそう。

感想

edit モードのプロンプトを色々試せればちょっと楽できるかも?
入力も出力も短いというのはありますが、9600 XT でもローカルLLMがストレスないくらいの速度で動くのは ちょーすごい ですね。
今のところ100%人力コーディングなので、いい加減触って慣れていかないとなと思いました。
あと、Continue がたたくエンドポイントを自作すれば人工無能レベルでいろいろできるかもとも思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?