QwenLM/Qwen3-Coder

⭐ 11,085 🍴 761 Python📄 No license specified GitHubで見る →

主な特徴

  • 256Kトークンの長いコンテキストをサポート(Yarnを使用して最大1Mトークンまで拡張可能)
  • 358種類のプログラミング言語をサポート
  • エージェンティックコーディング、ブラウザ使用、ツール使用に対応
  • Qwen Code、CLINEなどのプラットフォームをサポート
  • 特別に設計された関数呼び出しフォーマットを実装
  • 数学および一般的なタスクでも基本モデルの強みを保持
  • FP8量子化版も提供され、効率的な推論が可能

リポジトリ解析: QwenLM/Qwen3-Coder

基本情報

  • リポジトリ名: QwenLM/Qwen3-Coder
  • 主要言語: Python
  • スター数: 11,085
  • フォーク数: 761
  • 最終更新: 2025年1月(最新のQwen3-Coder-30B-A3B-Instructリリース)
  • ライセンス: No license specified
  • トピックス: AI、コード生成、LLM、エージェンティックコーディング、マルチプログラミング言語

概要

一言で言うと

Qwen3-Coderは、Alibaba Cloudが開発した最新のコード特化型大規模言語モデルで、エージェンティックコーディング、ブラウザ操作、ツール使用において最先端の性能を実現している。

詳細説明

Qwen3-Coderは、Qwenチームによる最新のコード生成モデルシリーズで、特に「エージェンティックコーディング」に焦点を当てている。最も強力なモデルであるQwen3-Coder-480B-A35B-Instructは、480Bパラメータを持つMixture-of-Expertsモデルで、35Bのアクティブパラメータを使用する。このモデルは、コーディングタスクとエージェンティックタスクの両方で優れた性能を発揮し、オープンモデルの中では新たな最高水準を達成している。Claude Sonnetに匹敵する性能を持ち、コード生成、理解、修正において包括的な能力を提供する。

主な特徴

  • 256Kトークンの長いコンテキストをサポート(Yarnを使用して最大1Mトークンまで拡張可能)
  • 358種類のプログラミング言語をサポート
  • エージェンティックコーディング、ブラウザ使用、ツール使用に対応
  • Qwen Code、CLINEなどのプラットフォームをサポート
  • 特別に設計された関数呼び出しフォーマットを実装
  • 数学および一般的なタスクでも基本モデルの強みを保持
  • FP8量子化版も提供され、効率的な推論が可能

使用方法

インストール

前提条件

  • Python 3.8以上
  • PyTorch 2.0以上
  • transformersライブラリ(最新版)
  • CUDA対応GPU(推奨)

インストール手順

# 方法1: Hugging Face transformersを使用
pip install transformers torch

# 方法2: 開発環境のセットアップ(ファインチューニング用)
conda create -n qwen3_coder python=3.9
conda activate qwen3_coder
pip install -r requirements.txt

基本的な使い方

Hello World相当の例

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "Qwen/Qwen3-Coder-480B-A35B-Instruct"

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

prompt = "write a quick sort algorithm."
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=65536
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

実践的な使用例:Fill-in-the-Middle(FIM)

input_text = """<|fim_prefix|>def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    <|fim_suffix|>
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quicksort(left) + middle + quicksort(right)<|fim_middle|>"""
            
messages = [
    {"role": "system", "content": "You are a code completion assistant."},
    {"role": "user", "content": input_text}
]

text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

# 特別な終了トークンIDを指定
eos_token_ids = [151659, 151661, 151662, 151663, 151664, 151643, 151645]
generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=False, eos_token_id=eos_token_ids)[0]
output_text = tokenizer.decode(generated_ids[len(model_inputs.input_ids[0]):], skip_special_tokens=True)

高度な使い方

# システムプロンプト付きの対話
messages = [
    {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
    {"role": "user", "content": "Write a regex expression to match any letter of the alphabet"},
    {"role": "assistant", "content": "The regex expression to match any letter of the alphabet (either in uppercase or lowercase) is: \n\n```regex\n[a-zA-Z]\n```"},
    {"role": "user", "content": "How about if I only want to match uppercase letters?"}
]

# Qwen3-Coder-480B-A35B-Instructは非思考モードのみサポート
# enable_thinking=Falseの指定は不要

ドキュメント・リソース

公式ドキュメント

サンプル・デモ

  • examples/Qwen2.5-Coder-Instruct.py: 基本的なチャット生成の例
  • examples/Qwen2.5-Coder-fim.py: Fill-in-the-Middle(コード補完)の例
  • examples/Qwen2.5-Coder-repolevel-fim.py: リポジトリレベルのコード補完
  • demo/artifacts/: WebDev向けアーティファクト生成デモ
  • demo/chatbot/: チャットボットアプリケーション

チュートリアル・ガイド

  • Qwen Chat WebDev(https://huggingface.co/spaces/Qwen/Qwen3-Coder-WebDev)
  • 物理ベースの建物解体シミュレーション(three.js、cannon-es.js)
  • マルチカラーインタラクティブアニメーション(p5.js)
  • 3D Google Earth実装
  • タイピングゲーム作成
  • 回転ハイパーキューブ内のバウンスボール
  • 太陽系シミュレーション
  • DUETゲーム実装

技術的詳細

アーキテクチャ

全体構造

Qwen3-Coderは、Mixture-of-Experts(MoE)アーキテクチャを採用し、480Bの総パラメータから35Bのアクティブパラメータを選択的に使用する。これにより、大規模なモデルの表現力と効率的な推論を両立している。特に長いコンテキスト(256K~1Mトークン)のサポートは、リポジトリスケールのコード理解を可能にする。

ディレクトリ構成

qwen3-coder/
├── assets/              # デモ画像・動画リソース
├── demo/                # デモアプリケーション
│   ├── artifacts/       # WebDevアーティファクト
│   └── chatbot/         # チャットボットデモ
├── examples/            # 使用例スクリプト
│   ├── *.py            # 各種使用例(チャット、FIM、ストリーミング)
│   └── *.md            # 使用例のドキュメント
├── finetuning/          # ファインチューニングツール
│   ├── dpo/            # Direct Preference Optimization
│   └── sft/            # Supervised Fine-Tuning
├── qwencoder-eval/      # 評価フレームワーク
│   ├── base/           # 基本モデル評価
│   ├── instruct/       # 指示調整モデル評価
│   ├── reasoning/      # 推論能力評価
│   └── tool_calling_eval/ # ツール呼び出し評価
└── requirements.txt     # 依存関係

主要コンポーネント

  • MoEアーキテクチャ: 480Bパラメータから35Bをアクティブに使用

    • 場所: モデル内部実装
    • 依存: PyTorch、transformers
    • インターフェース: generate()、forward()
  • 評価フレームワーク: 多言語・多タスク評価システム

    • 場所: qwencoder-eval/
    • 依存: 各種ベンチマーク(HumanEval、MBPP、BigCodeBench等)
    • インターフェース: evaluate.sh、各言語別の評価スクリプト
  • ファインチューニングシステム: SFTとDPOの両方をサポート

    • 場所: finetuning/
    • 依存: DeepSpeed、LoRA
    • インターフェース: train.py、binarize_data.py

技術スタック

コア技術

  • 言語: Python 3.9+、358種類のプログラミング言語をサポート
  • フレームワーク:
    • Hugging Face Transformers(モデル推論・デプロイ)
    • DeepSpeed(分散トレーニング)
    • PyTorch(基盤フレームワーク)
  • 主要ライブラリ:
    • transformers: モデルのロードと推論
    • tokenizers: 高速トークナイザー
    • accelerate: 分散推論のサポート
    • datasets: データセット管理
    • peft: LoRAファインチューニング

開発・運用ツール

  • ビルドツール:
    • Conda環境管理
    • pip依存関係管理
    • シェルスクリプトによる自動化
  • テスト:
    • 多言語評価スイート(Python、Java、C++、JavaScript等)
    • ベンチマーク:HumanEval、MBPP、BigCodeBench、LiveCodeBench
    • セーフサブプロセスによる安全な実行環境
  • CI/CD:
    • 自動評価パイプライン
    • モデル量子化(GPTQ、GGUF、AWQ)
  • デプロイ:
    • Hugging Face Model Hub
    • ModelScope
    • FP8量子化版の提供

設計パターン・手法

  • Mixture-of-Experts(MoE): 480Bパラメータから35Bを選択的に活性化し、効率と性能を両立
  • ChatMLテンプレート: 対話履歴とシステムプロンプトの標準化されたフォーマット
  • Fill-in-the-Middle(FIM): コード補完のための特別なトークンとフォーマット
  • セーフ実行環境: コード評価時の安全性を確保するサンドボックス実装
  • 量子化対応: GPTQ、GGUF、AWQ、FP8など複数の量子化手法をサポート

データフロー・処理フロー

  1. 入力処理: ユーザープロンプトをChatMLフォーマットに変換
  2. トークナイゼーション: 特別なトークン(<|im_start|>、<|im_end|>等)を含む入力をトークン化
  3. モデル推論: MoEアーキテクチャによる効率的な推論
  4. 生成: 最大65536トークンまでの長い応答を生成可能
  5. 後処理: 特別なトークンの除去とデコード
  6. FIM処理: コード補完タスクでは<|fim_prefix|>、<|fim_suffix|>、<|fim_middle|>トークンを使用

API・インターフェース

公開API

チャット生成API

  • 目的: 対話形式でのコード生成・質問応答
  • 使用例:
# apply_chat_templateを使用した標準的な呼び出し
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

Fill-in-the-Middle API

  • 目的: コード補完・穴埋め
  • 使用例:
# FIMトークンを使用したコード補完
input_text = "<|fim_prefix|>" + prefix + "<|fim_suffix|>" + suffix + "<|fim_middle|>"

設定・カスタマイズ

設定ファイル

# LoRAアダプター設定(configs/lora/adapter_config.json)
{
  "r": 64,
  "lora_alpha": 16,
  "target_modules": ["q_proj", "v_proj"],
  "lora_dropout": 0.1
}

# DeepSpeed設定(configs/ds_config_zero*.json)
{
  "zero_optimization": {
    "stage": 2,
    "offload_optimizer": {
      "device": "cpu"
    }
  }
}

拡張・プラグイン開発

  • ツールパーサー: qwen3coder_tool_parser.pyによる関数呼び出しのサポート
  • カスタム評価: qwencoder-eval/に新しいベンチマークを追加可能
  • ファインチューニング: SFTとDPOによるドメイン特化モデルの作成
  • プラットフォーム統合: Qwen Code、CLINE等との連携

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • ベンチマーク結果:
    • HumanEval: 92.7%(Python)
    • MBPP: 90.2%
    • BigCodeBench-inst-full: 49.6%
    • 多言語平均: 79.4%(8言語)
    • Aider(コード編集): 73.7%
    • Spider(SQL): 85.1%
  • 最適化手法:
    • MoEによる効率的なパラメータ活用
    • 複数の量子化手法(FP8、GPTQ、GGUF)
    • 256Kトークンのネイティブサポート

スケーラビリティ

  • 最大1Mトークンまでの拡張可能(Yarn使用)
  • 分散推論のサポート(device_map="auto")
  • 量子化版による省メモリ推論
  • バッチ処理による高スループット

制限事項

  • 大規模モデル(480B)のため、高性能GPUが必要
  • ライセンスが明記されていない
  • 思考モード()はサポートされていない
  • 関数呼び出しには専用のツールパーサーが必要

評価・所感

技術的評価

強み

  • 358言語をサポートする包括的な多言語対応
  • エージェンティックコーディングにおける最先端の性能
  • 256K~1Mトークンの長大なコンテキスト処理能力
  • MoEアーキテクチャによる効率的な大規模モデル
  • 複数の量子化オプションによる柔軟なデプロイメント
  • 充実した評価フレームワークとベンチマーク

改善の余地

  • ライセンスが明記されていない(商用利用の可否が不明)
  • 480Bモデルは非常に大きく、一般的な環境では実行困難
  • 思考モードがサポートされていない
  • ドキュメントの一部が中国語のみ

向いている用途

  • エンタープライズレベルのコード生成・レビュー
  • 複雑なWebアプリケーション開発(three.js、p5.js等)
  • 多言語プロジェクトのコード補完
  • リポジトリ全体の理解が必要なタスク
  • AIエージェントとしてのコーディング自動化
  • SQLクエリ生成・最適化

向いていない用途

  • リソース制約のある環境での実行
  • リアルタイムコード補完(レイテンシー要件が厳しい場合)
  • ライセンスが重要な商用プロジェクト
  • 小規模・単純なコード生成タスク

総評

Qwen3-Coderは、コード生成AIの最前線を行く野心的なプロジェクトである。特にエージェンティックコーディングへの対応は、単なるコード補完を超えて、開発者の真のパートナーとしてのAIを実現しようとしている。480Bという巨大なモデルサイズは実運用上の課題があるものの、提供される量子化版や小規模モデル(30B-A3B)により、様々な環境での利用が可能となっている。オープンモデルとしてClaude Sonnetに匹敵する性能を達成していることは特筆に値する。ただし、ライセンスの不明確さは採用の障壁となる可能性がある。