{"id":485277,"date":"2026-06-27T16:21:47","date_gmt":"2026-06-27T16:21:47","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=485277"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=485277","title":{"rendered":"\u042f \u0443\u0441\u0442\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432 LLM \u0438 \u0441\u043e\u0431\u0440\u0430\u043b \u0445\u0430\u0440\u043d\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442 Pareto-front"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e94\/77d\/eeb\/e9477deeb37f12580fb6e16ea7f7baa2.png\" alt=\"LLM inference benchmark\" title=\"LLM inference benchmark\" width=\"1659\" height=\"948\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e94\/77d\/eeb\/e9477deeb37f12580fb6e16ea7f7baa2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e94\/77d\/eeb\/e9477deeb37f12580fb6e16ea7f7baa2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>LLM inference benchmark<\/figcaption><\/div>\n<\/figure>\n<h3>\u0421 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c<\/h3>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0431\u044d\u043a\u0435\u043d\u0434\u0435 \u0433\u043e\u043d\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u043d\u0430 vLLM, llama.cpp, ONNX Runtime \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 <code>transformers<\/code>. \u0417\u0432\u0443\u0447\u0438\u0442 \u043a\u0430\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442, \u043f\u043e\u043a\u0430 \u0442\u044b \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0447\u0435\u0441\u0442\u043d\u043e \u043c\u0435\u0440\u0438\u0442\u044c.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043c\u0435\u0440\u044f\u044e\u0442 \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0410 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0441\u0438: <strong>p95-latency<\/strong>, <strong>throughput (tok\/s)<\/strong>, <strong>\u043f\u0438\u043a\u043e\u0432\u044b\u0439 VRAM<\/strong> \u0438 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u043e\u0448\u043b\u0430 \u0441 \u0443\u043c\u0430 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. \u0418 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0437\u0432\u0443\u0447\u0430\u043b \u0442\u0430\u043a: <em>\u043a\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 \u043c\u043e\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043f\u043e \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0435\u0440\u0436\u0438\u0442 p95 \u043d\u0438\u0436\u0435 \u043f\u043e\u0440\u043e\u0433\u0430?<\/em> \u041e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u043d\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u043b \u043d\u0438\u043a\u0442\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u0438 \u043f\u0438\u0441\u0430\u043b <code>bench_v3_final_FINAL.py<\/code>.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u043e\u0441\u044c \u0448\u0442\u0443\u043a \u043f\u044f\u0442\u044c, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0440\u0438\u043b \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 (\u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0438\u0441\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f), \u044f \u0441\u0435\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u043d\u0435\u0441\u0441. \u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <a href=\"https:\/\/github.com\/Happynood\/llm-inference-benchmark\" rel=\"noopener noreferrer nofollow\"><code>llm-inference-benchmark<\/code><\/a>.<\/p>\n<h3>\u0427\u0442\u043e \u044d\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0437\u0430 \u0442\u0443\u043b\u0437\u0430<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u2014 \u044d\u0442\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0445\u0430\u0440\u043d\u0435\u0441\u0441 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u043e\u043c. \u0422\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0448\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0432 YAML, \u043e\u043d \u0433\u043e\u043d\u044f\u0435\u0442 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u043d\u044b\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u044b \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0438, \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 CSV + JSON-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043a\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445. \u0421\u0432\u0435\u0440\u0445\u0443 \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0435\u043d \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u0442\u044b\u043a\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u044b\u0439 CSV.<\/p>\n<p>\u041a\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0442\u0435\u043c, \u043a\u0442\u043e <strong>\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0431\u044d\u043a\u0435\u043d\u0434\/\u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044e<\/strong> \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e;<\/p>\n<\/li>\n<li>\n<p>\u0442\u0435\u043c, \u043a\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 <strong>\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c<\/strong> \u2014 \u0447\u0442\u043e\u0431\u044b \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0441\u044f\u0446 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0430\u0441\u044c \u0446\u0438\u0444\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0442\u0435\u043c, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 <strong>CI-\u0433\u0435\u0439\u0442 \u043d\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438<\/strong> \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435).<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u044d\u043a\u0435\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 (<code>v1.8.3<\/code>):<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0411\u044d\u043a\u0435\u043d\u0434<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0427\u0435\u043c \u0445\u043e\u0440\u043e\u0448<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>mock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u0434\u043b\u044f CI \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>transformers<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>AutoModelForCausalLM<\/code> \u043e\u0442 HF, CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>llama-cpp<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">GGUF-\u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044f, pre-built CUDA-wheel, \u0431\u0435\u0437 <code>nvcc<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>openai<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043b\u044e\u0431\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 <code>\/v1\/chat\/completions<\/code> (Ollama, LM Studio, vLLM)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>onnx<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">ONNX Runtime \u0447\u0435\u0440\u0435\u0437 Optimum, INT8\/FP16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>vllm<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">high-throughput \u0434\u0432\u0438\u0436\u043e\u043a, Linux only<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c.<\/p>\n<h3>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c: YAML, Run Matrix \u0438 Sweep<\/h3>\n<h4>\u041e\u0434\u0438\u043d \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 = \u043e\u0434\u0438\u043d YAML<\/h4>\n<p>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u2014 \u043a\u043e\u043d\u0444\u0438\u0433 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u043c\u0435\u0440\u044f\u0435\u043c:<\/p>\n<pre><code class=\"yaml\"># configs\/llama-cpp-gpu.yamlbackend: llama-cppmodel: ~\/models\/Llama-3.2-3B-Instruct-Q4_K_M.ggufrequests: 20warmup_requests: 2prompts_file: data\/prompts\/smoke.txtrepeats: 3                 # \u043c\u0435\u0434\u0438\u0430\u043d\u0430 \u00b1 std \u043f\u043e 3 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u043cllama_cpp:  n_ctx: 2048  n_gpu_layers: 99        # 99 = \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0438 \u043d\u0430 GPU; 0 = \u0442\u043e\u043b\u044c\u043a\u043e CPU  max_tokens: 50  temperature: 0.0        # greedy, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a:<\/p>\n<pre><code class=\"bash\">uv run llm-bench --config configs\/llama-cpp-gpu.yaml --output results\/run.csv<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041b\u044e\u0431\u043e\u0435 \u043f\u043e\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0437 CLI, \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044f YAML \u2014 \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"bash\">uv run llm-bench --config configs\/llama-cpp-gpu.yaml \\  --set llama_cpp.n_gpu_layers=20 --requests 50 --seed 42<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>Run Matrix: \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0438<\/h4>\n<p>\u041e\u0434\u0438\u043d \u043f\u0440\u043e\u0433\u043e\u043d \u2014 \u044d\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e. \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043a\u0430\u043a \u00ab\u0430 \u0441\u0440\u0430\u0432\u043d\u0438-\u043a\u0430 \u043c\u043d\u0435 \u0432\u043e\u0442 \u044d\u0442\u0438 \u043f\u044f\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432\u00bb. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0430. \u0412 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0441 \u043e\u0431\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432:<\/p>\n<pre><code class=\"yaml\">results_dir: resultsruns:  - name: quant-q4km    config: configs\/llama-cpp-q4km-best.yaml  - name: quant-q8    config: configs\/llama-cpp-q8-best.yaml<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"bash\">llm-bench matrix --config configs\/llama-cpp-quant-compare.yaml<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0434\u0430\u0435\u0442 <strong>\u0441\u0432\u043e\u0439 CSV \u0438 \u0441\u0432\u043e\u0439 JSON-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442<\/strong> \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0442\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u0438\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f (\u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0443\u0442\u0435\u0439 \u0438 <code>..\/<\/code> \u0432 <code>name<\/code>, \u0438\u043d\u0430\u0447\u0435 \u0441\u043b\u043e\u0432\u0438\u0448\u044c <code>ValueError<\/code> \u0435\u0449\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0430 \u043d\u0435 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0447\u0430\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430).<\/p>\n<h4>Sweep: \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438<\/h4>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e, \u044f\u0432\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e. \u0422\u0443\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f <code>sweep<\/code> \u2014 \u0442\u044b \u0437\u0430\u0434\u0430\u0435\u0448\u044c \u043e\u0441\u0438, \u0430 \u0445\u0430\u0440\u043d\u0435\u0441\u0441 \u0441\u0430\u043c \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 <strong>cartesian product<\/strong>:<\/p>\n<pre><code class=\"yaml\"># n_gpu_layers \u00d7 n_ctx \u2192 3 \u00d7 2 = 6 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e base-\u043a\u043e\u043d\u0444\u0438\u0433\u0430base_config: configs\/llama-cpp-gpu.yamlresults_dir: resultssweep:  llama_cpp.n_gpu_layers: [0, 20, 99]  llama_cpp.n_ctx: [512, 2048]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"bash\"># \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0442\u0441\u044f, \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f:llm-bench matrix --config configs\/llama-cpp-sweep.yaml --dry-run<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e <code>itertools.product<\/code> \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043d\u043e \u0441 \u043f\u0430\u0440\u043e\u0439 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u0435\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b:<\/p>\n<ul>\n<li>\n<p><strong>dot-path \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/strong> <code>llama_cpp.n_gpu_layers<\/code> \u0441\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 pydantic-\u043c\u043e\u0434\u0435\u043b\u0438. \u041e\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0441\u044f \u0432 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044f \u2014 \u0443\u0437\u043d\u0430\u0435\u0448\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0447\u0430\u0441, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0433\u043e\u043d \u0442\u0438\u0445\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u0432\u043e\u0439 \u00ab\u043e\u0432\u0435\u0440\u0440\u0430\u0439\u0434\u00bb.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b<\/strong> \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (<code>sweep-n_gpu_layers-99-n_ctx-2048<\/code>). \u0415\u0441\u043b\u0438 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0438\u043c\u044f \u2014 \u0445\u0430\u0440\u043d\u0435\u0441\u0441 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0441\u0438\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u044f\u0432\u043d\u044b\u0439 <code>runs:<\/code>, \u0430 \u043d\u0435 \u043c\u043e\u043b\u0447\u0430 \u0437\u0430\u0442\u0438\u0440\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d30\/bc4\/340\/d30bc43402d08e9b3bd0b048d28207a8.png\" alt=\"CLI: \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (--dry-run)\" title=\"CLI: \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (--dry-run)\" width=\"900\" height=\"389\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d30\/bc4\/340\/d30bc43402d08e9b3bd0b048d28207a8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d30\/bc4\/340\/d30bc43402d08e9b3bd0b048d28207a8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>CLI: \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (<code>--dry-run<\/code>)<\/figcaption><\/div>\n<\/figure>\n<p>\u0413\u043b\u0443\u0431\u0438\u043d\u0443 \u043e\u0432\u0435\u0440\u0440\u0430\u0439\u0434\u043e\u0432 \u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b \u0434\u0432\u0443\u043c\u044f \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 (<code>\u0441\u0435\u043a\u0446\u0438\u044f.\u043f\u043e\u043b\u0435<\/code>). \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e, \u043d\u043e \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c. \u041b\u0443\u0447\u0448\u0435 \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0447\u0443\u0442\u044c \u0436\u0435\u0441\u0442\u0447\u0435, \u0437\u0430\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e.<\/p>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430: Pareto \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0443\u043c\u0430\u0435\u0442 \u0437\u0430 \u0442\u0435\u0431\u044f<\/h3>\n<p>\u041e\u043a\u0435\u0439, \u043c\u044b \u043d\u0430\u0433\u0435\u043d\u0435\u0440\u0438\u043b\u0438 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c CSV. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<h4>Pareto: \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438<\/h4>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u00ab\u043d\u0430 \u0433\u043b\u0430\u0437\u00bb \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0435\u043c\u0438 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u2014 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e <strong>\u0434\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u043e \u041f\u0430\u0440\u0435\u0442\u043e<\/strong>.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433 <strong>A \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0434 B<\/strong>, \u0435\u0441\u043b\u0438 A \u043d\u0435 \u0445\u0443\u0436\u0435 B \u043f\u043e <em>\u043a\u0430\u0436\u0434\u043e\u0439<\/em> \u043c\u0435\u0442\u0440\u0438\u043a\u0435 \u0438 \u0441\u0442\u0440\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u0439. \u0412\u0441\u0435, \u0447\u0442\u043e \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u2014 \u044d\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442: \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0445\u0443\u0436\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u0444\u0440\u043e\u043d\u0442\u0430\u043c. \u041e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <strong>Pareto-\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435<\/strong> \u0442\u043e\u0447\u043a\u0438 \u2014 \u0444\u0440\u043e\u043d\u0442 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u0432, \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0448\u0438\u0442\u044b \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c:<\/strong> p95-latency, VRAM, perplexity, \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438, TTFT;<\/p>\n<\/li>\n<li>\n<p><strong>\u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c:<\/strong> tok\/s, sanity-rate, task-quality, judge-score.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0433\u043e\u0440\u0436\u0443\u0441\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b: <strong>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0443\u0436\u0430\u044e\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u0440\u043e\u043d\u044f\u044e\u0442 \u0435\u0433\u043e<\/strong>. \u0415\u0441\u043b\u0438 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043d\u0435\u0442, \u0441\u043a\u0430\u0436\u0435\u043c, perplexity (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u044d\u043a\u0435\u043d\u0434 \u0435\u0435 \u043d\u0435 \u043e\u0442\u0434\u0430\u0435\u0442), \u044d\u0442\u0430 \u043e\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u043f\u0430\u0440\u044b \u2014 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u0440\u0430\u0448\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u043b\u0438 \u0448\u0442\u0440\u0430\u0444\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0443\u043b\u0435\u043c. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u0448\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u0443 \u043a\u0443\u0447\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441 <code>transformers<\/code> (\u0433\u0434\u0435 \u0435\u0441\u0442\u044c perplexity \u0438 judge) \u0438 \u0441 <code>llama-cpp<\/code> (\u0433\u0434\u0435 \u0438\u0445 \u043d\u0435\u0442), \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u0441\u044f.<\/p>\n<pre><code class=\"bash\">llm-bench pareto results\/*.csv<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2c4\/a59\/8ed\/2c4a598ed9e534252587f8a4c2fd6f02.png\" alt=\"CLI: \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e \u041f\u0430\u0440\u0435\u0442\u043e\" title=\"CLI: \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e \u041f\u0430\u0440\u0435\u0442\u043e\" width=\"1020\" height=\"414\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2c4\/a59\/8ed\/2c4a598ed9e534252587f8a4c2fd6f02.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2c4\/a59\/8ed\/2c4a598ed9e534252587f8a4c2fd6f02.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>CLI: \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e \u041f\u0430\u0440\u0435\u0442\u043e<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/625\/f05\/fda\/625f05fda94a1d593fbe131344934808.png\" alt=\"Web UI: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (\u0394% \u043a \u0431\u0430\u0437\u0435)\" title=\"Web UI: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (\u0394% \u043a \u0431\u0430\u0437\u0435)\" width=\"1440\" height=\"814\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/625\/f05\/fda\/625f05fda94a1d593fbe131344934808.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/625\/f05\/fda\/625f05fda94a1d593fbe131344934808.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Web UI: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (\u0394% \u043a \u0431\u0430\u0437\u0435)<\/figcaption><\/div>\n<\/figure>\n<p><em>\u0427\u0438\u0441\u043b\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 \u0441\u043d\u044f\u0442\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445, \u043e\u0442\u0441\u044e\u0434\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u0431\u0440\u043e\u0441 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u043e\u043d\u0443 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442<\/em>.<\/p>\n<h4>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0442\u0435\u043b\u044c: \u00ab\u0434\u0430\u0439 \u043c\u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u043f\u043e\u0434 \u043c\u043e\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u00bb<\/h4>\n<p>Pareto-\u0444\u0440\u043e\u043d\u0442 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0433 \u2014 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0445\u0430\u0440\u043d\u0435\u0441\u0441\u0443 \u0441\u0432\u043e\u0438 \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0438 \u043f\u0443\u0441\u0442\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0430\u043c:<\/p>\n<pre><code class=\"bash\">llm-bench recommend results\/*.csv \\  --max-vram-mb 4096 \\  --max-p95-ms 1000 \\  --max-ttft-ms 200 \\  --min-sanity 1.0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u0432 \u0442\u0440\u0438 \u0448\u0430\u0433\u0430, \u0431\u0435\u0437 \u043c\u0430\u0433\u0438\u0438:<\/p>\n<ol>\n<li>\n<p><strong>\u0424\u0438\u043b\u044c\u0442\u0440.<\/strong> \u0412\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0442 \u0445\u043e\u0442\u044c \u043e\u0434\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438\u0447\u0435\u043c \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u2014 \u0435\u0441\u043b\u0438 \u043f\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u0430 \u0443 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u044d\u0442\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0442 (\u043d\u0435 \u043f\u043e\u043c\u0435\u0440\u0438\u043b\u0438), \u043e\u043d \u0442\u043e\u0436\u0435 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442. \u041d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c VRAM, \u0430 \u044f \u043f\u0440\u043e\u0441\u0438\u043b <code>--max-vram-mb<\/code>? \u0418\u0437\u0432\u0438\u043d\u0438, \u0432 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u043d\u0435 \u0431\u0435\u0440\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>Pareto \u0441\u0440\u0435\u0434\u0438 \u0432\u044b\u0436\u0438\u0432\u0448\u0438\u0445.<\/strong> \u0418\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0440\u043e\u0448\u0435\u043b \u0444\u0438\u043b\u044c\u0442\u0440, \u0431\u0435\u0440\u0435\u043c Pareto-\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>Tiebreak \u043f\u043e p95.<\/strong> \u0415\u0441\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u2014 \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0437\u043a\u0438\u0439 p95.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418 \u2014 \u0442\u043e, \u0447\u0442\u043e \u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0446\u0435\u043d\u044e \u2014 \u043e\u043d <strong>\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430<\/strong>:<\/p>\n<pre><code>Recommendation__________________________________________________Backend  : transformersModel    : gpt2-mediumN        : 10p95      : 512.02 mstok\/s    : 104.1Load     : 9015.0 msTTFT p50 : 10.8 msVRAM     : 875.0 MBSanity   : 100.0%Task Q   : N\/APPL      : N\/AJudge    : N\/AWhy: lowest p95 among 1 candidate(s) passing all constraints; Pareto-optimal.Excluded (3)__________________________________________________  llama-cpp Llama-3.2-3B-Instruct-Q4_K_M.gguf \u2192 VRAM too high (2361.0 MB &gt; 1000.0 MB)  llama-cpp Llama-3.2-3B-Instruct-Q8_0.gguf \u2192 VRAM too high (3697.0 MB &gt; 1000.0 MB)  llama-cpp Bonsai-8B.gguf \u2192 VRAM too high (1499.0 MB &gt; 1000.0 MB)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u00ab\u0434\u043e\u0432\u0435\u0440\u044c\u0441\u044f \u043c\u043d\u0435, \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u00bb. \u0412\u0438\u0434\u043d\u043e, \u043a\u043e\u0433\u043e \u0432\u044b\u043a\u0438\u043d\u0443\u043b\u0438 \u0438 \u0437\u0430 \u0447\u0442\u043e.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cf5\/c31\/337\/cf5c3133755f79e5c95022273c09c391.png\" alt=\"Web UI: \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\" title=\"Web UI: \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\" width=\"1440\" height=\"814\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/cf5\/c31\/337\/cf5c3133755f79e5c95022273c09c391.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cf5\/c31\/337\/cf5c3133755f79e5c95022273c09c391.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Web UI: \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bb0\/20e\/a03\/bb020ea037117e1590026b06e1c8d0ca.png\" alt=\"CLI: \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\" title=\"CLI: \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\" width=\"920\" height=\"594\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bb0\/20e\/a03\/bb020ea037117e1590026b06e1c8d0ca.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bb0\/20e\/a03\/bb020ea037117e1590026b06e1c8d0ca.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>CLI: \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<h3>\u041d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438: \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u0430, \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043b\u043e\u043c\u0430\u043b\u0430\u0441\u044c<\/h3>\n<p>\u042d\u0442\u043e \u0442\u0430 \u0447\u0430\u0441\u0442\u044c, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0438 \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0435\u043f\u043e\u043b\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443.<\/p>\n<h4>Sanity checks: \u0430 \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0447\u0442\u043e-\u0442\u043e \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u043b\u043e?<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u0442\u044c throughput \u0434\u043e \u043a\u043e\u0441\u043c\u043e\u0441\u0430, \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043b\u0438 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0442\u043e\u043a\u0435\u043d\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><code>empty_output_count<\/code> \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043f\u0443\u0441\u0442\u044b\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p><code>min_output_chars<\/code> \/ <code>mean_output_chars<\/code> \u2014 \u0434\u043b\u0438\u043d\u044b \u043e\u0442\u0432\u0435\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p><code>repeated_output_count<\/code> \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430;<\/p>\n<\/li>\n<li>\n<p><code>sanity_pass_rate<\/code> \u2014 \u0434\u043e\u043b\u044f \u043d\u0435\u043f\u0443\u0441\u0442\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432, \u0432 <code>[0.0, 1.0]<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0437\u0430\u0448\u0438\u043b \u043f\u0440\u044f\u043c\u043e \u0432 \u0434\u043e\u043a\u0441\u0442\u0440\u0438\u043d\u0433: \u043f\u0440\u0438 <code>temperature=0.0<\/code> \u0438 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\u043a\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432 <strong>\u043f\u043e\u0432\u0442\u043e\u0440\u044b \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b<\/strong>. \u0422\u0430\u043a \u0447\u0442\u043e <code>repeated_output_count<\/code> \u2014 \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u0433\u043e\u0432\u043e\u0440. \u042d\u0442\u043e \u043d\u0435 \u043e\u0446\u0435\u043d\u043a\u0430 \u0441\u043c\u044b\u0441\u043b\u0430, \u044d\u0442\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c, \u043f\u043e\u043a\u0430 \u043c\u044b \u0440\u0430\u0434\u043e\u0441\u0442\u043d\u043e \u043c\u0435\u0440\u0438\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/p>\n<h4>Task-quality, perplexity \u0438 LLM-as-judge<\/h4>\n<p>\u041a\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u043e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0435\u0435 \u2014 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0443\u0440\u043e\u0432\u043d\u044f:<\/p>\n<ul>\n<li>\n<p><code><strong>quality_file:<\/strong><\/code> \u2014 YAML-\u0440\u0443\u0431\u0440\u0438\u043a\u0430 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 <code>contains_all<\/code>, <code>regex<\/code>, <code>forbidden<\/code>. \u0422\u0443\u043f\u043e, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>Self-perplexity<\/strong> \u2014 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043b\u043e\u0433\u0438\u0442\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>LLM-as-judge<\/strong> \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043e\u0434\u0438\u043d forward-pass \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u00ab\u0434\u0430\/\u043d\u0435\u0442\u00bb \u043d\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u0441\u0432\u043e\u0435\u043c \u0436\u0435 \u043e\u0442\u0432\u0435\u0442\u0435, \u0430 score \u2014 \u044d\u0442\u043e <code>P(yes)<\/code>, \u0432\u044b\u0442\u0430\u0449\u0435\u043d\u043d\u0430\u044f \u0438\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043b\u043e\u0433\u0438\u0442\u043e\u0432 <code>Yes<\/code>\/<code>No<\/code> \u0447\u0435\u0440\u0435\u0437 2-way softmax (\u043f\u043e \u0441\u0443\u0442\u0438 <code>sigmoid(yes \u2212 no)<\/code>).<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0447\u0443, \u0431\u0435\u0437 \u0438\u043b\u043b\u044e\u0437\u0438\u0439: judge \u0442\u0443\u0442 \u2014 \u044d\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c, \u0441\u0443\u0434\u044f\u0449\u0430\u044f \u0441\u0430\u043c\u0443 \u0441\u0435\u0431\u044f \u043e\u0434\u043d\u0438\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c. \u042d\u0442\u043e <strong>\u043d\u0435 \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f preference-\u043c\u043e\u0434\u0435\u043b\u044c<\/strong> \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435. \u042f \u0434\u0435\u0440\u0436\u0443 \u044d\u0442\u043e \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0430 \u043d\u0435 \u043a\u0430\u043a \u0438\u0441\u0442\u0438\u043d\u0443 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0438. Perplexity \u0438 judge, \u043a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u043a\u0430 \u0436\u0438\u0432\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435 <code>transformers<\/code> \u2014 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u043e\u043a\u0435\u043d-\u043b\u0435\u0432\u0435\u043b \u043b\u043e\u0433\u0438\u0442\u0430\u043c, \u0430 \u0443 GGUF \u0447\u0435\u0440\u0435\u0437 llama.cpp \u0435\u0433\u043e \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u043e\u0437\u044c\u043c\u0435\u0448\u044c.<\/p>\n<h4>Energy efficiency: tokens per Joule<\/h4>\n<p>\u0421\u0430\u043c\u0430\u044f \u043c\u043e\u044f \u043b\u044e\u0431\u0438\u043c\u0430\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e \u043d\u0435\u0435 \u0432\u0441\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442. Throughput \u2014 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433 A \u043d\u0430 10% \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 B, \u0430 \u0436\u0440\u0435\u0442 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0430\u0442\u0442, \u0442\u043e \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0441 \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 GPU \u044d\u0442\u043e \u00ab\u0447\u0443\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435\u00bb \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0441\u0447\u0435\u0442 \u0437\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043e.<\/p>\n<p>\u041c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0437\u0430\u0445\u043e\u0434\u0430:<\/p>\n<ol>\n<li>\n<p><strong>GPU \u0447\u0435\u0440\u0435\u0437 <\/strong><code><strong>nvidia-smi<\/strong><\/code><strong>.<\/strong> \u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u043b\u043b\u0438\u0442 <code>power.draw<\/code> \u043a\u0430\u0436\u0434\u044b\u0435 0.5 \u0441, \u0432 \u043a\u043e\u043d\u0446\u0435 \u0431\u0435\u0440\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043a\u043d\u0430 \u2192 \u0434\u0436\u043e\u0443\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>CPU \u0447\u0435\u0440\u0435\u0437 Intel RAPL.<\/strong> \u0427\u0438\u0442\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a <code>energy_uj<\/code> \u0438\u0437 <code>\/sys\/class\/powercap\/...<\/code> \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u0435, \u0431\u0435\u0440\u0435\u043c \u0434\u0435\u043b\u044c\u0442\u0443. \u0422\u0443\u0442 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 (\u043e\u043d \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439) \u2014 \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u044c\u0442\u0430 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <code>max_energy_range_uj<\/code>. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 edge-case, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u043e\u0432\u0438\u0448\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u043b\u0433\u0438\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u0434\u0430\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u044d\u043d\u0435\u0440\u0433\u0438\u044e \u0438 \u0442\u044b \u0441\u0438\u0434\u0438\u0448\u044c \u0438 \u0434\u0443\u043c\u0430\u0435\u0448\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0440\u0443\u0448\u0438\u043b \u0437\u0430\u043a\u043e\u043d\u044b \u0442\u0435\u0440\u043c\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u2014 <code>energy_joules<\/code> \u0438 <code>tokens_per_joule<\/code>. \u0415\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u2014 \u0442\u0430\u043c \u0447\u0435\u0441\u0442\u043d\u044b\u0439 <code>None<\/code>, \u0430 \u043d\u0435 \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 \u043d\u043e\u043b\u044c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a82\/b61\/863\/a82b61863a71e2cb4322bf8596d519cb.png\" alt=\"\u0413\u0440\u0430\u0444\u0438\u043a: tokens\/joule \u043f\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u043c (gpt2-medium \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043c\u0435\u0436\u0431\u044d\u043a\u0435\u043d\u0434\u043d\u044b\u0439 tok\/J \u0437\u0434\u0435\u0441\u044c \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430)\" title=\"\u0413\u0440\u0430\u0444\u0438\u043a: tokens\/joule \u043f\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u043c (gpt2-medium \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043c\u0435\u0436\u0431\u044d\u043a\u0435\u043d\u0434\u043d\u044b\u0439 tok\/J \u0437\u0434\u0435\u0441\u044c \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430)\" width=\"1350\" height=\"690\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a82\/b61\/863\/a82b61863a71e2cb4322bf8596d519cb.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a82\/b61\/863\/a82b61863a71e2cb4322bf8596d519cb.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0413\u0440\u0430\u0444\u0438\u043a: tokens\/joule \u043f\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u043c (gpt2-medium \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043c\u0435\u0436\u0431\u044d\u043a\u0435\u043d\u0434\u043d\u044b\u0439 tok\/J \u0437\u0434\u0435\u0441\u044c \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430)<\/figcaption><\/div>\n<\/figure>\n<h3>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u043d\u0435 \u00ab\u0442\u0443\u043b\u0437\u0430 \u0440\u0430\u0434\u0438 \u0442\u0443\u043b\u0437\u044b\u00bb, \u0432\u043e\u0442 \u0436\u0438\u0432\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430 \u2014 <strong>RTX 3050 Laptop (4 GB)<\/strong>, Llama 3.2 3B Instruct, llama.cpp, \u0432\u0441\u0435 28 \u0441\u043b\u043e\u0435\u0432 \u043d\u0430 GPU:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u041a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">p50 (ms)<\/p>\n<\/td>\n<td>\n<p align=\"left\">p95 (ms)<\/p>\n<\/td>\n<td>\n<p align=\"left\">tok\/s<\/p>\n<\/td>\n<td>\n<p align=\"left\">VRAM (MiB)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Sanity<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Q4_K_M<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>899<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>910<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>55.6<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">2361 (58%)<\/p>\n<\/td>\n<td>\n<p align=\"left\">100%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Q8_0<\/p>\n<\/td>\n<td>\n<p align=\"left\">1186<\/p>\n<\/td>\n<td>\n<p align=\"left\">1210<\/p>\n<\/td>\n<td>\n<p align=\"left\">41.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">3697 (90%)<\/p>\n<\/td>\n<td>\n<p align=\"left\">100%<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Q4_K_M \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0432 1.33\u00d7 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u0435\u0441\u0442 \u0432 1.57\u00d7 \u043c\u0435\u043d\u044c\u0448\u0435 VRAM<\/strong> \u043f\u0440\u0438 \u0442\u043e\u0439 \u0436\u0435 sanity. \u041d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0441 4 \u0413\u0411 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u00ab\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c\u00bb \u0438 \u00ab\u0432\u043f\u0440\u0438\u0442\u044b\u043a\u00bb.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441\u0432\u0438\u043f \u043f\u043e <code>n_gpu_layers<\/code> \u2014 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u0430\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043b\u043e\u0435\u0432 \u044d\u0442\u043e \u043b\u043e\u0432\u0443\u0448\u043a\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043b\u043e\u0435\u0432 \u043d\u0430 GPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">p95 (ms)<\/p>\n<\/td>\n<td>\n<p align=\"left\">tok\/s<\/p>\n<\/td>\n<td>\n<p align=\"left\">VRAM (MiB)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">0 \/ 28 (\u0442\u043e\u043b\u044c\u043a\u043e CPU)<\/p>\n<\/td>\n<td>\n<p align=\"left\">3093<\/p>\n<\/td>\n<td>\n<p align=\"left\">17.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">655<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">20 \/ 28 (\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e)<\/p>\n<\/td>\n<td>\n<p align=\"left\">1420<\/p>\n<\/td>\n<td>\n<p align=\"left\">36.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">1829<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>28 \/ 28 (\u0432\u0441\u0435 \u043d\u0430 GPU)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>984<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>51.4<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">2361<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u043b\u043d\u0430\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u2014 <strong>\u0432 3.1\u00d7 \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong>, \u0447\u0435\u043c \u0447\u0438\u0441\u0442\u044b\u0439 CPU.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f69\/b52\/3c3\/f69b523c393d4124474d4e294fbf0c03.png\" alt=\"Web UI: \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a (\u0432\u044b\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435)\" title=\"Web UI: \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a (\u0432\u044b\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435)\" width=\"1440\" height=\"814\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f69\/b52\/3c3\/f69b523c393d4124474d4e294fbf0c03.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f69\/b52\/3c3\/f69b523c393d4124474d4e294fbf0c03.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Web UI: \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a (\u0432\u044b\u0448\u0435 \u2014 \u043b\u0443\u0447\u0448\u0435)<\/figcaption><\/div>\n<\/figure>\n<h3>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c: JSON-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/h3>\n<p>\u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442 \u0445\u0430\u0440\u043d\u0435\u0441\u0441 \u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435. \u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u043f\u0438\u0448\u0435\u0442\u0441\u044f JSON-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u043d\u0430 \u0440\u0435\u0432\u044c\u044e:<\/p>\n<ul>\n<li>\n<p><strong>git-\u043a\u043e\u043c\u043c\u0438\u0442 \u0438 <\/strong><code><strong>git_dirty<\/strong><\/code> \u2014 \u0431\u044b\u043b \u043b\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0433\u0440\u044f\u0437\u043d\u044b\u043c \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0433\u043e\u043d\u0430;<\/p>\n<\/li>\n<li>\n<p><strong>SHA-256 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0438 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432<\/strong> \u2014 \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u0435\u0440\u0438\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0434\u0443\u043c\u0430\u043b\u0438;<\/p>\n<\/li>\n<li>\n<p><strong>\u043f\u043e\u043b\u043d\u044b\u0439 \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/strong> \u2014 Python, OS, CPU, \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0438\u043c\u044f GPU, \u043e\u0431\u044a\u0435\u043c VRAM, \u0432\u0435\u0440\u0441\u0438\u0438 torch\/transformers\/vllm.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u044d\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u00ab\u043c\u044f\u0433\u043a\u043e\u00bb: \u043d\u0430 CPU-only \u043c\u0430\u0448\u0438\u043d\u0435 \u0431\u0435\u0437 <code>nvidia-smi<\/code> \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0437\u0430\u043f\u0438\u0448\u0435\u0442\u0441\u044f, \u043f\u0440\u043e\u0441\u0442\u043e GPU-\u043f\u043e\u043b\u044f \u0431\u0443\u0434\u0443\u0442 <code>None<\/code>. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430 CI \u043d\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b.<\/p>\n<h3>\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430 \u0434\u0432\u0435 \u043c\u0438\u043d\u0443\u0442\u044b<\/h3>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0443\u0442\u044c \u2014 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0438 \u043a\u043b\u0438\u043a\u0430\u0442\u044c:<\/p>\n<pre><code class=\"bash\">pip install git+https:\/\/github.com\/Happynood\/llm-inference-benchmark.gitllm-bench serve# http:\/\/localhost:8080 \u2192 \u0436\u043c\u0435\u043c \"+ New Run\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d59\/7b0\/733\/d597b07332f33d7d9ebfbe320d89606b.png\" alt=\"Web UI: \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432\" title=\"Web UI: \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432\" width=\"1440\" height=\"814\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d59\/7b0\/733\/d597b07332f33d7d9ebfbe320d89606b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d59\/7b0\/733\/d597b07332f33d7d9ebfbe320d89606b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Web UI: \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b9f\/2bb\/c94\/b9f2bbc9404b56420df8c96d78985809.png\" alt=\"Web UI: \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\" title=\"Web UI: \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\" width=\"1440\" height=\"814\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b9f\/2bb\/c94\/b9f2bbc9404b56420df8c96d78985809.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b9f\/2bb\/c94\/b9f2bbc9404b56420df8c96d78985809.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Web UI: \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0433\u043e\u043d\u0430<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/981\/663\/5fd\/9816635fd0fb85d94f63d3f4ff8cc481.png\" alt=\"Web UI: \u0444\u043e\u0440\u043c\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430\" title=\"Web UI: \u0444\u043e\u0440\u043c\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430\" width=\"1440\" height=\"814\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/981\/663\/5fd\/9816635fd0fb85d94f63d3f4ff8cc481.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/981\/663\/5fd\/9816635fd0fb85d94f63d3f4ff8cc481.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Web UI: \u0444\u043e\u0440\u043c\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u043b\u0438 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 <code>uv<\/code> (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442):<\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/Happynood\/llm-inference-benchmarkcd llm-inference-benchmarkuv sync &amp;&amp; uv run llm-bench serve<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421 GPU (NVIDIA, CUDA 12.x, <code><strong>nvcc<\/strong><\/code><strong> \u043d\u0435 \u043d\u0443\u0436\u0435\u043d<\/strong> \u2014 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f pre-built wheel):<\/p>\n<pre><code class=\"bash\">make setup-gpu     # \u0434\u0435\u0442\u0435\u043a\u0442 GPU + CUDA-wheel + \u043f\u0440\u043e\u043a\u0438\u0434\u043a\u0430 runtime-\u043b\u0438\u0431make webui-gpu     # \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043d\u0430 :8080<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f CI \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u0439\u0442 \u043d\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438 \u2014 \u043f\u0430\u0434\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u043b\u044e\u0431\u0430\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u043f\u0440\u043e\u0441\u0435\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043d\u0430 N%:<\/p>\n<pre><code class=\"bash\">llm-bench diff results\/before.csv results\/after.csv --fail-on-regression 5<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0433\u043e, \u0435\u0441\u0442\u044c live-\u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433 stdout \u0447\u0435\u0440\u0435\u0437 Server-Sent Events (\u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0433\u043e\u043d), \u0432\u043a\u043b\u0430\u0434\u043a\u0430 Recommend \u0441 \u0444\u043e\u0440\u043c\u043e\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 Pareto-scatter \u043d\u0430 Plotly \u0441 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043e\u0441\u0435\u0439.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3e8\/380\/363\/3e83803639a840faaf5b33e0fc16b046.png\" alt=\"Web UI: Pareto-\u0447\u0430\u0440\u0442 (\u043e\u0441\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f, \u0444\u0440\u043e\u043d\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0435\u043d)\" title=\"Web UI: Pareto-\u0447\u0430\u0440\u0442 (\u043e\u0441\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f, \u0444\u0440\u043e\u043d\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0435\u043d)\" width=\"1440\" height=\"814\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/3e8\/380\/363\/3e83803639a840faaf5b33e0fc16b046.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3e8\/380\/363\/3e83803639a840faaf5b33e0fc16b046.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Web UI: Pareto-\u0447\u0430\u0440\u0442 (\u043e\u0441\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f, \u0444\u0440\u043e\u043d\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0435\u043d)<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/703\/e2c\/72a\/703e2c72a6d9faee8a314d11d52f451f.png\" alt=\"Web UI: \u043b\u0438\u0434\u0435\u0440\u0431\u043e\u0440\u0434\" title=\"Web UI: \u043b\u0438\u0434\u0435\u0440\u0431\u043e\u0440\u0434\" width=\"1440\" height=\"814\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/703\/e2c\/72a\/703e2c72a6d9faee8a314d11d52f451f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/703\/e2c\/72a\/703e2c72a6d9faee8a314d11d52f451f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Web UI: \u043b\u0438\u0434\u0435\u0440\u0431\u043e\u0440\u0434<\/figcaption><\/div>\n<\/figure>\n<h3>\u0427\u0435\u0441\u0442\u043d\u043e \u043e \u043a\u043e\u0441\u0442\u044b\u043b\u044f\u0445 \u0438 \u043f\u043b\u0430\u043d\u0430\u0445<\/h3>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u043e\u0431\u0435\u0449\u0430\u043b \u0431\u0435\u0437 \u0433\u043b\u044f\u043d\u0446\u0430 \u2014 \u0432\u043e\u0442 \u0447\u0442\u043e \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p><strong>CUDA 12\/13 \u0438 pre-built wheel.<\/strong> \u0427\u0442\u043e\u0431\u044b cu124-wheel \u0437\u0430\u0432\u0435\u043b\u0441\u044f \u043d\u0430 \u0441\u0432\u0435\u0436\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0443\u043a\u0430\u043c\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c <code>LD_LIBRARY_PATH<\/code> \u0438\u0437 <code>nvidia\/*.so<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 venv. \u042d\u0442\u043e \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 \u0442\u0430\u043d\u0446\u044b \u0441 \u0431\u0443\u0431\u043d\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u043f\u0440\u044f\u0442\u0430\u043b \u0432 <code>make<\/code>-\u0442\u0430\u0440\u0433\u0435\u0442, \u043d\u043e \u043e\u0441\u0430\u0434\u043e\u0447\u0435\u043a \u043e\u0441\u0442\u0430\u043b\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><code><strong>peak_cuda_memory_mb = 0.0<\/strong><\/code><strong> \u0443 llama.cpp.<\/strong> \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0432\u043e\u0439 CUDA-\u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440, \u0430 \u043d\u0435 PyTorch\u2019\u0435\u0432\u0441\u043a\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0438\u0437 torch \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u043e\u043b\u044c. \u0420\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0440\u0430\u0442\u044c \u0438\u0437 <code>peak_vram_memory_mb<\/code> (\u043f\u043e\u043b\u043b\u0438\u043d\u0433 <code>nvidia-smi<\/code>). \u0413\u0440\u0430\u0431\u043b\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442 \u0434\u0432\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>TTFT \u0442\u043e\u043b\u044c\u043a\u043e \u0432 streaming-\u0440\u0435\u0436\u0438\u043c\u0435<\/strong>, \u0430 perplexity \u0438 judge \u2014 \u0442\u043e\u043b\u044c\u043a\u043e <code>transformers<\/code>. \u042d\u0442\u043e \u043d\u0435 \u043b\u0435\u043d\u044c, \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432, \u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u043e \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043f\u043b\u0430\u043d\u0430\u0445 \u2014 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432 (\u043f\u0440\u0438\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0441\u044c \u043a TensorRT-LLM \u0438 SGLang) \u0438 \u0434\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043c\u0438\u043d\u0430\u0446\u0438\u044f-\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\u0445 (<code>wildchat<\/code>, <code>gsm8k<\/code>, <code>humaneval<\/code> \u0443\u0436\u0435 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u043a\u0430\u043a \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0432\u0435\u0434\u0435\u043d\u043e).<\/p>\n<h3>\u0412\u043e\u043f\u0440\u043e\u0441 \u043a \u0437\u0430\u043b\u0443<\/h3>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043c\u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043c\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u0445, \u043a\u0442\u043e \u0433\u043e\u043d\u044f\u0435\u0442 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0432 \u043f\u0440\u043e\u0434\u0435.<\/p>\n<p><strong>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c <\/strong><code><strong>tokens_per_joule<\/strong><\/code><strong> \u043c\u0435\u0436\u0434\u0443 \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u043c\u0438?<\/strong> \u0423 llama.cpp \u0441\u0432\u043e\u0439 CUDA-\u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440, vLLM \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 VRAM \u043f\u043e\u0434 KV-\u043a\u044d\u0448, <code>transformers<\/code> \u0436\u0438\u0432\u0435\u0442 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 \u2014 \u0438 <code>nvidia-smi power.draw<\/code> \u043c\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u044b, \u0430 \u043d\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043d\u0430 \u0448\u0443\u043c\u043d\u043e\u043c GPU (\u0433\u0434\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0435) \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u044b\u043a\u0432\u0443.<\/p>\n<p>\u042f \u0432\u0438\u0436\u0443 \u0442\u0440\u0438 \u043f\u0443\u0442\u0438: (\u0430) \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0439 GPU \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043c\u0435\u0440\u0430, (\u0431) \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c idle-baseline \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438, (\u0432) \u0437\u0430\u0431\u0438\u0442\u044c \u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u043d\u0435\u0440\u0433\u0438\u044e \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0447\u0442\u043e-\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442.<\/p>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u0435\u0440\u044f\u0435\u0442\u0435 \u044d\u043d\u0435\u0440\u0433\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u2014 \u0438 \u043c\u0435\u0440\u044f\u0435\u0442\u0435 \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435? \u041d\u0435 \u0434\u0435\u043b\u0430\u044e \u043b\u0438 \u044f \u043e\u0448\u0438\u0431\u043a\u0443, \u0441\u0447\u0438\u0442\u0430\u044f p95 \u043f\u0440\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 concurrency, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0440\u0435\u0430\u043b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 open-loop \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c arrival-rate? \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043a\u0430\u043a \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e.<\/p>\n<hr\/>\n<p><em>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: <\/em><a href=\"https:\/\/github.com\/Happynood\/llm-inference-benchmark\" rel=\"noopener noreferrer nofollow\"><em>github.com\/Happynood\/llm-inference-benchmark<\/em><\/a><em> \u2014 MIT, PR \u0438 issue \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u044b\u043a\u0430\u0435\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0438 \u0447\u0438\u0441\u043b\u0430 \u0441\u043e\u0439\u0434\u0443\u0442\u0441\u044f (\u0438\u043b\u0438 \u043d\u0435 \u0441\u043e\u0439\u0434\u0443\u0442\u0441\u044f) \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0446\u0435\u043d\u043d\u044b\u0439 \u0444\u0438\u0434\u0431\u0435\u043a.<\/em><\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1052678\/\">https:\/\/habr.com\/ru\/articles\/1052678\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>LLM inference benchmark\u0421 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c\u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0431\u044d\u043a\u0435\u043d\u0434\u0435 \u0433\u043e\u043d\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u043d\u0430 vLLM, llama.cpp, ONNX Runtime \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 transformers. \u0417\u0432\u0443\u0447\u0438\u0442 \u043a\u0430\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442, \u043f\u043e\u043a\u0430 \u0442\u044b \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0447\u0435\u0441\u0442\u043d\u043e \u043c\u0435\u0440\u0438\u0442\u044c.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043c\u0435\u0440\u044f\u044e\u0442 \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0410 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0441\u0438: p95-latency, throughput (tok\/s), \u043f\u0438\u043a\u043e\u0432\u044b\u0439 VRAM \u0438 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u043e\u0448\u043b\u0430 \u0441 \u0443\u043c\u0430 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. \u0418 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0437\u0432\u0443\u0447\u0430\u043b \u0442\u0430\u043a: \u043a\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 \u043c\u043e\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043f\u043e \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0435\u0440\u0436\u0438\u0442 p95 \u043d\u0438\u0436\u0435 \u043f\u043e\u0440\u043e\u0433\u0430? \u041e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u043d\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u043b \u043d\u0438\u043a\u0442\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u0438 \u043f\u0438\u0441\u0430\u043b bench_v3_final_FINAL.py.\u041a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u043e\u0441\u044c \u0448\u0442\u0443\u043a \u043f\u044f\u0442\u044c, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0440\u0438\u043b \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 (\u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0438\u0441\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f), \u044f \u0441\u0435\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u043d\u0435\u0441\u0441. \u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f llm-inference-benchmark.\u0427\u0442\u043e \u044d\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0437\u0430 \u0442\u0443\u043b\u0437\u0430\u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u2014 \u044d\u0442\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0445\u0430\u0440\u043d\u0435\u0441\u0441 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u043e\u043c. \u0422\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0448\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0432 YAML, \u043e\u043d \u0433\u043e\u043d\u044f\u0435\u0442 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u043d\u044b\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u044b \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0438, \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 CSV + JSON-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043a\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445. \u0421\u0432\u0435\u0440\u0445\u0443 \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0435\u043d \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u0442\u044b\u043a\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u044b\u0439 CSV.\u041a\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e:\u0442\u0435\u043c, \u043a\u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0431\u044d\u043a\u0435\u043d\u0434\/\u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e;\u0442\u0435\u043c, \u043a\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u2014 \u0447\u0442\u043e\u0431\u044b \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0441\u044f\u0446 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0430\u0441\u044c \u0446\u0438\u0444\u0440\u0430;\u0442\u0435\u043c, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 CI-\u0433\u0435\u0439\u0442 \u043d\u0430 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435).\u0411\u044d\u043a\u0435\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 (v1.8.3):\u0411\u044d\u043a\u0435\u043d\u0434\u0427\u0435\u043c \u0445\u043e\u0440\u043e\u0448mock\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u0434\u043b\u044f CI \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435transformersAutoModelForCausalLM \u043e\u0442 HF, CUDAllama-cppGGUF-\u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044f, pre-built CUDA-wheel, \u0431\u0435\u0437 nvccopenai\u043b\u044e\u0431\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \/v1\/chat\/completions (Ollama, LM Studio, vLLM)onnxONNX Runtime \u0447\u0435\u0440\u0435\u0437 Optimum, INT8\/FP16vllmhigh-throughput \u0434\u0432\u0438\u0436\u043e\u043a, Linux only\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c.\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c: YAML, Run Matrix \u0438 Sweep\u041e\u0434\u0438\u043d \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 = \u043e\u0434\u0438\u043d YAML\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u2014 \u043a\u043e\u043d\u0444\u0438\u0433 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u043c\u0435\u0440\u044f\u0435\u043c:# configs\/llama-cpp-gpu.yamlbackend: llama-cppmodel: ~\/models\/Llama-3.2-3B-Instruct-Q4_K_M.ggufrequests: 20warmup_requests: 2prompts_file: data\/prompts\/smoke.txtrepeats: 3                 # \u043c\u0435\u0434\u0438\u0430\u043d\u0430 \u00b1 std \u043f\u043e 3 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u043cllama_cpp:  n_ctx: 2048  n_gpu_layers: 99        # 99 = \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0438 \u043d\u0430 GPU; 0 = \u0442\u043e\u043b\u044c\u043a\u043e CPU  max_tokens: 50  temperature: 0.0        # greedy, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0417\u0430\u043f\u0443\u0441\u043a:uv run llm-bench &#8212;config configs\/llama-cpp-gpu.yaml &#8212;output results\/run.csv\u041b\u044e\u0431\u043e\u0435 \u043f\u043e\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0437 CLI, \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044f YAML \u2014 \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:uv run llm-bench &#8212;config configs\/llama-cpp-gpu.yaml \\  &#8212;set llama_cpp.n_gpu_layers=20 &#8212;requests 50 &#8212;seed 42Run Matrix: \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0438\u041e\u0434\u0438\u043d \u043f\u0440\u043e\u0433\u043e\u043d \u2014 \u044d\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e. \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043a\u0430\u043a \u00ab\u0430 \u0441\u0440\u0430\u0432\u043d\u0438-\u043a\u0430 \u043c\u043d\u0435 \u0432\u043e\u0442 \u044d\u0442\u0438 \u043f\u044f\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432\u00bb. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0430. \u0412 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0441 \u043e\u0431\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432:results_dir: resultsruns:  &#8212; name: quant-q4km    config: configs\/llama-cpp-q4km-best.yaml  &#8212; name: quant-q8    config: configs\/llama-cpp-q8-best.yamlllm-bench matrix &#8212;config configs\/llama-cpp-quant-compare.yaml\u041a\u0430\u0436\u0434\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 CSV \u0438 \u0441\u0432\u043e\u0439 JSON-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0442\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u0438\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f (\u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0443\u0442\u0435\u0439 \u0438 ..\/ \u0432 name, \u0438\u043d\u0430\u0447\u0435 \u0441\u043b\u043e\u0432\u0438\u0448\u044c ValueError \u0435\u0449\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0430 \u043d\u0435 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0447\u0430\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430).Sweep: \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u0410 \u0432\u043e\u0442 \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e, \u044f\u0432\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e. \u0422\u0443\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f sweep \u2014 \u0442\u044b \u0437\u0430\u0434\u0430\u0435\u0448\u044c \u043e\u0441\u0438, \u0430 \u0445\u0430\u0440\u043d\u0435\u0441\u0441 \u0441\u0430\u043c \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 cartesian product:# n_gpu_layers \u00d7 n_ctx \u2192 3 \u00d7 2 = 6 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e base-\u043a\u043e\u043d\u0444\u0438\u0433\u0430base_config: configs\/llama-cpp-gpu.yamlresults_dir: resultssweep:  llama_cpp.n_gpu_layers: [0, 20, 99]  llama_cpp.n_ctx: [512, 2048]# \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0442\u0441\u044f, \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f:llm-bench matrix &#8212;config configs\/llama-cpp-sweep.yaml &#8212;dry-run\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e itertools.product \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043d\u043e \u0441 \u043f\u0430\u0440\u043e\u0439 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u0435\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b:dot-path \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430. llama_cpp.n_gpu_layers \u0441\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 pydantic-\u043c\u043e\u0434\u0435\u043b\u0438. \u041e\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0441\u044f \u0432 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044f \u2014 \u0443\u0437\u043d\u0430\u0435\u0448\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0447\u0430\u0441, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0433\u043e\u043d \u0442\u0438\u0445\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u0432\u043e\u0439 \u00ab\u043e\u0432\u0435\u0440\u0440\u0430\u0439\u0434\u00bb.\u0418\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (sweep-n_gpu_layers-99-n_ctx-2048). \u0415\u0441\u043b\u0438 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0438\u043c\u044f \u2014 \u0445\u0430\u0440\u043d\u0435\u0441\u0441 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0441\u0438\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u044f\u0432\u043d\u044b\u0439 runs:, \u0430 \u043d\u0435 \u043c\u043e\u043b\u0447\u0430 \u0437\u0430\u0442\u0438\u0440\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.CLI: \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (&#8212;dry-run)\u0413\u043b\u0443\u0431\u0438\u043d\u0443 \u043e\u0432\u0435\u0440\u0440\u0430\u0439\u0434\u043e\u0432 \u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b \u0434\u0432\u0443\u043c\u044f \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 (\u0441\u0435\u043a\u0446\u0438\u044f.\u043f\u043e\u043b\u0435). \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e, \u043d\u043e \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c. \u041b\u0443\u0447\u0448\u0435 \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0447\u0443\u0442\u044c \u0436\u0435\u0441\u0442\u0447\u0435, \u0437\u0430\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e.\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430: Pareto \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0443\u043c\u0430\u0435\u0442 \u0437\u0430 \u0442\u0435\u0431\u044f\u041e\u043a\u0435\u0439, \u043c\u044b \u043d\u0430\u0433\u0435\u043d\u0435\u0440\u0438\u043b\u0438 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c CSV. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u0437\u0430\u0442\u0435\u0432\u0430\u043b\u043e\u0441\u044c.Pareto: \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u00ab\u043d\u0430 \u0433\u043b\u0430\u0437\u00bb \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0435\u043c\u0438 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u2014 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u043e \u041f\u0430\u0440\u0435\u0442\u043e.\u041a\u043e\u043d\u0444\u0438\u0433 A \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0434 B, \u0435\u0441\u043b\u0438 A \u043d\u0435 \u0445\u0443\u0436\u0435 B \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0435 \u0438 \u0441\u0442\u0440\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u0439. \u0412\u0441\u0435, \u0447\u0442\u043e \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u2014 \u044d\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442: \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0445\u0443\u0436\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u0444\u0440\u043e\u043d\u0442\u0430\u043c. \u041e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e Pareto-\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u2014 \u0444\u0440\u043e\u043d\u0442 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u0432, \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438.\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0448\u0438\u0442\u044b \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0438:\u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c: p95-latency, VRAM, perplexity, \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438, TTFT;\u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c: tok\/s, sanity-rate, task-quality, judge-score.\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0433\u043e\u0440\u0436\u0443\u0441\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b: \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0443\u0436\u0430\u044e\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u0440\u043e\u043d\u044f\u044e\u0442 \u0435\u0433\u043e. \u0415\u0441\u043b\u0438 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043d\u0435\u0442, \u0441\u043a\u0430\u0436\u0435\u043c, perplexity (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u044d\u043a\u0435\u043d\u0434 \u0435\u0435 \u043d\u0435 \u043e\u0442\u0434\u0430\u0435\u0442), \u044d\u0442\u0430 \u043e\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u043f\u0430\u0440\u044b \u2014 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u0440\u0430\u0448\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u043b\u0438 \u0448\u0442\u0440\u0430\u0444\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0443\u043b\u0435\u043c. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u0448\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u0443 \u043a\u0443\u0447\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441 transformers (\u0433\u0434\u0435 \u0435\u0441\u0442\u044c perplexity \u0438 judge) \u0438 \u0441 llama-cpp (\u0433\u0434\u0435 \u0438\u0445 \u043d\u0435\u0442), \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u0441\u044f.llm-bench pareto results\/*.csvCLI: \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e \u041f\u0430\u0440\u0435\u0442\u043eWeb UI: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 (\u0394% \u043a \u0431\u0430\u0437\u0435)\u0427\u0438\u0441\u043b\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 \u0441\u043d\u044f\u0442\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445, \u043e\u0442\u0441\u044e\u0434\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u0431\u0440\u043e\u0441 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u043e\u043d\u0443 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442.\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0442\u0435\u043b\u044c: \u00ab\u0434\u0430\u0439 \u043c\u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u043f\u043e\u0434 \u043c\u043e\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u00bbPareto-\u0444\u0440\u043e\u043d\u0442 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0433 \u2014 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0445\u0430\u0440\u043d\u0435\u0441\u0441\u0443 \u0441\u0432\u043e\u0438 \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0438 \u043f\u0443\u0441\u0442\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0430\u043c:llm-bench recommend results\/*.csv \\  &#8212;max-vram-mb 4096 \\  &#8212;max-p95-ms 1000 \\  &#8212;max-ttft-ms 200 \\  &#8212;min-sanity 1.0\u041b\u043e\u0433\u0438\u043a\u0430 \u0432 \u0442\u0440\u0438 \u0448\u0430\u0433\u0430, \u0431\u0435\u0437 \u043c\u0430\u0433\u0438\u0438:\u0424\u0438\u043b\u044c\u0442\u0440. \u0412\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0442 \u0445\u043e\u0442\u044c \u043e\u0434\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438\u0447\u0435\u043c \u2014 \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u2014 \u0435\u0441\u043b\u0438 \u043f\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u0430 \u0443 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u044d\u0442\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0442 (\u043d\u0435 \u043f\u043e\u043c\u0435\u0440\u0438\u043b\u0438), \u043e\u043d \u0442\u043e\u0436\u0435 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442. \u041d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c VRAM, \u0430 \u044f \u043f\u0440\u043e\u0441\u0438\u043b &#8212;max-vram-mb? \u0418\u0437\u0432\u0438\u043d\u0438, \u0432 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u044b \u043d\u0435 \u0431\u0435\u0440\u0435\u043c.Pareto \u0441\u0440\u0435\u0434\u0438 \u0432\u044b\u0436\u0438\u0432\u0448\u0438\u0445. \u0418\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0440\u043e\u0448\u0435\u043b \u0444\u0438\u043b\u044c\u0442\u0440, \u0431\u0435\u0440\u0435\u043c Pareto-\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435.Tiebreak \u043f\u043e p95. \u0415\u0441\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u2014 \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0437\u043a\u0438\u0439 p95.\u0418 \u2014 \u0442\u043e, \u0447\u0442\u043e \u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0446\u0435\u043d\u044e \u2014 \u043e\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430:Recommendation__________________________________________________Backend  : transformersModel    : gpt2-mediumN        : 10p95      : 512.02 mstok\/s    : 104.1Load     : 9015.0 msTTFT p50 : 10.8 msVRAM     : 875.0 MBSanity   : 100.0%Task Q   : N\/APPL      : N\/AJudge    : N\/AWhy: lowest p95 among 1 candidate(s) passing all constraints; Pareto-optimal.Excluded (3)__________________________________________________  llama-cpp Llama-3.2-3B-Instruct-Q4_K_M.gguf \u2192 VRAM too high (2361.0 MB &gt; 1000.0 MB)  llama-cpp Llama-3.2-3B-Instruct-Q8_0.gguf \u2192 VRAM too high (3697.0 MB &gt; 1000.0 MB)  llama-cpp Bonsai-8B.gguf \u2192 VRAM too high (1499.0 MB &gt; 1000.0 MB)\u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u00ab\u0434\u043e\u0432\u0435\u0440\u044c\u0441\u044f \u043c\u043d\u0435, \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u00bb. \u0412\u0438\u0434\u043d\u043e, \u043a\u043e\u0433\u043e \u0432\u044b\u043a\u0438\u043d\u0443\u043b\u0438 \u0438 \u0437\u0430 \u0447\u0442\u043e.Web UI: \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044fCLI: \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u041d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438: \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u0430, \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043b\u043e\u043c\u0430\u043b\u0430\u0441\u044c\u042d\u0442\u043e \u0442\u0430 \u0447\u0430\u0441\u0442\u044c, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0438 \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0435\u043f\u043e\u043b\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443.Sanity checks: \u0430 \u043e\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0447\u0442\u043e-\u0442\u043e \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u043b\u043e?\u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u0442\u044c throughput \u0434\u043e \u043a\u043e\u0441\u043c\u043e\u0441\u0430, \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043b\u0438 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0442\u043e\u043a\u0435\u043d\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438:empty_output_count \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043f\u0443\u0441\u0442\u044b\u043c\u0438;min_output_chars \/ mean_output_chars \u2014 \u0434\u043b\u0438\u043d\u044b \u043e\u0442\u0432\u0435\u0442\u043e\u0432;repeated_output_count \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430;sanity_pass_rate \u2014 \u0434\u043e\u043b\u044f \u043d\u0435\u043f\u0443\u0441\u0442\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432, \u0432 [0.0, 1.0].\u0427\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0437\u0430\u0448\u0438\u043b \u043f\u0440\u044f\u043c\u043e \u0432 \u0434\u043e\u043a\u0441\u0442\u0440\u0438\u043d\u0433: \u043f\u0440\u0438 temperature=0.0 \u0438 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\u043a\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044b \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b. \u0422\u0430\u043a \u0447\u0442\u043e repeated_output_count \u2014 \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u0433\u043e\u0432\u043e\u0440. \u042d\u0442\u043e \u043d\u0435 \u043e\u0446\u0435\u043d\u043a\u0430 \u0441\u043c\u044b\u0441\u043b\u0430, \u044d\u0442\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c, \u043f\u043e\u043a\u0430 \u043c\u044b \u0440\u0430\u0434\u043e\u0441\u0442\u043d\u043e \u043c\u0435\u0440\u0438\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.Task-quality, perplexity \u0438 LLM-as-judge\u041a\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u043e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0435\u0435 \u2014 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0443\u0440\u043e\u0432\u043d\u044f:quality_file: \u2014 YAML-\u0440\u0443\u0431\u0440\u0438\u043a\u0430 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 contains_all, regex, forbidden. \u0422\u0443\u043f\u043e, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e.Self-perplexity \u2014 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043b\u043e\u0433\u0438\u0442\u0430\u0445 \u043c\u043e\u0434\u0435\u043b\u0438.LLM-as-judge \u2014 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043e\u0434\u0438\u043d forward-pass \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u00ab\u0434\u0430\/\u043d\u0435\u0442\u00bb \u043d\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u0441\u0432\u043e\u0435\u043c \u0436\u0435 \u043e\u0442\u0432\u0435\u0442\u0435, \u0430 score \u2014 \u044d\u0442\u043e P(yes), \u0432\u044b\u0442\u0430\u0449\u0435\u043d\u043d\u0430\u044f \u0438\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043b\u043e\u0433\u0438\u0442\u043e\u0432 Yes\/No \u0447\u0435\u0440\u0435\u0437 2-way softmax (\u043f\u043e \u0441\u0443\u0442\u0438 sigmoid(yes \u2212 no)).\u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0447\u0443, \u0431\u0435\u0437 \u0438\u043b\u043b\u044e\u0437\u0438\u0439: judge \u0442\u0443\u0442 \u2014 \u044d\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c, \u0441\u0443\u0434\u044f\u0449\u0430\u044f \u0441\u0430\u043c\u0443 \u0441\u0435\u0431\u044f \u043e\u0434\u043d\u0438\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c. \u042d\u0442\u043e \u043d\u0435 \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f preference-\u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435. \u042f \u0434\u0435\u0440\u0436\u0443 \u044d\u0442\u043e \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0430 \u043d\u0435 \u043a\u0430\u043a \u0438\u0441\u0442\u0438\u043d\u0443 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0438. Perplexity \u0438 judge, \u043a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u043a\u0430 \u0436\u0438\u0432\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435 transformers \u2014 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u043e\u043a\u0435\u043d-\u043b\u0435\u0432\u0435\u043b \u043b\u043e\u0433\u0438\u0442\u0430\u043c, \u0430 \u0443 GGUF \u0447\u0435\u0440\u0435\u0437 llama.cpp \u0435\u0433\u043e \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u043e\u0437\u044c\u043c\u0435\u0448\u044c.Energy efficiency: tokens per Joule\u0421\u0430\u043c\u0430\u044f \u043c\u043e\u044f \u043b\u044e\u0431\u0438\u043c\u0430\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e \u043d\u0435\u0435 \u0432\u0441\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-485277","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485277"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485277\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}