🏃
DGX Spark で高速(低レイテンシ)に gpt-oss-120b を推論
1台の DGX Spark で速く推論したい。大量に推論したいというよりは、レスポンスが速く返ってきてほしいので、レイテンシ重視で高速に推論したい。
llama.cpp, vLLM, TensorRT-LLM なども試したが、設定を頑張らなくても速いのは sglang のような気がした。
なんと、公式のブログに DGX Spark 用の設定が書いてある。Spark 用のイメージも公開されている。
ここに掲載されているものとほとんど同じだが、少しだけオプションをいじったのを使ってみた。
mkdir -p ~/workspace/tiktoken_encodings
wget -O ~/workspace/tiktoken_encodings/o200k_base.tiktoken "https://openaipublic.blob.core.windows.net/encodings/o200k_base.tiktoken"
wget -O ~/workspace/tiktoken_encodings/cl100k_base.tiktoken "https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken"
docker run --rm -it --gpus all --ipc=host --network=host --ulimit memlock=-1 --ulimit stack=67108864 -v $HOME/.cache:/home/ubuntu/.cache -v $HOME/workspace/tiktoken_encodings:/tiktoken_encodings --user=1000:1000 lmsysorg/sglang:spark python3 -m sglang.launch_server --model-path openai/gpt-oss-120b --host 0.0.0.0 --port 30000 --reasoning-parser gpt-oss --tool-call-parser gpt-oss
変えたところは以下:
-
ulimitなどの変更: これはどっかで、GPU使うときは付けといた方がいいと見たのでとりあえず付けている -
--user=1000:1000: コンテナをrootじゃなくて一般ユーザーで実行する- それにより、マウント先にファイルが作成されても所有者が
rootにならない
- それにより、マウント先にファイルが作成されても所有者が
-
.cache/huggingfaceじゃなくて.cacheをマウントする: 試せば分かるが、元の設定は--user=1000:1000と相性が悪い -
tiktoken_encodingsのパス: 単に好みの問題 - モデルを120bに
-
HF_TOKENを指定しない: 面倒だったのと、既にモデルがキャッシュにあるので
以下を試してみる。
time curl -X POST http://localhost:30000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"model": "openai/gpt-oss-120b",
"messages":[{"role": "user", "content": "渋谷の観光名所を教えて"}],
"temperature": 0, "max_tokens": 20000
}'
大体40秒台で返ってくる。50 token/sec をちょっと超えるくらいのパフォーマンスらしい。何もチューニングを頑張らずにこれだけ出るのはかなり速い。
本当は20秒台で返ってきてほしい。ローカルにマシンがあるメリットは、処理待ちやネットワーク遅延が発生しないことだと思っているが、40秒台なら処理速度の観点では、遅いと感じる。
それは厳しいのだろうか。正直、クラウドのLLMが速度・性能・価格のどれを取っても良すぎる。「はやい・安い・うまい」を体現していて、OpenAI, Anthropic, Google, xAI は事実上、吉野家、松屋、すき家、なか卯だと言える。
Discussion