View in Telegram
Как сделать предсказание моделью? Жмёшь 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 МСК пройдёт вводная лекция. Вы ещё успеваете присоединиться! Переходите по ссылке и записывайтесь на курс🎓
Please open Telegram to view this post
VIEW IN TELEGRAM
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily