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 カード 1 枚。推奨:GU30、A10、V100、または T4 カード 1 枚。 |
T4、P100、V100 など、16 GB 以上の VRAM を搭載した GPU。 |
|
Qwen2.5-Coder-3B/7B |
最小:P100、T4、または V100 (gn6v) カード 1 枚。推奨:GU30 または A10 カード 1 枚。 |
A10 や T4 など、24 GB 以上の VRAM を搭載した GPU。 |
|
Qwen2.5-Coder-14B |
最小:L20 または GU60 カード 1 枚、または GU30 カード 2 枚。推奨:GU60 または L20 カード 2 枚。 |
V100 など、32 GB 以上の VRAM を搭載した GPU。 |
|
Qwen2.5-Coder-32B |
最小:GU60 または L20 カード 2 枚、または A10 カード 4 枚。推奨:GU60 または L20 カード 4 枚、または V100-32G カード 8 枚。 |
A800 や H800 など、80 GB 以上の VRAM を搭載した GPU。 |
モデルのデプロイと呼び出し
モデルのデプロイ
-
モデルギャラリーページに移動します。
-
PAI コンソールにログオンします。
-
上部メニューの左上隅でリージョンを選択します。
-
左側メニューで ワークスペースリスト をクリックし、開きたいワークスペースの名前をクリックします。
-
左側メニューで、クイックスタート > [Model Gallery] を選択します。
-
-
モデルギャラリーページで、[Qwen2.5-Coder-32B-Instruct] モデルカードを見つけてクリックし、モデルの詳細ページに移動します。
-
右上隅の デプロイメント をクリックします。デフォルト設定のまま [OK] をクリックし、サービスをデプロイします。ステータスが 実行中 に変わると、デプロイは成功です。
このチュートリアルでは、従量課金方式で課金されるパブリックリソースを使用します。課金を回避するには、使用が終了したらサービスを停止または削除してください。
モデルの呼び出し
呼び出し情報の取得
モデルの詳細ページで、エンドポイント情報の表示 をクリックして、パブリックエンドポイントとトークンを表示します。
表示される [Invocation Information] パネルで、[Shared Gateway] タブを選択し、[Public Endpoint] と [Token] をコピーします。
API による呼び出し
以下の例は、API を使用してモデルを呼び出す方法を示しています。
from openai import OpenAI
# 1. クライアントを構成します。
# <EAS_TOKEN> を [Invocation Information] パネルの Token に置き換えます。
openai_api_key = "<EAS_TOKEN>"
# <EAS_ENDPOINT> を [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 はモデルパラメーターを必要とせず、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 Endpoint と EAS API Token は、デプロイされた EAS サービスの詳細から取得できます。python webui_client.py -h を実行すると、その他のパラメーターの説明を表示できます。
モデルファインチューニング
モデルギャラリーは、Qwen2.5-Coder-32B-Instruct モデル向けに、すぐに使用できる 2 つのファインチューニングアルゴリズムを提供しています:教師ありファインチューニング (SFT) と Direct Preference Optimization (DPO)。
教師ありファインチューニング (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'))"
}
]
Direct Preference Optimization (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] モデルカードをクリックして、モデルの詳細ページに移動します。
-
モデルの詳細ページで、右上隅の トレーニング をクリックします。以下のパラメーターを設定します。
-
データセットの設定:データを準備した後、Object Storage Service (OSS) バケットにアップロードするか、データセットオブジェクトを指定して NAS または CPFS 上のデータセットを選択します。PAI が提供するパブリックデータセットを使用して、ジョブを送信し、アルゴリズムをテストすることもできます。
-
コンピューティングリソースの設定:このアルゴリズムには、80 GB 以上の VRAM を搭載した GPU が必要です。選択したリソースクォータ内に十分なコンピューティングリソースがあることを確認してください。他のモデルサイズに必要なリソース仕様については、「環境要件」をご参照ください。
-
ハイパーパラメーターの設定:次の表に、トレーニングのハイパーパラメーターを示します。これらの値を調整するか、デフォルトを使用できます。
-
-
トレーニング をクリックします。ジョブの詳細ページに自動的にリダイレクトされ、そこでトレーニングステータスを監視し、ログを表示できます。
トレーニング済みモデルは、AI Asset - Model Management に自動的に登録され、モデルを表示またはデプロイできます。詳細については、「モデルの登録と管理」をご参照ください。
モデル評価
PAI は、Qwen2.5-Coder-32B-Instruct モデル向けに組み込み評価アルゴリズムを提供しています。このアルゴリズムを使用して、元のモデルとファインチューニング済みバージョンのパフォーマンスを評価できます。詳細については、「モデル評価」および「大規模言語モデル評価のベストプラクティス」をご参照ください。
モデル圧縮
トレーニング後、デプロイ前にモデルを量子化 (圧縮) して、ストレージ要件と計算要件を削減できます。詳細については、「モデル圧縮」をご参照ください。