Как да измериш сам скоростта на AI модел на GX10
Числата за скорост на модели се споделят лесно и се проверяват трудно. Този урок не ти дава чужди числа — дава ти метод: как да измериш на своя GX10 колко токена в секунда пише един модел, как да повториш измерването, как да отделиш скоростта от качеството и как да запишеш условията, за да може измерването да се повтори.
--verbose и на llama-bench може да се различава според версията.01Какво ще научиш
- Защо число без условия и без доказателство не е факт.
- Кои величини се мерят: зареждане, обработка на заявката и генериране (токени в секунда).
- Как да вземеш числата от отговора на Ollama и да ги превърнеш в скорост.
- Как да повториш измерването, да изхвърлиш първото пускане и да вземеш медиана.
- Как да отделиш скоростта от качеството и да си направиш малък тест с твои въпроси.
- Как да запишеш карта на измерването, за да може друг да го повтори.
02Преди да започнеш
- Работещ Ollama — виж уроците Open WebUI и Ollama и n8n на GX10.
- Поне един изтеглен модел. Като пример ползваме
llama3.1:8b(около 4,9 GB по страницата на модела към 03.10.2026) — виж „Кои AI модели се събират на GX10“. - Python 3 за скрипта; провери с
python3 --version. - Спокойна машина: докато мериш, не пускай други тежки задачи.
| Величина | Откъде идва в отговора на Ollama | Какво показва |
|---|---|---|
| Зареждане | load_duration (наносекунди) | Колко време отнема зареждането на модела в паметта — има го при „студен“ старт. |
| Обработка на заявката | prompt_eval_count и prompt_eval_duration | Колко бързо моделът „прочита“ входа (токени в секунда). |
| Генериране | eval_count и eval_duration | Колко бързо пише отговора (токени в секунда). Обикновено това наричат „скорост“. |
Имената са по документацията на Ollama API, прочетена на 03.10.2026.
03Стъпки
-
Защо тук няма таблица с числа
Предишната версия на този урок показваше таблица със скорости на дузина модела. Махнахме я: числата бяха измервания на една машина без доказателство — без команда, версии на средата, квантизация, дължина на контекста и дата. Такова число изглежда като факт, а не може да се провери и да се повтори. Затова сега урокът ти дава метода: измерваш на своята машина и записваш условията до числото.
-
Запиши условията, преди да мериш
Едно число значи нещо само заедно с условията му. Преди първото пускане запиши:
Какво Защо е важно Машина и система (клас, памет, версия на системата) Скоростта зависи от хардуера и драйверите. Среда и версия (например Ollama) Новата версия може да е по-бърза или по-бавна. Точният таг на модела и квантизацията llama3.1:8bи друга квантизация на същия модел са различни тежести. Вижollama show <модел>— не е пускано от нас.Дължина на контекста и на промпта По-дългият вход и по-големият контекст забавят. Опции: температура, seed, лимит на токените Различни опции — различни отговори и различна дължина. Друго натоварване на машината Паралелни задачи си делят общата памет и пропускателната способност. Дата Числото е вярно за деня, в който е измерено. -
Най-бързо:
--verboseНай-простото измерване е да пуснеш модела с флага
--verbose. След отговора Ollama печата статистика. Форматът и имената на редовете зависят от версията — прочети ги от своя изход.bash · не е пусканоdocker compose exec ollama ollama run llama3.1:8b --verbose "Обясни с три изречения какво е квантизация."Това е бърза проверка, не измерване: имаш едно пускане, а първото често включва зареждане на модела. За число, което да запишеш, ползвай следващата стъпка.
-
Измерване през API със скрипт
Ollama връща в отговора на
/api/generateвремената в наносекунди:load_duration,prompt_eval_countиprompt_eval_duration,eval_countиeval_duration. Документацията на Ollama дава формулата: скорост на генериране =eval_count / eval_duration × 109токена в секунда. Скриптът по-долу пуска заявката 6 пъти без поток ("stream": false), със заключени опции, и смята медианата.python · bench.py · не е пусканоimport json, os, statistics, sys, urllib.request URL = os.environ.get("OLLAMA_URL", "http://localhost:11434") MODEL = sys.argv[1] PROMPT = "Explain in three sentences what quantization of a language model is." RUNS = 6 def one_run(): body = json.dumps({ "model": MODEL, "prompt": PROMPT, "stream": False, "options": {"temperature": 0, "seed": 1, "num_predict": 200}, }).encode() req = urllib.request.Request(URL + "/api/generate", body, {"Content-Type": "application/json"}) with urllib.request.urlopen(req, timeout=900) as r: d = json.load(r) gen = d["eval_count"] / d["eval_duration"] * 1e9 pp = None if d.get("prompt_eval_duration"): pp = d["prompt_eval_count"] / d["prompt_eval_duration"] * 1e9 return gen, pp, d["load_duration"] / 1e9 results = [one_run() for _ in range(RUNS)] print("run 1 (warm-up, not counted): load %.1f s" % results[0][2]) gens = [g for g, _, _ in results[1:]] print("generation tokens/s: median %.1f, min %.1f, max %.1f (n=%d)" % (statistics.median(gens), min(gens), max(gens), len(gens))) pps = [p for _, p, _ in results[1:] if p] if pps: print("prompt-processing tokens/s: median %.1f (n=%d)" % (statistics.median(pps), len(pps)))Пускаш го така (името на модела е аргумент):
bash · не е пусканоpython3 bench.py llama3.1:8bИзходът има три реда: времето за зареждане на първото (изхвърленото) пускане, медиана с минимум и максимум за генерирането и — ако има — медиана за обработката на заявката. Числата ще са твои; тук няма примерни стойности нарочно.
⚠️Как скриптът стига до OllamaСкриптът чете адреса от променливатаOLLAMA_URL(по подразбиранеhttp://localhost:11434). Ollama, инсталиран направо в системата, слуша на loopback и е достъпен оттам. В стека от урок 04-01 Ollama няма публикуван порт: за измерването или пусни скрипта вътре в мрежата на контейнерите, или публикувай порта временно само към127.0.0.1("127.0.0.1:11434:11434") — никога към0.0.0.0, и върни настройката след теста. -
Повторения, изхвърляне на първото, медиана
Първото пускане е „студено“: моделът се зарежда в паметта (виж
load_duration) и числото не е типично. Затова скриптът го не брои. От останалите вземи медианата — тя не се влияе от една случайна бавна заявка — и запиши минимума и максимума. Ако размахът е голям, нещо друго работи на машината или тя се е нагряла: паузирай, остави я да изстине и повтори. NVIDIA посочва идеална работна температура на помещението от 5 до 30 °C (към 03.10.2026), така че мери при нормална стайна температура и без запушени отвори. -
Какво още променя числото
Фактор Как влияе Размер на модела и квантизация По-голям файл означава повече данни за четене на токен. При генериране честотната лента на паметта (273 GB/s за GB10 по NVIDIA) обикновено е ограничителят — затова големите модели са по-бавни. Плътен срещу смесен модел (MoE) При смесените моделите на токен участва само част от параметрите, затова при същия размер на файла скоростта може да е различна. Провери картата на модела. Дължина на контекста и на промпта По-дълъг контекст — повече работа за всеки нов токен и по-бавна обработка на входа. Модели с „мислене“ Част от токените са мисловна верига. Провери дали и как се броят в твоята версия и сравнявай само сходни модели и задачи. Друго натоварване и температура Паралелни задачи и прегряване намаляват скоростта. Версия на средата Всяка нова версия може да смени резултата — затова я записваш. -
Скоростта не е качество
Бърз модел може да отговаря зле. Затова качеството се мери отделно, с твои въпроси:
- Подготви 10 въпроса от своята работа с кратък известен верен отговор (число, дата, категория).
- Пусни всеки въпрос по 3 пъти на всеки модел и преброй верните отговори.
- За текст на български: покажи два отговора на колега без да казваш кой модел ги е дал и го попитай кой е по-добър („сляпо“ сравнение).
- Запиши и колко често моделът „измисля“ — отговаря уверено, а грешно.
Малкият тест не доказва много, но е по-честен от чужда таблица — защото е върху твоите документи и въпроси.
-
Втори инструмент:
llama-benchАко работиш с модели във формат GGUF през llama.cpp, там има готов инструмент. Той тества отделно обработката на заявката (
-p) и генерирането (-n), повтаря всеки тест-rпъти (по подразбиране 5) и дава средно с отклонение. Документацията отбелязва, че измерването не включва токенизацията и семплирането, затова числата не са пряко сравними с тези от Ollama.bash · не е пусканоllama-bench -m <път-до-модел.gguf> -p 512 -n 128 -r 5 -o md -
Картата на измерването и правилото за публикуване
Всяко число, което запишеш или споделиш, върви с карта. Ето шаблон:
текст · шаблонКарта на измерването дата: <гггг-мм-дд> машина: <клас, напр. GB10 / 128 GB> система: <версия> среда: <име и версия> таг на модела: <напр. llama3.1:8b> квантизация: <както я показва "ollama show"> контекст: <num_ctx> промпт: <текст или връзка към него> опции: temperature 0, seed 1, num_predict 200 метод: <команда или име на скрипт> пускания: 6 (първото се изхвърля) резултат: генериране <медиана> tok/s (мин <x> - макс <y>) друго натоварване: <нищо друго не е работило / какво е работило> бележки: <каквото е необичайно>✅ПравилоЧисло без карта не се публикува като факт. С карта то е измерване при тези условия — и така го наричай. Не го пренасяй върху друга машина, версия или квантизация.
04Проверка
- Можеш да обясниш защо числото ти няма стойност без условията му.
- Имаш скрипт, който пуска заявката няколко пъти и смята медиана.
- Първото пускане е изхвърлено, а минимумът и максимумът са записани.
- Имаш отделен малък тест за качество с твои въпроси.
- Към всяко число има карта на измерването.
Тест
1. Защо скриптът не брои първото пускане?
2. Как се изчислява скоростта на генериране от отговора на Ollama?
3. Кога число за скорост може да се публикува като измерване?
4. Модел А пише 80 токена в секунда, а модел Б — 40. Какво следва за качеството им?
05Какво следва
Всички уроци от серията са в индекса GX10 (в пътя горе).
06Източници
- Ollama: документация на API — полетата
load_duration,prompt_eval_*,eval_*и формулата за токени в секунда (прочетено 03.10.2026). - llama.cpp: llama-bench — параметри
-p,-n,-r,-oи бележката за токенизацията (03.10.2026). - NVIDIA DGX Spark: хардуер — 273 GB/s честотна лента на паметта, идеална температура 5–30 °C (03.10.2026).
- llama3.1 🔒 локално — размерът на модела, използван като пример.