LLM-ийн бодит хурдыг хэмжих цаг ирлээ: NVIDIA "GenAI-Perf"-ийг халж, шинэ "AIPerf" фрэймворкоо цацлаа
Шинэ open-weights модель гарч ирэх бүрд бид vLLM, TensorRT-LLM эсвэл Ollama дээр асааж, хэдэн prompt шидээд "за болж байна, хурдан л хариулж байна" гэж дүгнэдэг. Гэвч системээ продакшнд байршуулах, ялангуяа нэгэн зэрэг хэдэн зуун хэрэглэгч агенттай харьцах үед хамгийн хүнд асуулт гарч ирдэг: Энэ систем өндөр ачаалал дор үнэхээр хурдан ажиллаж чадах уу?
Өнөөдрийг хүртэл LLM-ийн инференс хурдыг хэмжихэд зориулагдсан хэрэгслүүд (түүний дотор NVIDIA-ийн өөрийнх нь өмнөх GenAI-Perf) өндөр ачаалал шалгах үед өөрсдөө bottleneck болж, бодит бус тоо гаргадаг байв. NVIDIA эдгээр дутагдлыг бүрэн халсан, их хэмжээний тархмал кластерт зориулагдсан AIPerf хэмээх шинэ нээлттэй эхийн бенчмарк фрэймворкоо албан ёсоор танилцууллаа.
Уламжлалт хэрэгслүүд болон GenAI-Perf яагаад шаварт унав?
Вэб хөгжүүлэлтэд бид wrk, k6 эсвэл Locust ашиглан миллисекундийн латенси, RPS (requests per second) хэмждэг. Харин Large Language Model (LLM) серверүүдийн хувьд энэ арга барил огт тохирдоггүй. Учир нь LLM-ийн инференс процесс үндсэн хоёр тусдаа үе шатаас бүрддэг:
- Prefill (Prompt processing): Бүх prompt-ийг нэг дор боловсруулж KV cache үүсгэх тооцоолол ихтэй үе шат.
- Decode (Token generation): Санах ойн зурвасын өргөнөөс (memory bandwidth) шууд хамаарч, нэг нэг токеноор цувуулан үүсгэх үе шат.
Эндээс шалтгаалан энгийн HTTP хүсэлт/хариуны хугацаанаас илүүтэй TTFT (Time to First Token) буюу хэрэглэгч эхний үгээ хэр хурдан харж байгаа, болон ITL (Inter-Token Latency) буюу дараа дараагийн токен хоорондын саатал хэр бага байгаа нь хэрэглэгчийн мэдрэмжид шийдвэрлэх үүрэг гүйцэтгэдэг.
Өмнөх GenAI-Perf хэрэгсэл эдгээрийг хэмждэг байсан ч Python-ий GIL (Global Interpreter Lock) болон нэг процессийн async бүтцээс болж, клайент тал секундэд хэдэн зуун стриминг холболт үүсгэхэд CPU-ийн нэг цөм дээрээ гацаж эхэлдэг байв. Сервер уг нь бэлэн байхад хэмжигч машин өөрөө хариугаа уншиж амжилгүй саатал үүсгэж, ITL тоонууд худлаа өндөр гардаг гажиг тогтолцоо үүссэн юм.
AIPerf-ийн гол шинэчлэлтүүд
NVIDIA энэ удаад архитектурыг сууриар нь дахин загварчилжээ:
1. Multiprocess клайент архитектур
AIPerf нь хүсэлт илгээх, хариу задлах, токен тайлах (tokenization) ажлуудыг олон CPU процесс дээр хуваан гүйцэтгэдэг. Ингэснээр клайент машин өөрөө хэзээ ч bottleneck болохгүй бөгөөд олон мянган паралель холболтыг ямар ч сааталгүйгээр шахаж чадна.
2. Бодит траффик симуляци (Poisson ба Gamma тархалт)
Бодит хэрэглэгчид секунд тутамд яг 10 хүсэлт жигд явуулдаггүй. Заримдаа ачаалал гэнэт огцом өсөж (burst), дараа нь түр намддаг. AIPerf нь Poisson болон Gamma магадлалын тархалтыг ашиглан хүсэлтүүдийн ирэх интервалыг санамсаргүй боловч бодит статистикт нийцүүлэн үүсгэх боломж олгодог.
Мөн тогтмол урттай prompt явуулахын оронд оролт, гаралтын токены уртын дундаж болон стандарт хазайлтыг (--synthetic-input-tokens-mean, --synthetic-input-tokens-stddev) тохируулж болно. Энэ нь GPU-ийн KV cache менежер болон prefill/decode scheduling алгоритмыг жинхэнэ утгаар нь стресс-тестэд оруулна.
3. Production Trace Replay
Хиймэл өгөгдлөөс гадна ShareGPT, Mooncake, Baseten, WEKA AgentX зэрэг алдартай логуудын бүтцийг шууд уншуулж, үйлдвэрлэлийн бодит ачааллыг 1:1 хуулбарлан турших боломжтой.
4. GPU-ийн нарийвчилсан телеметр
Тестийн үеэр зөвхөн сүлжээний дата бус, DCGM болон pynvml сангаар дамжуулан GPU-ийн vRAM хэрэглээ, SM (Streaming Multiprocessor) ачаалал, дулаан зэргийг секунд тутамд синхрон бүртгэж тайланд нэгтгэн харуулдаг.
Goodput: Хэрэггүй датанд төсвөө үрэхгүй байх хэмжүүр
AIPerf-ийн анхаарал татах бас нэг онцлог нь Goodput буюу SLO (Service Level Objective)-д нийцсэн бүтээмжийг тооцох явдал юм.
Хэрэв танай загвар секундэд 10,000 токен үйлдвэрлэж байгаа ч хэрэглэгчийн эхний токен гарах хугацаа (TTFT) 5 секундээс давчихвал уг сервис хэрэглэгдэх боломжгүй. Goodput нь зөвхөн тогтоосон хязгаар (жишээ нь: TTFT < 200ms, ITL < 25ms гэх мэт)-ыг бүрэн хангаж ирсэн амжилттай токенуудыг л үр ашигтай бүтээмж гэж тооцдог. Энэ нь кластерын хэмжээг төлөвлөх, дэд бүтцийн зардлаа тооцоход инженерийн хамгийн чухал хэмжигдэхүүн болж байна.
Өөрийн загвар дээр хэрхэн ажиллуулах вэ?
AIPerf нь OpenAI Chat Completions API форматтай бүх сервертэй шууд нийцдэг (vLLM, TensorRT-LLM, TGI, SGLang гэх мэт).
Суулгах нь энгийн pip команд:
pip install aiperf
Жишээ нь, localhost:8000 дээр ажиллаж буй vLLM серверийг бодит хэрэглээ шиг Poisson тархалттай ачааллаар турших команд:
aiperf profile \
--model Qwen/Qwen3-0.6B \
--url localhost:8000 \
--endpoint-type chat \
--streaming \
--arrival-pattern poisson \
--synthetic-input-tokens-mean 512 \
--synthetic-input-tokens-stddev 128 \
--output-tokens-mean 128 \
--output-tokens-stddev 32
Энд --streaming тугийг заавал өгөх шаардлагатай бөгөөд ингэснээр токен бүрийн ирэх завсрыг (ITL) AIPerf нарийвчлан бүртгэнэ. Тест дуусмагц терминал дээр шууд p50, p90, p99 хувийн тархалт бүхий TTFT, ITL тайлан болон SLO амжилтын үзүүлэлт гарч ирнэ.
Дүгнэлт
AI хөгжүүлэлтийн ертөнцөд загварыг зүгээр л татаж аваад ажиллуулах үе шат ард хоцорч, инференсийн дэд бүтцийг оновчтой болгох (serving optimization), KV cache менежмент, GPU зардлыг хэмнэх чиглэл гол байр суурийг эзэлж байна. Хэмжиж чадахгүй зүйлээ сайжруулах боломжгүй. NVIDIA-ийн гаргасан AIPerf нь MLOps болон backend инженерүүдэд LLM серверийнхээ бодит чадлыг өөрсдийнхөө клайент гацаанд хуурталгүйгээр яг таг тодорхойлох боломжийг олгож байна.
Эх сурвалж: NVIDIA Technical Blog - Benchmarking LLM Inference at Scale with AIPerf
Сэтгэгдэл
Ачаалж байна...