Недавно я обновил одну AWS Lambda функцию, которая делала инференс некой модели. И, внезапно, скорость выполнения просела вдвое.
Расследование показало, что виноват пулл реквест с рефакторингом, который состоял из кучи тестов и двух строк в основном коде. Одна из строк была довольно безобидной на вид, вроде
logger.info('Loading model from {}'.format(model_weights)).Если копнуть чуть глубже, оказалось, что конструктор модели был примерно таким:
class Model:
def __init__(self,
model_weights: Union[str, BytesIO],
...
)
Т.е. конструктор иногда принимал путь к весам, а иногда - собственно веса (потому что в случае лямбды как раз удобнее сразу прочитать веса из S3). Ну и соответственно это значение
model_weights приходило в логгер, который вместо пути к файлу пытался вывести много мегабайт весов.