LayerSkipとは?追加モデルなしでLLM推論を高速化する早期退出と自己Speculative Decodingの仕組み

LayerSkipは、LLMの中間層から早めに出力を作れるよう訓練し、同じモデルだけでspeculative decodingを行う推論最適化技術です。追加ドラフトモデルを持たずに高速化する考え方、仕組み、実務での使い道を整理します。

参考文献

LayerSkip: Enabling Early Exit Inference and Self-Speculative Decoding

Mostafa Elhoushi, Akshat Shrivastava, Diana Liskovich, Basil Hosmer, Bram Wasti, Liangzhen Lai, Anas Mahmoud, Bilge Acun, Saurabh Agarwal, Ahmed Roman, Ahmed A Aly, Beidi Chen, Carole-Jean Wu

論文を見る

今回の論文

今回取り上げるのは、Mostafa Elhoushi らによる 2024 年の論文「LayerSkip: Enabling Early Exit Inference and Self-Speculative Decoding」です。公開元は ACL 2024 で、研究分野は LLM 推論最適化、early exit、speculative decoding です。URL は https://aclanthology.org/2024.acl-long.681/ です。

この論文を選んだ理由は、LLM を速くしたいときにありがちな「小さいドラフトモデルを別で持つ必要がある」「高速化のために推論基盤が複雑になる」という問題に、かなり筋の良い答えを出しているからです。1つのモデルの途中層をそのままドラフト役として使う考え方は、開発コスト、メモリ消費、運用設計の3つに効く可能性があります。

どんな技術か

LayerSkip は、LLM の中間層だけを使って早めにトークン予測を出せるように学習し、その中間予測を「下書き」として使い、残りの層でまとめて検証する技術です。

通常の自己回帰生成では、1トークン出すたびに全レイヤーを毎回最後まで通します。これが遅さの原因です。一方 speculative decoding は、軽いドラフトモデルが複数トークンを先に提案し、本体モデルがまとめて検証することで高速化します。ただし普通は 2 つのモデルが必要です。

LayerSkip はここを変えます。モデル前半のレイヤー群をドラフトモデルの代わりに使い、後半のレイヤー群を検証器として使います。つまり、1つの LLM の中に「下書き役」と「確認役」を同居させる設計です。これにより、追加モデルを持たずに speculative decoding 的な高速化を狙えます。

課題

この技術が解決しようとしている課題は、LLM 推論が遅く、しかも高速化のための仕組みが重くなりやすいことです。

何が難しいのかというと、自己回帰生成では新しいトークンを 1 つ出すたびに全レイヤーを順に通る必要があるからです。レイヤー数が多いほど、また生成長が長いほど、推論時間は素直に重くなります。チャット、要約、コード生成、エージェントのような用途では、この逐次性がそのまま待ち時間になります。

既存の speculative decoding は、この問題に対してかなり有効です。小さいドラフトモデルが複数トークンを提案し、大きい本体モデルがそれをまとめて検証します。ただしその代わりに、2 モデル分の重みを持つ必要があり、メモリ消費、モデル管理、デプロイ構成、キャッシュ設計が複雑になります。小規模チームやオンプレ環境では、この複雑さが導入障壁になります。

単純な early exit も別の選択肢ですが、こちらは途中層でそのまま出力して終えるため、速くはなっても品質が落ちやすいのが限界です。中間層は最終層ほど予測が洗練されていないので、ただ早く切り上げるだけでは実用上の精度を維持しにくいです。

なぜこの課題を解く必要があるかというと、実際の AI システムではモデルの賢さだけでなく、応答速度、同時実行数、GPU 原価が重要だからです。社内アシスタント、RAG、コーディング支援、生成 AI SaaS の多くは、数%の品質差よりも、レイテンシとコストの改善のほうがプロダクト価値に直結する場面があります。LayerSkip は、品質を保ちながら高速化したいという実務上の要求に向いた技術です。

用語解説

Early Exit
モデルの途中層で出力を確定させ、残りの層を計算しない考え方です。LayerSkip ではこれを単なる省略ではなく、「途中層でも予測できるよう学習する」こととセットで使うのが重要です。
Speculative Decoding
軽いモデルが複数トークンを先に提案し、重いモデルがまとめて検証する高速化手法です。LayerSkip はこの枠組みを 2 モデル構成ではなく、1 モデルの前半層と後半層で実現しようとしています。
LM Head
隠れ状態を語彙確率へ変換する最終出力層です。この論文では各層ごとに別ヘッドを足さず、同じ LM Head を中間層にも共有して使えるように訓練する点がポイントです。
Layer Dropout
学習中に一部の Transformer 層を確率的にスキップする方法です。LayerSkip では後ろの層ほど高い確率で落とし、中間層だけでも予測を維持しやすいよう圧力をかけます。
Token Acceptance Rate
ドラフトで提案したトークンのうち、検証段階でそのまま採用された割合です。self-speculative decoding が実際に速くなるかどうかは、この受理率に大きく依存します。

技術の仕組み

LayerSkip の本質は、推論アルゴリズム単体ではなく、途中層を使える状態にする学習レシピと、その上で 1 モデル speculative decoding を成立させる推論手順を一体で設計したことにあります。

基本アイデア

論文の提案は 3 段階です。まず学習時に layer dropout と early exit loss を入れて、中間層でも次トークン予測がしやすいようにします。次に推論時には、モデルの前半 E 層までで一度トークン候補を出します。最後に、残りの層でその候補をまとめて検証し、一致したものは採用、不一致なら修正します。

重要なのは、通常の speculative decoding のように別ドラフトモデルを持たないことです。前半層がドラフト、後半層が検証を兼ねるため、重みを二重に持たなくて済みます。

学習時の工夫1: Layer Dropout

論文では、各 Transformer 層を学習中に確率的にスキップします。しかも dropout 率は全層一律ではなく、前半層は低く、後半層ほど高く設定します。後段レイヤーに強く依存しすぎないようにして、中間層だけでも意味のある表現を作れるようにする狙いです。

式としては、各層の出力を確率変数でオンオフし、層ごとの dropout 率 p_l,t を持たせています。さらにこの dropout 率は、層が深くなるほど指数的に大きくなるよう設計されています。論文では、継続事前学習や fine-tuning では時間方向のスケーリングを固定し、ゼロから事前学習する場合は、学習の進行に応じて dropout を強める curriculum も使っています。

ここで効いてくる考え方は、「後ろの層がなくても動けるように前の層を鍛える」ということです。単なる正則化というより、早期退出できるモデルを作るための構造的な訓練です。

学習時の工夫2: Early Exit Loss

LayerSkip では、最終層だけでなく中間層の出力にも言語モデリング損失をかけます。つまり「この層の時点でも次トークンをある程度当ててほしい」と直接教えます。

ただし、各層に別のヘッドを足す方式ではありません。論文では追加モジュールを入れず、同じ LM Head を全層で共有します。これは実装を軽くしやすい反面、中間層の表現をそのまま語彙分布へ写せるようにする必要があるため、学習設計が重要になります。

また、全層に毎回同じ強さで early exit loss をかけると、学習が遅くなり、最終層の品質も落ちやすいと報告されています。そこで著者らは curriculum を入れています。具体的には、ある間隔で対象層をローテーションする方法や、後ろの層から順に少しずつ early exit loss を有効化する方法を試しています。要するに「全部の層を一気に賢くしようとせず、段階的に訓練する」わけです。

推論時の流れ

推論には 2 つの使い方があります。1 つは単純 early exit で、E 層まで計算したらそのまま LM Head で次トークンを出します。これは速いですが、品質低下が起きやすいです。

もう 1 つが、この論文の本命である self-speculative decoding です。まず前半 E 層だけで複数トークンを下書きします。次に、その下書き列を残りの層に通してまとめて検証します。ドラフトと検証が一致したトークン群は一括で受理でき、不一致が出た地点で正しいトークンへ修正して次サイクルへ進みます。

これは標準 speculative decoding と似ていますが、ドラフトモデルと本体モデルが別ではありません。同じモデルの浅い部分と深い部分を分けて使うのが違いです。

Cache Reuse が重要

この方式を実用的にする上で重要なのが、ドラフト時に計算した隠れ状態や KV キャッシュを、検証時にできるだけ再利用することです。もし前半層をドラフトで計算したあと、検証時にまた最初から全部やり直すなら、速度メリットはかなり薄れます。

論文では cache reuse を導入し、前半で計算した情報を後半の検証で使い回せるようにしています。これにより、ドラフトと検証の計算が独立した 2 回の推論にならず、1 本のモデル実行をうまく分割した形になります。実務上はここがかなり大きく、アルゴリズムだけでなくサービング実装の工夫が速度差を生みます。

どうして 1 モデルで speculative decoding が成立するのか

ポイントは、中間層の予測精度を十分に引き上げれば、前半層だけでも「完全ではないが検証に値する下書き」が作れることです。下書きの質が高いほど受理率が上がり、まとめて確定できるトークンが増えます。逆に中間層の予測が弱いと、検証でほとんど弾かれて高速化できません。

つまり LayerSkip は、推論アルゴリズムの工夫というより、「中間層をドラフトモデルとして使える品質まで訓練する」ことに価値があります。この発想は、将来的に動的 exit や adaptive computation と組み合わせる余地もあります。

実験と結果

論文では、途中層の予測精度が本当に上がるのか、self-speculative decoding がどれだけ速くなるのか、そして品質をどこまで維持できるのかを検証しています。

何を検証したのか

主な検証は 2 つあります。1 つ目は、LayerSkip の学習レシピによって中間層の early exit 精度がどこまで改善するかです。2 つ目は、その改善を使って self-speculative decoding を行ったとき、通常の自己回帰生成や既存の draft-and-verify 型 speculative decoding と比べて、速度と品質がどう変わるかです。

データセットと評価指標

生成系の評価では、要約タスクとして CNN/DM と XSUM、コード生成として HumanEval が使われています。指標は要約では ROUGE-2、生成品質の比較では exact match も使われ、さらに self-speculative decoding の成立度を見るために token acceptance rate、処理速度として tokens per second、全体の speedup が報告されています。

モデルとしては Llama2 7B、13B、さらに 1.5B や scratch pretraining 条件も含めて評価しています。単なる toy 実験ではなく、実際の LLM スケールで見ている点が重要です。

代表的な結果

継続事前学習した Llama2 7B では、CNN/DM で self-speculative decoding を exit layer 8、speculation 長 12 に設定したとき、ROUGE-2 は 0.078 で通常自己回帰の 0.079 とほぼ同等でした。一方で throughput は 62.7 tokens/sec から 127.9 tokens/sec へ上がり、1.86 倍の高速化が報告されています。

同じ 7B モデルの HumanEval では、通常自己回帰の exact match が 0.041、self-speculative decoding が 0.042 とほぼ同等で、速度は 62.9 から 122.8 tokens/sec へ伸び、1.83 倍の高速化でした。要するに、コード生成のように品質低下が気になるタスクでも、うまく設定すればほぼ精度を保ったまま速くできています。

13B でも傾向は似ています。CNN/DM では ROUGE-2 0.098 を維持したまま 1.81 倍、HumanEval でも exact match 0.055 を保って 1.66 倍の高速化が出ています。モデルが大きくなっても成立している点は実務的に重要です。

さらに、26B トークンで scratch pretraining した Llama2 7B では、CNN/DM で ROUGE-2 0.060 から 0.067 と維持しつつ、64.5 から 145.6 tokens/sec、2.16 倍の speedup が報告されています。LayerSkip 用の訓練を前提にすると、さらに強い速度改善が見込めることを示しています。

結果から何が言えるのか

まず言えるのは、単純 early exit だけでは品質がかなり落ちる一方、self-speculative decoding にすると品質を回復しつつ高速化できることです。つまり「途中層だけで終える」のではなく、「途中層で下書きして後段で検証する」ことが効いています。

次に、追加ドラフトモデルを持たなくても、十分な受理率が出れば実用的な speedup が得られるとわかります。受理率はタスクと exit layer に依存しますが、適切な層を選べば 50% から 70% 台の受理率が出ており、まとめて確定できるトークンがかなりあります。

また、速度は exit layer と speculation 長の組み合わせで変わります。浅すぎる層はドラフト品質が足りず、深すぎる層はそもそもあまり速くなりません。したがって、この手法は「導入すれば自動で最適」ではなく、モデルごとにチューニングして最大効果を出すタイプの最適化です。

何に使える?

LayerSkip は、品質を大きく落とさずに LLM の生成速度を上げたい場面で広く使えそうです。特に、別ドラフトモデルを持つほど構成を複雑にしたくない現場と相性が良いです。

社内アシスタントやRAGの応答高速化

社内検索、FAQ ボット、ナレッジアシスタントでは、推論品質も重要ですが、まず待ち時間が長いと使われません。LayerSkip は 1 モデル構成のまま応答速度を上げやすいので、既存の RAG パイプラインに比較的組み込みやすい可能性があります。別ドラフトモデルを増やさずに済むため、運用や評価の対象も増えにくいです。

コード生成・開発支援

コード補完や自動レビューは、1 回あたりの推論よりも回数の多さが効きます。小さな待ち時間の差が UX に直結するので、1.5 倍から 2 倍前後の高速化でも体感差が出やすいです。HumanEval で品質をほぼ維持したまま加速できているため、開発支援系のプロダクトではかなり参考になります。

エージェントの多段呼び出し

AI エージェントは 1 回のユーザー要求に対して、計画、検索、ツール呼び出し、要約、再計画のように何度も LLM を叩きます。このとき 1 回ごとの速度改善は累積効果が大きいです。LayerSkip を基盤モデル側に入れておけば、エージェント全体の待ち時間を下げやすくなります。

オンプレミスや単GPU運用

通常の speculative decoding は追加モデル分のメモリが気になることがあります。LayerSkip は単一モデルを流用するため、メモリ制約が厳しい環境で有利です。GPU 台数が少ないチームや、顧客環境に組み込む推論基盤では、導入障壁を下げられる可能性があります。

開発や事業へのヒント

この論文から得られるヒントは、推論最適化を「量子化するかどうか」だけで考えないことです。モデルの途中表現を再利用できるよう学習から設計する発想が、プロダクトの原価やUXに直結します。

1モデルで二役を持たせる設計は強い

LayerSkip の面白さは、ドラフトモデルを別に作るのではなく、同じモデルの一部にドラフト役を持たせたことです。これは LLM 以外でも応用できる考え方で、重いモデルを丸ごと複製せず、途中表現を別目的に使えないかを考える視点は、推論基盤の設計でかなり有効です。

学習レシピまで含めて推論を設計する

推論高速化はしばしばサービング層だけの問題として扱われますが、この論文はそうではありません。中間層が使えるように訓練しておけば、推論時のアルゴリズムの自由度が増えます。自社モデルや継続学習モデルを持つなら、後から速くするのではなく、最初から「速く使えるように学習する」発想を持つ価値があります。

小規模プロダクトでも取り入れやすい

大規模研究室でしかできない話に見えますが、考え方自体は小規模でも使えます。たとえば独自 fine-tuning モデルに対して中間層ロスを追加する、特定用途の self-drafting を試す、exit layer を用途別に変える、といった形なら比較的現実的です。特に社内ツールや限定ドメイン生成では、少しの品質差より速度改善のほうが価値になることがあります。

今後注目すべき方向性

今後は固定の exit layer だけでなく、入力ごとに動的に「どこで下書きするか」を変える方向が有望です。難しい入力では深い層まで使い、簡単な入力では浅い層で多めにドラフトするような適応制御が入ると、さらに効率が上がるはずです。これは論文の範囲を超える推測ですが、LayerSkip はその土台になる技術だと言えます。

限界

LayerSkip にも明確な限界があります。まず、この方式は元モデルをそのまま使うだけでは十分に機能せず、layer dropout と early exit loss を使った追加訓練や専用事前学習が必要です。既存モデルへそのまま差し込める最適化ではありません。

次に、ハイパーパラメータが増えます。どの層で exit するか、何トークン先まで speculation するか、dropout の最大率をどう置くか、early exit loss の重みや curriculum をどうするかで結果が変わります。チューニングなしで最適性能を出すのは難しいです。

また、単純 early exit はかなり品質が落ちやすく、self-speculative decoding にして初めて実用的になる場面が多いです。つまり途中層の利用だけでは足りず、検証工程や cache reuse を含めた実装が必要です。推論エンジン側の工夫まで含めて完成する技術だと言えます。

実運用では、タスクごとに最適な exit layer が違う点も注意です。要約とコード生成でベストな設定がずれるので、1 つの設定を全用途にそのまま当てるのは危険です。マルチタスク運用では、用途別プリセットか動的切り替えが欲しくなります。

さらに、この論文は主に生成タスクでの高速化を示しています。分類やスコアリング中心のワークロードでは恩恵が小さい可能性があります。どのシステムでも万能に効く最適化ではありません。

よくある質問

Q. LayerSkip は普通の speculative decoding と何が違うのですか?

A. 普通の speculative decoding は、軽いドラフトモデルと重い本体モデルの 2 つを使うことが多いです。LayerSkip は同じモデルの前半層をドラフト、後半層を検証に使うので、追加モデルが要りません。

Q. 途中層でそのまま出力するだけではだめなのですか?

A. だめというより、品質低下が出やすいです。論文でも単純 early exit はかなり速い一方で精度が落ちています。LayerSkip の価値は、途中層を下書きに使い、残りの層で検証して品質を戻す点にあります。

Q. 既存のオープンモデルにそのまま適用できますか?

A. そのままでは難しいです。論文の方式は、中間層でも予測できるように学習レシピを変える前提です。既存モデルへ試すことはできますが、追加学習なしでは十分な受理率や品質が出ない可能性があります。

Q. どんなプロダクトで特に効果がありそうですか?

A. 生成回数が多いチャット、RAG、コード補完、エージェントです。1 回の高速化幅が中程度でも、呼び出し回数が多いほど UX とインフラ原価の改善が効いてきます。

Q. 量子化やKVキャッシュ最適化と競合しますか?

A. 競合というより別の層の最適化です。LayerSkip はレイヤー計算の逐次コストを減らす方向で、量子化は重みメモリ、KV キャッシュ最適化はコンテキスト保持の負荷を減らします。実運用では組み合わせる余地があります。

今日の学び

この論文は、LLM 推論が遅い一方で、既存の高速化手法は 2 モデル構成になりがちという課題を扱いました。そこに対して、layer dropout と early exit loss で中間層を鍛え、同じモデルの前半層をドラフト、後半層を検証に使う LayerSkip を提案しました。

ここから得られるヒントは、推論最適化はサービング時の工夫だけではなく、学習段階の設計でかなり広がるということです。自分でモデルを持つなら、あとで速くするのではなく、最初から「途中まででも使えるモデル」にしておく価値があります。

関連記事

推論最適化

Grouped-Query Attentionとは?KVキャッシュを減らして推論を速くする仕組みと使い道

Grouped-Query Attentionは、TransformerのAttentionで使うKey/Valueヘッドを共有し、品質を保ちながら推論を軽くしやすくする技術です。GQAの仕組み、既存手法との違い、実務での使い道を日本語で整理します。

参照論文:GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints

推論最適化

Speculative Decodingとは?LLM推論を品質そのままで高速化する仕組みと使い道

Speculative Decodingは、小さなドラフトモデルで先読みした候補を大きな本命モデルがまとめて検証し、出力分布を変えずにLLM推論を高速化する技術です。仕組み、評価結果、実務での使い道まで日本語で整理します。

参照論文:Fast Inference from Transformers via Speculative Decoding

推論最適化

PagedAttentionとは?LLMサービングのKVキャッシュ断片化を減らし高スループット化する仕組みと使い道

PagedAttentionは、LLM推論で肥大化するKVキャッシュをページ単位で管理し、メモリ断片化と重複を抑える技術です。vLLMの中核になったこの仕組みを、課題、実装アイデア、実験結果、開発への応用まで日本語で整理します。

参照論文:Efficient Memory Management for Large Language Model Serving with PagedAttention