็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿงฐ ๆ–ฐๆ‰‹ไนŸ่ƒฝ่ท‘็š„ LLM Bench:ๅฎ‰่ฃๆต็จ‹、ๆธฌ่ฉฆๆ–นๆณ•、็ตๆžœๅˆค่ฎ€่ˆ‡ๅ„ชๅŒ–ๆ–นๅ‘

    1. LLM Bench ๆ˜ฏไป€้บผ?่ƒฝ่งฃๆฑบไป€้บผๅ•้กŒ

    LLM Bench(ๆณ›ๆŒ‡็”จไพ†้‡ๆธฌๅคงๅž‹่ชž่จ€ๆจกๅž‹ๆŽจ่ซ–ๆ•ˆ่ƒฝ็š„ๅŸบๆบ–ๆธฌ่ฉฆๅทฅๅ…ท/่…ณๆœฌ)ไธป่ฆ็”จไพ†ๅ›ž็ญ”ไธ‰ๅ€‹ๅ•้กŒ:

    • ้ซ”ๆ„Ÿๅฅฝไธๅฅฝ? ไฝฟ็”จ่€…ไบ’ๅ‹•ๆ™‚,ๅพž้€ๅ‡บๅˆฐ「็œ‹ๅˆฐ็ฌฌไธ€ๅ€‹ๅญ—」ๅฟซไธๅฟซ(TTFT)。
    • ็ฉฉไธ็ฉฉ? ไฝต็™ผๆ‹‰้ซ˜ๆˆ–่ฒ ่ผ‰ไธŠไพ†ๆ™‚,ๆ˜ฏๅฆ้–‹ๅง‹ๆŠ–ๅ‹•、่ถ…ๆ™‚ๆˆ–้Œฏ่ชค(p95、ErrRate)。
    • ๆ‰›ๅพ—ไฝๅคšๅฐ‘ไบบ? ๅคšไฝฟ็”จ่€…ๆˆ–ไปฃ็†(Agent)ๅŒๆ™‚ๆ‰“้€ฒไพ†,ๅžๅ้‡ๆ˜ฏๅฆ็ถญๆŒ(TPS / tokens per second)。

    ็•ถไฝ ๅœจๆฏ”ๅฐไธๅŒๆจกๅž‹(7B/8B/14B)、ไธๅŒ็กฌ้ซ”(CPU/GPU/็ตฑไธ€่จ˜ๆ†ถ้ซ”)、ๆˆ–ไธๅŒ้ƒจ็ฝฒๆ–นๅผ(ๆœฌๆฉŸ/VM/ๅฎนๅ™จ)ๆ™‚, LLM Bench ่ƒฝ่ฎ“ไฝ ็”จ「ๆ•ธๅญ—」่€Œไธๆ˜ฏ「ๆ„Ÿ่ฆบ」ๅšๆฑบ็ญ–。

    2. ไฝ ๆ‡‰่ฉฒๅ…ˆๆ‡‚็š„ 5 ๅ€‹ๆธฌ่ฉฆๅ่ฉž(TTFT / Latency / TPS / Concurrency / ErrRate)

    ๅ่ฉž ไปฃ่กจๆ„็พฉ ไฝ ๆœ€ๅธธ็”จไพ†ๅˆคๆ–ทไป€้บผ
    TTFT(Time To First Token) ๅพž้€ๅ‡บ่ซ‹ๆฑ‚ๅˆฐๅ›žๅ‚ณ「็ฌฌไธ€ๅ€‹ token」็š„ๆ™‚้–“ ไบ’ๅ‹•้ซ”ๆ„Ÿ:่Šๅคฉ「ๆœ‰ๆฒ’ๆœ‰ๅกไฝ」
    Latency ๆ•ดๅ€‹่ซ‹ๆฑ‚ๅฎŒๆˆ็š„ๅปถ้ฒ(ๅซ็”ŸๆˆๅฎŒ) ้•ทๆ–‡็”Ÿๆˆ่€—ๆ™‚、ๆ•ด้ซ”็ญ‰ๅพ…ๆ™‚้–“
    TPS(tokens/sec) ๆฏ็ง’ๅฏ็”Ÿๆˆๅคšๅฐ‘ token(ๅžๅ้‡) ๅคšไฝฟ็”จ่€…ๆ‰ฟ่ผ‰้‡、้•ท่ผธๅ‡บๆ•ˆ็އ
    Concurrency(ไฝต็™ผ) ๅŒๆ™‚้€ๅ‡บๅนพๅ€‹่ซ‹ๆฑ‚ ๅฃ“ๅŠ›ๆธฌ่ฉฆ:ๆœๅ‹™็ซฏๆ˜ฏๅฆๆ‰›ๅพ—ไฝ
    ErrRate(้Œฏ่ชค็އ) ่ซ‹ๆฑ‚ๅคฑๆ•—ๆฏ”ไพ‹(timeout/400/500/429 ็ญ‰) ็ฉฉๅฎšๆ€ง:ๆ˜ฏๅฆ้ฉๅˆไธŠ็ทšๆˆ–ๅš Agent

    3. ๅฎ‰่ฃๆ–นๅผ(Windows / Linux / Python ็’ฐๅขƒๆณจๆ„ไบ‹้ …)

    ไฝ ๅฏไปฅๆŠŠ「LLM Bench」็†่งฃๆˆไธ€็ต„ๅฏ่ท‘็š„ Python benchmark ่…ณๆœฌ(ๆˆ–ๅŒ้กžๅทฅๅ…ท),ๆ ธๅฟƒๅ‰ๆๆ˜ฏ:

    • ไฝ ่ƒฝๅ‘ผๅซๅˆฐไธ€ๅ€‹ๆŽจ่ซ–ๆœๅ‹™็ซฏ(ไพ‹ๅฆ‚ Ollama ็š„ OpenAI ็›ธๅฎน API)。
    • ไฝ ่ƒฝ็”จ Python ๅŸท่กŒ่…ณๆœฌไธฆ้€ๅ‡บ HTTP ่ซ‹ๆฑ‚。

    3.1 Windows(PowerShell)

    python -V
    python -m pip install -U pip
    python -m pip install -U requests

    ๅฆ‚ๆžœไฝ ่ฆ่ท‘ async/ไธฆ็™ผ็‰ˆๆœฌ(ๅธธ่ฆ‹ๆœƒ็”จ aiohttp/httpx),ๅฏไปฅๅ†่ฃœ:

    python -m pip install -U aiohttp httpx

    3.2 Linux(Ubuntu/Debian ้กž)

    python3 -V
    python3 -m pip install -U pip
    python3 -m pip install -U requests aiohttp httpx

    ๆณจๆ„:่‹ฅไฝ ้‡ๅˆฐ PEP 668(็ณป็ตฑ Python ไธๅ…่จฑ็›ดๆŽฅ pip ๅฎ‰่ฃ)็š„้™ๅˆถ,ๅปบ่ญฐ็”จ venv:

    python3 -m venv .venv
    . .venv/bin/activate
    python -m pip install -U pip requests aiohttp httpx

    4. ๆธฌ่ฉฆๅ‰ๆบ–ๅ‚™:็ขบ่ชไฝ ็š„ๆŽจ่ซ–ๆœๅ‹™็ซฏ(Ollama / OpenAI ็›ธๅฎน API)

    ้€™็ฏ‡ไปฅ Ollama ็‚บไพ‹,Ollama ้ ่จญๆœƒๆไพ› OpenAI ็›ธๅฎน็š„ API ็ซฏ้ปž。 ไฝ ๅฏไปฅๅ…ˆ็ขบ่ชๆœๅ‹™ๆ˜ฏๅฆ่ตทไพ†:

    4.1 ๆชขๆŸฅ Ollama ๆ˜ฏๅฆๅœจ่ท‘

    Windows:

    ollama ps

    Linux:

    curl -s http://127.0.0.1:11434/api/tags | head

    4.2 ไฝ ้€™ๆฌกๆธฌ่ฉฆ็š„็›ฎๆจ™็ซฏ้ปž(็คบไพ‹)

    http://127.0.0.1:11434/v1

    ๅฆ‚ๆžœไฝ ็š„ bench ่…ณๆœฌๆ˜ฏ่ตฐ OpenAI ๆ ผๅผ(/v1/chat/completions),้€™ๅ€‹็ซฏ้ปžๅฐฑๆ˜ฏๆœ€ๅธธ็”จ็š„ๅ…ฅๅฃ。

    5. ๅŸบ็คŽๆธฌ่ฉฆ:่ท‘ๅ‡บ็ฌฌไธ€ไปฝๅ ฑๅ‘Š(ๅ–ฎไฝต็™ผ、็Ÿญ่ผธๅ‡บ)

    ๅ…ˆ็”จ「ๅ–ฎไฝต็™ผ」็ขบไฟๆต็จ‹้ƒฝ้€š,ไธฆไธ”็”จ็Ÿญ่ผธๅ‡บๆธ›ๅฐ‘่ฎŠๆ•ธ(ไพ‹ๅฆ‚ max_tokens=128)。 ไปฅไธ‹ๆ˜ฏไฝ ๅฏฆ้š›่ท‘ๆˆๅŠŸ็š„็ฏ„ไพ‹(Windows PowerShell):

    $env:BENCH_CONCURRENCY="1"; python .\bench_ollama_ttft_async.py

    ไฝ ็•ถๆ™‚่ผธๅ‡บ้‡้ปžๅฆ‚ไธ‹(ๆ‘˜้Œ„้—œ้ต่กŒ):

    Target: http://127.0.0.1:11434/v1
    Model:  llama3-groq-tool-use:8b
    N=50  concurrency=1  max_tokens=128
    
    === Summary ===
    OK: 50  ERR: 0  ErrRate: 0.0%
    TTFT  p50: 0.349s  p95: 0.389s

    ่งฃ่ฎ€:ๅœจ concurrency=1 ไธ‹,TTFT p50 ็ด„ 0.35 ็ง’、p95 ็ด„ 0.39 ็ง’,ไธ” ErrRate=0%,ไปฃ่กจไบ’ๅ‹•้ซ”ๆ„Ÿๅฟซไธ”็ฉฉ。

    6. ้€ฒ้šŽๆธฌ่ฉฆ็Ÿฉ้™ฃ:ไฝต็™ผ、้•ท่ผธๅ‡บ、้•ท Prompt ็š„ๅฃ“ๅŠ›ๆธฌ่ฉฆๆ€Ž้บผ่จญ่จˆ

    ๅฆ‚ๆžœไฝ ่ฆ่ฉ•ไผฐ「่ƒฝๆ‰›ๅคšๅฐ‘ไบบ」ๆˆ–「Agent ๅŒๆ™‚่ท‘ๆœƒไธๆœƒ็‚ธ」,ไฝ ้œ€่ฆๆŠŠๆธฌ่ฉฆๅšๆˆ็Ÿฉ้™ฃ(ๅ›บๅฎšไธ€ๅ€‹่ฎŠๅ› ,ๅ…ถไป–ไธๅ‹•)。 ไธ‹้ข็ตฆไฝ ไธ€ๅ€‹ๆ–ฐๆ‰‹ๆœ€ๅฏฆ็”จ็š„็Ÿฉ้™ฃ้ †ๅบ:

    6.1 ไฝต็™ผๅฃ“ๅŠ›(Concurrency)

    ๅปบ่ญฐๅพž 1 → 2 → 4 → 8 ้€ๆญฅๆ‹‰้ซ˜,ๆฏๅ€‹้ปž่‡ณๅฐ‘ N=50:

    # ไปฅ็’ฐๅขƒ่ฎŠๆ•ธๆˆ–ๅƒๆ•ธๆ–นๅผ่ชฟๆ•ด(ไพไฝ ็š„ bench ่…ณๆœฌ่€Œๅฎš)
    BENCH_CONCURRENCY=1
    BENCH_CONCURRENCY=2
    BENCH_CONCURRENCY=4
    BENCH_CONCURRENCY=8

    ่ง€ๅฏŸไธ‰ไปถไบ‹:

    • ErrRate ๆ˜ฏๅฆ้–‹ๅง‹ไธŠๅ‡
    • TTFT p95 ๆ˜ฏๅฆ็ช็„ถ่ทณ้ซ˜(ๆŠ–ๅ‹•่ฎŠๅคง)
    • ๅฎŒๆˆๆ™‚้–“ๆ˜ฏๅฆ็ทšๆ€ง่ฎŠๆ…ข(้กฏ็คบๅžๅไธ่ถณ)

    6.2 ่ผธๅ‡บ้•ทๅบฆ(max_tokens)

    ็”จ 128 / 256 / 512 / 1024 ๆฏ”่ผƒ「็Ÿญ็ญ”」่ˆ‡「้•ทๆ–‡」็š„ๅžๅๅทฎ็•ฐ。

    6.3 Prompt ้•ทๅบฆ(Context ๅฃ“ๅŠ›)

    ๆŠŠ prompt ๅˆ†ไธ‰ๆฎต:็Ÿญ(ๆ•ธๅ token)、ไธญ(ๆ•ธ็™พ token)、้•ท(ๆ•ธๅƒ token)。 ๅพˆๅคš้ƒจ็ฝฒๅœจ「้•ทไธŠไธ‹ๆ–‡」ๆ™‚ TTFT ๆœƒๆ˜Ž้กฏ่ฎŠๆ…ข,้€™ๆ˜ฏ Agent ๅ ดๆ™ฏ็š„ๅธธ่ฆ‹็“ถ้ ธ。

    7. ๆธฌ่ฉฆ็ตๆžœๆ€Ž้บผ็œ‹:p50 / p95、ๆŠ–ๅ‹•、็“ถ้ ธ่ˆ‡「ๅฅฝไธๅฅฝ」ๅˆคๆ–ทๆจ™ๆบ–

    ๆ–ฐๆ‰‹ๆœ€ๆŽจ่–ฆ็š„็œ‹ๆณ•ๆ˜ฏ:ๅ…ˆ็ฉฉๅฎš、ๅ†้ซ”ๆ„Ÿ、ๆœ€ๅพŒๆ‰ฟ่ผ‰。

    7.1 ็ฉฉๅฎšๆ€ง:ErrRate

    • ErrRate = 0%:็†ๆƒณ(ไฝ ้€™ๆฌกๅฐฑๆ˜ฏ 0%)
    • ErrRate > 1%:้–‹ๅง‹้œ€่ฆๆŸฅๅŽŸๅ› (timeout、VRAM、Gateway/ๅๅ‘ไปฃ็†、้€Ÿ็އ้™ๅˆถ็ญ‰)

    7.2 ้ซ”ๆ„Ÿ:TTFT

    • < 0.5s:ๅคšๆ•ธๆƒ…ๅขƒๆœƒ่ฆบๅพ—「ๅพˆ้ †」
    • 0.5–1.5s:ๅฏ็”จไฝ†ๆœƒๆ„Ÿ่ฆบๅœจ็ญ‰
    • > 2s:ไบ’ๅ‹•้ซ”ๆ„Ÿๆ˜Ž้กฏๅก(้™ค้žๆ˜ฏ่ถ…ๅคงๆจกๅž‹ๆˆ–้ซ˜่ฒ ่ผ‰)

    7.3 ๆŠ–ๅ‹•:p95 vs p50

    p95 ไปฃ่กจ「ๆฏ”่ผƒๅ€’ๆฅฃ้‚ฃ 5%」็š„ไฝฟ็”จ่€…้ซ”ๆ„Ÿ。็†ๆƒณ็‹€ๆณๆ˜ฏ p95 ไธ่ฆๆฏ” p50 ๅคงๅคชๅคš。 ไฝ ้€™ๆฌก็š„ TTFT(p50 0.349s / p95 0.389s)ๅทฎ่ทๅพˆๅฐ,ๅฑฌๆ–ผ็ฉฉๅฎšๅž‹。

    7.4 ๅธธ่ฆ‹็“ถ้ ธๅฐ็…ง

    ็พ่ฑก ๆœ€ๅฏ่ƒฝๅŽŸๅ›  ๅ„ชๅ…ˆ่™•็†ๆ–นๅ‘
    TTFT ๆ˜Ž้กฏ่ฎŠๆ…ข,ไฝ† TPS ้‚„ๅฏไปฅ ๅ‰่™•็†/ๆŽ’้šŠ/ไธŠไธ‹ๆ–‡้Ž้•ท ็ธฎ็Ÿญ prompt、้™ไฝŽ context、ๆ้ซ˜ๆ‰นๆฌก/ไฝต็™ผ็ญ–็•ฅ
    ไฝต็™ผไธ€ๆ‹‰้ซ˜ๅฐฑ timeout/ErrRate ไธŠๅ‡ VRAM ไธ่ถณ、ๆœๅ‹™็ซฏๆŽ’็จ‹้ฃฝๅ’Œ ้™ไฝŽไฝต็™ผ、ๆ›ๅฐๆจกๅž‹、ๅขžๅŠ  GPU/่จ˜ๆ†ถ้ซ”、่ชฟๆ•ด batch
    ้•ท่ผธๅ‡บ้žๅธธๆ…ข ๅžๅไธ่ถณ(TPS ไฝŽ)、CPU/GPU ๅ—้™ ๆ”นๆŽจ่ซ–ๅพŒ็ซฏ、้–‹ๅ•Ÿ GPU offload、ๆ›ๆ›ดๅฟซๆจกๅž‹

    8. ๅธธ่ฆ‹ๅ•้กŒๆŽ’้™ค(400/429、Timeout、VRAM ไธ่ถณ、ๅทฅๅ…ทไธๆ”ฏๆด tools)

    8.1 400(ๆจกๅž‹ไธๆ”ฏๆด tools)

    ไฝ ๆ›พ้‡ๅˆฐ้กžไผผ่จŠๆฏ:ๆŸไบ›ๆจกๅž‹ไธๆ”ฏๆด tools(function/tool calling),ๅœจ Agent/ๅทฅๅ…ทๆจกๅผๆœƒ็›ดๆŽฅ 400。

    • ่งฃๆณ•:ๆ”น็”จๆ”ฏๆด tools ็š„ๆจกๅž‹(ๆˆ–้—œ้–‰ tools ๆจกๅผ)。
    • ๆชขๆŸฅ:ไฝ ็š„่ซ‹ๆฑ‚ payload ๆ˜ฏๅฆๅธถไบ† tool/schema。

    8.2 429(้€Ÿ็އ้™ๅˆถ)

    • ไฝต็™ผๅคช้ซ˜、ๆˆ–ๆœๅ‹™็ซฏๆœ‰้™ๆต。
    • ่งฃๆณ•:้™ไฝŽ concurrency、ๅŠ ้‡่ฉฆ/้€€้ฟ(backoff)。

    8.3 Timeout / 503

    • ๆœๅ‹™็ซฏๆŽ’้šŠ้Žไน…、ๆˆ– GPU/CPU ้ฃฝๅ’Œ。
    • ่งฃๆณ•:้™ไฝŽ max_tokens、็ธฎ็Ÿญ prompt、่ชฟๆ•ดไฝต็™ผ็ญ–็•ฅ。

    8.4 VRAM ไธ่ถณ(OOM)

    • ๅธธ่ฆ‹ๆ–ผๅคงๆจกๅž‹ + ้ซ˜ไฝต็™ผ + ้•ทไธŠไธ‹ๆ–‡。
    • ่งฃๆณ•:ๆ›ๅฐๆจกๅž‹、้™ไฝŽ context、ๆธ›ๅฐ‘ไฝต็™ผ、ๆˆ–ๆ”น็”จๅˆ†ๅฑค/้‡ๅŒ–็‰ˆๆœฌ。

    9. ๅ„ชๅŒ–ๆ–นๅ‘:ๅพž「้ซ”ๆ„Ÿ」ๅˆฐ「ๆ‰ฟ่ผ‰้‡」็š„่ชฟๆ กๆธ…ๅ–ฎ

    • ๅ…ˆๆŠŠ ErrRate ๅฃ“ๅˆฐ 0%:ไธ็ฉฉๅฐฑๅ…ˆๅˆฅ่ซ‡ๅฟซ。
    • ๅ„ชๅŒ– TTFT:็ธฎ็Ÿญ prompt、้ฟๅ…่ถ…้•ท system ๆŒ‡ไปค、ๆธ›ๅฐ‘ไธๅฟ…่ฆไธŠไธ‹ๆ–‡。
    • ๆๅ‡ TPS:็ขบไฟ GPU offload ๆญฃๅธธ、้ฟๅ… CPU ่ขซๆ‰“ๆปฟ、้ธๆ“‡ๅžๅ่ผƒ้ซ˜็š„ๆจกๅž‹。
    • ไฝต็™ผ็ญ–็•ฅ:้€ๆญฅๆ‹‰้ซ˜ concurrency ๆ‰พๅˆฐๆ‹้ปž(ErrRate ไธŠๅ‡ๆˆ– p95 ้ฃ†ๅ‡็š„่‡จ็•Œๅ€ผ)。
    • ๆฏ”่ผƒๆจกๅž‹่ฆ「ๅŒๆขไปถ」:ๅŒ N、ๅŒ prompt、ๅŒ max_tokens、ๅŒไฝต็™ผ,ๆ‰ๆœ‰ๅฏๆฏ”ๆ€ง。

    10. ๅฐ็ต:ๅปบ่ญฐไฝ ็…ง้€™ๅ€‹้ †ๅบ่ท‘,ๆœ€ๅฟซๆ‰พๅˆฐๆœ€ไฝณๆจกๅž‹่ˆ‡้…็ฝฎ

    1. concurrency=1、max_tokens=128:็ขบ่ชๆต็จ‹้€š、ErrRate=0%
    2. concurrency ้€ๆญฅๆ‹‰้ซ˜:ๆ‰พๅ‡บ็ฉฉๅฎšๆ‰ฟ่ผ‰ไธŠ้™
    3. max_tokens ๆ‹‰้•ท:่ฉ•ไผฐ้•ทๆ–‡ๅžๅ
    4. prompt ๆ‹‰้•ท:ๆจกๆ“ฌ Agent ๅ ดๆ™ฏ
    5. ๅšๆจกๅž‹ๅฐ็…ง่กจ:็”จๆ•ธๆ“šๆŒ‘ๅ‡บๆœ€้ฉๅˆไฝ ็š„้ƒจ็ฝฒ็ต„ๅˆ

    ๐Ÿ’ฌ ็•™่จ€่Š่Š

    ไฝ ็›ฎๅ‰ๆ˜ฏ็”จ Ollama、ๆœฌๆฉŸ GPU、้‚„ๆ˜ฏ้›ฒ็ซฏ API ๅœจ่ท‘ LLM?ๅฆ‚ๆžœไฝ ่ฒผไธŠไฝ ็š„ๆธฌ่ฉฆๅƒๆ•ธ(N / concurrency / max_tokens)่ˆ‡ Summary, ๆˆ‘ๅฏไปฅๅนซไฝ ไธ€่ตท่งฃ่ฎ€ p50/p95、ๆ‰พ็“ถ้ ธ,ไธฆๅปบ่ญฐไธ‹ไธ€ๆญฅๆ€Ž้บผ่ชฟ。

    ๐Ÿ“Œ ๅปถไผธ้–ฑ่ฎ€

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš