ちゅらアドベントカレンダー 25日目最終日の記事です。
はじめに
弊社では、ちゅらいとと呼ばれるAI文章校正ツールをリリースしています。この中で私は、主にAIモデルの改善に勤しんでおります。
その中で、gpt-ossを推論しようと思った時にハマったポイントを紹介します。
LLMの推論は精度の方が気になる方も多いと思いますが、その推論速度も結構大事ですので、刺さる人のお役に立てれば幸いです。
環境について
GPUはRTX6000Adaを使用しています。こいつは悲しいことにMXFP4が使えるGPUではないので、unslothのモデルを使用していきます。
推論速度について
huggingfaceのtransformersの推論は遅い
今回学習自体はtransformersで実施をしたわけで、そこで推論するのではいかんのか?ということについて説明します。結論から言うとできるけど遅いです。(おま環?)
こんなissueがありました。
要約すると、transformersはどうもGPUを使用していても単一のCPUコアに負荷が集中し、処理速度のボトルネックになっているということがあるらしく、topコマンドを見ると推論中にCPUが100%になっていました。なので、CPU使わないらしいvLLMとかは速いらしいです。
最終的な速度
推論は全て、reasoning_effort を low で実施しています。
| ライブラリ | T/S |
|---|---|
| transformers | 6.93 |
| vLLM | 54.7 |
まあ少なくとも、まともに使える速度にはなりました。
vLLMでのハマりポイント
gpt-ossのタグのついたDockerでの推論
vLLMならばまともに使えると判断して、gpt-ossをQLoRAで学習しました。これをホストして、推論をしていきます。
vllm/vllm-openaiのDockerhubを見ると、gptossタグがありましたので、素直にこれを使います。こちらでOpenAIのgpt-ossが動くことは確認済みです。
これで以下のようなdocker-composeを組んだところ、gpt-ossはLoRAに対応していないぜというエラーが出ました。
services:
vllm-unsloth:
# Unslothモデルを動かす場合、最新のvLLMイメージを使用することを推奨します
image: vllm/vllm-openai:gptoss
container_name: vllm-unsloth
runtime: nvidia
ipc: host
# gpt-ossなどの大型モデルや長文生成をする場合は共有メモリを大きめに確保
shm_size: "16g"
volumes:
# Hugging Faceキャッシュの共有など
ports:
- "8000:8000"
deploy:
resources:
reservations:
devices:
- driver: nvidia
# 使用するGPU IDを指定
device_ids: ['0']
capabilities: [gpu]
environment:
- NCCL_P2P_DISABLE=1
- TRUST_REMOTE_CODE=true
command: >
--model unsloth/gpt-oss-20b
--host 0.0.0.0
--port 8000
--dtype bfloat16
--max-model-len 32768
--enable-lora
--lora-modules adapter=***
issueを見ると?
こちらのissueを見ると大体、10月ぐらいにこの機能が追加されたようです。私が使用していたgptossタグを見ると7~8月ごろにできたタグなのでこの機能はありません。なんでgpt-ossは初期からその機能が入っていなかったのか...
最終的に...
とりあえず、このcomposeを書く際に一番最新だったnightlyのtagを持ってきました。
services:
vllm-unsloth:
# Unslothモデルを動かす場合、最新のvLLMイメージを使用することを推奨します
image: vllm/vllm-openai:nightly-653591d5e73b34ffd9186c61e964474bcc4b7c80
container_name: vllm-unsloth
runtime: nvidia
ipc: host
# gpt-ossなどの大型モデルや長文生成をする場合は共有メモリを大きめに確保
shm_size: "16g"
volumes:
# Hugging Faceキャッシュの共有など
ports:
- "8000:8000"
deploy:
resources:
reservations:
devices:
- driver: nvidia
# 使用するGPU IDを指定
device_ids: ['0']
capabilities: [gpu]
environment:
- NCCL_P2P_DISABLE=1
- TRUST_REMOTE_CODE=true
command: >
--model unsloth/gpt-oss-20b
--host 0.0.0.0
--port 8000
--dtype bfloat16
--max-model-len 32768
--enable-lora
--lora-modules adapter=***
これでようやくLoRAモデルでの推論が出ました!
最後に
ただ推論するだけで、それぞれで1日溶けました。皆さんも同じ轍を踏まないように気をつけてください。
この記事はちゅらいとにて校正されています。