PyTorch: model.eval() ещё не отключает autograd
PyTorch: model.eval() ещё не отключает autograd
В собственном inference-коде одного model.eval() недостаточно: он переключает поведение таких слоёв, как Dropout и BatchNorm, но не отключает запись графа для градиентов. Для чистого inference есть torch.inference_mode(); сам он не включает eval-режим.
Зачем: ненужный autograd может тратить VRAM и время на запрос, хотя обучение не идёт. Прежде чем брать GPU побольше, проверьте путь выполнения.
Как применить: 1. Убедитесь, что это только предсказание: ни backward, ни дальнейших вычислений с этими tensors под autograd не будет. 2. Для загруженной модели и подготовленного входа используйте: model.eval() with torch.inference_mode(): output = model(**inputs) 3. Сравните с прежним кодом на одинаковых inputs, batch size и precision. После warmup измерьте пик torch.cuda.max_memory_allocated(), сбросив статистику перед каждым прогоном через torch.cuda.reset_peak_memory_stats(). Удаляйте результаты предыдущего прогона; проверьте качество ответа.
Ловушка: tensors, созданные в inference mode, нельзя использовать в вычислениях, записываемых autograd. Для такого сценария рассмотрите torch.no_grad(). Готовый runtime уже может отключать градиенты — дополнительной экономии тогда не обещаем. Это не quantization: веса не становятся меньше.
Каталог GPU: https://verum-ai.uz — наличие конфигурации уточняйте отдельно.

