Знакът на КАГАМИ КАГАМИ
kagami.bg/academy · lesson · machine-readable viewUPDATED 2026-10-03
IDENTITY
module
GX10 · How to measure the speed of an AI model yourself
series
GX10 (local AI server class: NVIDIA GB10, e.g. ASUS Ascent GX10 / DGX Spark)
level
Intermediate
duration
~45 min
prerequisites
A working Ollama with at least one model (lessons 04-07 and 04-01), Python 3
trust_label
UPDATED 2026-10-03 (field names and formulas read from the Ollama API documentation, llama-bench options from the llama.cpp README, hardware figures from NVIDIA docs, all on that date) · NOT TESTED (no GB10 machine available; the script and commands were not run) · no speed values are given
versions
none pinned: record the runtime version yourself; example model llama3.1:8b (about 4.9 GB on its Ollama page)
language
human view: bg · english edition: /en/academy/gx10/ (same file name)
previous / next
ai_модели_сравнение_GX10.html / GX10 series index
PURPOSE

Teach a repeatable method for measuring the generation and prompt-processing speed of a local language model on a GB10-class machine, and for recording the conditions so the result can be reproduced. A previous table of speeds without evidence was removed on purpose; this module publishes no speed values.

KEY CONCEPTS
COMMANDS / PATHS
CHECKLIST
NEXT MODULE

ai_модели_сравнение_GX10.html · Which AI models fit on a GX10 · 04-115_Model_Selection_Trade_offs.html · 04-219_Kakvo_Tezhi_na_GX10.html · series index: kagami.bg/academy/gx10/ · offer: Quick experiment (kagami.bg/stalbata/)

SOURCES
TAGS
gx10nvidia-gb10benchmarkingtokens-per-secondollamallama-benchmethod
ОБНОВЕНО · 03.10.2026

Как да измериш сам скоростта на AI модел на GX10

Числата за скорост на модели се споделят лесно и се проверяват трудно. Този урок не ти дава чужди числа — дава ти метод: как да измериш на своя GX10 колко токена в секунда пише един модел, как да повториш измерването, как да отделиш скоростта от качеството и как да запишеш условията, за да може измерването да се повтори.

⏱ ~45 мин Средно GX10 NVIDIA GB10 · 128 GB обща памет Измерване · Ollama · Python
Ollama (моделът и API)🔒 локално Python 3 (скриптът)🔒 локално llama.cpp · llama-bench🔒 локално
🔄
ОБНОВЕНО · 03.10.2026 — какво
Урокът е преработен изцяло. Старата версия беше таблица с резултати от тест на 12 модела (скорост, размер и качество). Махнахме я: бяха измервания на една машина без доказателство (без команда, версии, квантизация, контекст), а числата са зависими от тези условия. Добавихме: метод за самостоятелно измерване, скрипт през API на Ollama с повторения и медиана, отделен тест за качество с твои въпроси, втори инструмент (llama-bench) и шаблон за карта на измерването. Урокът е съгласуван с „Кои AI модели се събират на GX10“, където също няма скорости.
⚠️
Какво не сме пускали сами
Нямахме машина от класа GB10. Скриптът и командите са съставени по документацията на Ollama и llama.cpp, но не са пускани от нас — затова няма етикет „ТЕСТВАНО“, нито „ПРОВЕРЕНО“. Не даваме нито една стойност на скорост, защото не сме я мерили с този метод. Форматът на изхода на --verbose и на llama-bench може да се различава според версията.

01Какво ще научиш

02Преди да започнеш

ВеличинаОткъде идва в отговора на OllamaКакво показва
Зарежданеload_duration (наносекунди)Колко време отнема зареждането на модела в паметта — има го при „студен“ старт.
Обработка на заявкатаprompt_eval_count и prompt_eval_durationКолко бързо моделът „прочита“ входа (токени в секунда).
Генериранеeval_count и eval_durationКолко бързо пише отговора (токени в секунда). Обикновено това наричат „скорост“.

Имената са по документацията на Ollama API, прочетена на 03.10.2026.

03Стъпки

  1. Защо тук няма таблица с числа

    Предишната версия на този урок показваше таблица със скорости на дузина модела. Махнахме я: числата бяха измервания на една машина без доказателство — без команда, версии на средата, квантизация, дължина на контекста и дата. Такова число изглежда като факт, а не може да се провери и да се повтори. Затова сега урокът ти дава метода: измерваш на своята машина и записваш условията до числото.

  2. Запиши условията, преди да мериш

    Едно число значи нещо само заедно с условията му. Преди първото пускане запиши:

    КаквоЗащо е важно
    Машина и система (клас, памет, версия на системата)Скоростта зависи от хардуера и драйверите.
    Среда и версия (например Ollama)Новата версия може да е по-бърза или по-бавна.
    Точният таг на модела и квантизациятаllama3.1:8b и друга квантизация на същия модел са различни тежести. Виж ollama show <модел> — не е пускано от нас.
    Дължина на контекста и на промптаПо-дългият вход и по-големият контекст забавят.
    Опции: температура, seed, лимит на токенитеРазлични опции — различни отговори и различна дължина.
    Друго натоварване на машинатаПаралелни задачи си делят общата памет и пропускателната способност.
    ДатаЧислото е вярно за деня, в който е измерено.
  3. Най-бързо: --verbose

    Най-простото измерване е да пуснеш модела с флага --verbose. След отговора Ollama печата статистика. Форматът и имената на редовете зависят от версията — прочети ги от своя изход.

    bash · не е пускано
    docker compose exec ollama ollama run llama3.1:8b --verbose "Обясни с три изречения какво е квантизация."

    Това е бърза проверка, не измерване: имаш едно пускане, а първото често включва зареждане на модела. За число, което да запишеш, ползвай следващата стъпка.

  4. Измерване през 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, и върни настройката след теста.
  5. Повторения, изхвърляне на първото, медиана

    Първото пускане е „студено“: моделът се зарежда в паметта (виж load_duration) и числото не е типично. Затова скриптът го не брои. От останалите вземи медианата — тя не се влияе от една случайна бавна заявка — и запиши минимума и максимума. Ако размахът е голям, нещо друго работи на машината или тя се е нагряла: паузирай, остави я да изстине и повтори. NVIDIA посочва идеална работна температура на помещението от 5 до 30 °C (към 03.10.2026), така че мери при нормална стайна температура и без запушени отвори.

  6. Какво още променя числото

    ФакторКак влияе
    Размер на модела и квантизацияПо-голям файл означава повече данни за четене на токен. При генериране честотната лента на паметта (273 GB/s за GB10 по NVIDIA) обикновено е ограничителят — затова големите модели са по-бавни.
    Плътен срещу смесен модел (MoE)При смесените моделите на токен участва само част от параметрите, затова при същия размер на файла скоростта може да е различна. Провери картата на модела.
    Дължина на контекста и на промптаПо-дълъг контекст — повече работа за всеки нов токен и по-бавна обработка на входа.
    Модели с „мислене“Част от токените са мисловна верига. Провери дали и как се броят в твоята версия и сравнявай само сходни модели и задачи.
    Друго натоварване и температураПаралелни задачи и прегряване намаляват скоростта.
    Версия на средатаВсяка нова версия може да смени резултата — затова я записваш.
  7. Скоростта не е качество

    Бърз модел може да отговаря зле. Затова качеството се мери отделно, с твои въпроси:

    • Подготви 10 въпроса от своята работа с кратък известен верен отговор (число, дата, категория).
    • Пусни всеки въпрос по 3 пъти на всеки модел и преброй верните отговори.
    • За текст на български: покажи два отговора на колега без да казваш кой модел ги е дал и го попитай кой е по-добър („сляпо“ сравнение).
    • Запиши и колко често моделът „измисля“ — отговаря уверено, а грешно.

    Малкият тест не доказва много, но е по-честен от чужда таблица — защото е върху твоите документи и въпроси.

  8. Втори инструмент: llama-bench

    Ако работиш с модели във формат GGUF през llama.cpp, там има готов инструмент. Той тества отделно обработката на заявката (-p) и генерирането (-n), повтаря всеки тест -r пъти (по подразбиране 5) и дава средно с отклонение. Документацията отбелязва, че измерването не включва токенизацията и семплирането, затова числата не са пряко сравними с тези от Ollama.

    bash · не е пускано
    llama-bench -m <път-до-модел.gguf> -p 512 -n 128 -r 5 -o md
  9. Картата на измерването и правилото за публикуване

    Всяко число, което запишеш или споделиш, върви с карта. Ето шаблон:

    текст · шаблон
    Карта на измерването
    дата:            <гггг-мм-дд>
    машина:          <клас, напр. 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Източници

  1. Ollama: документация на API — полетата load_duration, prompt_eval_*, eval_* и формулата за токени в секунда (прочетено 03.10.2026).
  2. llama.cpp: llama-bench — параметри -p, -n, -r, -o и бележката за токенизацията (03.10.2026).
  3. NVIDIA DGX Spark: хардуер — 273 GB/s честотна лента на паметта, идеална температура 5–30 °C (03.10.2026).
  4. llama3.1 🔒 локално — размерът на модела, използван като пример.