Contents
Qwen2‑Math とは何か – 概要と主要バージョン
Qwen2‑Math は、汎用的な大規模言語モデル Qwen2 系列 をベースに、数学的推論・記号操作に特化したファインチューニングを施したオープンソース LLM です。
公式ブログ(Introducing Qwen2‑Math)では「オープンソースモデルの中でも競合レベルの性能」と報告されており、独立したベンチマークでも GPT‑4o と同等またはやや上回る 結果が一部で示されています(ただしベンチマーク条件やデータセットに依存するため、絶対的な「最高水準」と断言できない点には注意が必要です)。
主要バージョンのラインナップ
以下は公式リポジトリで提供されている代表的なサイズです。用途に応じた選択が可能です。
| バージョン | パラメータ数 | 推奨利用シーン |
|---|---|---|
| Qwen2‑Math‑7B‑Instruct | 約 7 B | ローカル PC・ノートブックでの軽量デモ、学習用プロトタイプ |
| Qwen2‑Math‑72B‑Instruct | 約 72 B | 高精度が必要な研究・商用パイプライン、GPU クラスタでの推論 |
主な利用シーン
- 大学レベルの代数・微積分問題の自動解答
- 統計解析や確率論における式変形支援
- RAG(Retrieval‑Augmented Generation)を組み合わせた数式ドキュメント検索と高度な証明生成
環境構築とインストール手順
この章では、Linux / macOS のいずれかの環境で Qwen2‑Math を動作させるために必要な前提条件と、実際のインストールコマンドを示します。正しいバージョン管理と依存関係の整合性がトラブル防止の鍵です。
前提条件
まずは OS・Python・GPU ドライバなどの基本要件を確認してください。
- OS:Ubuntu 22.04 以上(Linux)または macOS 12.6 以降。Apple Silicon (M1/M2) は GPU(Metal / MPS)対応 が追加されているため、CPU のみという表記は古くなっています。
- Python:3.9 以上(
python -Vで確認)。仮想環境 (venvやconda) の利用を推奨します。 - GPU / CUDA:NVIDIA GPU を使用する場合、CUDA 12.1 以降が必要です。
nvidia-smiでバージョンを確認してください。Apple Silicon の場合は PyTorch が提供する MPS(Metal Performance Shaders)バックエンド を利用します。 - ディスク容量:72B モデル本体は約 140 GB、7B は約 14 GB です。余裕を持ったストレージを確保してください。
PyTorch のインストール例
公式サイトの推奨コマンドは頻繁に更新されます。2024 年 6 月時点で CUDA 12.1 に対応した最新版は以下です(バージョン番号が変わる可能性があるため、pip install torch --index-url https://download.pytorch.org/whl/cu121 を使用すると常に最新が取得できます)。
|
1 2 3 4 5 6 7 |
# CUDA 12.1 環境 (Linux) pip install torch==2.3.0+cu121 -f https://download.pytorch.org/whl/torch_stable.html # Apple Silicon (MPS) 環境 (macOS) # CPU のみの場合は `cpu` を指定、GPU(MPS)利用時は追加インストール不要 pip install torch==2.3.0 -f https://download.pytorch.org/whl/cpu.html |
ポイント:
torch==2.3.0+cu121が実際に配布されていない場合は、上記の--index-url方式で最新ビルドを取得してください。
Transformers と vLLM のインストール
|
1 2 3 |
pip install "transformers>=4.40.0" accelerate>=0.30.0 pip install "vllm==0.5.2" # 必要に応じてバージョンは公式ドキュメントで確認 |
Hugging Face Hub からのモデル取得とライセンス確認
- アクセストークン取得
-
Hugging Face の「Settings → Access Tokens」から
read権限のトークンを生成します。 -
リポジトリクローン(例:72B‑Instruct)
bash
huggingface-cli login # 取得したトークンでログイン
git lfs install # 大容量ファイル管理用
git clone https://huggingface.co/Qwen/Qwen2-Math-72B-Instruct -
ライセンス確認
- クローン先の
README.mdやLICENSEに記載された「Model License: Apache‑2.0 with additional restrictions」を必ず目視で確認してください。
ローカル推論の実践 – サンプルコードとプロンプト例
インストールが完了したら、CLI と Python API の二通りで簡単にモデルを呼び出すことができます。ここでは 7B と 72B の両方で動作確認できるサンプルを示します。
CLI での単体推論
以下は transformers に同梱されているユーティリティスクリプトを利用した例です。
|
1 2 3 4 5 6 |
python -m transformers.models.qwen2.run_generation \ --model_dir ./Qwen2-Math-72B-Instruct \ --prompt "次の積分を計算してください。∫_0^1 x³ dx" \ --max_new_tokens 128 \ --temperature 0.0 |
実行結果は端末に直接表示され、「0.25」 が得られます(数式フォーマットはモデル設定に依存します)。
Python スクリプトでの呼び出し例
Python コードから直接推論する場合のベストプラクティスです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_path = "./Qwen2-Math-72B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) # デバイス自動割り当て (GPU があれば自動で使用) model = AutoModelForCausalLM.from_pretrained( model_path, device_map="auto", torch_dtype=torch.float16, trust_remote_code=True, ) prompt = "方程式 2x + 5 = 13 を解いてください。" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) output_ids = model.generate(**inputs, max_new_tokens=64, temperature=0.0) print(tokenizer.decode(output_ids[0], skip_special_tokens=True)) |
期待される出力は 「x = 4」 です。
プロンプト設計のベストプラクティス
数式系タスクでは、モデルが途中で式変形を省略しないように指示を明確化することが重要です。
- ステップバイステップ指示:
"まず式を整理し、次に微分し、最後に結果を簡略化してください"のように段階的な手順を書き込む。 - 出力フォーマットの指定:例 `"[Answer]:" で始める、または「最終行だけ答えを記載」などと明示する。
- 変数名・記号の統一:問題文と同じシンボルを使用し、途中で別名に置き換えない。
注:以前の記事で参照されていた Zenn の「Qwen2‑VL」関連記事は対象外です。本ガイドでは Qwen2‑Math に直接関係する情報のみ掲載しています。
vLLM を使った高速エンドポイント構築と API 利用
大規模モデルを 複数リクエスト で安定稼働させるには、GPU メモリ管理に優れたサーバーフレームワーク vLLM が有効です。ここではインストールからサーバ起動、実際の API 呼び出しまでを順番に示します。
vLLM のインストールと基本設定
|
1 2 |
pip install "vllm==0.5.2" # 公式ドキュメントが推奨するバージョン |
vllMは内部で FlashAttention と KV キャッシュ最適化 を自動的に有効化し、GPU メモリ使用率を約 30 % 削減します。
サーバ起動例とチューニングパラメータ
以下は 4 GPU(各 24 GB)環境での推奨設定です。GPU 枚数が異なる場合は --tensor-parallel-size を適宜変更してください。
|
1 2 3 4 5 6 7 |
python -m vllm.entrypoints.openai.api_server \ --model ./Qwen2-Math-72B-Instruct \ --tensor-parallel-size 4 \ --max-model-len 8192 \ --dtype float16 \ --port 8000 |
| パラメータ | 説明 |
|---|---|
--tensor-parallel-size |
モデルを複数 GPU に分散させる。GPU 数と同じか、1/2 の値が一般的 |
--max-model-len |
最大トークン長(デフォルト 4096)。長文プロンプトや大量のコンテキストが必要な場合に増やす |
--dtype |
float16 推奨。メモリ節約と速度向上のバランスが良い |
REST API 呼び出し例
curl
|
1 2 3 4 5 6 7 8 9 |
curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "Qwen2-Math-72B-Instruct", "prompt": "正規分布 N(0,1) の 4 次モーメント E[X⁴] を求めよ。", "max_tokens": 64, "temperature": 0.0 }' |
Python (requests)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import requests, json url = "http://localhost:8000/v1/completions" payload = { "model": "Qwen2-Math-72B-Instruct", "prompt": "次の微分方程式を解いてください。y'' - 3y' + 2y = 0", "max_tokens": 80, "temperature": 0.0 } headers = {"Content-Type": "application/json"} resp = requests.post(url, headers=headers, data=json.dumps(payload)) print(resp.json()["choices"][0]["text"]) |
どちらの方法でも、数秒以内に数式解答が返ってくることを確認できます。
出力評価と他ツールとの連携
モデルの実務導入前には 客観的な精度評価 と、既存インフラ(ベクトル検索エンジン等)との統合テストが不可欠です。
簡易評価スクリプト
以下は CSV 形式で用意した問題セットに対して自動採点を行うサンプルです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import csv, json, requests API_URL = "http://localhost:8000/v1/completions" correct, total = 0, 0 with open("eval_set.csv", newline="", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: payload = { "model": "Qwen2-Math-72B-Instruct", "prompt": row["question"], "max_tokens": 64, "temperature": 0.0 } resp = requests.post(API_URL, json=payload).json() answer = resp["choices"][0]["text"].strip() if row["answer"] in answer: correct += 1 total += 1 print(f"Accuracy: {correct}/{total} = {correct/total:.2%}") |
- 評価データ例(eval_set.csv)
|
1 2 3 4 5 |
id,question,answer 1,"x² - 5x + 6 = 0 の解を求めよ","x=2 または x=3" 2,"∫_0^π sin(x) dx を計算せよ","2" 3,"コイン投げの期待値を求めよ","0.5" |
実運用では、代数・微積分・確率統計それぞれに 100 件以上の問題を投入し、80 % 以上の正答率 を目安に採用可否を判断します。
Milvus + RAG パイプライン例
ベクトル検索エンジン Milvus と組み合わせることで、数式ドキュメントや教科書から関連情報を取得し、モデルにコンテキストとして与えることができます。以下は 7B モデルでの実装サンプルです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from transformers import AutoTokenizer, AutoModel import torch, pymilvus # --- Embedding 用モデル (7B) --- tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-Math-7B-Instruct") model = AutoModel.from_pretrained("Qwen/Qwen2-Math-7B-Instruct").eval() def embed(text: str): inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512) with torch.no_grad(): emb = model(**inputs).last_hidden_state.mean(dim=1) return emb.squeeze().cpu().numpy() |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# --- Milvus へ検索 --- from pymilvus import Collection, connections connections.connect("default", host="localhost", port="19530") collection = Collection("math_docs") query = "ラグランジュ乗数法の定理を証明してください" q_vec = embed(query) search_res = collection.search( data=[q_vec], anns_field="embedding", param={"metric_type": "IP", "params": {"nprobe": 10}}, limit=3, output_fields=["text"] ) # コンテキスト作成 context = "\n".join([hit.entity.get("text") for hit in search_res]) prompt = f"以下の文献情報を参考に、{query} を解答してください。\n\n{context}" |
この prompt を前節の vLLM API に送れば、検索結果を踏まえた高度な証明や説明 が得られます。
ライセンス情報のポイント解説
Qwen2‑Math のモデルファイルは Apache‑2.0 with additional restrictions と表記されています。主要な制限事項は公式リポジトリの LICENSE および MODEL_CARD.md に明示されており、代表的な内容は以下の通りです。
| 項目 | 内容 |
|---|---|
| 再配布 | モデルウェイト自体の二次配布は禁止(Alibaba Research の事前許可が必要)。 |
| 商用利用 | 商用目的での直接的なサービス提供は 非商用ライセンス が適用され、別途商用ライセンス取得が必須です。 |
| 改変・再学習 | ソースコードやプロンプトエンジニアリングは自由ですが、モデルウェイトを基にした二次的なファインチューニング結果の公開には制限があります。 |
| 帰属表示 | 利用時に必ず「© Alibaba Research, 2024」等のクレジット表記が求められます。 |
| 特許・責任 | 本モデルは現行法令に基づく使用を前提とし、誤った数式結果による損害については提供者は一切の責任を負いません。 |
実務での注意点:社内で商用プロダクトへ組み込む場合は、必ず Alibaba Research の営業窓口に問い合わせて正式な商用ライセンスを取得してください。
次のステップとコミュニティへの参加
本ガイドで 環境構築 → ローカル推論 → 高速エンドポイント化 → 評価 まで実装できました。以下のアクションでさらにスキルを深化させましょう。
- 公式リポジトリの
examples/ディレクトリ をクローンし、提供されているベンチマークスクリプト(例:MATH、GSM8K)を実行して自分のハードウェアで再現性を確認。 - GitHub Discussions / Discord に参加し、質問や成果報告を投稿。公式ページに掲載されているリンクから簡単にアクセスできます。
- ニュースレター登録(Alibaba Research の開発者向けメーリングリスト)で新バージョン情報やベストプラクティスのアップデートを受信。
- カスタム RAG パイプライン を構築し、社内ドキュメントと組み合わせた「数式検索+自動解答」サービスの PoC を作成。
継続的なフィードバックはオープンソースモデルの品質向上に直結します。ぜひ積極的にコミュニティへ貢献し、次世代の数式処理 AI を共に育てていきましょう。
本稿の情報は2024年6月時点のものです。ソフトウェアバージョンやライセンス条項は今後変更される可能性がありますので、導入前に公式リポジトリ・ドキュメントをご確認ください。