Slide 1

Slide 1 text

LLM性能改善の実践知 Kaggleでの学びを現場に活かす思考法 齋藤 慎一朗

Slide 2

Slide 2 text

- Kaggle - Kaggle 2x Master (Competitions, Notebooks) - 業務 - Sansan株式会社 技術本部 研究開発部 - LLMをファインチューニングし、プロダクトを改善 - 書籍 - Kaggleではじめる大規模言語モデル入門 - Polarsとpandasで学ぶ データ処理アイデアレシピ55 - 趣味 - マラソン(サブ 5.5) 自己紹介 齋藤 慎一朗

Slide 3

Slide 3 text

アジェンダ 1. 大規模言語モデルの性能改善・高速化の解説(4章、5章の解説) 2. Kaggle LLMコンペにおける性能改善、高速化の実例 3. Kaggleの経験が実務にどう活きているか ※ Kaggle LLMコンペ: Kaggleコンペティションにおいて LLMがソリューションとして使われることが多いコンペ (本資 料のみでの定義)

Slide 4

Slide 4 text

1. 大規模言語モデルの性能改善・高速化の解 説(4章、5章の解説)

Slide 5

Slide 5 text

アジェンダ 1.1 大規模言語モデルの性能改善 1.2 大規模言語モデルの軽量化・高速化

Slide 6

Slide 6 text

1.1 大規模言語モデルの性能改善

Slide 7

Slide 7 text

アジェンダ - なぜ性能改善が必要か? - 性能改善の全体感 - プロンプトエンジニアリング - 検索拡張生成 - ファインチューニング

Slide 8

Slide 8 text

- Kaggleでは、高い精度を出すとコンペで良い順位を獲得できるから。 - 実務では、ビジネス要件を満たす精度を出す必要があるから。 なぜ性能改善が必要か?

Slide 9

Slide 9 text

- 性能改善の代表的手法として、プロンプトエンジニアリング、RAG、ファインチュー ニングが存在する。 - プロンプトエンジニアリングを基点として、LLMが知っている必要がある知識をRAG で補い、LLMがどのように振る舞うかをファインチューニングで補う。 性能改善の全体感 LLM の性能向上の指針([1]より引用)

Slide 10

Slide 10 text

プロンプトエンジニアリング - プロンプトエンジニアリングとは、人間の意図をLLMに正確に伝え、期待する出力を 引き出すためにプロンプトを改善する作業を意味する。 - Kaggleでよく使われる代表的な手法として、次の3つを紹介する。 - Few-Shot prompting - Chain of Thought(CoT) - Self-Consistency

Slide 11

Slide 11 text

Few-Shot prompting - タスクを解くための例をプロンプトを通して与えることで、どのような出力が求められ ているかをモデルが理解しやすくなる手法である。 タスクを解くための例

Slide 12

Slide 12 text

Chain of Thought(CoT) - 通常の回答に加え、中間の推論過程も生成させることで、LLMの推論能力を向上 させる手法である。 Few-Shot CoT の概要図([2]より引用)

Slide 13

Slide 13 text

Self-Consistency - 多様な推論を複数回繰り返すことで、より一貫性のある信頼性の高い結果を得る 手法である。 Self-Consistency の概要図([3]より引用)

Slide 14

Slide 14 text

- RAGとは、検索によって獲得した外部知識をLLMに与えて文章を生成する手法で ある。 - RAGは、RetrieverとReaderで構成される。Retrieverは質問を用いて情報を検索 し、Readerは検索結果をふまえて、質問に対する回答を生成する。 検索拡張生成(Retrieval-Augmented Generation; RAG) 基本的な RAG の流れ([4]より引用)

Slide 15

Slide 15 text

- ファインチューニングとは、個々のタスクに特化するようモデルを微調整する手法で ある。 - ファインチューニングを実現可能なライブラリには、Transformers[5]、TRL[6]、 Sentence Transformers[7]などが存在する。 - タスクと、ライブラリの実装の対応は次の表のようになる。 ファインチューニング タスクごとのファインチューニングに用いるライブラリの実装 ([4]より引用)

Slide 16

Slide 16 text

- LoRA ファインチューニングとは、LLMの重み行列に対して、低ランク行列の補正項 を対象に学習を行うことで、学習対象となるパラメータ数を、元のLLM をフルファイ ンチューニングする場合の数%に抑える手法である。 LoRA ファインチューニング 学習対象 LoRA の概要図([8]より引用)

Slide 17

Slide 17 text

1.2 大規模言語モデルの軽量化・高速化

Slide 18

Slide 18 text

アジェンダ - なぜ軽量化・高速化が必要か? - 軽量化・高速化の全体感 - 量子化 - 知識蒸留 - Attentionの高速化

Slide 19

Slide 19 text

- Kaggle・実務ともに、推論環境に制約があるから。 - どのような制約があるのか? - Kaggleの場合は、例えば T4 × 2 (GPUメモリ 16GB × 2)を利用した場合に、提出の制限時間に間 に合うよう推論できることである。 - 実務の場合は、LLMによるメリットに対し、コストを払える GPUにて運用可能なことである。 なぜ軽量化・高速化が必要か?

Slide 20

Slide 20 text

軽量化・高速化の全体感 - LLMの軽量化・高速化の代表的な手法として、量子化、知識蒸留、Attentionの高 速化が存在する。

Slide 21

Slide 21 text

- 量子化とは、浮動小数点数型で持つモデルの重みや活性を、よりメモリ使用量が 少ない整数型に変換することで、メモリ使用量を削減する手法である。 - 例: FP32 -> INT4 ※ 文献によって量子化の定義が異なるため、本資料においての定義とする。 量子化 小数点切捨てによる量子化の簡単な例 1.123456 2.234567 3.345678 4.456789 1 2 3 4

Slide 22

Slide 22 text

- 浮動小数点数型から整数型にまとめる際に必ず誤差が生じる。この誤差のことを 量子化誤差と呼ぶ。量子化すると性能が落ちる主な原因である。 量子化誤差

Slide 23

Slide 23 text

量子化の主な手法 手法 実現するためのライブラリ例 説明 LLM.int8()[9], NF4[10] bitsandbytes[11] LLM.int8()は、活性の外れ値はそのままの値を保持 し、通常の値は8bit量子化を行う。 NF4は、bitsandbytesで利用される、量子化に適した データ型である。 GPTQ[12] GPTQModel[13], llm-compressor[14] 勾配情報を用いて、重みを局所的に最適化しつつ量 子化誤差を最小化する。 AWQ[15] llm-awq[16], llm-compressor 活性の誤差が目立ちやすい部分のみスケーリングで 補正する。 SignRound[17] auto-round[18] 符号に基づく近似誤差を利用して、丸め操作の方向 を最適化する。

Slide 24

Slide 24 text

QLoRAファインチューニング - QLoRAファインチューニングとは、LoRAファインチューニングを行う際に、LLM(図 ではPretrained Weights)を量子化し、メモリ使用量を削減する手法である。 学習対象 LoRA の概要図([8]より引用) 量子化

Slide 25

Slide 25 text

知識蒸留 - 知識蒸留とは、大きくて高い性能を持つ教師モデル(Teacher Model)の出力を利 用して、小さくて同等な性能を持つ生徒モデル(Student Model)を学習することで、 性能を保ったままモデルのサイズを大幅に削減する手法である。 知識蒸留の概要図([19]より引用)

Slide 26

Slide 26 text

- Attentionとは、文中のどの単語に注目すべきかを計算し、重み付けを行う仕組み である。 - Attentionの計算量は、入力長の二乗に比例して増大するため、長文処理やバッチ サイズ拡大時の大きな課題となる。 - そこで、Attentionを高速に計算する仕組みの研究が進んでいる。 - 本資料では、次の3つを紹介する。 - KVキャッシュ - Flash Attention - Paged Attention(vLLM) Attentionの高速化

Slide 27

Slide 27 text

KVキャッシュ - Attention の計算を効率的に実装できる仕組みである。Attentionの計算時に、すで に計算したことがあるKeyとValue をキャッシュし、必要な場面で呼び出すことで高 速化できる。 KVキャッシュのイメージ図([20]より引用)

Slide 28

Slide 28 text

- Flash Attentionとは、GPUの記憶領域のうち、高速に計算できる領域(SRAM)を 使ってAttentionの計算を行えるようにした仕組みである。 Flash Attention FlashAttentionの概要図([21]より引用)

Slide 29

Slide 29 text

Paged Attention[22] - バッチ推論におけるKVキャッシュの無駄を改善する仕組みである。 - KVキャッシュは、バッチ推論を前提としていないため、バッチ推論時に無駄が存在 する。 - 例えば、生成予定のトークン数が 512であり、実際に生成したトークン数が 64トークンだった場合、 KVキャッシュは生成予定のトークン数分メモリを確保するため、 512 - 64 = 448トークン分のメモリ の確保は無駄となる。 - Paged Attentionは、KV キャッシュをKV ブロックと呼ばれる固定サイズの ブロック に分割し、動的に割り当てることで、このような無駄を無くす。

Slide 30

Slide 30 text

vLLM - Paged Attentionなどの高速化の仕組みを簡単に利用できるようにした推論エンジ ンである。 vLLMのロゴ([23]より引用)

Slide 31

Slide 31 text

2. Kaggle LLMコンペにおける性能改善、高速 化の実例

Slide 32

Slide 32 text

紹介する事例 1. テストデータに適した巨大モデルを学習し性能が改善した。 2. vLLMによる高速な推論を活用した。 3. 合成データを追加で学習することで性能が改善した。

Slide 33

Slide 33 text

- コンペ概要 - 名前 - LMSYS - Chatbot Arena Human Preference Predictions [24] - 時期 - 2024年5月 ~ 8月 - タスク - 同じプロンプトに対する 2つのLLMの回答に対して、ユーザの嗜好を予測する。 テストデータに適した巨大モデルを学習し性能改善した。 LMSYSコンペの画面の一部([24]より引用)

Slide 34

Slide 34 text

- 実例 - unsloth/gemma-2-9b-it-bnb-4bit[25]をQLoRAファインチューニングする手法を用いたノートブック [26]が公開された。本手法にて、当時のリーダーボードの上位 5%以内に入ることができた。 - 高い性能を出せた理由は、 Gemma 2 の事前学習に使用するデータの一部に、本コンペのデータ 提供プラットフォームのデータが含まれていたことが一つの要因と考えられる。 - 9Bと巨大なLLMでも、GPUメモリ48GBの環境にて、約15時間でファインチューニングをすることが でき、T4 x 2のKaggle環境において推論できることが明らかになった。 テストデータに適した巨大モデルを学習し性能改善した。 Notebook画面の一部([26]より引用)

Slide 35

Slide 35 text

vLLMによる高速な推論を活用した。 - コンペ概要 - 名前 - MAP - Charting Student Math Misunderstandings [27] - 時期 - 2025年7月 ~ 10月 - タスク - 数学の問題に対する生徒の回答に対して、どのような誤解を存在するかを予測する。 MAPコンペの画面の一部([27]より引用)

Slide 36

Slide 36 text

- 実例 - vLLMを用いることで、Qwen/Qwen3-8B[28]の推論を、約16,000行のテストデータに対して、約 10 分で完了した。[30] - 参考として、同じデータを Transformersを用いて推論する場合は約 40分かかった。 - よって、vLLMを使うことで、推論時間を大幅に削減できる。 - 直近のKaggle LLMコンペにおける推論エンジンとして頻繁に使われている。 vLLMによる高速な推論を活用した。

Slide 37

Slide 37 text

- コンペ概要 - 名前 - The Learning Agency Lab - PII Data Detection [30] - 時期 - 2024年1月 ~ 4月 - タスク - 生徒が書いたエッセイのテキストから固有表現を抽出する。 合成データを追加で学習することで性能改善した。 PIIコンペの画面の一部([30]より引用)

Slide 38

Slide 38 text

- 実例 - 本コンペは推論対象となるデータについて、ホストから提供されたデータが少なかった。例えば、住 所を表す固有表現は学習データ内に 2件しか存在していない。 - よって、参加者は各自で合成データを作成し、学習データの拡張をしていた。 - 特に、Nicholas Broadさんが公開したDiscussionでは、プロンプトエンジニアリングを活用した高品 質なデータセットが作成されていた。具体的には、誰がエッセイを記載するかという人物の情報 (ペ ルソナ)を生成AIで作り出し、ペルソナを更に生成 AIに与えていた。[31] - この合成データを追加で学習することで、モデルの性能を改善することができた。 合成データを追加で学習することで性能改善した。 ペルソナの例([31]より引用)

Slide 39

Slide 39 text

- 今回は非常に簡単な部分のみを紹介させていただきましたが、書籍「Kaggleでは じめる大規模言語モデル入門」では、Kaggle Master / GrandMasterによる深い取 り組みの詳細が紹介されています。 - もしご興味を持ってくださった方はぜひ! 最後に

Slide 40

Slide 40 text

3. Kaggleの経験が実務にどう活きているか 別資料に移動します。

Slide 41

Slide 41 text

[1] https://developers.openai.com/api/docs/guides/optimizing-llm-accuracy [2] Jason Wei, Xuezhi Wang, Dale Schuurmans, et al. 2022. Chain-of-thought Prompting Elicits Reasoning in Large Language Models. In Proceedings of the NeurIPS 2022. [3] Xuezhi Wang, Jason Wei, Dale Schuurmans, et al. 2023. Self-Consistency Improves Chain of Thought Reasoning in Language Models. In Proceedings of the ICLR 2023. [4] 高野・齋藤・石原『Kaggleではじめる大規模言語モデル入門』講談社( 2026) [5] https://github.com/huggingface/transformers [6] https://github.com/huggingface/trl [7] https://github.com/huggingface/sentence-transformers [8] Edward J. Hu, Yelong Shen, Phillip Wallis, et al. 2022. LoRA: Low-Rank Adaptation of Large Language Models. In Proceedings of the ICLR 2022. [9] Tim Dettmers, Mike Lewis, Younes Belkada, et al. 2022. LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale. In Proceedings of the NeurIPS 2022. [10] Tim Dettmers, Artidoro Pagnoni, Ari Holtzman, et al. 2023. QLoRA: Efficient Finetuning of Quantized LLMs. In Proceedings of the NeurIPS 2023. [11] https://github.com/bitsandbytes-foundation/bitsandbytes [12] Elias Frantar, Saleh Ashkboos, Torsten Hoefler, et al. 2023. GPTQ: Accurate Quantization for Generative Pre- trained Transformers. In Proceedings of the ICLR 2023. [13] https://github.com/ModelCloud/GPTQModel [14] https://github.com/vllm-project/llm-compressor [15] Ji Lin, Jiaming Tang, Haotian Tang, et al. 2024. AWQ: Activation-aware Weight Quantization for On-device LLM Compression and Acceleration. GetMobile: Mobile Computing and Communications, 28(4):12–17. 引用

Slide 42

Slide 42 text

引用 [16] https://github.com/mit-han-lab/llm-awq [17] Wenhua Cheng, Weiwei Zhang, Haihao Shen, et al. 2024. Optimize Weight Rounding via Signed Gradient Descent for the Quantization of LLMs. In Findings of the EMNLP 2024. [18] https://github.com/intel/auto-round [19] Jianping Gou, Baosheng Yu, Stephen J. Maybank, et al. 2021. Knowledge Distillation: A Survey. International Journal of Computer Vision, 129(6):1789–1819. [20] https://medium.com/my-musings-with-llms/understanding-kv-cache-and-paged-attention-in-llms-a-deep-dive-into-efficient-inference-62fa372432ce [21] Tri Dao, Daniel Y. Fu, Stefano Ermon, et al. 2022. FLASHATTENTION: Fast and Memory-efficient Exact Attention with IO-awareness. In Proceedings of the NeurIPS 2022. [22] Woosuk Kwon, Zhuohan Li, Siyuan Zhuang, et al. 2023. Efficient Memory Management for Large Language Model Serving with PagedAttention. In Proceedings of the SOSP 2023. [23] https://github.com/vllm-project/vllm [24] https://www.kaggle.com/competitions/lmsys-chatbot-arena [25] https://huggingface.co/unsloth/gemma-2-9b-it-bnb-4bit [26] https://www.kaggle.com/code/emiz6413/training-gemma-2-9b-4-bit-qlora-fine-tuning [27] https://www.kaggle.com/competitions/map-charting-student-math-misunderstandings/overview [28] https://huggingface.co/Qwen/Qwen3-8B [29] https://www.kaggle.com/code/sinchir0/lb-0-942-infer-fullft-qwen3-8b-by-sfttrainer [30] https://www.kaggle.com/competitions/pii-detection-removal-from-educational-data [31] https://www.kaggle.com/competitions/pii-detection-removal-from-educational-data/discussion/472221