QwenLM/Qwen3-Coder

⭐ 9,399 🍴 661 Python📄 No license(注意:モデル自体は別途ライセンスあり) GitHubで見る →

主な特徴

  • **Agentic Coding能力**: Qwen Code、CLINEなどのプラットフォームに対応し、専用の関数呼び出しフォーマットを設計
  • **長文脈処理**: 256Kトークンのネイティブサポート、1Mトークンまで拡張可能
  • **多言語対応**: 358のプログラミング言語をサポート
  • **高性能**: オープンモデルの中でSOTA(最先端)の結果を達成
  • **実用的なデモ**: 3Dアニメーション、インタラクティブゲーム、シミュレーションなど多様な用途に対応
  • **ファインチューニング対応**: SFT(教師あり学習)とDPO(直接選好最適化)の両方をサポート

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

基本情報

  • リポジトリ名: QwenLM/Qwen3-Coder
  • 主要言語: Python
  • スター数: 9,399
  • フォーク数: 661
  • 最終更新: 活発に更新中
  • ライセンス: No license(注意:モデル自体は別途ライセンスあり)
  • トピックス: LLM、Code Generation、AI Coding Assistant、Mixture of Experts、Agentic Coding

概要

一言で言うと

Qwen3-Coderは、Alibaba Cloudが開発した最先端のコード生成特化型大規模言語モデルで、特にAgentic Coding(エージェント型コーディング)に優れた能力を持つ。

詳細説明

Qwen3-Coderは、Qwenシリーズのコード版として開発された大規模言語モデルです。最も強力なバリアントであるQwen3-Coder-480B-A35B-Instructは、480B(4800億)パラメータのMixture-of-Expertsモデルで、35B(350億)のアクティブパラメータを持ちます。このモデルは、Agentic Coding、ブラウザ操作、ツール使用において、オープンモデルの中で最高性能を達成し、Claude Sonnetに匹敵する性能を示しています。256Kトークンのコンテキスト長をネイティブサポートし、Yarnを使用して最大1Mトークンまで拡張可能で、リポジトリ規模の理解に最適化されています。

主な特徴

  • Agentic Coding能力: Qwen Code、CLINEなどのプラットフォームに対応し、専用の関数呼び出しフォーマットを設計
  • 長文脈処理: 256Kトークンのネイティブサポート、1Mトークンまで拡張可能
  • 多言語対応: 358のプログラミング言語をサポート
  • 高性能: オープンモデルの中でSOTA(最先端)の結果を達成
  • 実用的なデモ: 3Dアニメーション、インタラクティブゲーム、シミュレーションなど多様な用途に対応
  • ファインチューニング対応: SFT(教師あり学習)とDPO(直接選好最適化)の両方をサポート

使用方法

インストール

前提条件

  • Python 3.9以上
  • CUDA対応GPU(推奨)
  • PyTorch
  • 十分なGPUメモリ(モデルサイズに応じて)

インストール手順

# 依存関係のインストール
pip install torch transformers==4.39.1 accelerate safetensors vllm

# モデルは直接HuggingFaceから使用
# 特別なインストールは不要

基本的な使い方

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]
print(response)

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

from transformers import AutoTokenizer, AutoModelForCausalLM

# モデルの読み込み
device = "cuda"
TOKENIZER = AutoTokenizer.from_pretrained("Qwen/Qwen3-Coder-480B-A35B-Instruct")
MODEL = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-Coder-480B-A35B-Instruct", device_map="auto").eval()

# Fill-in-the-Middle形式のプロンプト
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(device)

generated_ids = MODEL.generate(model_inputs.input_ids, max_new_tokens=512, do_sample=False)[0]
output_text = TOKENIZER.decode(generated_ids[len(model_inputs.input_ids[0]):], skip_special_tokens=True)

print(f"Generated text: {output_text}")

高度な使い方(ストリーミング出力)

# 推奨されるサンプリングパラメータ
generation_config = {
    "temperature": 0.7,
    "top_p": 0.8,
    "top_k": 20,
    "repetition_penalty": 1.05,
    "max_new_tokens": 65536
}

# ストリーミング生成の実装
from transformers import TextStreamer

streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)

generated_ids = model.generate(
    **model_inputs,
    streamer=streamer,
    **generation_config
)

ドキュメント・リソース

公式ドキュメント

サンプル・デモ

  • examples/: 基本的な使用例とストリーミング、FIM(Fill-in-the-Middle)の実装例
  • WebDev Demo: https://huggingface.co/spaces/Qwen/Qwen3-Coder-WebDev
  • 実例デモ: 物理シミュレーション、3Dアニメーション、インタラクティブゲームなど

チュートリアル・ガイド

技術的詳細

アーキテクチャ

全体構造

Qwen3-Coder-480B-A35B-Instructは、Mixture-of-Experts(MoE)アーキテクチャを採用した大規模言語モデルです。480Bの総パラメータ数を持ちながら、推論時には35Bのパラメータのみがアクティブになるため、効率的な計算が可能です。62層のトランスフォーマー構造で、96個のQ注意ヘッド、8個のKV注意ヘッドを持ち、160個の専門家のうち8個が各推論ステップでアクティブになります。

ディレクトリ構成

Qwen3-Coder/
├── README.md             # プロジェクト概要とクイックスタート
├── requirements.txt      # 必要な依存関係
├── assets/              # デモ画像とビジュアル素材
├── examples/            # 使用例スクリプト
│   ├── Qwen2.5-Coder-Instruct.py      # 基本的な推論例
│   ├── Qwen2.5-Coder-fim.py           # Fill-in-the-Middle例
│   └── Qwen2.5-Coder-repolevel.py     # リポジトリレベルの処理例
├── finetuning/          # ファインチューニング用コード
│   ├── sft/            # 教師あり学習
│   └── dpo/            # 直接選好最適化
├── demo/               # デモアプリケーション
│   ├── artifacts/      # コード生成デモ
│   └── chatbot/        # チャットボットインターフェース
└── qwencoder-eval/     # 評価スクリプト
    ├── base/          # 基本モデル評価
    ├── instruct/      # 指示調整モデル評価
    └── reasoning/     # 推論能力評価

主要コンポーネント

  • トークナイザー: 新しい特殊トークンとIDを使用、Qwen3との一貫性を保持

    • 場所: HuggingFaceから自動ダウンロード
    • 依存: transformers
    • インターフェース: apply_chat_template(), encode(), decode()
  • ツールパーサー: qwen3coder_tool_parser.py

    • 場所: HuggingFaceモデルリポジトリ内
    • 機能: 関数呼び出しフォーマットの解析
    • インターフェース: parse_tool_calls()
  • ファインチューニングモジュール:

    • 場所: finetuning/
    • 依存: DeepSpeed、PEFT(LoRA)
    • インターフェース: train.py(SFT/DPO)

技術スタック

コア技術

  • 言語: Python 3.9以上
  • フレームワーク:
    • Transformers 4.39.1(モデル推論)
    • PyTorch(ディープラーニング基盤)
    • vLLM(高速推論)
  • 主要ライブラリ:
    • torch: ディープラーニング基盤
    • transformers (4.39.1): モデルとトークナイザー
    • accelerate: 分散学習と推論の最適化
    • safetensors: 安全で高速なモデル保存形式
    • vllm: 高速推論エンジン

開発・運用ツール

  • ファインチューニング:
    • DeepSpeed: Zero-1/2/3最適化
    • LoRA: パラメータ効率的ファインチューニング
    • FP8量子化: メモリ効率化
  • 評価ツール:
    • 多言語コード実行評価(Python、Java、Go等20言語)
    • Pass@k評価メトリクス
    • コンテナ化された安全な実行環境
  • データ処理:
    • JSONLフォーマットでのデータ準備
    • バイナリ化によるトレーニング高速化
  • デプロイ:
    • HuggingFace Inference API
    • vLLMサーバー
    • ローカルGPU推論

設計パターン・手法

  • Mixture-of-Experts(MoE): 効率的な大規模モデル実装のため、160個の専門家から8個を動的に選択
  • 長文脈処理: Yarnによる位置エンコーディング拡張で最大1Mトークンをサポート
  • ChatMLテンプレート: 一貫性のある対話形式の実装
  • Fill-in-the-Middle(FIM): コード補完タスク用の特殊フォーマット
  • 非思考モード: <think></think>ブロックを生成しない直接的な応答生成

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

  1. 入力処理:

    • ユーザープロンプトをmessages形式に変換
    • ChatMLテンプレートを適用(<|im_start|>role\ncontent<|im_end|>
    • トークナイザーでエンコード
  2. 推論処理:

    • MoEルーターが各層で8個の専門家を選択
    • 35Bのアクティブパラメータで推論実行
    • 最大256K(拡張時1M)トークンのコンテキスト処理
  3. 生成処理:

    • 自己回帰的にトークンを生成
    • 推奨サンプリングパラメータ(temperature=0.7、top_p=0.8等)
    • 最大65,536トークンの出力
  4. 後処理:

    • 特殊トークンの除去
    • デコードして人間可読なテキストに変換

API・インターフェース

公開API

HuggingFace Transformers API

  • 目的: モデルの読み込みと推論
  • 使用例:
# 基本的な推論API
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-Coder-480B-A35B-Instruct",
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-Coder-480B-A35B-Instruct")

# generate()メソッドで推論
outputs = model.generate(
    input_ids,
    max_new_tokens=65536,
    temperature=0.7,
    top_p=0.8
)

ツール呼び出しAPI

  • 目的: 関数呼び出しとツール使用
  • 特徴: 専用のqwen3coder_tool_parser.pyを使用

設定・カスタマイズ

推奨生成パラメータ

# 推奨設定
generation_config = {
    "temperature": 0.7,      # 創造性の制御
    "top_p": 0.8,           # nucleus sampling
    "top_k": 20,            # top-k sampling
    "repetition_penalty": 1.05,  # 繰り返し抑制
    "max_new_tokens": 65536,     # 最大出力長
    "do_sample": True,           # サンプリング有効化
}

拡張・プラグイン開発

  • ファインチューニング: SFTとDPOスクリプトを使用したカスタマイズ
  • プロンプトエンジニアリング: システムプロンプトとFIMフォーマットの活用
  • プラットフォーム統合:
    • Qwen Code: 公式コーディングプラットフォーム
    • CLINE: エージェント型コーディング環境
    • カスタムツール: tool_parser.pyを使用した独自ツール統合

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

パフォーマンス特性

  • モデルサイズ: 480Bパラメータ(35Bアクティブ)
  • ベンチマーク結果:
    • Agentic Codingタスクでオープンモデル中SOTA
    • Claude Sonnetに匹敵する性能
    • 358プログラミング言語をサポート
  • 最適化手法:
    • MoEによる効率的な計算(160専門家から8個を選択)
    • FP8量子化版も提供
    • vLLMによる高速推論サポート

スケーラビリティ

  • コンテキスト長: 256Kトークン(ネイティブ)、1Mトークン(Yarn拡張)
  • 分散推論: device_map="auto"による自動GPU分散
  • バッチ処理: vLLMによる効率的なバッチ推論
  • メモリ要件:
    • フル精度: 大規模GPUクラスタ推奨
    • FP8版: メモリ使用量を約50%削減

制限事項

  • ライセンス: リポジトリ自体にライセンス表記なし(モデル使用時は要確認)
  • ハードウェア要件: 大規模GPUメモリが必要(A100×8以上推奨)
  • 思考モード: <think></think>ブロックの生成には非対応
  • 依存関係: transformers 4.39.1に固定(バージョン互換性に注意)
  • トークナイザー: 新しいトークナイザーの使用が必須(古いバージョンは非互換)

評価・所感

技術的評価

強み

  • 最先端のAgentic Coding能力: 自律的なコード生成とツール使用でClaude Sonnetレベルの性能
  • 超長文脈処理: 256K~1Mトークンでリポジトリ全体の理解が可能
  • 効率的なMoEアーキテクチャ: 480Bパラメータながら35Bのみアクティブで効率的
  • 多言語対応: 358のプログラミング言語をサポート
  • 実用的なデモ: 3Dグラフィックス、ゲーム、シミュレーションなど高度な実装例
  • 充実したファインチューニング: SFTとDPOの両方をサポート

改善の余地

  • ライセンスの明確化: リポジトリレベルでのライセンス表記が不明確
  • ハードウェア要件: 非常に大きなGPUメモリが必要で、一般的な環境では動作困難
  • ドキュメント: 日本語ドキュメントが少ない
  • 思考モード非対応: Chain-of-Thoughtスタイルの推論生成に制限

向いている用途

  • エンタープライズ級のコード生成: 大規模プロジェクトの自動化
  • リポジトリレベルの分析: 全体構造を理解した上でのリファクタリング
  • インタラクティブアプリ開発: WebGL、ゲーム、シミュレーション
  • エージェント型開発: IDE統合やCI/CD自動化
  • 多言語プロジェクト: 様々なプログラミング言語を使うプロジェクト

向いていない用途

  • リソース制約環境: 個人開発者や小規模チームでの利用
  • リアルタイム応答: レイテンシが重要なアプリケーション
  • 思考プロセスの可視化: 推論過程の説明が必要な教育用途
  • 商用利用: ライセンス条件が不明確なため要確認

総評

Qwen3-Coderは、現在利用可能なオープンソースのコード生成モデルの中で最も強力なものの一つです。特にAgentic Codingにおける能力は画期的で、単なるコード補完を超えて、複雑なアプリケーション全体を自律的に実装できる能力を持っています。MoEアーキテクチャによる効率性と、超長文脈処理能力により、実際の開発現場で求められる「リポジトリ全体を理解した上でのコード生成」が可能になっています。

ただし、その性能を引き出すには相応のハードウェアリソースが必要であり、個人開発者や小規模チームには導入のハードルが高いのが現実です。また、ライセンス条件の不明確さは商用利用を検討する際の懸念事項となります。それでも、エンタープライズ環境や研究用途では、その卓越した能力が大きな価値を提供することは間違いありません。