[LLM, Opensource Contribution ] SGlang VLM ๋ชจ๋ธ ์ฌ์ฉ ์ค ์คํ์์ค ๊ธฐ์ฌํ๊ธฐ
OCR ํ์ดํ๋ผ์ธ์ ๋ง์ง๋ค๊ฐ SGLang์ ๋ฒ๊ทธ ๋ฆฌํฌํธ๋ PR๊น์ง ์ฌ๋ฆฌ๊ฒ ๋ ๊ณผ์ ์ ์ ๋ฆฌํด๋ดค๋๋ฐ์, ์๊ฐ๋ณด๋ค ์์ธ์ด ์ฌ๋ฌ ๊ฒน์ผ๋ก ์ฝํ ์์์ต๋๋ค.
์ฒซ์คํ์์ค ๊ธฐ์ฌ( Openwebui vLLM Usage ) ์ดํ ๋๋ฒ์งธ ์คํ์์ค ๊ธฐ์ฌ์ธ๋ฐ, ์ง๋๋ฒ์๋ docs ์ usage ์ ๋ ๊ธฐ์ฌํ์ง๋ง ์ด๋ฒ์๋ ๋ฒ๊ทธ ํด๊ฒฐ์ ์ ์ํ ๊ธฐ์ฌ์ฌ์ ๊ธฐ๋กํ๊ณ ์ ํฉ๋๋ค.

์์์ ํ๋ฒํ OCR ์์ ์ด์์ต๋๋ค
Qwen3-VL-8B-Instruct๋ฅผ SGLang์ผ๋ก ๋์๋๊ณ ๋ฌธ์ OCR์ ๋๋ฆฌ๊ณ ์์๋๋ฐ์. ๊ตฌ์ฑ์ ์ด๋ฌ์ต๋๋ค.
docker run -d --restart unless-stopped --gpus all -p 1011:30000 \
-v /models:/models --ipc=host \
lmsysorg/sglang:v0.5.10.post1-cu130 python3 -m sglang.launch_server \
--model-path /models/qwen3-vl-8b-instruct --host 0.0.0.0 --port 30000 \
--tp 1 --mem-fraction-static 0.3 --max-running-requests 256
PDF๋ฅผ 300DPI๋ก ๋์คํฐํํด์ ์ด๋ฏธ์ง๋ก ๋ง๋ ๋ค์ ๋ชจ๋ธ์ ๋ฃ๋, ๊ทธ๋ฅ ํํ ํ๋ฆ์ด์์ต๋๋ค. ์๋ณธ PDF๋ 10MB ๋จ์ง์ด์๊ณ ์.
๊ทธ๋ฐ๋ฐ ์์ฒญ ํ๋๋ฅผ ๋ณด๋๋๋ ์๋ต์ด 1๋ถ 50์ด๊ฐ ๋๊ฒ ๊ฑธ๋ฆฌ๋๋ผ๊ณ ์. ๊ทธ๊ฒ๋ ๋ชจ์๋ผ์, ํฐ๋ฏธ๋ ๋ก๊ทธ์ฐฝ์ base64 ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง raw ๋ฐ์ดํฐ๊ฐ ๋๋ ์์ด ์ฃผ๋ฅด๋ฅต ์ฐํ๊ธฐ ์์ํ์ต๋๋ค. AAAAAA... ๊ฐ์ ๊ฒ ๋ช ๋ถ ๋์ ํ๋ฉด์ ๊ฐ๋ ์ฑ์ฐ๋๋ฐ, ์์งํ ์ฒ์์ ์๋ฒ๊ฐ ์ฃฝ์ ์ค ์์์ต๋๋ค.
์ฌ๋ฐ๋ ๊ฑด ๊ฐ์ ํ์ผ์ vLLM์ ๋ฃ์์ ๋์๋๋ฐ์. vLLM์ PIL์ด "decompression bomb์ด ์์ฌ๋๋ค"๋ ๊ฒฝ๊ณ ๋ฅผ ๋์ฐ๊ณ ๊น๋ํ๊ฒ ๋์ด๊ฐ์ต๋๋ค. ์ด๋ฏธ์ง raw๊ฐ ๋ก๊ทธ์ ํ ํด์ง๋ ์ผ๋ ์์๊ณ ์. ๊ฐ์ ์ ๋ ฅ์ธ๋ฐ ๋ ํ๋ ์์ํฌ์ ๋ฐ์์ด ์ด๋ ๊ฒ ๋ค๋ฅธ ๊ฒ ์ด์ํด์, ์ฝ๋๋ฅผ ์ง์ ๊น๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
1์ฐจ ์ฉ์์: ์ raw ์ด๋ฏธ์ง๊ฐ ๋ก๊ทธ์ ์ฐํ๋
๊ฐ์ฅ ๋จผ์ ์์ฌํ ๊ฑด ์์ฒญ ๋ก๊น ์ด์์ต๋๋ค. SGLang์๋ --log-requests ์ต์ ์ด ์์ด์ ์์ฒญ ๋ด์ฉ์ ๋ก๊ทธ์ ๋จ๊ธธ ์ ์๊ฑฐ๋ ์. ๊ทธ๋ฐ๋ฐ ์ ๋ ๊ทธ ์ต์ ์ ์ผ ์ ์ด ์์์ต๋๋ค. ์ค์ ๋ก ์ฝ๋๋ฅผ ๋ณด๋ log_requests ๊ธฐ๋ณธ๊ฐ์ False์๊ณ ์.
log_requests: bool = False
ํ๋๊ทธ๋ฅผ ์ ์ผฐ๋๋ฐ ์ด๋ป๊ฒ ์ด๋ฏธ์ง๊ฐ ๋ก๊ทธ์ ๋จ์์๊น. ์ฌ๊ธฐ์ ํ์ฐธ ํค๋งธ์ต๋๋ค. ์ ์ ๋ก๊น ๊ฒฝ๋ก๋ ์ ๋ถ ์ด ํ๋๊ทธ ๋ค์ ๊ฐ๋ ค์ ธ ์์์ผ๋๊น์.
๊ฒฐ๊ตญ ๋ต์ ์์ธ ์ฒ๋ฆฌ ์ชฝ์ ์์์ต๋๋ค. ์ด๋ฏธ์ง๋ฅผ ๋์ฝ๋ฉํ๋ base_processor.py์์, ์ ๊ฐ ์ฐ๋ v0.5.10.post1 ๋ฒ์ ์ ์ด๋ ๊ฒ ๋์ด ์์๊ฑฐ๋ ์.
except Exception as e:
raise RuntimeError(f"Error while loading data {data}: {e}")
์ฌ๊ธฐ {data}๊ฐ ๋ฌธ์ ์์ต๋๋ค. ์ด๋ฏธ์ง ๋ก๋ฉ์ด ์คํจํ๋ฉด ๊ทธ ์์ธ ๋ฉ์์ง ์์ ์ ๋ ฅ ๋ฐ์ดํฐ ์ ์ฒด, ๊ทธ๋ฌ๋๊น ์์ญ~๋ฐฑ MB์ง๋ฆฌ base64 ๋ฌธ์์ด์ด ํต์งธ๋ก ๋ค์ด๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด RuntimeError๊ฐ ์๋ก ์ ํ๋๋ฉด์ serving_base.py์
except Exception as e:
logger.exception(f"Error in request: {e}")
์ฌ๊ธฐ์ ๊ทธ๋๋ก ๋ก๊ทธ๋ก ์ถ๋ ฅ๋ฉ๋๋ค. --log-requests์๋ ์๋ฌด ์๊ด ์๋ ๊ฒฝ๋ก์๋ ๊ฑฐ์ฃ . ๋์ฝ๋ฉ์ด ์คํจํ๊ธฐ๋ง ํ๋ฉด ๋ฌด์กฐ๊ฑด ์ฐํ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ ๊ฐ์ง ๋. ์ ๊ฐ 1๋ถ 50์ด๋ ๊ธฐ๋ค๋ฆฐ ์ด์ ๊ฐ ์ฌ์ค ์ด๋ฏธ์ง ๋์ฝ๋ฉ์ด ์๋๋ผ ์ด ๋ก๊น ์์ฒด์์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. 100MB๊ฐ ๋๋ ๋ฌธ์์ด์ f-string์ผ๋ก ๋ง๋ค๊ณ stdout์ผ๋ก ์์๋ด๋ ๋์ CPU ์ฝ์ด ํ๋๊ฐ ๊ผฌ๋ฐ 100%๋ก ๋๊ฑฐ๋ ์. ์ถ๋ก ์ ์์๋ ์ ํ๋๋ฐ ๋ง์ด์ฃ .
๊ทธ๋ผ ์ ์ด์ ์์ธ๋ ์ ๋ฌ์๊น
์ฌ๊ธฐ์ vLLM์ด ๋ณด์ฌ์ค ๊ฒฝ๊ณ ๊ฐ ๊ฒฐ์ ์ ์ธ ํํธ์์ต๋๋ค. "decompression bomb์ด ์์ฌ๋๋ค"๋ ๊ทธ ๋ฉ์์ง, ๋ฐ๋ก PIL ๋ด์ฅ ๋ณดํธ ์ฅ์น๊ฐ ๋์ฐ๋ ๊ฒ๋๋ค.
PIL์ ์ด๋ฏธ์ง์ ํฝ์ ์๊ฐ MAX_IMAGE_PIXELS(๊ธฐ๋ณธ๊ฐ 89,478,485)๋ฅผ ๋์ผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ, ๊ทธ 2๋ฐฐ์ธ 178,956,970์ ๋์ผ๋ฉด ์์ DecompressionBombError๋ฅผ ๋์ง๋๋ค. ๋์คํฌ์ ํ์ผ ํฌ๊ธฐ๊ฐ ์๋๋ผ ์์ถ์ ํผ ํฝ์ ์ ๊ธฐ์ค์ด๋ผ๋ ๊ฒ ํต์ฌ์ธ๋ฐ์.
300DPI๋ก ํค์ด PDF ํ์ด์ง๋ ์ด ํ๊ณ๋ฅผ ๋๊ธฐ๊ธฐ ๋ฑ ์ข์ต๋๋ค. ํฐ ์ฉ์ง๋ฅผ ๊ณ ํด์๋๋ก ๋์คํฐํํ๋ฉด 1์ต~2์ต ํฝ์ ์ ์ฐ์ต๊ฒ ๋์ค๋๊น์. ์๋ณธ ํ์ผ์ด 10MB๋ผ๋ ํฝ์ ๋ก ํผ์น๋ฉด ์ ํ ๋ค๋ฅธ ์ด์ผ๊ธฐ๊ฐ ๋ฉ๋๋ค.
์ ๋ฆฌํ๋ฉด ์ด๋ ๊ฒ ๋ฉ๋๋ค.
- ํฐ ์ด๋ฏธ์ง๊ฐ ๋ค์ด์ด → PIL์ด ํฝ์ ์ ํ๊ณ ์ด๊ณผ๋ฅผ ๊ฐ์งํ๊ณ DecompressionBombError๋ฅผ ๋์ง
- SGLang์ด ๊ทธ ์์ธ๋ฅผ ์ก์์ base64 ์๋ฌธ๊ณผ ํจ๊ป ๋ค์ ๋์ง
- logger.exception์ด ๊ทธ 100MB์ง๋ฆฌ ๋ฉ์์ง๋ฅผ ๋ก๊ทธ๋ก ์ถ๋ ฅ → CPU ์ ์ , ๋ก๊ทธ ํญ๋ฐ
vLLM์ 1๋ฒ์์ PIL ๋ฉ์์ง๋ง ๋ณด์ฌ์ฃผ๊ณ ๋๋๋๋ฐ, SGLang(ํด๋น ๋ฒ์ )์ ๊ฑฐ๊ธฐ์ raw ๋ฐ์ดํฐ๊น์ง ์น์ด์ ํ ํด๋ธ ์ ์ด์์ต๋๋ค.
๋ ์ฌ๊ฐํ ๋ฌธ์ : ๋ฉ๋ชจ๋ฆฌ์ DoS
์ฌ๊ธฐ๊น์ง๋ ์ถฉ๋ถํ ๊ณจ์น ์ํ๋ฐ, ํ ์คํธํ๋ค ๋ณด๋ ๋ ์ํํ ๊ฒ ๋ณด์์ต๋๋ค. ์์ฒญ ํ๋ ์ฒ๋ฆฌํ ๋๋ง๋ค RSS๊ฐ 1GB์ฉ ์น์์๋ค๊ฐ ๋๋๋ฉด ํ๋ฆฌ๋๋ผ๊ณ ์.
์๊ฐํด๋ณด๋ฉด ๋น์ฐํฉ๋๋ค. HTTP ๋ฐ๋(133MB) → UTF-8 ๋ฌธ์์ด → base64 ๋์ฝ๋ → PIL ๋์ฝ๋ฉ(1.4์ต ํฝ์ RGB๋ฉด ๊ทธ๊ฒ๋ง 430MB๊ฐ ๋์ต๋๋ค) → ๋ฆฌ์ฌ์ด์ฆ ๋ณต์ฌ๋ณธ… ๋จ๊ณ๋ง๋ค ํฐ ๊ฐ์ฒด๊ฐ ์๋ก ์๊ธฐ๋๊น์.
๋ฌธ์ ๋ ์ ๊ฐ --max-running-requests 256์ผ๋ก ๋์๋จ๋ค๋ ์ ์ด์์ต๋๋ค. ์ด๋ฐ ์์ฒญ์ด ๋์์ ๋ช ๊ฐ๋ง ๋ค์ด์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ์ผ๋ก ๋ถ์ด๋ฉ๋๋ค. 8๊ฐ๋ฉด 8GB, 16๊ฐ๋ฉด 16GB. GPU ์ถ๋ก ์ ๋ฟ๊ธฐ๋ ์ ์ ์๋ฒ๊ฐ OOM์ผ๋ก ์ฃฝ์ ์ ์๋ค๋ ๋ป์ด์ฃ .
์ด๊ฒ ๋ฌด์์ด ๊ฑด, ๊ณต๊ฒฉ์ ์ ์ฅ์์ GPU ํ ํจ ์ธ ํ์๊ฐ ์๋ค๋ ๊ฒ๋๋ค. ์ ํจํ ์ด๋ฏธ์ง์ผ ํ์๋ ์์ต๋๋ค. ๊ทธ๋ฅ ํฐ base64 ๋ฌธ์์ด์ /v1/chat/completions์ ๋ช ๋ฒ ๋์ง๋ ๊ฒ๋ง์ผ๋ก CPU๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์๋จน์ ์ ์์ผ๋๊น์. ๋จ์ํ ์ฑ๋ฅ ์ด์๋ฅผ ๋์ด ์ฌ์ค์ ์ถ๋ก ์ด์ ๋จ๊ณ์ DoS ์ทจ์ฝ์ ์ ๋๋ค.
์ด๋ฏธ ๊ณ ์ณ์ง ๋ถ๋ถ๊ณผ ์์ง ์ ๊ณ ์ณ์ง ๋ถ๋ถ
์ด์๋ฅผ ์ ๋ฆฌํ๋ค๊ฐ ์๊ฒ ๋ ๊ฑด๋ฐ์, ์์์ ๋ณธ ๊ทธ ๋ฌด์ ํ {data} ๋ก๊น ์ PR #27451์์ ์ด๋ฏธ ์์ ๋ดค๋๋ผ๊ณ ์. ๋ค๋ง ์ ๊ฐ ์ฐ๋ v0.5.10.post1์๋ ์์ง ์ ๋ค์ด๊ฐ ์ํ์์ต๋๋ค. ์ต์ main์์๋ ์ด๋ ๊ฒ 100์๋ก ์๋ฆฝ๋๋ค.
Classify malformed-multimodal rejects as invalid_request by merrymercy · Pull Request #27451 · sgl-project/sglang
Summary When a multimodal request fails validation (e.g. bad base64), return a structured error with type=invalid_request_error and code=400 instead of a bare error message. Detect client disconne...
github.com
except Exception as e:
data_str = str(data)
if len(data_str) > 100:
data_str = data_str[:100] + "..."
raise RuntimeError(f"Error while loading data {data_str}: {e}") from e
์ด๊ฑธ ๋ณด๊ณ "์ ๊ทธ๋ผ ํด๊ฒฐ๋๋ค" ํ๊ณ ๋์ด๊ฐ ๋ปํ๋๋ฐ, ๊ณฑ์น์ด๋ณด๋ ์ด truncation์ด ๋ง๋ ๊ฑด ๊นจ์ง ์ ๋ ฅ ์ผ์ด์ค๋ฟ์ด์์ต๋๋ค. ์ฆ Image.open์ด ์คํจํด์ ์์ธ ๋ฉ์์ง์๋ง ๋ฐ์ดํฐ๊ฐ ์ค๋ฆฌ๋ ๊ฒฝ๋ก์.
์ ์ ์ ์ค์ ์ํฉ, ๊ทธ๋ฌ๋๊น ๋ฉ์ฉกํ์ง๋ง ๊ทธ๋ฅ ๊ฑฐ๋ํ ์ด๋ฏธ์ง๋ ์์ธ๋ฅผ ์ ๋ ๋๋ค. ๋์ฝ๋ฉ์ ์ฑ๊ณตํ๊ฑฐ๋ ์. ๋ค๋ง ๊ทธ ๋์ฝ๋ฉ์ด ๋๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ๋จน์ ๋ฟ์ ๋๋ค. ์ด ๊ฒฝ๋ก๋ ์์ธ ๋ฉ์์ง๋ฅผ ์ ๊ฑฐ์น๋๊น truncation๊ณผ๋ ๋ฌด๊ดํ๊ณ , ์ต์ ๋ฒ์ ์์๋ ๊ทธ๋๋ก ๋๋ฆฝ๋๋ค. DoS ๊ฐ๋ฅ์ฑ๋ ์ด์ ์๊ณ ์.
๊ทธ๋์ ์ด์์ "#27451์ด ๊ณ ์น ๊ฒ๊ณผ ๋ชป ๊ณ ์น ๊ฒ"์ ๋ช ํํ ๋๋ ์ ์ ์์ต๋๋ค. ๋๊ฐ ๋ด๋ "์ด ์ด๊ฑฐ ์ด๋ฏธ ๊ณ ์ณ์ง ๊ฑฐ ์๋์ผ?"๋ผ๊ณ ํ ๋งํ ๋ถ๋ถ์ด๋ผ์์.
์ ์ํ ์์ : ๋์ฝ๋ฉ ์ ์ ๋ง์
ํด๊ฒฐ ๋ฐฉํฅ์ ๋จ์ํฉ๋๋ค. PIL์ Image.open์ ํค๋๋ง ์ฝ์ต๋๋ค. ์ฆ ์ค์ ํฝ์ ์ ๋์ฝ๋ฉํ๊ธฐ ์ ์ ์ด๋ฏธ์ง์ ๊ฐ๋ก·์ธ๋ก ํฌ๊ธฐ๋ฅผ ์ด๋ฏธ ์ ์ ์๋ค๋ ๊ฑฐ์ฃ . ๊ทธ๋ฌ๋ ๋น์ผ ๋์ฝ๋ฉ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ํฝ์ ์๋ฅผ ๋จผ์ ํ์ธํ๊ณ , ํ๊ณ๋ฅผ ๋์ผ๋ฉด ๊น๋ํ๊ฒ ๊ฑฐ๋ถํ๋ฉด ๋ฉ๋๋ค.
def _check_image_pixels(width: int, height: int) -> None:
max_pixels = envs.SGLANG_IMAGE_MAX_DECODE_PIXELS.get()
num_pixels = width * height
if max_pixels > 0 and num_pixels > max_pixels:
raise ValueError(
f"Image is too large to decode: {width}x{height} = {num_pixels} pixels "
f"exceeds the limit of {max_pixels} pixels. Raise "
f"SGLANG_IMAGE_MAX_DECODE_PIXELS to allow larger images."
)
๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ ์ง์ ์์ ๋์ฝ๋ฉ(.convert())์ด ์ผ์ด๋๊ธฐ ์ ์ ์ด ๊ฒ์ฌ๋ฅผ ๋ผ์ ๋ฃ์์ต๋๋ค.
image = Image.open(BytesIO(image_bytes))
_check_image_pixels(image.width, image.height)
return image
ํ๊ณ๊ฐ์ SGLANG_IMAGE_MAX_DECODE_PIXELS ํ๊ฒฝ๋ณ์๋ก ๋นผ๋์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ PIL์ bomb ์๊ณ๊ฐ๊ณผ ๋์ผํ 89,478,485๋ก ์ก์๊ณ ์. OCR์ฒ๋ผ ์ ๋ง ํฐ ์ด๋ฏธ์ง๋ฅผ ๋ค๋ค์ผ ํ๋ ๋ถ๋ค์ ์ด ๊ฐ์ ์ฌ๋ฆฌ๋ฉด ๋๊ณ , 0์ผ๋ก ๋๋ฉด ๊ฒ์ฌ๋ฅผ ๋ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๊ฑฐ๋ํ ์ด๋ฏธ์ง๊ฐ ๋ค์ด์๋ ๋์ฝ๋ฉ ์ ์ ๋ช ํํ ValueError๋ก ๋งํ๋๊น, 430MB์ง๋ฆฌ ํฝ์ ๋ฒํผ๋ฅผ ๋ง๋ค ์ผ๋, raw ๋ฐ์ดํฐ๋ฅผ ๋ก๊ทธ์ ํ ํ ์ผ๋ ์์ต๋๋ค. ๋๋ ค์ง ์ผ๋, ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ง ์ผ๋ ์๊ณ ์. vLLM์ด PIL ๊ฒฝ๊ณ ๋ก ์งง๊ฒ ๋๊ณ ๊ฐ๋ ๊ฒ๊ณผ ๋น์ทํ ๋์์ด ๋ฉ๋๋ค.
๋ฌผ๋ก ํ๊ณ๋ ์์งํ ์ ์ด๋์ต๋๋ค. ์ด ๊ฐ๋๋ ์ ํจํ ํค๋๊ฐ ์์ด์ผ ๋์ํฉ๋๋ค. ์์ ๊นจ์ง base64๋ Image.open ์์ฒด๊ฐ ๋จผ์ ํฐ์ง๋๊น์. ๊ทธ์ชฝ์ ์์ ๋ณธ #27451์ด ๋ด๋นํ๋ ์์ญ์ด๊ณ , ์ PR์ "๋ฉ์ฉกํ์ง๋ง ๋๋ฌด ํฐ" ์ผ์ด์ค๋ฅผ ๋งก๋ ์์ผ๋ก ์ญํ ์ด ๊ฐ๋ฆฝ๋๋ค.
๋ง์น๋ฉฐ
์ฒ์์ ๊ทธ๋ฅ "๋ก๊ทธ๊ฐ ์ข ๋ง์ด ์ฐํ๋ค?" ์ ๋๋ก ๋ณด์๋๋ฐ, ํ๊ณ ๋ค์๋ก ์ฑ๋ฅ ๋ฌธ์ → ์ ๋ณด ๋ ธ์ถ → DoS ๊ฐ๋ฅ์ฑ๊น์ง ์ธ ๊ฒน์ผ๋ก ์ฎ์ฌ ์๋ ์ฌ๋ก์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ "์ด๋ฏธ PR๋ก ๊ณ ์ณ์ง ๊ฒ ๊ฐ๋ค"๋ ์ง์ ์์ ํ ๋ฒ ๋ ์์ฌํด๋ณธ ๊ฒ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ง์๊ณ ์. ๊ฒ๋ณด๊ธฐ ์ฆ์ ํ๋์ ์์ธ์ด ํ๋๋ง ์๋ ๊ฑด ์๋๋ผ๋ ๊ฑธ ๋ค์ ๋๊ผ์ต๋๋ค.
์์ ํ ๋ด์ฉ์ ์๋์ ์ฌ๋ ค๋์ต๋๋ค.
- ์ด์: sgl-project/sglang#28587
- PR: sgl-project/sglang#28588
Guard image decode against oversized (decompression-bomb) images by hhhhhhhhhhhhhhhhho · Pull Request #28588 · sgl-project/sgl
Motivation Closes #28587. _load_image (python/sglang/srt/utils/common.py) decodes images via Image.open(BytesIO(...)) with no pixel-count guard. The per-model cap (SGLANG_IMAGE_MAX_PIXELS, used by ...
github.com
[Bug] No pixel-count guard on image decode: oversized images cause ~1GB RSS + 100% CPU per request (pre-inference DoS risk) · I
Checklist I searched related issues but found no solution. The bug persists in the latest version. Issues without environment info and a minimal reproducible demo are hard to resolve and may receiv...
github.com
ํน์ ๋น์ทํ๊ฒ VLM ์๋น์์ ํฐ ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃจ์ ๋ค๋ฉด, ๋ค์ด์ค๋ ์ด๋ฏธ์ง์ ํฝ์ ์์ ์ํ์ ๊ฑธ์ด๋์๋ ๊ฑธ ๊ถํฉ๋๋ค. ํ์ผ ํฌ๊ธฐ๋ง ๋ณด๋ฉด ์ ๋๊ณ ์, ์์ถ์ ํ์์ ๋์ ํฝ์ ์๊ฐ ์ง์ง ๋น์ฉ์ด๋ผ๋ ์ ์ ๊ผญ ๊ธฐ์ตํ์๋ฉด ์ข๊ฒ ์ต๋๋ค.