Qwen2.5-Coder-32B-Instructを使ってみた(前編)

2024/11/13に公開

はじめに

どんな人向けの記事?

  • ローカル LLM に興味のある方
  • Qwen2.5-Coder-32B の性能に興味のある方
  • LLM を用いたアプリ開発に興味のある方
本アプリの開発環境
1. Ubuntu 24.04.1 LTS (Core i5-8400 + メインメモリ 16GB)
2. Mac Studio (M2 Ultra 128GB) # ollama server

概要

今回は、Alibaba Cloud からリリースされた Qwen2.5-Coder-32B-Instruct を用いて、
アプリ開発がどの程度出来るかを検証していきたいと思います。

https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct

以下のように前編後編に分けて記事にしたいと思います。

  • 前編(今回の記事)

    • Shaberi3 ベンチマーク評価
    • Open WebUI を用いた html + css + javascript の簡単なアプリ
    • OSS 版 Bolt.new のサンプル例
  • 後編(次回の予定)

    • フロントエンドおよびバックエンド開発

性能評価

必要 VRAM 量と推論速度

必要 VRAM 量、プロンプト評価速度、テキスト生成速度は以下のとおりでした。評価は一回限りなので、多少ばらつきはあると思います。

モデル名 VRAM[GB] プロンプト評価 [t/s] テキスト生成 [t/s]
qwen2.5-coder:32b-instruct-q8_0-32k 80 236.58 15.44
qwen2.5-coder:32b-instruct-q8_0-24k 69 312.5 15.5
qwen2.5-coder:32b-instruct-q8_0-16k 58 381.04 14.76
qwen2.5-coder:32b-instruct-q4_K_M-32k 66 303.93 20.63
qwen2.5-coder:32b-instruct-q4_K_M-24k 54 386.79 19.72
qwen2.5-coder:32b-instruct-q4_K_M-16k 43 485.21 20.59

num_ctx を変化させたときの影響は始めてみましたが、下記のような特徴がありそうです。

  • 必要 VRAM 容量
    • 量子化サイズによらず、**num_ctx 8k 増えるごとに 11〜12GB の 必要 VRAM が増加 **
  • プロンプト評価
    • 必要 VRAM 容量とプロンプト評価速度はおおよそ反比例
  • テキスト生成速度
    • テキスト生成速度は num_ctx の依存性がほとんどない

Shaberi3 ベンチマーク

まずは実際に使う前に、日本語性能がどの程度なのかを Shaberi3 ベンチマークで評価しました。
結果は以下のとおりです。

日本語性能的には、Qwen2.5-14B と Qwen2.5-7B の間くらいのようです。
多言語対応よりも、コーディングにパラメータを振っている感じですね。

コーディング性能の検証

Open WebUI

Deepseek-V2.5 と同じ、無茶振りプロンプトで試してみました。

無茶振りプロンプト
htmlとcssとjavascriptでなにか面白いものを作ってください。

できたものが、こちら。

リアルタイムテキスト表示アプリケーションという、特に面白くもなく技術的にすごいと思える要素もない、なんとも言えないものでした。

少なくとも、無茶振りへの対応能力は Deepseek-V2.5 のほうが高そうです。
まあ、特にエラーは出ずに動く物自体は出てきたのでコーディング能力的には問題ありません。


これだけだと、Qwen2.5-Coder-32B の印象が悪くなりそうなので、アイデアを ChatGPT 先生に作ってもらってより具体的な要求をプロンプトに入れて試してみました。

プロンプト
htmlとcssとjavascriptで、以下に示すアプリを作ってください。

# ランダムグラデーションジェネレーター
ボタンを押すとランダムに美しいグラデーションが生成され、背景が変わるアプリ。生成したグラデーションをコピーできる機能を加えて、色合いの美しさを楽しめるようにします。

結果はこちら。良い感じです。

動画はこちら。gif 動画にすると画質が劣化していますが、実際には綺麗なグラデーションになってます。

OSS 版 Bolt.new

今回はこちらのリポジトリを使用させていただきました。

https://github.com/coleam00/bolt.new-any-llm

サンプルプロンプトにある"Space Invador game"を試してみました。

上記のような感じで、会話しながら少しずつ実装していきます。

簡単なプログラムなのですが、会話しながら少しずつ機能を追加していくため、5〜6 往復して下記のようなゲームができました。最初のプロンプトで要件を具体的に書いておけばもっと少ない反復で実装できると思います。

[追加した機能]

  • 敵の配置がランダム
  • スピード調整可
  • 敵の数が減るごとに加速していく(これも調整可)

6 往復程度して作ってみた感想ですが、ファイルの改修をする際に 1 ファイル全部のコードを出力するのでわりと時間がかかる印象でした。(Claude を使っているときは速いからかあまり気にならなかった)差分が僅かな場合は、かなり時間がもったいない気がします。

コーディングまとめ(前編)

Qwen2.5-Coder-32B-Instructと Open WebUi や Bolt.new を組み合わせるだけで、今回のような簡単なアプリなら(時間はかかりますが)難なく作れることがわかりました。
しかし私自身、どの程度実用性のあるアプリ開発が出来るかということが気になっています。

次回は、Next.js アプリや DB、API 連携したアプリなど、もう少し複雑なアプリを作れるか試してみたいと思います。

まとめ

今回の記事では、Qwen2.5-Coder-32B-Instruct を使ったアプリ開発の実力について検証しました。

具体的には、以下のポイントを中心に、Qwen2.5-Coder-32B-Instruct を評価しました。

  • 推論速度や必要 VRAM 量の ctx_num 依存性評価
  • 日本語性能: 日本語性能は Qwen2.5-14B と Qwen2.5-7B の中間程度。
  • コーディング能力: 具体的なプロンプトを与えると実用的なアプリを生成できました。例として以下のアプリを作成しました。
    • ランダムグラデーションジェネレーター: ボタンを押すと美しいグラデーションが生成され、色合いを楽しめる機能付き。
    • 簡易ゲーム: 敵のランダム配置やスピード調整ができる Space Invader 風のゲームを数回の対話で構築。
  • 無茶振りプロンプトへの対応: 柔軟さは Deepseek-V2.5 に劣るものの、エラーなしで動作するアプリを生成可能な点で、基本的なコーディング力に問題はありません。

前編の総評としては、簡単なアプリの開発には Open WebUI や OSS 版 Bolt.new と組み合わせて、ローカル環境でも支障なくコーディングができました。次回は、さらに複雑なアプリ開発に挑戦予定です。

最後まで読んでいただきありがとうございました。次回もぜひよろしくお願いします。

Discussion