Slide 1

Slide 1 text

Kaggle Kernel で vLLM × Gemma 2 を動かす。 関西Kaggler会 in Osaka 2024 #3 Kohecchi

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

自己紹介 ❖ 金融企業 IT企画部(海外系のお仕事) ❖ 関西 Kaggler 会で知り合ったチームで 金メダル&銀メダル Kohecchi (こへっち) X: @kohecchi

Slide 4

Slide 4 text

モチベーション Q1. なんで Gemma 2? → LMSYS や atmaCup #17 で Gemma 2 が大活躍 Q2. なんで vLLM? → 推論がめっちゃ速いらしい

Slide 5

Slide 5 text

Gemma2-9b-it を vLLM で推論高速化して たくさんアンサンブルすれば 勝てるんじゃないか・・・? モチベーション

Slide 6

Slide 6 text

Gemma2-9b-it を vLLM で推論高速化して たくさんアンサンブルすれば 勝てるんじゃないか・・・? モチベーション ・・・と考える人が無駄にする時間を削減したい

Slide 7

Slide 7 text

アジェンダ 1章 Gemma2 を vLLM で動かしたくなる話 2章 Gemma 2 を vLLM で動かしたくなくなる話

Slide 8

Slide 8 text

LMSYS https://www.kaggle.com/competitions/lmsys-chatbot-arena ❖ 開催期間: 2024/5/3 ~ 8/3 ❖ 主催: LMSYS Chatbot Arena ❖ タスク:2つのLLMに与えた Prompt と モデルの回答 から 勝敗を予測する

Slide 9

Slide 9 text

LMSYS Chatbot Arena とは https://chat.lmsys.org/

Slide 10

Slide 10 text

LMSYS上位解法 - LLM&推論高速化 LLM max_len 量子化 その他 高速化 1st Gemma2-9b-it x2 (TTA) 2000 GPTQ 8 bit Data Parallelism 2nd Gemma2-9b-it RLHFlow/ArmoRM-Llama3-8B-v0.1 4096 4096 ? Data Parallelism 高速化ライブラリのOperator移 植 3rd sfairXC/FsfairX-Gemma2-RM-v0.1 Gemma2-9b-it 4096 3072 bnb 4bit vllm(学習データ生成時) 4th Gemma2-9b-it 3072 情報なし 情報なし 5th Gemma2-9b-it 4096 ※8kも可 bnb 8bit Data Parallelism 長さでソート&バッチ化 Gemma2-9b-it が強かった。T4 x2 だと 2 models アンサンブルで9時間がギリギリ。 高速化手法なしだと、1 model の推論も終わらない。

Slide 11

Slide 11 text

マルチGPUでの並列処理手法 https://www.kaggle.com/competitions/lmsys-chatbot- arena/discussion/527596

Slide 12

Slide 12 text

model_0 = Gemma2ForSequenceClassification.from_pretrained( cfg.gemma_dir, device_map = torch.device('cuda:0'), use_cache = False, ) model_1 = Gemma2ForSequenceClassification.from_pretrained( cfg.gemma_dir, device_map = torch.device('cuda:1'), use_cache = False, ) … data = data.sort_values("length", ascending = False) sub_1 = data.iloc[0::2].copy() sub_2 = data.iloc[1::2].copy() with ThreadPoolExecutor(max_workers=2) as executor: results = executor.map(inference, (sub_1, sub_2), (model_0, model_1), (device_0, device_1)) Data Parallelism - 各GPUにモデルをロードして並列処理 GPU 0 にモデルをロード GPU 1 にモデルをロード データを2つに分割して 各GPUで並列処理

Slide 13

Slide 13 text

とにかくはやい https://blog.vllm.ai/2023/06/20/vllm.html

Slide 14

Slide 14 text

サポートもしっかりしてる ● 量子化モデル(bitsandbytes)をサポート ● LoRA アダプタをサポート ● Gemma2, Llama3.1 など主要モデルをサポート https://docs.vllm.ai/en/latest/models/supported_models.html

Slide 15

Slide 15 text

llm = vllm.LLM( model = model_name, tensor_parallel_size = 2, gpu_memory_utilization = 0.95, dtype = "half", enforce_eager = True, max_model_len = MAX_LENGTH, ) tokenizer = llm.get_tokenizer() sampling_params = vllm.SamplingParams( top_p = 0.9, temperature = 0, seed = 777, skip_special_tokens = True, max_tokens = 1, ) responses = model.generate( prompts, sampling_params = sampling_params, ) コードもシンプル モデルのロード tokenizer の取得 推論 パラメータ設定

Slide 16

Slide 16 text

そろそろこう思ってきませんか? Gemma2-9b-it を vLLM で推論高速化して たくさんアンサンブルすれば 勝てるんじゃないか・・・?

Slide 17

Slide 17 text

アジェンダ 1章 Gemma2 を vLLM で動かしたくなる話 2章 Gemma 2 を vLLM で動かしたくなくなる話

Slide 18

Slide 18 text

調べてみると、意外と情報がない

Slide 19

Slide 19 text

vllm==0.6.3.post1 で検証 (11/8時点 最新版) Kaggle Kernel で vLLM × Gemma 2 を動かす。

Slide 20

Slide 20 text

基本的にエラーになります

Slide 21

Slide 21 text

vLLM x Gemma2 x Kaggle GPU の相性が良くない Kaggle で使える GPU(T4, P100)が古すぎて、Flash Attention 2 がサポートして いない(= Kaggle環境の vLLM で Gemma 2 が動かせない) [Bug]: Gemma-2-2b-it load model hangs by vLLM==0.5.1 on Tesla T4 GPU #7464 「もっと新しいGPUを使え」とし か言えない。もしくは、flash attention が T4 をサポートする のを祈るんだな。

Slide 22

Slide 22 text

config をいじれば動かせる config.json を書き換えれば、T4 x2 で動かせる! ● "attn_logit_softcapping": 50.0 → null ● "final_logit_softcapping": 30.0 → null

Slide 23

Slide 23 text

つまづきポイント ● import vllm でエラー → pip install 順の修正、 --force-reinstall オプション追加 ● モデルロードでエラー → config.json 修正 ● 推論でエラー → Parameter 修正 : : 数多のエラーを 乗り越えて ようやく動いた

Slide 24

Slide 24 text

検証結果 LMSYS の Test データ(約25,000件)で推論時間を検証。vLLMめっちゃ速い! # LLM vllm 量子化 max_len その他 結果 1 Gemma2-9b-it なし なし 1000 ー T4 16GB に載らない 2 Gemma2-9b-it なし bnb 4 bit (Unthlos) 2048 ソート Data Parallelism 4時間40分 3 Gemma2-9b-it なし bnb 4 bit (Unthlos) 3072 ソート Data Parallelism 6時間00分 4 Gemma2-9b-it あり なし 1000 なし 1時間36分 5 Gemma2-9b-it あり なし 2048 なし 2時間14分 6 Gemma2-9b-it あり なし 3072 なし 2時間20分

Slide 25

Slide 25 text

Unsloth × vLLM × Gemma-2-9b-it (エラー解消できず) Unsloth は vLLM をサポートしているが、エラー解消できず断念。 https://docs.vllm.ai/en/v0.6.2/quantization/bnb.html

Slide 26

Slide 26 text

Classification Model は使えない・・?(未検証) どうやらすんなりは使えない模様。ただ使えるかもしれない

Slide 27

Slide 27 text

まとめ # LLM 種類 LoRA vllm Unsloth 結果 1 Gemma2-9b-it Causal なし あり なし 〇 動く。めっちゃ速い 2 Gemma2-9b-it Causal あり あり なし 〇 動く。めっちゃ速い 3 Gemma2-9b-it Causal なし あり あり × 動かず 4 Gemma2-9b-it Classifier なし あり なし △ひと手間必要そう(未検証) ● vLLM × Gemma2 × T4 の相性が悪いが、Causal モデルであれば使える ● 推論はめっちゃ速い ● しばらくは LMSYS の公開ノートブックを使う方が安全かも

Slide 28

Slide 28 text

atmaCup #17 データで Gemma 2 + LoRA × vllm × T4 を動かす推論コードを公開 https://www.kaggle.com/code/kohecchi/atmacup17-gemma2-lora-x-vllm-causal-infer

Slide 29

Slide 29 text

Thank you