Скрипт tt_train.py проводит сравнительный анализ производительности модели ResNet-18 при различных уровнях прунинга каналов. Тест измеряет время прямого и обратного прохода при обучении, количество параметров модели и использование видеопамяти.
- Загрузка модели: Используется предобученная ResNet-18 из torchvision
- Преобразование сверток: Все Conv2d слои заменяются на Im2ColConv (реализация через im2col + матричное умножение)
- Прунинг каналов: Применяется L1-прунинг с заданными коэффициентами (0, 0.5, 0.9)
- Квантизация (опционально): Сверточные слои могут быть квантизированы в int8 формат
- Профилирование: Измеряется время прямого и обратного прохода для каждого батча
- Сбор метрик: Сохраняются средние значения времени, количество параметров и использование VRAM
- Коэффициенты прунинга:
[0, 0.5, 0.9](0% - без прунинга, 50% и 90% каналов удаляется) - Размеры батчей:
[1, 5, 10, 100] - Минимальное количество каналов:
2(для стабильности) - Количество профилей:
5(для статистической достоверности) - Прогонов на профиль:
100 - Прогревов на профиль:
20 - Количество классов:
1000 - Квантизация:
False(можно включить, установивuse_quantization = True)
- Оптимизатор: SGD с learning rate = 0.01, momentum = 0.9
- Функция потерь: CrossEntropyLoss
- Размер изображений: 224x224x3
- Тип данных: Случайные тензоры (dummy data)
- Метки: Случайные целые числа от 0 до 999
Результаты сохраняются в текстовый файл training_results_YYYYMMDD_HHMMSS.txt со следующей информацией:
- Параметры тестирования (timestamp, коэффициенты прунинга, размеры батчей и т.д.)
- Сводная таблица результатов (среднее время прямого/обратного прохода, ускорение, параметры, VRAM)
- Детальные результаты для каждой конфигурации (мин/макс/среднее время, индивидуальные прогоны)
pip install torch torchvision matplotlibpython tt_train.pyОткройте файл tt_train.py и измените параметры в функции main():
prune_ratios = [0, 0.5, 0.9] # Коэффициенты прунинга
batch_sizes = [1, 5, 10, 100] # Размеры батчей
num_profiles = 5 # Количество профилей
num_runs = 100 # Прогонов на профиль
use_quantization = False # Включить квантизацию int8Для воспроизводимости результатов используется torch.manual_seed(0). и torch.cuda.synchronize() в местах профилирования
tt_train.py- основной скрипт с функциями прунинга и профилированияprofiler.py- классы для профилирования (ConvLayerProfiler, ResNet18Profiler)conv_layers.py- реализации сверточных слоев (Im2ColConv, QuantizedIm2ColConv)
- Время прямого прохода: Время выполнения forward pass
- Время обратного прохода: Время выполнения backward pass
- Общее время: Сумма прямого и обратного прохода
- Ускорение: Отношение времени базовой модели (prune_ratio=0) к прунированной
- Параметры: Общее количество параметров модели
- VRAM: Использование видеопамяти (для CUDA устройств)
- Тест выполняется в режиме обучения (
model.train()) - Для точных измерений используется синхронизация CUDA (
torch.cuda.synchronize()) - Результаты включают статистику по всем сверточным слоям отдельно