Как мне проверить скорость с помощью PyTest / tox?

Для тестирования алгоритмов / репозиториев машинного обучения я вижу три важные вещи:

  1. Это сбой
  2. Минимальная точность теста
  3. Это достаточно быстро

Хотя (1) и, возможно, (2) - это стандартное модульное тестирование, я не слишком уверен, что делать с (3). Могу ли я проверить это с помощью pytest / tox?

я нашел pytest-benchmark но как бы это сделать например для lidtk?

В псевдокоде я хочу сделать следующее:

def classifier_predict(input_features):
    # do something smart, but maybe too time-consuming
    return result

def input_generator():
    # Generate something random which classifier_predict
    # can work on - don't measure this time!
    return input_features

class Agents(unittest.TestCase):
    def test_classifier_predict():
        self.assertMaxTime(classifier_predict,
                           input_generator,
                           max_time_in_ms=100)

1 ответ

Handcraft-раствор

Вот псевдокод довольно ручного решения:

def classifier_predict(input_features):
    # do something smart, but maybe too time-consuming
    return result

def input_generator():
    # Generate something random which classifier_predict
    # can work on - don't measure this time!
    return input_features

class Agents(unittest.TestCase):
    def test_classifier_predict():
        nb_tests = 1000
        total_time = 0.0
        for _ in range(nb_tests):
            input_ = input_generator()
            t0 = time.time()
            classifier_predict(input_)
            t1 = time.time()
            total_time += t1 - t0
        self.assertLessEqual(total_time / nb_tests, 100)

Недостатки

  • Нет хороших графиков (вроде бы pytest-benchmark генерирует)
  • Как правило, жесткие ограничения могут быть затруднены из-за разного аппаратного обеспечения, а также из-за разной внешней рабочей нагрузки.
Другие вопросы по тегам