Qwen2.5-Coder (CodeQwen とも呼ばれる) は、Alibaba Cloud が提供する、コード関連タスクに特化した大規模言語モデルのシリーズです。このシリーズには、開発者の多様なニーズに応えるため、6 つのモデルサイズ (0.5B、1.5B、3B、7B、14B、32B) が含まれています。膨大な量のコードデータでトレーニングされた Qwen2.5-Coder は、強力な数学的能力と推論能力を維持しながら、コード中心のアプリケーションで優れた性能を発揮します。このチュートリアルでは、Qwen2.5-Coder-32B-Instruct モデルを例として使用します。
モデルの概要
Qwen2.5-Coder は、最大 128K トークンのコンテキスト長をサポートし、92 のプログラミング言語と互換性を持つ、強力なコード中心のモデルシリーズです。これらのモデルは、多言語コード生成、コード補完、コード修復など、さまざまなコード関連タスクで優れた性能を発揮します。指示チューニングされたバリアントである Qwen2.5-Coder-Instruct は、ベースモデルを基に、これらのタスクでの性能を向上させ、優れた汎化能力を備えています。
主な機能は次のとおりです:
多言語プログラミング能力:Qwen2.5-Coder-Instruct は、ニッチなプログラミング言語を含む 40 以上の言語をカバーする McEval ベンチマークで、非常に優れた性能を発揮します。
コード推論能力:このモデルは CRUXEval ベンチマークで優れた結果を達成しており、その強力なコード推論能力を示しています。この強化された推論能力は、複雑な指示追従タスクの性能向上にも相関しています。
数学的能力:コーディングの基礎となる学問分野として、数学もモデルが優れている分野の 1 つであり、STEM 分野における包括的な能力を実証しています。
汎用機能:Qwen2.5-Coder-Instruct は、Qwen2.5 ベースモデルの強力な汎用機能を継承しており、幅広いタスクにわたって安定性と広範な適用性をもたらします。
環境要件
サポート対象リージョン
モデルギャラリーを使用して、中国 (北京) 、中国 (上海) 、中国 (深圳) 、中国 (杭州) 、中国 (ウランチャブ) 、およびシンガポールの各リージョンでこのモデルを実行できます。
リソース要件
モデルサイズ | デプロイ要件 | トレーニング要件 |
Qwen2.5-Coder-0.5B/1.5B | 最小:シングル P4 カード。推奨:シングル GU30、A10、V100、または T4 カード。 | 16 GB 以上の VRAM を搭載した GPU (T4、P100、V100 など) 。 |
Qwen2.5-Coder-3B/7B | 最小:シングル P100、T4、または V100 (gn6v) カード。推奨:シングル GU30 または A10 カード。 | 24 GB 以上の VRAM を搭載した GPU (A10、T4 など) 。 |
Qwen2.5-Coder-14B | 最小:シングル L20 または GU60 カード、またはデュアル GU30 カード。推奨:デュアル GU60 または L20 カード。 | 32 GB 以上の VRAM を搭載した GPU (V100 など) 。 |
Qwen2.5-Coder-32B | 最小:デュアル GU60 または L20 カード、または 4 基の A10 カード。推奨:4 基の GU60 または L20 カード、または 8 基の V100-32G カード。 | 80 GB 以上の VRAM を搭載した GPU (A800、H800 など) 。 |
モデルのデプロイと呼び出し
モデルのデプロイ
モデルギャラリーページに移動します。
PAI コンソールにログインします。
上部メニューの左上で、リージョンを選択します。
左側メニューで Workspaces をクリックし、開きたいワークスペースの名前をクリックします。
左側メニューで、Quick Start > [Model Gallery] を選択します。
モデルギャラリーページで、Qwen2.5-Coder-32B-Instruct モデルカードをクリックし、モデル詳細ページに移動します。
右上隅にある Deploy をクリックします。デフォルト設定をそのまま使用し、[OK] をクリックしてサービスをデプロイします。ステータスが [Running] に変わると、デプロイは成功です。
このチュートリアルではパブリックリソースを使用しており、従量課金が発生します。 課金を避けるため、完了後サービスを停止または削除してください。
モデルの呼び出し
呼び出し情報の取得
モデル詳細ページで View Call Information をクリックして、パブリックエンドポイントとトークンを表示します。
表示される [Invocation Information] パネルで、[Shared Gateway] タブを選択し、[Public Endpoint] と [Token] をコピーします。
API による呼び出し
次の例は、API を使用してモデルを呼び出す方法を示しています:
from openai import OpenAI
# 1. クライアントを設定します。
# を [Invocation Information] パネルの Token に置き換えます。
openai_api_key = "<EAS_TOKEN>"
# を [Invocation Information] パネルの Public Endpoint に置き換えます。
openai_api_base = "<EAS_ENDPOINT>/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
# 2. モデル名を取得します。
# BladeLLM の場合、model = "" と設定します。BladeLLM は model パラメーターを必要とせず、client.models.list() を使用したモデル名の取得をサポートしていません。OpenAI SDK の必須パラメーター要件に準拠するため、空の文字列に設定します。
models = client.models.list()
model = models.data[0].id
print(model)
# 3. チャット補完リクエストを開始します。
# ストリーミング (stream=True) と非ストリーミング (stream=False) の両方の出力がサポートされています。
stream = True
chat_completion = client.chat.completions.create(
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "hello"},
],
model=model,
top_p=0.8,
temperature=0.7,
max_tokens=1024,
stream=stream,
)
if stream:
for chunk in chat_completion:
print(chunk.choices[0].delta.content, end="")
else:
result = chat_completion.choices[0].message.content
print(result)API 呼び出しの詳細については、「API を使用したモデルの呼び出し」をご参照ください。
Web UI による呼び出し
Web UI を使用してモデルを呼び出すこともできます。詳細な手順については、モデルカードをご参照ください。
モデルのデプロイが完了したら、モデルカード詳細ページの [Web Application] セクションからクライアントコードをダウンロードし、python webui_client.py --eas_endpoint "<EAS API Endpoint>" --eas_token "<EAS API Token>" を実行して推論用のローカル Web アプリケーションを起動します。EAS API エンドポイントと EAS API トークンは、デプロイされた EAS サービスの詳細から取得できます。python webui_client.py -h を実行すると、その他のパラメーターの説明が表示されます。
モデルのファインチューニング
モデルギャラリーは、Qwen2.5-Coder-32B-Instruct モデル向けに、教師ありファインチューニング (SFT) と直接選好最適化 (DPO) の 2 つのファインチューニングアルゴリズムを標準で提供しています。
教師ありファインチューニング (SFT)
SFT トレーニングアルゴリズムは JSON 形式の入力をサポートしており、各データエントリは指示と出力から構成され、それぞれ "instruction" および "output" フィールドで表されます。例:
[
{
"instruction": "Create a function to calculate the sum of a sequence of integers.",
"output": "# Python code\ndef sum_sequence(sequence):\n sum = 0\n for num in sequence:\n sum += num\n return sum"
},
{
"instruction": "Generate a Python code for crawling a website for a specific type of data.",
"output": "import requests\nimport re\n\ndef crawl_website_for_phone_numbers(website):\n response = requests.get(website)\n phone_numbers = re.findall('\\d{3}-\\d{3}-\\d{4}', response.text)\n return phone_numbers\n \nif __name__ == '__main__':\n print(crawl_website_for_phone_numbers('www.example.com'))"
}
]直接選好最適化 (DPO)
DPO トレーニングアルゴリズムは JSON 形式の入力をサポートしています。各データエントリは、プロンプト、選択された応答、拒否された応答から構成され、それぞれ "prompt"、"chosen"、"rejected" フィールドで表されます。例:
[
{
"prompt": "Create a function to calculate the sum of a sequence of integers.",
"chosen": "# Python code\ndef sum_sequence(sequence):\n sum = 0\n for num in sequence:\n sum += num\n return sum",
"rejected": "[x*x for x in [1, 2, 3, 5, 8, 13]]"
},
{
"prompt": "Generate a Python code for crawling a website for a specific type of data.",
"chosen": "import requests\nimport re\n\ndef crawl_website_for_phone_numbers(website):\n response = requests.get(website)\n phone_numbers = re.findall('\\d{3}-\\d{3}-\\d{4}', response.text)\n return phone_numbers\n \nif __name__ == '__main__':\n print(crawl_website_for_phone_numbers('www.example.com'))",
"rejected": "def remove_duplicates(string): \n result = \"\" \n prev = '' \n\n for char in string:\n if char != prev: \n result += char\n prev = char\n return result\n\nresult = remove_duplicates(\"AAABBCCCD\")\nprint(result)"
}
]モデルギャラリーページで、Qwen2.5-Coder-32B-Instruct モデルカードをクリックし、モデル詳細ページに移動します。
モデル詳細ページの右上隅にある Train をクリックします。次のパラメーターを設定します:
データセット設定:データを準備した後、Object Storage Service (OSS) バケットにアップロードするか、データセットオブジェクトを指定して NAS または CPFS 上のデータセットを選択します。PAI が提供するパブリックデータセットを使用してジョブを送信し、アルゴリズムをテストすることもできます。
コンピューティングリソース設定:アルゴリズムには 80 GB 以上の VRAM を搭載した GPU が必要です。選択したリソースクォータ内に十分なコンピューティングリソースがあることを確認してください。他のモデルサイズで必要なリソース仕様については、「環境要件」をご参照ください。
ハイパーパラメーター設定:次の表に、トレーニングのハイパーパラメーターを示します。これらの値を調整するか、デフォルト値を使用できます。
Train をクリックすると、ジョブ詳細ページに自動的にリダイレクトされ、そこでトレーニングステータスを監視したり、ログを表示したりできます。
トレーニングされたモデルは、AI アセット - モデル管理に自動的に登録され、モデルを表示したりデプロイしたりできます。詳細については、「モデルの登録と管理」をご参照ください。
モデルの評価
PAI は、Qwen2.5-Coder-32B-Instruct モデル向けの組み込み評価アルゴリズムを提供しています。このアルゴリズムを使用して、オリジナルモデルとファインチューニングされたバージョンの性能を評価できます。詳細については、「モデル評価」および「大規模言語モデル評価のベストプラクティス」をご参照ください。
モデルの圧縮
トレーニング後、デプロイ前にモデルを量子化 (圧縮) して、ストレージとコンピューティングの要件を削減できます。詳細については、「モデル圧縮」をご参照ください。