モデル蒸留は、大規模モデル(教師モデル)から小規模モデル(生徒モデル)へ知識を転移します。この技術により、モデルのパフォーマンスを維持しながらパラメータ数を大幅に削減し、大規模モデルの高い推論コストと遅い応答時間という課題に対処します。PAI Model Gallery は、Alibaba Cloud 独自のモデル蒸留フレームワークである PAI-EasyDistill に基づいたワンクリックモデル蒸留機能を提供します。コードを記述することなく、蒸留プロセス全体を完了できます。
ユースケース
モデル蒸留は、以下のシナリオに最適です。
-
オンデバイスまたはエッジデプロイメント:携帯電話や IoT デバイスなど、リソースに制約のある環境向けに、大規模モデルを軽量モデルに圧縮します。
-
コスト最適化:オンラインサービスの推論コストが高すぎる場合、より小さなモデルに蒸留することでコストを削減します。
-
推論アクセラレーション:レイテンシーに敏感なオンラインアプリケーションでは、蒸留により高精度を維持しながらレイテンシーと GPU リソース消費を削減し、サービスのスループットを向上させます。
-
ドメイン知識の継承:医療や法律など特定のドメインで優れた性能を発揮する大規模モデルから、よりコスト効率の高い小規模モデルへ知識を転移し、ドメイン固有のタスクに活用します。
不適切な場合や慎重な評価が必要なシナリオ:
-
100% のパフォーマンス忠実性が必要な場合:パフォーマンスの劣化を一切許容できない場合。蒸留にはほぼ必ずパフォーマンスの損失が伴います。
-
過度にシンプルなタスク:分類やテキストマッチングのようなシンプルなタスクでは、小規模モデルを直接トレーニングする方が蒸留よりもコスト効率が高い場合があります。
-
高品質なシードデータの不足:蒸留の効果は、シードデータの品質に大きく依存します。シードデータが実際のビジネスシナリオから大きく逸脱している場合、結果が不十分になる可能性があります。
仕組み
PAI Model Gallery のモデル蒸留機能は、ブラックボックス蒸留を採用しています。本質的には、これは生成的データ拡張の一形態です。教師モデルが高品質のラベル付きデータを生成し、そのデータを使用して生徒モデルを教師ありファインチューニング (SFT) でトレーニングします。
ワークフローは以下の通りです。
-
蒸留データの構築:
-
ベースデータの準備:パブリックデータセットまたはカスタムデータセットを使用します。
-
(オプション) データ合成:PAI-EasyDistill フレームワークは、教師モデルのタイプに基づいてデータを拡張または最適化するデータ合成機能を提供します。汎用モデルの場合、指示拡張 (より多様なデータのために指示を拡張・書き換え) または指示最適化 (明確性のために指示の表現を洗練) を実行できます。推論モデルの場合、思考連鎖の短縮と思考連鎖の拡張を使用できます。
-
教師モデルの推論:教師モデルがデータに対して推論を実行し、生徒モデルのトレーニングに必要な蒸留データを生成します。
-
-
生徒モデルのトレーニング:生成された蒸留データセットを使用して、教師ありファインチューニング (SFT) により生徒モデルをトレーニングします。
クイックスタート
このセクションでは、PAI が提供するパブリックデータセットとデフォルト設定を使用して、簡単なモデル蒸留タスクを実行する手順を説明します。
-
PAI コンソールにログインし、左側のナビゲーションペインでQuickStart > [モデルギャラリー]を選択します。
-
Models ページでフィルターを使用して、
Qwen3-32Bなどの蒸留をサポートするモデルを検索します。Supported Operations フィルターで、Distill を選択します。蒸留をサポートするすべての教師モデルがシステムに表示されます。

-
モデルカードをクリックしてモデル詳細ページを開きます。右上隅にあるDistillをクリックしてタスク作成ページを開きます。以下のようにキーパラメーターを設定し、その他のパラメーターはデフォルト値のままにします。
-
[Basic configuration]: Model output path には、
oss://mybucket.oss-cn-hangzhou-internal.aliyuncs.com/model-distillation/modelなど、アクセス権限のある OSS パスを指定します。説明モデルファイルの上書きを防ぐため、蒸留タスクごとに個別の出力ディレクトリを作成してください。OSS バケットは、PAI サービスと同じリージョンに存在する必要があります。
-
[Build distillation data]:
-
[Dataset]: Public Dataset を選択し、ドロップダウンリストから
Chinese-medical-dialogue-dataを選択します。 -
[Distillation output path]: アクセス可能な OSS パス (例:
oss://mybucket.oss-cn-hangzhou-internal.aliyuncs.com/model-distillation/dist-data) を指定します。 -
[Computing Resources]:Source には Public Resources を選択し、Job Resource はデフォルトで推奨される Instance Type のままにします。
-
-
生徒モデルのトレーニング:
-
[Student model config]: Public Model を選択し、ドロップダウンリストから
Qwen3-4Bなどの小規模なモデルを選択します。 -
[Training Mode]: デフォルトの LoRA ファインチューニングのままにします。
-
[Computing Resources]:Source には Public Resources を選択し、Job Resource は、デフォルトで推奨されている Instance Type のままにします。
-
-
-
Distillをクリックします。表示される料金リマインダーダイアログボックスで、OK をクリックします。タスク詳細の基本設定ページに自動的にリダイレクトされ、そこでタスクのステータスを確認できます。
参考実行時間:小規模データセット (100〜1,000 エントリ) の場合、約 20〜40 分です。
制限事項
-
モデルの制限:
-
教師モデルは、PAI Model Gallery で蒸留をサポートするモデルから選択する必要があります。具体的なモデルのリストについては、コンソールをご参照ください。
-
生徒モデルは、PAI Model Gallery のパブリックモデルまたはカスタムモデルを使用できます。現在、カスタムモデルは PAI Model Gallery でファインチューニングされた LLM に限定されています。蒸留タスクを意味のあるものにするため、生徒モデルのパラメータ数は教師モデルよりも少ない必要があります。
-
-
蒸留方法:現在、ブラックボックス蒸留 (SFT ベース) のみがサポートされています。
-
データセット:パブリックデータセットとカスタムデータセットがサポートされています。データは JSON 形式で、
instructionフィールド(質問列)を含める必要があります。outputフィールド(出力列)は必須ではありません。[ { "instruction": "中国の首都はどこですか?" }, { "instruction": "人工知能とは何かを説明してください。" } ] -
生徒モデルのトレーニング方法:SFT のみがサポートされており、LoRA、QLoRA、フルパラメータファインチューニングが含まれます。
設定
蒸留データの構築
Dataset
データ合成は、元のデータセットを変換して多様性と品質を向上させるオプション機能です。教師モデルが推論モデルかどうかに基づいて、データ拡張戦略を選択します。
-
[Synthesize instruction data] (汎用指示モデル用):
-
[Enhance instructions]: 元の指示を拡張および書き換えて、より多様なスタイルの指示を生成します。
入力例: {"instruction": "杭州の2日間の旅行ガイドを作成してください。"} 出力例: {"instruction": "北京の3日間の旅行ガイドを作成してください。"} {"instruction": "上海を訪れたいです。私におすすめの旅行プランを教えてください。"} -
[Optimize instructions]:指示の表現を最適化し、モデルがより明確かつ容易に理解できるようにします。
入力例: {"instruction": "杭州の2日間の旅行ガイドを作成してください。"} 出力例: {"instruction": "杭州の2日間の旅行ガイドを作成してください。旅程、食事のおすすめ、宿泊施設の提案、最適な旅行時期を含めてください。"}
-
-
[Synthesize chain-of-thought data] (推論モデル用):
-
思考連鎖の拡張:元の質問と回答のペアに詳細な推論ステップ (Chain of Thought) を追加し、生徒モデルの推論能力を向上させます。
入力例: {"instruction": "田中さんはリンゴを3つ持っていて、1つ食べました。残りは何個ですか?", "output": "<think>短い思考の連鎖</think> <output>田中さんにはリンゴが2つ残っています</output>"} 出力例: {"instruction": "田中さんはリンゴを3つ持っていて、1つ食べました。残りは何個ですか?", "output": "<think>長い思考の連鎖</think> <output>田中さんにはリンゴが2つ残っています</output>"} -
思考連鎖の短縮:長い思考連鎖プロセスを簡略化し、推論効率を向上させます。
入力例: {"instruction": "田中さんはリンゴを3つ持っていて、1つ食べました。残りは何個ですか?", "output": "<think>長い思考の連鎖</think> <output>田中さんにはリンゴが2つ残っています</output>"} 出力例: {"instruction": "田中さんはリンゴを3つ持っていて、1つ食べました。残りは何個ですか?", "output": "<think>短い思考の連鎖</think> <output>田中さんにはリンゴが2つ残っています</output>"}
-
初めて蒸留を実行する際は、ベースラインを確立するためにデータ合成を無効にすることを推奨します。プロセスに慣れた後、さまざまな合成オプションを試して、最終結果への影響を評価できます。
ハイパーパラメータ
これらのハイパーパラメータは、データ構築ステージにおける教師モデルの生成動作を制御します。
|
パラメータ |
説明 |
チューニングガイダンス |
|
推論パラメータ (教師モデルの推論に適用) |
||
|
|
生成されるテキストのランダム性を制御します。範囲:[0, 2]。デフォルト:0.8。 |
• 値を上げる (例: > 1.0):より多様で創造的な出力を生成します。さまざまな応答スタイルが必要なシナリオに有用です。 |
|
|
教師モデルへの入力トークンの最大数 ( |
• 情報の損失を防ぐため、この値はデータセット内の最長の入力長より大きくしてください。 |
|
|
教師モデルが生成できる新しいトークン ( |
• この値は、教師モデルに生成させたい回答の平均長より大きくする必要があります。そうでない場合、回答が切り捨てられます。 |
|
機能制御パラメータ (指示拡張が有効な場合のみ表示) |
||
|
|
指示拡張中に各データ項目に対して生成されるサンプル数。デフォルト:0。 |
• 値を増やす (例: > 5):より多様な指示を生成しますが、データ量と計算コストが大幅に増加します。 |
|
|
指示拡張中に使用されるインコンテキストサンプルの数。デフォルト:3。 |
• 値を増やす (例: > 5):コンテキストと意味的により整合した指示を生成しますが、多様性が低下し、計算オーバーヘッドが増加する可能性があります。 |
確認
構築完了後、生成された蒸留データをシステムがどのように処理するかを選択します。
-
[Auto-confirm] (推奨): データ構築が完了すると、システムはデータを自動的に検証し、後続の student モデルのトレーニングを開始します。このオプションは、公開データセットを使用する場合やデータ品質に自信がある場合に適しています。
-
[Manually confirm]: データビルドが完了したら、データ品質を手動で確認する必要があります。このオプションは、非常に高いデータ品質要件があるシナリオ、またはカスタムデータセットを初めて使用する場合に適しています。データを手動で確認するには、次の手順を実行します。
-
蒸留データがビルドされると、蒸留タスクリストでタスクステータスが [蒸留データの確認を待機中] に変更されます。
-
「操作」列で、Confirm distillation data をクリックします。確認ダイアログボックスが表示されます。
-
ダイアログボックスでClick to viewをクリックし、蒸留データセットの詳細を表示します。
-
データ品質が期待どおりの場合は、Confirm をクリックして学生モデルのトレーニングを続行します。
-
データが期待どおりではない場合は、Cancel をクリックします。タスクは現在のステージで停止します。
-
-
生徒モデルのトレーニング
方法
生徒モデルに対して SFT を実行する具体的な方法を選択します。
-
LoRA (推奨):パラメータ効率的なファインチューニング方法で、良好なパフォーマンスを維持しながら GPU メモリ要件を大幅に削減します。
-
QLoRA:LoRA の量子化バージョンで、GPU メモリ使用量をさらに削減し、よりリソースに制約のある環境でのトレーニングに適しています。
-
フルパラメータファインチューニング:すべてのモデルパラメータを更新します。この方法は理論的には最良の結果をもたらしますが、膨大なコンピューティングリソースと時間を必要とし、非常にコストがかかります。
検証セット
トレーニング中にモデルのパフォーマンスを評価するための検証データセットを選択します。
-
[Don't configure]: トレーニング中に検証は実行されません。このオプションは、簡単な実験やデータ量が少ないシナリオに適しています。
-
[Auto-split distillation data] (推奨): システムは、生成された蒸留データセットをトレーニングセットと検証セットに自動的に分割します。デフォルトでは、データの 5% が検証に使用されます。
-
[Add validation dataset]:個別の OSS データセットを検証セットとして指定します。 このオプションは、標準の検証セットがあるシナリオに適しています。
ハイパーパラメータ
これらのハイパーパラメータは、生徒モデルの SFT プロセスを制御します。
|
パラメータ |
説明 |
チューニングガイダンス |
|
|
学習率。モデルパラメータ更新のステップサイズを制御します。デフォルト:5e-5。 |
• トレーニングロス (Loss) の減少が遅い場合は、学習率を上げてみてください。 |
|
|
トレーニングエポック数。データセット全体がトレーニングプロセスを通過する回数です。デフォルト:1。 |
• 大規模データセットの場合、通常 1〜3 エポックで十分です。 |
|
|
各 GPU で 1 回のトレーニングステップで処理されるサンプル数。デフォルト:1。 |
• GPU メモリに余裕がある場合、この値を増やすとトレーニングが高速化され、安定する可能性があります。 |
|
|
生徒モデルへの入力の最大シーケンス長 (トークン数)。デフォルト:128。 |
• この値は、データ特性とアプリケーションシナリオに基づいて設定してください。 テキストが長いほど、より大きな |
本番環境のプラクティスと高度なチューニング
コスト最適化
-
リソースソースの選択:
-
テストまたは小規模タスク:パブリックリソースを使用して、従量課金の柔軟性を活用します。
-
本番環境または優先度の高いタスク:リソースクォータを使用して、リソースの安定性とコスト管理を確保します。
-
コストに敏感、またはフォールトトレラントなタスク:プリエンプティブルリソースを試して、より低価格でコンピューティングパワーを取得しますが、タスクが中断されるリスクを受け入れます。
-
-
小規模データセットから開始:大規模な蒸留を実行する前に、データの一部 (例:100〜1,000 エントリ) でプロセス全体を実行し、設定を検証して、設定ミスによる大量のコンピューティングリソースの無駄を回避します。
-
データセットの最適化:より小規模でも高品質なシードデータセットを使用することで、教師モデルの推論オーバーヘッドと生徒モデルのトレーニング時間を削減できます。
-
トレーニングに QLoRA を選択:QLoRA は、量子化されたモデルでトレーニングすることで GPU メモリ使用量を大幅に削減し、より低スペック (かつ安価) な GPU でトレーニングできるようにします。
-
適切なランタイムの設定:タスクに適切な最大実行時間を設定して、予期しない問題によりタスクが過度に長時間実行され、不要なコストが発生するのを防ぎます。
パフォーマンスチューニング
-
データ品質が鍵:教師モデルはパフォーマンスの上限を設定しますが、蒸留データセットの品質は下限を設定します。蒸留に使用する元のデータセットが、ビジネスシナリオをカバーし、明確な指示を含み、多様なコンテンツを持つことを確認してください。
-
ハイパーパラメータのチューニング:
-
スチューデントモデルの訓練損失が減少しない、または発散する場合は、まず学習率 (
learning_rate) を下げる必要があります。 -
メモリ不足 (OOM) エラーが発生した場合、まずバッチサイズ (
per_device_train_batch_size) または シーケンス長 (seq_length) を小さくしてください。
-
-
GPU 使用率の監視: [タスク監視] では、GPU 使用率に細心の注意を払ってください。使用率が低すぎる場合は、GPU リソースが効率的に使用されていないことを示しています。効率を向上させるには、
per_device_train_batch_sizeを増やすことを検討してください。
パフォーマンス評価
蒸留完了後、生徒モデルのパフォーマンスを評価する必要があります。
-
モデルのデプロイ: 蒸留タスク詳細ページで、右上隅にあるDeployボタンをクリックし、蒸留された学生モデルをオンライン推論サービスとしてデプロイします。
-
比較評価の実行:PAI のモデル評価機能を使用して、同じ評価セットで教師モデルと生徒モデルのパフォーマンス指標 (精度や BLEU など) を比較し、パフォーマンスの損失を定量化します。
-
本番環境での検証:完全なローンチ前に、小規模なカナリアテストを実行して、実際のビジネスシナリオで蒸留モデルの推論速度、リソース消費、ビジネスへの影響を元のモデルと比較します。
よくある質問
Q: 教師モデルと生徒モデルの選択
-
教師モデル:ビジネスシナリオで優れたパフォーマンスの実績がある大規模パラメータモデルを選択します。一般的に、パラメータ数が多いモデルはより多くの知識を含み、蒸留効果の上限を高めます。
-
生徒モデル: 教師モデルと同じシリーズで、よりパラメーターの少ないモデルを選択します。 たとえば、
Qwen-30BからQwen-8Bに蒸留します。 このアプローチにより、アーキテクチャの互換性が確保され、知識転移の効率が最大化されます。
Q: 蒸留タスクの所要時間
所要時間は、主にデータセットのサイズ、モデルのスケール、トレーニング方法、コンピューティングリソースに依存します。小規模データセット (数千エントリ) と中規模モデル (7B〜14B) を使用した蒸留タスクは、通常、数十分から数時間かかります。
Q: 中断されたタスクの再開
いいえ。設定された最大実行時間に達してタスクが中断された場合、タスクは失敗し、再開できません。タスクログを分析して、実行時間が遅い原因がリソース不足か、時間制限が短すぎるかを判断してください。その後、最大実行時間を増やすか、より高スペックのインスタンスタイプを使用して、タスクを再送信してください。
Q: 対処法: CUDA out of memory エラー
これは典型的な GPU メモリ不足 (OOM) エラーです。以下の手順に従って、問題をトラブルシューティングおよび解決してください。
-
バッチサイズを小さくします: Student model training 設定の Hyperparameters セクションで、
per_device_train_batch_sizeの値を半分 (たとえば、2 から 1) にして再試行します。 -
トレーニング方法の切り替え:
バッチサイズを小さくしても効果がない場合は、設定ページに戻り、トレーニング方法をLoRAまたはフルパラメータファインチューニングからQLoRAに切り替えます。QLoRA は GPU メモリ使用量を大幅に削減します。 -
GPU インスタンスタイプのアップグレード: 前述の方法で問題が解決しない場合は、モデルとデータの規模に対してより高いスペックのハードウェアが必要です。Computing Resources セクションで、より多くのメモリを搭載した GPU インスタンスタイプを選択します。