🚀 Qwen2-72B-Instruct
Qwen2-72B-Instructは、Qwenシリーズの大規模言語モデルです。多言語能力やコーディング、数学、推論などの様々なタスクで高い性能を発揮し、最大131,072トークンのコンテキスト長をサポートします。
🚀 クイックスタート
ここでは、apply_chat_template
を使用してトークナイザーとモデルをロードし、内容を生成するコード例を示します。
基本的な使用法
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda"
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2-72B-Instruct",
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-72B-Instruct")
prompt = "Give me a short introduction to large language model."
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
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
)
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]
✨ 主な機能
- 高い性能:言語理解、言語生成、多言語能力、コーディング、数学、推論などの様々なベンチマークで、多くのオープンソースモデルを上回り、独自モデルに匹敵する競争力を示しています。
- 長文処理能力:最大131,072トークンのコンテキスト長をサポートし、大量の入力を処理できます。
📦 インストール
Qwen2のコードは最新のHugging face transformersに含まれています。transformers>=4.37.0
をインストールすることをお勧めします。そうしないと、以下のエラーが発生する可能性があります。
KeyError: 'qwen2'
📚 ドキュメント
モデルの詳細
Qwen2は、異なるモデルサイズのデコーダー言語モデルを含む言語モデルシリーズです。各サイズについて、ベース言語モデルとアラインされたチャットモデルをリリースしています。SwiGLU活性化関数、注意QKVバイアス、グループクエリ注意などを備えたTransformerアーキテクチャに基づいています。また、複数の自然言語とコードに適応する改良型トークナイザーも備えています。
学習の詳細
モデルは大量のデータで事前学習され、教師あり微調整と直接的な嗜好最適化の両方で事後学習されています。
長文の処理
32,768トークンを超える大量の入力を処理するために、YARNというモデルの長さ外挿を強化する手法を利用しています。長文での最適なパフォーマンスを保証します。
デプロイにはvLLMの使用をお勧めします。以下の手順で長文コンテキスト機能を有効にすることができます。
- vLLMのインストール:以下のコマンドを実行してvLLMをインストールできます。
pip install "vllm>=0.4.3"
または、ソースからvLLMをインストールすることもできます。
- モデル設定の構成:モデルの重みをダウンロードした後、
config.json
ファイルを以下のスニペットを追加して変更します。
{
"architectures": [
"Qwen2ForCausalLM"
],
"vocab_size": 152064,
"rope_scaling": {
"factor": 4.0,
"original_max_position_embeddings": 32768,
"type": "yarn"
}
}
このスニペットにより、YARNがより長いコンテキストをサポートできるようになります。
- モデルのデプロイ:vLLMを使用してモデルをデプロイします。たとえば、以下のコマンドを使用してopenAIライクなサーバーをセットアップできます。
python -m vllm.entrypoints.openai.api_server --served-model-name Qwen2-72B-Instruct --model path/to/weights
その後、以下のコマンドでChat APIにアクセスできます。
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen2-72B-Instruct",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Your Long Input Here."}
]
}'
vLLMの詳細な使用方法については、Githubを参照してください。
⚠️ 重要提示
現在、vLLMは静的なYARNのみをサポートしています。つまり、スケーリング係数は入力長に関係なく一定であり、短いテキストでのパフォーマンスに影響を与える可能性があります。長文コンテキストの処理が必要な場合のみ、rope_scaling
設定を追加することをお勧めします。
🔧 技術詳細
- アーキテクチャ:Transformerアーキテクチャに基づいており、SwiGLU活性化関数、注意QKVバイアス、グループクエリ注意などを備えています。
- トークナイザー:複数の自然言語とコードに適応する改良型トークナイザーを使用しています。
📄 ライセンス
このモデルは、tongyi-qianwenライセンスの下で提供されています。
評価
Qwen2-72B-Instructを同規模の命令調整済みLLMと簡単に比較します。結果は以下の通りです。
データセット |
Llama-3-70B-Instruct |
Qwen1.5-72B-Chat |
Qwen2-72B-Instruct |
英語 |
|
|
|
MMLU |
82.0 |
75.6 |
82.3 |
MMLU-Pro |
56.2 |
51.7 |
64.4 |
GPQA |
41.9 |
39.4 |
42.4 |
TheroemQA |
42.5 |
28.8 |
44.4 |
MT-Bench |
8.95 |
8.61 |
9.12 |
Arena-Hard |
41.1 |
36.1 |
48.1 |
IFEval (Prompt Strict-Acc.) |
77.3 |
55.8 |
77.6 |
コーディング |
|
|
|
HumanEval |
81.7 |
71.3 |
86.0 |
MBPP |
82.3 |
71.9 |
80.2 |
MultiPL-E |
63.4 |
48.1 |
69.2 |
EvalPlus |
75.2 |
66.9 |
79.0 |
LiveCodeBench |
29.3 |
17.9 |
35.7 |
数学 |
|
|
|
GSM8K |
93.0 |
82.7 |
91.1 |
MATH |
50.4 |
42.5 |
59.7 |
中国語 |
|
|
|
C-Eval |
61.6 |
76.1 |
83.8 |
AlignBench |
7.42 |
7.28 |
8.27 |
引用
もしこの研究が役に立った場合は、以下のように引用してください。
@article{qwen2,
title={Qwen2 Technical Report},
year={2024}
}
量化
非常に積極的な2bpw量化を行っており、pixiv-novelを校正データセットとして使用しています。これにより、小説内容の生成におけるモデルの困惑度を最小限に抑え、該当分野での性能を維持しています。
このモデルは、24Gの消費者向けGPU 1枚でロードして実行できます。SillyTavernと組み合わせるとさらに良いでしょう。