TGTGInsightаналитика telegramLIVE / telegram public index
← DeepSchool
DeepSchool avatar

TGINSIGHT POST

Post #456

@deep_school

DeepSchool

Просмотры6,240Количество просмотров
Опубликован8 нояб.08.11.2024, 15:57
Содержимое поста

Содержимое

Как сделать предсказание моделью? Жмёшь model.predict(sample) и радуешься жизни :) Но это если самому локально поиграться. А если хочется предсказать не «для себя», а встроить модель в приложение и сделать её частью бизнес-логики? Пусть для простоты наше приложение — API. Первый вариант, который приходит в голову, — написать что-то такое: @router.post('/predict/') async def predict(user_request): # some business logic before predict (p1) predict = model.predict(sample) # some business logic after predict (p2) return result Но будет плохо, если придёт много пользователей одновременно. Мы начнём предсказывать для одного, а все остальные встанут в очередь, которая будет расти. Причём если в (p1) делается io-операция «авторизоваться» или «скачать картинку», то она не будет выполняться для нового пользователя, пока мы не предскажем для старого (если это однопоточный event-loop). Хотя могли бы и не ждать :) Поэтому плохо мешать асинхронную логику для «типичных» io-операций и тяжёлое предсказание моделью. А ещё наша модель сейчас может предсказывать семплы по одному, но ведь батчами было бы эффективнее! Их можно копить, например, через очередь. Мы кладём в неё семплы, и если накопился батч нужного размера / подождали батч дольше определённого времени — вызываем модель. Сказать про эту концепцию — легко, а вот написать это всё эффективно — задача со звёздочкой 😉 Хорошо, что существуют инференс-сервера (например, Nvidia Triton или TorchServe), в которых толпа умных инженеров всё сделала за нас:) Мы можем поднять такой инференс-сервер с моделью и обращаться к ней по HTTP/gRPC примерно таким образом: @router.post('/predict/') async def predict(user_request): # some business logic before predict (p1) predict = await inference_server_client.predict(sample) # some business logic after predict (p2) return result Сейчас в нашем приложении операция предсказания стала типичной «лёгкой» io-операцией, которая ещё и не блокирует основной поток! Теперь пока первый пользователь ждёт предикт, второй может его не ждать и авторизоваться 😏 Плюс у нас появился батчинг! И возможность независимо масштабировать само приложение и сервинг. Итак, мы рассмотрели одну проблему и вариант её решения, если вы хотите сделать продукт с DL-составляющей. Но на деле их тысяча и одна :) Чтобы показать, как их решать, мы создали курс Деплой DL-сервисов, на котором вы научитесь быстро и поддерживаемо учить модели, создавать веб-сервисы и мониторить ваши решения. Уже завтра, 9 ноября, в 12:00 МСК пройдёт вводная лекция. Вы ещё успеваете присоединиться! Переходите по ссылке и записывайтесь на курс🎓