AI без LLM: создаем свою модель ИИ Урок 28 из 30
Урок 28. Измеряем время, память и цену
Чайник после включения греется дольше, чем уже горячая вода наливается в чашку. У программы тоже различаются новый запуск и повторный вызов готовой функции. Измерим оба пути, объём файлов и наблюдаемые выделения памяти.
Текст переведён с помощью ИИ.
Зачем это нужно
Чайник после включения греется дольше, чем уже горячая вода наливается в чашку. У программы тоже различаются новый запуск и повторный вызов готовой функции. Измерим оба пути, объём файлов и наблюдаемые выделения памяти.
Перед кодом
Скопируйте bench.py, checks.py и examples.json из папки шага 28. subprocess.run пять раз создаёт новый Python-процесс; sys.executable выбирает тот же Python. Опция -c запускает переданную строку кода, capture_output=True прячет её вывод, text=True читает его как текст, check=True остановит замер при ошибке. range(5) даёт пять чисел для пяти повторов; так же range(200) даёт 200 повторов. time.perf_counter_ns() — точные часы в наносекундах, где миллион наносекунд равен миллисекунде. statistics.median выбирает середину упорядоченных измерений: единичный всплеск меньше влияет на результат. После одного разогрева цикл из 200 вызовов меряет готовую функцию. tracemalloc.start() включает слежение за выделениями Python, get_traced_memory() возвращает текущий и наибольший наблюдаемый объём, а stop() выключает слежение. Path.stat().st_size даёт число байтов двух файлов.
Файлы этого шага: examples.json, checks.py, bench.py.
Из корня проекта перейдите в папку шага и запустите программу:
cd course/kazakh-ai/step-28
python3 bench.py
В Windows замените python3 на py.
import statistics
import subprocess
import sys
import time
import tracemalloc
from pathlib import Path
from checks import classify
question = "Шахмат қашан?"
cold = []
for repeat in range(5):
start = time.perf_counter_ns()
subprocess.run([sys.executable, "-c", "from checks import classify; classify('Шахмат қашан?')"],
check=True, capture_output=True, text=True)
cold.append(time.perf_counter_ns() - start)
classify(question)
times = []
tracemalloc.start()
for repeat in range(200):
start = time.perf_counter_ns()
classify(question)
times.append(time.perf_counter_ns() - start)
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
files = Path("checks.py").stat().st_size + Path("examples.json").stat().st_size
print("Сұрау саны:", len(times))
print("Жаңа іске қосу, мс:", round(statistics.median(cold) / 1000000, 3))
print("Ортаңғы уақыт, мс:", round(statistics.median(times) / 1000000, 3))
print("Ең көп бақыланған бөлу, байт:", peak)
print("Код пен дерек, байт:", files)
print("Тікелей API төлемі: 0; құрылғы мен еңбек құны есептелмеді")
Что делает программа
Числа зависят от компьютера, нагрузки и версии Python, поэтому эталон — названия строк и положительные измерения, а не фиксированные миллисекунды. Время разогретой функции не включает чтение examples.json, запуск Python и поиск факта. tracemalloc не показывает всю память процесса; сумма размеров файлов не равна памяти программы. Строка о нулевой прямой плате API означает лишь отсутствие платного внешнего запроса в этом опыте. Устройство, электричество, разметка и сопровождение стоят денег. Сравнение «в тысячу раз» с LLM здесь не доказано: нужны одинаковые запросы, качество и условия измерения.
Опорная карта
5 новых процессов → медиана запуска; 200 вызовов → медиана функции + выделения; файлы → байты; плата API → только прямой сбор.
Вспомните и проверьте
Закройте код и назовите, почему два измерения времени различаются. Запустите программу дважды, не переписывая числа из чужого компьютера. Эталон: Сұрау саны: 200, строки нового запуска, среднего времени, выделений, байтов и прямой платы API. Подсказка: в новом процессе Python заново читает модуль и данные. Частая ошибка: называть peak полной памятью приложения или объявлять победу над LLM по одному числу.
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.