Всё ещё учите модели в Jupyter-тетрадках? Тогда вы рискуете отстать от индустрии!
Лет 7-8 назад при онбординге в новый проект могла возникнуть такая ситуация: новичка отводили к «хранителю» юпитер-ноутбука. Они вместе смотрели на ячейки и передавали сакральные знания о том, в каком порядке их нужно нажимать. Хороших разработческих практик от ML-специалистов тогда не требовали. Им было бы не помереть от дебага первого tensorflow:)
Но сейчас фреймворки стали очень высокоуровневыми и простыми в использовании, а запустить обучение сети на своих данных может быть задачей нескольких минут-часа. Для многих задач есть стандартные подходы/модели, и обучение — это самая простая часть при построении ML-решения. Помимо этого нужно ещё собирать чистые данные, доводить решение с ML-моделью до клиентов и следить за тем, как она чувствует себя на бою.
ML-специалисты всё больше становятся похожи на разработчиков: они версионируют код (и данные), следят за его поддерживаемостью, пишут тесты, автоматизируют процессы через CI/CD, следят за воспроизводимостью экспериментов и т.д.
От «магии» в ноутбуках мы приходим к инженерным практикам, которые делают решения более надёжными и поддерживаемыми, а релизы — более частыми. Работодателям это нравится, а людей, делающих простой fit-predict, они уже не хотят:)
Чтобы помогать инженерам не отставать от индустрии, мы когда-то и создали нашу школу. В первую очередь мы подтягивали именно инженерные навыки, в курсе CVRocket. А сейчас мы сделали новый курс по разработке DL-сервисов и скоро его анонсируем!
Также на следующей неделе мы проведём открытую лекцию про путь модели после обучения.
Ставьте🔥 , если актуально!
Лет 7-8 назад при онбординге в новый проект могла возникнуть такая ситуация: новичка отводили к «хранителю» юпитер-ноутбука. Они вместе смотрели на ячейки и передавали сакральные знания о том, в каком порядке их нужно нажимать. Хороших разработческих практик от ML-специалистов тогда не требовали. Им было бы не помереть от дебага первого tensorflow:)
Но сейчас фреймворки стали очень высокоуровневыми и простыми в использовании, а запустить обучение сети на своих данных может быть задачей нескольких минут-часа. Для многих задач есть стандартные подходы/модели, и обучение — это самая простая часть при построении ML-решения. Помимо этого нужно ещё собирать чистые данные, доводить решение с ML-моделью до клиентов и следить за тем, как она чувствует себя на бою.
ML-специалисты всё больше становятся похожи на разработчиков: они версионируют код (и данные), следят за его поддерживаемостью, пишут тесты, автоматизируют процессы через CI/CD, следят за воспроизводимостью экспериментов и т.д.
От «магии» в ноутбуках мы приходим к инженерным практикам, которые делают решения более надёжными и поддерживаемыми, а релизы — более частыми. Работодателям это нравится, а людей, делающих простой fit-predict, они уже не хотят:)
Чтобы помогать инженерам не отставать от индустрии, мы когда-то и создали нашу школу. В первую очередь мы подтягивали именно инженерные навыки, в курсе CVRocket. А сейчас мы сделали новый курс по разработке DL-сервисов и скоро его анонсируем!
Также на следующей неделе мы проведём открытую лекцию про путь модели после обучения.
Ставьте
Please open Telegram to view this post
VIEW IN TELEGRAM
Что происходит с моделью после обучения
В прошлом посте мы говорили, что DL-инженеру недостаточно учить модели в Jupyter-тетрадках, чтобы соответствовать запросам индустрии. Важно перенимать инженерные практики. Даже в репозитории с моделингом должна быть понятная структура, соблюдён codestyle, присутствовать тесты и различные проверки перед коммитом.
Но это лишь начало, базовая гигиена. А дальше полезно понимать процесс доставки своих моделей до пользователей. Чтобы вас познакомить с этим, мы подготовили открытую лекцию, на которой покажем, как выглядит путь модели после обучения!
На лекции вы узнаете:
- когда стоит использовать Jupyter-ноутбуки, а когда нет
- как подготовить репозиторий моделинга
- варианты конвертации модели
- как обернуть инференс в http-приложение
- как деплоят приложения и автоматизируют этот процесс
А также мы анонсируем новый курс, на котором вы научитесь создавать и деплоить DL-сервисы!
Всем участникам лекции подарим скидки на обучение!🔥
🙋♂️Спикеры лекции:
— Дмитрий Раков — руководитель ML в НИИАС, делает percpetion-алгоритмы для беспилотных поездов
— Тимур Фатыхов — основатель DeepSchool, ex Lead CV Engineer KoronaPay
⏰Дата и время: 31 октября, чт, 19:00 мск
Регистрируйтесь по ссылке!
В прошлом посте мы говорили, что DL-инженеру недостаточно учить модели в Jupyter-тетрадках, чтобы соответствовать запросам индустрии. Важно перенимать инженерные практики. Даже в репозитории с моделингом должна быть понятная структура, соблюдён codestyle, присутствовать тесты и различные проверки перед коммитом.
Но это лишь начало, базовая гигиена. А дальше полезно понимать процесс доставки своих моделей до пользователей. Чтобы вас познакомить с этим, мы подготовили открытую лекцию, на которой покажем, как выглядит путь модели после обучения!
На лекции вы узнаете:
- когда стоит использовать Jupyter-ноутбуки, а когда нет
- как подготовить репозиторий моделинга
- варианты конвертации модели
- как обернуть инференс в http-приложение
- как деплоят приложения и автоматизируют этот процесс
А также мы анонсируем новый курс, на котором вы научитесь создавать и деплоить DL-сервисы!
Всем участникам лекции подарим скидки на обучение!
🙋♂️Спикеры лекции:
— Дмитрий Раков — руководитель ML в НИИАС, делает percpetion-алгоритмы для беспилотных поездов
— Тимур Фатыхов — основатель DeepSchool, ex Lead CV Engineer KoronaPay
⏰Дата и время: 31 октября, чт, 19:00 мск
Регистрируйтесь по ссылке!
Please open Telegram to view this post
VIEW IN TELEGRAM
DeepSchool
Что происходит с моделью после обучения В прошлом посте мы говорили, что DL-инженеру недостаточно учить модели в Jupyter-тетрадках, чтобы соответствовать запросам индустрии. Важно перенимать инженерные практики. Даже в репозитории с моделингом должна быть…
Успевайте зарегистрироваться!
Обсудим:
А также мы анонсируем новый курс Деплой DL-сервисов и подарим скидки на обучение!
Присоединяйтесь к лекции!
Please open Telegram to view this post
VIEW IN TELEGRAM
Запускаем новый курс — Деплой DL-сервисов🎉
Вчера на лекции мы впервые представили нашу новую программу по разработке для DL-инженеров!
В рамках курса вы научитесь:
🔹быстро и поддерживаемо учить модели
🔹создавать веб-сервисы
🔹готовить модели к инференсу
🔹сервить модели
🔹проверять качество кода при помощи тестов и линтеров
🔹автоматизировать рутину в CI
🔹мониторить ваши решения
Обучение подойдёт для инженеров из CV и NLP, а также ML-инженерам, кто хочет перейти в DL.
После каждой лекции вы выполните домашнее задание, чтобы закрепить знания на практике. А в конце создадите проект, который можно с гордостью показать коллегам и добавить в портфолио.
Весь путь вы пройдёте при поддержке спикеров: опытные инженеры будут ревьюить ваш код, отвечать на вопросы во время онлайн-лекций, на семинарах и в чате.
Обучение начинается 9 ноября и длится 4 месяца🚀
Присоединяйтесь к обучению со скидкой до 7 ноября!
Подробнее о программе и спикерах читайте на сайте.
Если возникают вопросы или трудности, то пишите нам в поддержку в Телеграм!
Вчера на лекции мы впервые представили нашу новую программу по разработке для DL-инженеров!
В рамках курса вы научитесь:
🔹быстро и поддерживаемо учить модели
🔹создавать веб-сервисы
🔹готовить модели к инференсу
🔹сервить модели
🔹проверять качество кода при помощи тестов и линтеров
🔹автоматизировать рутину в CI
🔹мониторить ваши решения
Обучение подойдёт для инженеров из CV и NLP, а также ML-инженерам, кто хочет перейти в DL.
После каждой лекции вы выполните домашнее задание, чтобы закрепить знания на практике. А в конце создадите проект, который можно с гордостью показать коллегам и добавить в портфолио.
Весь путь вы пройдёте при поддержке спикеров: опытные инженеры будут ревьюить ваш код, отвечать на вопросы во время онлайн-лекций, на семинарах и в чате.
Обучение начинается 9 ноября и длится 4 месяца🚀
Присоединяйтесь к обучению со скидкой до 7 ноября!
Подробнее о программе и спикерах читайте на сайте.
Если возникают вопросы или трудности, то пишите нам в поддержку в Телеграм!
Please open Telegram to view this post
VIEW IN TELEGRAM
deepschool.ru
DeepSchool — научитесь создавать и деплоить DL-сервисы за 4 месяца
Детекторы текста на основе трансформеров
В новой статье из цикла про OCR мы погрузимся в задачу детекции текста и познакомимся с решениями на базе трансформеров.
Сегодня мы узнаем:
- какие актуальные бенчмарки существуют для задачи детекции текста
- почему первый трансформерный детектор DETR не подходит для детекции текста
- какие изменения в архитектуре детектора помогли получить SOTA-результаты на актуальных Scene Text Detection датасетах
Читайте новую статью по ссылке: https://deepschool-pro.notion.site/a1f2b9a395844218977e1c95bac85d5e?pvs=4
В новой статье из цикла про OCR мы погрузимся в задачу детекции текста и познакомимся с решениями на базе трансформеров.
Сегодня мы узнаем:
- какие актуальные бенчмарки существуют для задачи детекции текста
- почему первый трансформерный детектор DETR не подходит для детекции текста
- какие изменения в архитектуре детектора помогли получить SOTA-результаты на актуальных Scene Text Detection датасетах
Читайте новую статью по ссылке: https://deepschool-pro.notion.site/a1f2b9a395844218977e1c95bac85d5e?pvs=4
DeepSchool on Notion
Детекторы текста на основе трансформеров | Notion
Автор: Булат Бадамшин
Мок-собеседование в группах 🔥
Самый эффективный вариант подготовки к собеседованиям — ходить на собеседования.
Но вдвойне круто, когда и собеседование прошёл, и «попытка» не сгорела.
Поэтому мы решили провести открытое мок-собеседование в групповом формате!🔥 Чтобы вы могли поучаствовать в интервью, получить фидбек и набраться опыта от ведущего и участников.
Коротко о формате:
🔹 Ведущий рассказывает условие задачи
🔹 Участники бьются на группы и расходятся в разные комнаты на полчаса
🔹 Решают задачу в группах, обмениваются опытом
🔹 Группы собираются вместе и питчат решения
Начнём с задачи по CV, а ведущим будет Андрей Шадриков, RnD lead в verigram.ai🔥
Собеседование пройдёт завтра, во вторник, 5 ноября в 18:00 МСК!
Если вы хотите поучаствовать в собеседовании, заполните форму: https://forms.gle/ePdf3fT9FX7beXiy7
Если вы пока не готовы участвовать, приходите на собеседование как зритель! Ссылку на встречу отправим завтра в канале.
Записи не будет, ждём вас онлайн!
Самый эффективный вариант подготовки к собеседованиям — ходить на собеседования.
Но вдвойне круто, когда и собеседование прошёл, и «попытка» не сгорела.
Поэтому мы решили провести открытое мок-собеседование в групповом формате!🔥 Чтобы вы могли поучаствовать в интервью, получить фидбек и набраться опыта от ведущего и участников.
Коротко о формате:
🔹 Ведущий рассказывает условие задачи
🔹 Участники бьются на группы и расходятся в разные комнаты на полчаса
🔹 Решают задачу в группах, обмениваются опытом
🔹 Группы собираются вместе и питчат решения
Начнём с задачи по CV, а ведущим будет Андрей Шадриков, RnD lead в verigram.ai
Собеседование пройдёт завтра, во вторник, 5 ноября в 18:00 МСК!
Если вы хотите поучаствовать в собеседовании, заполните форму: https://forms.gle/ePdf3fT9FX7beXiy7
Если вы пока не готовы участвовать, приходите на собеседование как зритель! Ссылку на встречу отправим завтра в канале.
Записи не будет, ждём вас онлайн!
Please open Telegram to view this post
VIEW IN TELEGRAM
Закрываем лист ожидания на LLM
Уже в этом месяце начинается 2-й поток нашего курса Large Language Models.
На нём вы узнаете, как обучать, деплоить и ускорять большие языковые модели.
Мы обновили лекции и уже на этой неделе проведём закрытую презентацию программы для участников листа ожидания!
Если планировали попасть на программу — записывайтесь в лист ожидания. Мы закроем к нему доступ 9 ноября в 12:00 МСК.
Места на курс ограничены, поэтому запишитесь, чтобы успеть первыми и получить самые выгодные условия🔥
Уже в этом месяце начинается 2-й поток нашего курса Large Language Models.
На нём вы узнаете, как обучать, деплоить и ускорять большие языковые модели.
Мы обновили лекции и уже на этой неделе проведём закрытую презентацию программы для участников листа ожидания!
Если планировали попасть на программу — записывайтесь в лист ожидания. Мы закроем к нему доступ 9 ноября в 12:00 МСК.
Места на курс ограничены, поэтому запишитесь, чтобы успеть первыми и получить самые выгодные условия
Please open Telegram to view this post
VIEW IN TELEGRAM
deepschool.ru
Large Language Models
Научим использовать LLM в приложениях: обучать, деплоить, ускорять и многое другое
Как сделать предсказание моделью?
Жмёшь
Но это если самому локально поиграться. А если хочется предсказать не «для себя», а встроить модель в приложение и сделать её частью бизнес-логики? Пусть для простоты наше приложение — API.
Первый вариант, который приходит в голову, — написать что-то такое:
Но будет плохо, если придёт много пользователей одновременно. Мы начнём предсказывать для одного, а все остальные встанут в очередь, которая будет расти. Причём если в (p1) делается io-операция «авторизоваться» или «скачать картинку», то она не будет выполняться для нового пользователя, пока мы не предскажем для старого (если это однопоточный event-loop). Хотя могли бы и не ждать :) Поэтому плохо мешать асинхронную логику для «типичных» io-операций и тяжёлое предсказание моделью.
А ещё наша модель сейчас может предсказывать семплы по одному, но ведь батчами было бы эффективнее! Их можно копить, например, через очередь. Мы кладём в неё семплы, и если накопился батч нужного размера / подождали батч дольше определённого времени — вызываем модель.
Сказать про эту концепцию — легко, а вот написать это всё эффективно — задача со звёздочкой 😉 Хорошо, что существуют инференс-сервера (например, Nvidia Triton или TorchServe), в которых толпа умных инженеров всё сделала за нас:)
Мы можем поднять такой инференс-сервер с моделью и обращаться к ней по HTTP/gRPC примерно таким образом:
Сейчас в нашем приложении операция предсказания стала типичной «лёгкой» io-операцией, которая ещё и не блокирует основной поток! Теперь пока первый пользователь ждёт предикт, второй может его не ждать и авторизоваться 😏 Плюс у нас появился батчинг! И возможность независимо масштабировать само приложение и сервинг.
Итак, мы рассмотрели одну проблему и вариант её решения, если вы хотите сделать продукт с DL-составляющей. Но на деле их тысяча и одна :)
Чтобы показать, как их решать, мы создали курс Деплой DL-сервисов, на котором вы научитесь быстро и поддерживаемо учить модели, создавать веб-сервисы и мониторить ваши решения.
Уже завтра, 9 ноября, в 12:00 МСК пройдёт вводная лекция. Вы ещё успеваете присоединиться! Переходите по ссылке и записывайтесь на курс🎓
Жмёшь
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
PhysGen
Диффузионные модели сейчас активно используются для генерации видео. В последнее время появляется много работ, посвящённых тому, как сделать качественный видеогенератор. Но соблюдаются ли законы физики в таких моделях? Можно ли по исходной картинке предположить движение объектов при воздействии на них определённых сил?
Авторы работы PhysGen подготовили пайплайн, который включает в себя реальную физическую симуляцию движения твёрдых тел для создания видеогенератора. В нашем обзоре мы посмотрим, как они это сделали и что у них получилось. А также узнаем:
- как проанализировать картинку, чтобы получить как можно больше знаний о физических объектах на этом изображении
- какую библиотеку использовать для качественной симуляции движения
- и как из симуляции зарендерить качественное видео
Читайте новую статью по ссылке: https://deepschool-pro.notion.site/PhysGen-e836c0895433459c82b6e36e013229a8?pvs=4
Диффузионные модели сейчас активно используются для генерации видео. В последнее время появляется много работ, посвящённых тому, как сделать качественный видеогенератор. Но соблюдаются ли законы физики в таких моделях? Можно ли по исходной картинке предположить движение объектов при воздействии на них определённых сил?
Авторы работы PhysGen подготовили пайплайн, который включает в себя реальную физическую симуляцию движения твёрдых тел для создания видеогенератора. В нашем обзоре мы посмотрим, как они это сделали и что у них получилось. А также узнаем:
- как проанализировать картинку, чтобы получить как можно больше знаний о физических объектах на этом изображении
- какую библиотеку использовать для качественной симуляции движения
- и как из симуляции зарендерить качественное видео
Читайте новую статью по ссылке: https://deepschool-pro.notion.site/PhysGen-e836c0895433459c82b6e36e013229a8?pvs=4
DeepSchool on Notion
PhysGen | Notion
Автор: Нина Коновалова
Знакомимся с авторами DeepSchool
ㅤ
В нашем канале статьи пишет целая команда авторов. Все они практикующие инженеры, которые делятся в постах экспертизой и своим опытом. Обычно процесс создания статьи выглядит так: одни пишут текст, а другие проводят кросс-ревью на фактчекинг, дополняют его полезными материалами и ссылками. На выходе получается готовая статья, которую вы уже видите в публикации :)
Ранее мы познакомились с Ильей, Сашей, Ксюшей и Марком, а сегодня о себе расскажет Саша Лекомцев, Team Lead Computer Vision Engineer из медтех стартапа oxytech.io. Саша разрабатывает системы, помогающие врачам определять диагноз по 2D и 3D-данным.
«Становление датасаентистом у меня вышло почти случайно. При поступлении в Новосибирский Государственный Университет я выбирал между биологией и математикой. В итоге выбрал математику и не прогадал) Когда пришло время лабораторных по вычислительным методам, впервые попробовал Python вместо C/C++ и сразу оценил, насколько проще и интуитивнее писать код на этом языке. Чуть позже наткнулся на курс Open Data Science, подумал: «А почему бы и не попробовать». Потом стажировка, первая работа в DS, и вот как-то так всё закрутилось.
Моим предыдущим местом работы была Золотая Корона, где я занимался задачами, связанными с верификацией пользователя по лицу (face verification / recognition, anti-spoofing, image quality assessment), и автоматизировал отбор данных и создание задач на разметку, потому что верю в data-centric подход. Там же познакомился с Тимуром, одним из основателей DeepSchool, и начал писать посты в этот канал. Сейчас я, можно сказать, один из самых ранних авторов.
Сейчас я работаю тимлидом небольшой команды компьютерного зрения в стартапе oxytech.io. Мы разрабатываем сервисы, которые помогают врачам ставить диагнозы по 2D и 3D-снимкам, например, когда они ищут артроз коленного сустава на рентгенах или рак на КТ. В нашей работе ключевую роль играют качественные данные, поэтому у меня всегда есть интересные задачи и проблемы, которые можно решить.
Ещё пара фактов обо мне:
- увлекаюсь настольно-ролевыми играми (типа «Dungeons & Dragons»). Часто играю в роли ведущего, что, как ни странно, помогает в работе — учит держать фокус на протяжении нескольких часов и модерировать беседу
- первая моя работа была не в DS, а продавцом-консультантом в секс-шопе, помогает ли это в работе — догадывайтесь сами :)
- жил год в Кыргызстане, год в Таиланде, а теперь поселился в Грузии»
В комментариях можно пообщаться с Сашей и задать интересующие вопросы :)
Посты, над которыми работал Саша в нашем канале:
- Интерпретация моделей компьютерного зрения
- Интерактивная сегментация
- SAM
- NeRV
- SIGGRAPH
- Face Image Quality Assessment
- Face Image Quality Assessment. Part 2
- MobileNet v1-v3
- Особенности 3D медицинских данных
- Адаптация SAM под 3D медицинские данные
- Адаптация Visual-Language модели для детекции аномалий
ㅤ
В нашем канале статьи пишет целая команда авторов. Все они практикующие инженеры, которые делятся в постах экспертизой и своим опытом. Обычно процесс создания статьи выглядит так: одни пишут текст, а другие проводят кросс-ревью на фактчекинг, дополняют его полезными материалами и ссылками. На выходе получается готовая статья, которую вы уже видите в публикации :)
Ранее мы познакомились с Ильей, Сашей, Ксюшей и Марком, а сегодня о себе расскажет Саша Лекомцев, Team Lead Computer Vision Engineer из медтех стартапа oxytech.io. Саша разрабатывает системы, помогающие врачам определять диагноз по 2D и 3D-данным.
«Становление датасаентистом у меня вышло почти случайно. При поступлении в Новосибирский Государственный Университет я выбирал между биологией и математикой. В итоге выбрал математику и не прогадал) Когда пришло время лабораторных по вычислительным методам, впервые попробовал Python вместо C/C++ и сразу оценил, насколько проще и интуитивнее писать код на этом языке. Чуть позже наткнулся на курс Open Data Science, подумал: «А почему бы и не попробовать». Потом стажировка, первая работа в DS, и вот как-то так всё закрутилось.
Моим предыдущим местом работы была Золотая Корона, где я занимался задачами, связанными с верификацией пользователя по лицу (face verification / recognition, anti-spoofing, image quality assessment), и автоматизировал отбор данных и создание задач на разметку, потому что верю в data-centric подход. Там же познакомился с Тимуром, одним из основателей DeepSchool, и начал писать посты в этот канал. Сейчас я, можно сказать, один из самых ранних авторов.
Сейчас я работаю тимлидом небольшой команды компьютерного зрения в стартапе oxytech.io. Мы разрабатываем сервисы, которые помогают врачам ставить диагнозы по 2D и 3D-снимкам, например, когда они ищут артроз коленного сустава на рентгенах или рак на КТ. В нашей работе ключевую роль играют качественные данные, поэтому у меня всегда есть интересные задачи и проблемы, которые можно решить.
Ещё пара фактов обо мне:
- увлекаюсь настольно-ролевыми играми (типа «Dungeons & Dragons»). Часто играю в роли ведущего, что, как ни странно, помогает в работе — учит держать фокус на протяжении нескольких часов и модерировать беседу
- первая моя работа была не в DS, а продавцом-консультантом в секс-шопе, помогает ли это в работе — догадывайтесь сами :)
- жил год в Кыргызстане, год в Таиланде, а теперь поселился в Грузии»
В комментариях можно пообщаться с Сашей и задать интересующие вопросы :)
Посты, над которыми работал Саша в нашем канале:
- Интерпретация моделей компьютерного зрения
- Интерактивная сегментация
- SAM
- NeRV
- SIGGRAPH
- Face Image Quality Assessment
- Face Image Quality Assessment. Part 2
- MobileNet v1-v3
- Особенности 3D медицинских данных
- Адаптация SAM под 3D медицинские данные
- Адаптация Visual-Language модели для детекции аномалий
Что не так с LLM?
— API не так дёшевы, как кажется
— Даже большие LLM галлюцинируют
— RAG сходу не работает
— Инференс без оптимизации стоит дорого
— Модели игнорируют инструкции
И это лишь часть проблем. Ещё больше мы упомянем на Zoom-лекции в четверг, а также расскажем, как эти проблемы решать.
Приходите, чтобы познакомиться с LLM и их болячками поближе!
А также представим программу курса LLM, расскажем про обновления и подарим скидки на обучение!✨
👨💻 Спикеры лекции:
- Илья Димов — Senior NLP-инженер
- Тимур Фатыхов — ex Lead CV Engineer, основатель DeepSchool
📆 Четверг, 21 ноября, 18:00 МСК.
Регистрируйтесь на лекцию по ссылке!
🎁 После регистрации вы получите список полезных инструментов и библиотек для работы с LLM.
Встречаемся в четверг!
— API не так дёшевы, как кажется
— Даже большие LLM галлюцинируют
— RAG сходу не работает
— Инференс без оптимизации стоит дорого
— Модели игнорируют инструкции
И это лишь часть проблем. Ещё больше мы упомянем на Zoom-лекции в четверг, а также расскажем, как эти проблемы решать.
Приходите, чтобы познакомиться с LLM и их болячками поближе!
А также представим программу курса LLM, расскажем про обновления и подарим скидки на обучение!
- Илья Димов — Senior NLP-инженер
- Тимур Фатыхов — ex Lead CV Engineer, основатель DeepSchool
Регистрируйтесь на лекцию по ссылке!
Встречаемся в четверг!
Please open Telegram to view this post
VIEW IN TELEGRAM
DeepSchool
Что не так с LLM? — API не так дёшевы, как кажется — Даже большие LLM галлюцинируют — RAG сходу не работает — Инференс без оптимизации стоит дорого — Модели игнорируют инструкции И это лишь часть проблем. Ещё больше мы упомянем на Zoom-лекции в четверг…
Сегодня на открытой лекции разберём бизнес-кейс и обсудим:
- промптинг и его ограничения
- как подавать данные в модель с помощью RAG
- когда необходимо дообучить свою модель
А также представим программу курса LLM, расскажем про обновления и подарим скидки на обучение!
Вы ещё успеваете зарегистрироваться и получить список инструментов и библиотек для работы с LLM.
Приходите сегодня в 18:00 МСК!
Please open Telegram to view this post
VIEW IN TELEGRAM
LLM в реальных задачах | DeepSchool
Онлайн-лекция «LLM в реальных задачах»
«LLM LLM LLM»
Все про них говорят, но мало кто умеет их готовить.
Если вы хотите научиться использовать LLM правильно, переняв знания из первых уст от инженеров с опытом тюнинга, элаймента, ускорения, деплоя, создания RAG, агентов, тулов и вообще проектов с LLM под капотом, то приходите на наш курс Large Language Models!
Наши спикеры работали и в бигтехах, и в стартапах, и в научных лабораториях. Создавали нагруженные сервисы и популярные библиотеки, которыми вы, вероятно, пользовались. На курсе они расскажут, а вы узнаете:
— как выбрать модель для проекта и чем они отличаются
— как уменьшить галюцинации и отхождения от инструкций
— как сделать RAG, который наконец начнёт работать
— как дообучать и сервить LLM, чтобы не разориться
— как деплоить большие модели
— и как эти модели устроены, как эволюционировали
Приходите, чтобы наконец разобраться, задать все вопросы и получить ответы!
Успевайте присоединиться по скидке -4% до 25 ноября!
📆 Обучение начнётся 27 ноября и продлится 4 месяца.
⚠️ Осталось 14 мест из 60. В прошлый раз они закончились за 3 дня. Успевайте занять место, они могут кончиться раньше, чем скидка!
Переходите на сайт, изучайте подробности и присоединяйтесь!
Все про них говорят, но мало кто умеет их готовить.
Если вы хотите научиться использовать LLM правильно, переняв знания из первых уст от инженеров с опытом тюнинга, элаймента, ускорения, деплоя, создания RAG, агентов, тулов и вообще проектов с LLM под капотом, то приходите на наш курс Large Language Models!
Наши спикеры работали и в бигтехах, и в стартапах, и в научных лабораториях. Создавали нагруженные сервисы и популярные библиотеки, которыми вы, вероятно, пользовались. На курсе они расскажут, а вы узнаете:
— как выбрать модель для проекта и чем они отличаются
— как уменьшить галюцинации и отхождения от инструкций
— как сделать RAG, который наконец начнёт работать
— как дообучать и сервить LLM, чтобы не разориться
— как деплоить большие модели
— и как эти модели устроены, как эволюционировали
Приходите, чтобы наконец разобраться, задать все вопросы и получить ответы!
Успевайте присоединиться по скидке -4% до 25 ноября!
Переходите на сайт, изучайте подробности и присоединяйтесь!
Please open Telegram to view this post
VIEW IN TELEGRAM
deepschool.ru
Large Language Models
Научим использовать LLM в приложениях: обучать, деплоить, ускорять и многое другое
Почему RL — это сложно? И как Decision Transformer меняет правила игры
Обучение с подкреплением (RL) часто звучит как магия: агент учится решать задачи через взаимодействие с окружающей средой. Тыкнул сюда, получил минус балл, постараюсь больше так не делать. Тыкнул сюда, получил плюс балл — о, повторю!
Но в реальности всё сложнее. Представьте робота, которому нужно научиться управлять автомобилем. Для обучения требуется симулятор, который моделирует дорожные условия. Создать его — задача не из лёгких: это дорого, долго, а иногда просто невозможно. Более того, ошибки агента в симуляторе могут не просто «остаться в игре», но привести к серьёзным последствиям, если перенести их в реальный мир.
Допустим, вы хотите обучить робота доставлять посылки. Если он учится в реальном мире, то каждое «неудачное» действие — это разбитый аппарат. А симуляторы часто слишком далеки от реальности, и агент начинает пользоваться их несовершенствами, что делает результаты обучения неприменимыми.
Альтернативный способ для создания умных агентов: агент учится воспроизводить траектории, созданные человеком. Проблема в том, что он может лишь копировать, но не создавать новые стратегии для достижения лучших результатов. RL, наоборот, строит стратегии сам, но упирается в проблему сложности и дороговизны.
Decision Transformer (DT) как раз призван решить эту проблему, генерируя на основе имеющихся данных новые стратегии. Он использует идеи RL и переформулирует проблему RL как задачу генерации последовательности.
Проще говоря, вместо «учимся через ошибки», DT говорит: «Вот данные о прошлом опыте, вот цель в виде суммы будущих наград — давайте сгенерируем траекторию, которая достигнет цель».
И это совершенно новый способ решения задач по управлению роботами. Подробнее о нём мы рассказали в новой статье: https://deepschool-pro.notion.site/Decision-Transformer-92feae6bd93d42da997cd44653f92a74?pvs=4
Обучение с подкреплением (RL) часто звучит как магия: агент учится решать задачи через взаимодействие с окружающей средой. Тыкнул сюда, получил минус балл, постараюсь больше так не делать. Тыкнул сюда, получил плюс балл — о, повторю!
Но в реальности всё сложнее. Представьте робота, которому нужно научиться управлять автомобилем. Для обучения требуется симулятор, который моделирует дорожные условия. Создать его — задача не из лёгких: это дорого, долго, а иногда просто невозможно. Более того, ошибки агента в симуляторе могут не просто «остаться в игре», но привести к серьёзным последствиям, если перенести их в реальный мир.
Допустим, вы хотите обучить робота доставлять посылки. Если он учится в реальном мире, то каждое «неудачное» действие — это разбитый аппарат. А симуляторы часто слишком далеки от реальности, и агент начинает пользоваться их несовершенствами, что делает результаты обучения неприменимыми.
Альтернативный способ для создания умных агентов: агент учится воспроизводить траектории, созданные человеком. Проблема в том, что он может лишь копировать, но не создавать новые стратегии для достижения лучших результатов. RL, наоборот, строит стратегии сам, но упирается в проблему сложности и дороговизны.
Decision Transformer (DT) как раз призван решить эту проблему, генерируя на основе имеющихся данных новые стратегии. Он использует идеи RL и переформулирует проблему RL как задачу генерации последовательности.
Проще говоря, вместо «учимся через ошибки», DT говорит: «Вот данные о прошлом опыте, вот цель в виде суммы будущих наград — давайте сгенерируем траекторию, которая достигнет цель».
И это совершенно новый способ решения задач по управлению роботами. Подробнее о нём мы рассказали в новой статье: https://deepschool-pro.notion.site/Decision-Transformer-92feae6bd93d42da997cd44653f92a74?pvs=4
DeepSchool on Notion
Decision Transformer: модель для управления роботами | Notion
Автор: Шамиль Мамедов
DeepSchool
«LLM LLM LLM» Все про них говорят, но мало кто умеет их готовить. Если вы хотите научиться использовать LLM правильно, переняв знания из первых уст от инженеров с опытом тюнинга, элаймента, ускорения, деплоя, создания RAG, агентов, тулов и вообще проектов…
Осталось 5 мест и 6 часов до конца скидки на курс LLM
Успевайте записаться, чтобы перенять опыт практикующих инженеров, задать все интересующие вопросы и закрыть пробелы в LLM!
Обучение начинается уже послезавтра, 27 ноября🎓
Изучайте подробности на сайте и записывайтесь на программу!
Успевайте записаться, чтобы перенять опыт практикующих инженеров, задать все интересующие вопросы и закрыть пробелы в LLM!
Обучение начинается уже послезавтра, 27 ноября
Изучайте подробности на сайте и записывайтесь на программу!
Please open Telegram to view this post
VIEW IN TELEGRAM
deepschool.ru
Large Language Models
Научим использовать LLM в приложениях: обучать, деплоить, ускорять и многое другое
Подкаст «Под капотом». Агенты и инструменты
Мы приглашаем в подкаст экспертов, чтобы понять, как работают сложные системы изнутри. В этом выпуске мы поговорили с Ильей Димовым, Senior NLP-инженером, о том, как сделать идеальную LLM под свои нужды и как они устроены внутри.
В этом выпуске мы узнаем:
- почему не так просто сделать из LLM друга, который будет более «живым», чем ChatGPT
- как научить LLM видеть и слышать
- кто такие агенты и в чём их главная проблема
- зачем LLM нужны инструменты
- и какие проблемы возникнут, если неправильно выбрать модель под задачу
Смотрите выпуск по ссылке! https://youtu.be/4uP7hbCbUjA
Мы приглашаем в подкаст экспертов, чтобы понять, как работают сложные системы изнутри. В этом выпуске мы поговорили с Ильей Димовым, Senior NLP-инженером, о том, как сделать идеальную LLM под свои нужды и как они устроены внутри.
В этом выпуске мы узнаем:
- почему не так просто сделать из LLM друга, который будет более «живым», чем ChatGPT
- как научить LLM видеть и слышать
- кто такие агенты и в чём их главная проблема
- зачем LLM нужны инструменты
- и какие проблемы возникнут, если неправильно выбрать модель под задачу
Смотрите выпуск по ссылке! https://youtu.be/4uP7hbCbUjA
YouTube
LLM. Илья Димов | Под Капотом
Записывайтесь на курс по LLM: https://deepschool.ru/llm?utm_source=yt&utm_content=agents-llm
Мы приглашаем в подкаст экспертов из различных областей, чтобы понять, как работают сложные системы изнутри. В этом выпуске мы говорили с Ильей Димовым, Senior…
Мы приглашаем в подкаст экспертов из различных областей, чтобы понять, как работают сложные системы изнутри. В этом выпуске мы говорили с Ильей Димовым, Senior…
Consistency models
Диффузионные модели сейчас — популярные генераторы в различных областях, включая генерацию изображений, видео, музыки и многого другого. Однако в отличие от тех же GANs-моделей, диффузионные обычно требуют запуска большого количества forward-ов, что существенно замедляет генерацию. Мы с вами уже рассмотрели несколько способов ускорения диффузионных моделей за счёт уменьшения количества шагов (InstaFlow, Дистилляция диффузии: часть 1, часть 2). А сегодня мы познакомимся с ещё одним популярным методом для ускорения — Consistency models.
Основная идея метода — обучение модели, обладающей свойством self-consistency. Это модель, которая переводит различные точки траектории диффузионного процесса в одну: f(x, t) = f(x1, t1).
Обучив такую модель, мы получаем генератор, который сможет теперь работать как за один, так и за несколько шагов. Аналогичную модель можно построить уже для латентного пространства — так мы получим Latent consistency models. Об основных моментах, связанных с данными моделями (особенностях их обучения, результатах в картинках и метриках), мы и поговорили в новой статье: https://deepschool-pro.notion.site/Consistency-models-93c3794b38034d558208660b732e5377?pvs=4
Диффузионные модели сейчас — популярные генераторы в различных областях, включая генерацию изображений, видео, музыки и многого другого. Однако в отличие от тех же GANs-моделей, диффузионные обычно требуют запуска большого количества forward-ов, что существенно замедляет генерацию. Мы с вами уже рассмотрели несколько способов ускорения диффузионных моделей за счёт уменьшения количества шагов (InstaFlow, Дистилляция диффузии: часть 1, часть 2). А сегодня мы познакомимся с ещё одним популярным методом для ускорения — Consistency models.
Основная идея метода — обучение модели, обладающей свойством self-consistency. Это модель, которая переводит различные точки траектории диффузионного процесса в одну: f(x, t) = f(x1, t1).
Обучив такую модель, мы получаем генератор, который сможет теперь работать как за один, так и за несколько шагов. Аналогичную модель можно построить уже для латентного пространства — так мы получим Latent consistency models. Об основных моментах, связанных с данными моделями (особенностях их обучения, результатах в картинках и метриках), мы и поговорили в новой статье: https://deepschool-pro.notion.site/Consistency-models-93c3794b38034d558208660b732e5377?pvs=4
DeepSchool on Notion
Consistency models | Notion
Автор: Нина Коновалова
Segment Anything Model 2
Segment Anything Model (SAM) сильно упростила процесс разметки картинок в задачах Computer Vision. Как правило, если домен похож на обучение — SAM хорошо уточняет границы объектов за несколько кликов. Такой процесс называется Interactive Object Segmentation.
Как это работает? Модель принимает на вход не только изображение, но и промпт (точку, бокс, маску), который указывает на нужный объект. Разные энкодеры обрабатывают изображение и промпт, отдельный лёгкий mask decoder переводит эмбеддинги изображения и промпта в предсказание маски объекта.
Segment Anything Model 2 (SAM 2) продолжает упрощать процесс разметки, в этот раз работая с видео. Для этого меняют архитектуру, чтобы добавить передачу информации между кадрами, а также собирают самый большой датасет для задачи Video Object Segmentation.
Сегодня мы обсудим, чем архитектура второй версии отличается от первой, а также рассмотрим проблемы текущих датасетов для Video Object Segmentation и их решение в SAM 2. Читайте новую статью по ссылке: https://deepschool-pro.notion.site/Segment-Anything-Model-2-c70a218c4484424d8d3749e383c428be?pvs=4
Segment Anything Model (SAM) сильно упростила процесс разметки картинок в задачах Computer Vision. Как правило, если домен похож на обучение — SAM хорошо уточняет границы объектов за несколько кликов. Такой процесс называется Interactive Object Segmentation.
Как это работает? Модель принимает на вход не только изображение, но и промпт (точку, бокс, маску), который указывает на нужный объект. Разные энкодеры обрабатывают изображение и промпт, отдельный лёгкий mask decoder переводит эмбеддинги изображения и промпта в предсказание маски объекта.
Segment Anything Model 2 (SAM 2) продолжает упрощать процесс разметки, в этот раз работая с видео. Для этого меняют архитектуру, чтобы добавить передачу информации между кадрами, а также собирают самый большой датасет для задачи Video Object Segmentation.
Сегодня мы обсудим, чем архитектура второй версии отличается от первой, а также рассмотрим проблемы текущих датасетов для Video Object Segmentation и их решение в SAM 2. Читайте новую статью по ссылке: https://deepschool-pro.notion.site/Segment-Anything-Model-2-c70a218c4484424d8d3749e383c428be?pvs=4
DeepSchool on Notion
Segment Anything Model 2 | Notion
Автор: Александр Лекомцев
Продолжаем знакомиться с авторами DeepSchool
ㅤ
Недавно мы рассказали, как пишем статьи и сколько людей работает над материалами. Ранее мы познакомились с частью команды: Ксюша, Саша, Марк, Илья, Саша.
А сегодня о себе расскажет Дима Раков, CV-инженер и Head of ML в NIIAS:
«Мы делаем проекты для РЖД, где часто применяем нейросетевые подходы. Наш главный проект — разработка беспилотного электропоезда с уровнем автоматизации GoA4 (работает без машиниста в кабине).
Я занимаюсь Autonomous Driving 5 лет. За это время вместе с командой мы смогли от начального прототипа разработать уже три системы для двух электропоездов и одного маневрового локомотива. А ещё мы первыми в мире запустили поезд с системой помощи машинисту (Goa3, аналогична системам ADAS в автомобилях) в постоянную эксплуатацию на МЦК (Московское центральное кольцо). Помимо беспилотников мы делаем много других проектов, направленных на повышение безопасности на ЖД.
Впервые с ML я познакомился в 2018 году на втором курсе университета. Один из преподавателей предложил выступить на конференции, где в списке тем были BigData и нейронные сети. Я заинтересовался и начал изучать всевозможные книжки, лекции и туториалы. Так и погрузился в ML.
В CV попал тоже случайно, когда в ВУЗе предложили поучаствовать в хакатоне от IBM. Случилось это примерно через полгода. Мне хватило навыков, чтобы зафайнтюнить Faster RCNN и занять призовое место. Так я решил, что CV — то, чем хочется заниматься. Тогда же начал ходить на ML-тренировки в СПБ (пишите, кто тоже ходил!) и продолжать активно участвовать в хакатонах.
После продолжительной стажировки и летней школы HSE несколько месяцев проработал в качестве CV-инженера. Разрабатывал систему для задачи SceneTextOCR для русского языка. В начале 2020 присоединился к NIIAS, где работаю до сих пор.
На работе мы решаем perception-задачи для разных сенсоров: камер, лидаров, тепловизоров. Встречаются такие классические задачи, как классификация, детекция, сегментация и трекинг, но со своими особенностями. Например, для обнаружения на 600 метрах детектор должен хорошо обнаруживать объекты 3x5 пикселей.
Также мы решаем и специализированные задачи под автономный транспорт. Например, находим глубину по кадру и отделяем точки земли в лидарном облаке.
Ещё есть открытые задачи, которые находятся в стадии исследования как у нас, так и у научного сообщества. Одна из них — нахождение неизвестных объектов на ЖД-полотне и в габарите электропоезда.
Отдельное направление — ML Safety. В реальной эксплуатации нейронные сети внутри поезда должны быть безопасны и объяснимы. Чтобы достичь таких свойств, мы исследуем и разрабатываем алгоритмы нахождения аномалий и неопределённостей в данных и предсказаниях моделей.
В DeepSchool я пишу статьи на темы, которые связаны с моими исследованиями или, на мой взгляд, недостаточно освещены в РУ сегменте. Также я лектор на курсах «3DCV» и «Деплой DL-сервисов».
Помимо основных активностей люблю:
- Смотреть турниры по смешанным единоборствам
- Играть в CS
- Проводить "диванную аналитику"»
В комментариях можно пообщаться с Димой и задать интересующие вопросы :)
Посты Димы:
- Виды представления лидарных данных (часть 1, часть 2, часть 3)
- Сегментация поверхности земли
- Few-shot learning
- Эффективные ансамбли
- ModelSoups: варим суп из моделей
- CV-задачи над 3D-данными
ㅤ
Недавно мы рассказали, как пишем статьи и сколько людей работает над материалами. Ранее мы познакомились с частью команды: Ксюша, Саша, Марк, Илья, Саша.
А сегодня о себе расскажет Дима Раков, CV-инженер и Head of ML в NIIAS:
«Мы делаем проекты для РЖД, где часто применяем нейросетевые подходы. Наш главный проект — разработка беспилотного электропоезда с уровнем автоматизации GoA4 (работает без машиниста в кабине).
Я занимаюсь Autonomous Driving 5 лет. За это время вместе с командой мы смогли от начального прототипа разработать уже три системы для двух электропоездов и одного маневрового локомотива. А ещё мы первыми в мире запустили поезд с системой помощи машинисту (Goa3, аналогична системам ADAS в автомобилях) в постоянную эксплуатацию на МЦК (Московское центральное кольцо). Помимо беспилотников мы делаем много других проектов, направленных на повышение безопасности на ЖД.
Впервые с ML я познакомился в 2018 году на втором курсе университета. Один из преподавателей предложил выступить на конференции, где в списке тем были BigData и нейронные сети. Я заинтересовался и начал изучать всевозможные книжки, лекции и туториалы. Так и погрузился в ML.
В CV попал тоже случайно, когда в ВУЗе предложили поучаствовать в хакатоне от IBM. Случилось это примерно через полгода. Мне хватило навыков, чтобы зафайнтюнить Faster RCNN и занять призовое место. Так я решил, что CV — то, чем хочется заниматься. Тогда же начал ходить на ML-тренировки в СПБ (пишите, кто тоже ходил!) и продолжать активно участвовать в хакатонах.
После продолжительной стажировки и летней школы HSE несколько месяцев проработал в качестве CV-инженера. Разрабатывал систему для задачи SceneTextOCR для русского языка. В начале 2020 присоединился к NIIAS, где работаю до сих пор.
На работе мы решаем perception-задачи для разных сенсоров: камер, лидаров, тепловизоров. Встречаются такие классические задачи, как классификация, детекция, сегментация и трекинг, но со своими особенностями. Например, для обнаружения на 600 метрах детектор должен хорошо обнаруживать объекты 3x5 пикселей.
Также мы решаем и специализированные задачи под автономный транспорт. Например, находим глубину по кадру и отделяем точки земли в лидарном облаке.
Ещё есть открытые задачи, которые находятся в стадии исследования как у нас, так и у научного сообщества. Одна из них — нахождение неизвестных объектов на ЖД-полотне и в габарите электропоезда.
Отдельное направление — ML Safety. В реальной эксплуатации нейронные сети внутри поезда должны быть безопасны и объяснимы. Чтобы достичь таких свойств, мы исследуем и разрабатываем алгоритмы нахождения аномалий и неопределённостей в данных и предсказаниях моделей.
В DeepSchool я пишу статьи на темы, которые связаны с моими исследованиями или, на мой взгляд, недостаточно освещены в РУ сегменте. Также я лектор на курсах «3DCV» и «Деплой DL-сервисов».
Помимо основных активностей люблю:
- Смотреть турниры по смешанным единоборствам
- Играть в CS
- Проводить "диванную аналитику"»
В комментариях можно пообщаться с Димой и задать интересующие вопросы :)
Посты Димы:
- Виды представления лидарных данных (часть 1, часть 2, часть 3)
- Сегментация поверхности земли
- Few-shot learning
- Эффективные ансамбли
- ModelSoups: варим суп из моделей
- CV-задачи над 3D-данными
Мы решили сделать вам подарок, которого хватит на весь будущий год! Выбирайте любой из 3 курсов ниже со скидкой -20%, и любой следующий курс от нашей школы будет выгоднее на 25%!
Деплой DL-сервисов — освойте создание и деплой DL-сервисов
LLM — научитесь обучать, деплоить и ускорять LLM
Ускорение нейросетей — ускорьте нейросети на любых устройствах
Вы можете выбрать:
Более подробная информация об акции на сайте.
Добавьте в планы на год повышение квалификации и сделайте это с выгодой!
Переходите на сайт, выбирайте программу и присоединяйтесь к обучению в новом году со скидкой!
Please open Telegram to view this post
VIEW IN TELEGRAM