Хитрости авито: Как продавать на Авито — правила, пошаговая инструкция, лайфхаки

Хитрости авито: Как продавать на Авито — правила, пошаговая инструкция, лайфхаки

Число вакансий для людей с ограниченными возможностями выросло на 40% — «Авито Работа»

Продолжение сюжета от

Новости

Новости

Кирилл Билык

Редактор отдела «Новости»

Кирилл Билык

Количество вакансий для людей с ограниченными возможностями выросло за год на 40%, сообщили в «Авито Работе». Большинство таких вакансий – в сферах сельского хозяйства, производства, продажах и строительства.

Кирилл Билык

Активность соискателей с ограниченными возможностями здоровья (ОВЗ) за последний год выросла на 44%, а число предложений о работе для таких людей – на 40%, сообщили в сервисе «Авито Работа».

Большинство вакансий, доступных для людей с ограниченными возможностями, предлагается в сферах сельского хозяйства и производства (20%), продажах (10%), строительстве (8%).

Самая высокая активность соискателей с ОВЗ наблюдается в промышленности (23% от всех откликов), строительстве (11%) и продажах (8%). Больше всего активность соискателей выросла в сферах образования (+63%), медицине (+55%) и IT (+45%).

Людей с ОВЗ берут как на офисную работу, так и на удаленную, отметили специалисты. В том числе востребованность «удаленки» оказала влияние на рост показателей по доступности вакансий и активности соискателей, пояснили в «Авито Работе».

Фото на обложке: Songsak C / Shutterstock

Подписывайтесь на наш Telegram-канал, чтобы быть в курсе последних новостей и событий!

  • Avito
  • Карьера
  • HR
  • Удаленка
  • Россия

Нашли опечатку? Выделите текст и нажмите Ctrl + Enter

Материалы по теме

  1. 1 «Авито» проведет круглый стол на тему новых вызовов и возможностей в маркетинге
  2. 2 Теперь без привычных соцсетей: почему стоит развивать бизнес на Авито
  3. 3 Продвижение на классифайдах: пять советов новичкам для повышения эффективности
  4. 4 «Помогаем расти миллионам предприятий по всей стране: как гигантам, так и малышам»
  5. 5 Почему вашему бизнесу нужен профиль на «Авито»: 5 главных причин

ВОЗМОЖНОСТИ

07 апреля 2023

Весенний Всероссийский онлайн-хакатон 2. 0

07 апреля 2023

AssistiveTech

09 апреля 2023

FOSS Kruzhok

10 апреля 2023

Программа стажировок в «Лаборатории Касперского»

10 апреля 2023

Бесплатная упаковка бизнеса во франшизу

Все ВОЗМОЖНОСТИ

Новости

Названы топ-5 привычек, которые мешают накопить

Аналитика

Нейросеть ChatGPT: новый бесплатный чат-бот с искусственным интеллектом

Новости

«Яндекс Go» запустил услугу заказа такси сразу на несколько часов

Списки и рейтинги

Самые интересные нейросети: топ-14 сервисов для раскрашивания изображений, генерации текста и не только

Истории

Подборка: 10 самых популярных ИИ-генераторов изображений

Доска объявлений или IT-компания? Как изменился «Авито» за 15 лет | Компании | Деньги

В конце августа компания собрала своих клиентов и бизнес-партнеров в яхт-клубе на берегу Финского залива. Корреспондент aif.ru посетил мероприятие, а также побывал в петербургском офисе компании. Генеральный директор Владимир Правдивый и директор центра клиентского сервиса Шьям Намбиар рассказали, что собой сегодня представляет крупнейшая платформа объявлений и как обеспечивается безопасность ее пользователей.

Простая задумка

— Владимир, «Авито» скоро исполнится 15 лет. Какой путь за это время проделала компания?

— Да, формально компании, действительно, скоро 15. Но реально, как живому проекту, 13. Дело в том, что первые два года небольшой экспериментальный стартап искал свое место на рынке. И тогда никто не думал, что проект будет настолько большим.

Только я работаю в компании уже почти девять лет, здесь сейчас трудится 5 тысяч человек. Проект, естественно, получился гораздо более успешным, чем предполагалось.

Но несмотря на нынешние масштабы, считаю, что мы еще в начале пути и для клиентов можем сделать гораздо больше в бизнес-модели сделки.

Еще совсем недавно «Авито» больше воспринимался как сайт объявлений. За последние 2 года ситуация сильно изменилась. Сейчас благодаря сервису доставки платформа превращается в полноценный маркетплейс, где можно без рисков осуществлять сделки по продаже и покупке. При использовании сервиса доставки продавец получает средства лишь тогда, когда клиент проверил товар и подтвердил его получение. Если с посылкой в пути произойдет неприятность, мы компенсируем затраты. Это безопасная сделка и для покупателя, и для продавца. Если раньше сторонам сделки надо было договариваться о встрече и вступать в непосредственный контакт, то теперь в один клик можно купить что-то продающееся в Калининграде, к примеру, находясь во Владивостоке.

— Вы сейчас могли бы рассказать, в чем залог успеха?

— Мы мыслим категориями команды — команды, которая действительно знает и любит свое дело. У нас есть простая и четкая цель — делать самый лучший продукт. Быть не просто лучшей компанией в России, но лучшей компанией в мире, создавать тренды в глобальном масштабе.

У «Авито» уже это получается: полгода назад мы стали компанией номер один в мировом рейтинге наиболее посещаемых сайтов объявлений по данным Similar Web.

Фото: Авито

Следующая наша цель — стать номер один по всем показателям удобства создаваемых нами продуктов. А их количество и охват стремительно растут — мы уже объединяем и создаем сервисы не только для частных предпринимателей, но и для больших компаний, выходим за пределы онлайн-платформы, как в случае с сервисом доставки, что требует интеграции с большим количеством сторонних компаний, банков и логистических операторов.

— Вы позиционируете себя как IT-компания?

— Так и есть. Это технологическая компания с очень сложными продуктами и алгоритмами «под капотом». При этом пользователям здесь легко и удобно. Когда мы запускались, идея была простой: сервис должен быть интуитивно понятным любому — будь то школьник, его родители или более старшее поколение.

Изначально компания создавалась как доска объявлений для самых простых вещей: коляски, домашние питомцы, б/у вещи. Со временем мы расширили спектр предложений. Для частных граждан стал доступен заказ любых услуг, продажа и аренда недвижимости/авто, поиск работы. Но онлайн-сервис стал помощником и для предпринимателей. А для того, чтобы они могли эффективно работать на нашей площадке нужны сложные продукты. И сегодня за простотой и удобством стоят серьезные механизмы защиты пользователей, разработанные нашими IT-специалистами.

— Сегодня компания — это агрегатор, который охватывает совершенно разные сферы жизни, используя алгоритмы?

— Мы объединяем большое количество разных сервисов, связанных с потребностями людей. Будь то аренда, покупка, продажа товаров или автомобилей, поиск работы и услуг. От простого типа сделки в онлайне мы уже перешли к сделкам в офлайне. Потому что доставка означает, что нужно создать сервис интеграции с Почтой России и другими курьерскими операторами. А для пользователя все по-прежнему просто. Де-факто наша платформа — это суперпроект с набором сервисов, которые существенно упрощают жизнь пользователя.

Фото: Авито

Не пустили даже директора

— У вас хранятся данные миллионов пользователей. Как они могут быть уверены, что информация в безопасности и не окажется в руках злоумышленников?

— Это одна из задач IT-специалистов, которые отвечают за безопасность и хранение данных. Мы не используем облачные сервисы, вся информация хранится в наших собственных DATA-центрах на территории РФ. Они имеют такой высокий уровень безопасности, что однажды я забыл паспорт и меня туда не впустили, хотя все знают, кто я. Правила есть правила. А раз даже я не могу туда так просто зайти, то несанкционированное проникновение посторонних вообще исключено.

Мы строго соблюдаем законодательство, которое регламентирует защиту персональных данных, и не забываем о просвещении пользователей в области информбезопасности.

— Часто ли на платформе пытаются продать что-то запрещенное? Как вы с этим боретесь?

— Иногда люди так поступают, не понимая, что нарушают закон. Например, у человека после лечения остались лекарства. Он думает, возможно, что вообще делает благое дело, предлагая их, но закон очень суров. Продавать лекарства на площадке нельзя. Поэтому у нас работает система модерации, которая проверяет объявление до публикации на площадке, чтобы оно соответствовало законодательству и внутренним правилам. В день система анализирует до 5 млн объявлений и около 8 млрд. пользовательских действий, алгоритмы помогают вычислять злоумышленников и блокируют их. 500 человек работают круглосуточно, перепроверяют сложные случаи. Потенциально рискованное объявление скрывается, и отправляется на ручную проверку.

— Идет двухэтапная модерация — машинная и ручная? Проверяются все объявления?

— Через превентивную модерацию проходят абсолютно все объявления. Если большая часть сервисов сначала публикует, а потом проверяет, то у нас это действует ровно наоборот: мы сначала проверяем контент, а потом принимаем решение о размещении. Так мы уверены, что ничего незаконного не попадет на платформу

— Какие инструменты используете для борьбы с мошенниками?

— Это больная тема для всех, в том числе, для крупных компаний. Они всегда будут привлекательны для аферистов из-за своей большой аудитории. В борьбе с мошенниками важно помнить о цифровой гигиене и элементарных правилах. Не надо отдавать предоплату незнакомцам, не стоит во время совершения сделки уходить с нашей площадки и из наших каналов коммуникации — злоумышленники как раз пытаются увести клиента на другой сайт, так как на «Авито» есть инструменты, защищающие пользователей — защита номера и безопасный чат. Система модерации анализирует общение между продавцом и покупателем, и если кто-то попытается совершить неправомерные действия, блокирует его, пресекая мошенничество. Наша задача — представить весь спектр инструментов защиты пользователю и научить его ими пользоваться регулярно.

— Какова динамика случаев обмана пользователей с использованием платформы?

— Инвестиции в IT-продукты, в развитие команды специалистов привели к тому, что количество случаев мошенничества с использованием бренда свелось к минимуму. За последние два года число жалоб на обман со стороны наших пользователей снизилось в 20 раз. Понятно, что иногда люди пренебрегают правилами, принимают рискованные решения. Это как правила поведения для пешеходов: ты можешь построить подземные переходы, расставить светофоры и ограждения, но если кто-то хочет перебежать дорогу на красный свет — здесь научить может только собственный опыт. Хотя, образно говоря, мы даже регулировщика ставим, чтобы вручную препятствовать нарушениям — предупреждаем об опасности уведомлениями. Но мы видим, как меняется ситуация в лучшую сторону и растет сознательность.

— Вы являетесь еще и бизнес-инкубатором для компаний малого и среднего бизнеса. В чем это выражается? Какие направления популярны?

— Весной к нам перешло немало предпринимателей с других площадок, которые теперь стали недоступны. Как выяснилось, некоторые из них даже не пробовали пользоваться нашим продуктом и не знали, насколько это удобно и эффективно. Но после пробного периода остались с нами навсегда. Сегодня наш сервис — одна из основных площадок для ведения среднего и малого бизнеса. Миллионы предпринимателей работают с нами и платформа становится для них эксклюзивным партнером. В основном это продавцы товаров, мастера по ремонту, репетиторы, риелторы, перевозчики, а также дилеры, агентства недвижимости и многие другие. Нас выбирают из-за огромной мотивированной аудитории. Люди приходят на площадку не просто посмотреть объявления, а чтобы совершить сделку. Кроме того, наш сервис очень простой. У многих предпринимателей нет собственных маркетологов, они сами ведут свой бизнес, поэтому для них простота сервиса, понятные инструменты, высокая эффективность и низкий порог входа — самые главные факторы выбора нашей площадки.

Кто поможет?

Директор центра клиентского сервиса Шьям Намбиар подробнее рассказал, как в компании организована работа с клиентами.

Фото: Авито

— Шьям, как давно вы работаете директором центра клиентского сервиса в компании? Какие основные задачи перед вами ставили на старте, что уже удалось сделать?

— Я работаю здесь чуть больше трех месяцев. Первоначальной задачей было понять, как все работает в России, как устроена эта индустрия. Я пришел из Amazon и занимался до этого электронной коммерцией. Мне нужно было здесь также построить процессы, сделать их максимально эффективными.

— То есть оптимизировать уже существующую систему?

— Да, совершенно, верно. У нас очень хорошие специалисты, и сама организация работает довольно долго, но мы развиваемся экстенсивно. Нам нужно работать в таких же темпах и при этом учитывать тенденции, чтобы не получалось так, что сначала мы что-то меняем в продукте, а потом вдруг обнаруживаем, что это как-то негативно сказывается на клиентском сервисе.

— Как вы оцениваете эффективность работы клиентских сервисов? Растет ли удовлетворенность клиентов?

— Компания развивается очень быстро и при этом очень важно сохранить клиентский сервис на высоком уровне. Сейчас у нас работает много различных команд. Они занимаются и развитием продукта, и технологическими процессами. Учитывая все изменения мы сохраняем качество и эффективность работы и стараемся выйти на новый уровень.

Я вам назову три показателя, по которым мы оцениваем позитивные изменения. За последние три месяца удовлетворенность клиентов увеличилась на 5%. К тому же нам удалось увеличить количество обращений, по которым удается решить проблему с первого раза. Выросло также число обращений, которые нам удалось решить полностью за 24 часа.

— Сколько человек работает в службе поддержки клиентов сегодня? Чем они занимаются?

— В 2021 году компания приняла решение работать в виртуализированной модели. У нас пять вертикалей: товары, работы, услуги, недвижимость, авто, плюс особо выделена доставка. На каждом направлении у нас работает отдельная команда клиентского сервиса, которая обрабатывает профильные обращения. Они помогают пользователям по трем каналам — по телефону, электронной почте и через чат на сайте.

Если говорить о структуре центра клиентского сервиса. У нас есть отдел, занимающийся операционной деятельностью, и под ним находятся все специалисты, которые непосредственно взаимодействуют с клиентами. Помимо этого, у нас есть управление проектами, команды по планированию, распределению рабочей силы и улучшению. Последнее касается качества взаимодействия с клиентами. Здесь три отдела — по качеству, обучению и контенту. Под контентом я подразумеваю то, что и как клиент видит на страничке в разделе «служба поддержки» и то, что видят специалисты, когда работают с клиентом. В общей сложности команда состоит из 1500 человек. Сейчас мы работаем из 35 разных городов России, включая Москву и Санкт-Петербург.

Человек или бот?

— Сколько обращений в среднем получает центр клиентского сервиса от пользователей?

— Примерно 1 млн в месяц, то есть около 30 тысяч обращений в день. Именно поэтому нам нужна такая большая и многопрофильная команда специалистов. Также важно учитывать, что сотрудники обрабатывают где-то 70-75% заявок, с остальными справляется бот.

— Сейчас многие сервисы используют при работе с клиентами виртуальных помощников. Какие у вас задействованы инструменты автоматизации и как они работают?

— Когда я говорю бот, я не имею в виду, что мы отмахиваемся от клиентов, оставляя их с виртуальным помощником. Такой инструмент помогает нам общаться с тысячами людей одновременно и решать их вопросы моментально. Ботов мы используем только в простых кейсах, когда человеческий мозг лучше справится с задачей, задействуют операторов.

Каждую неделю мы отслеживаем, сколько людей связались с виртуальным помощником и сколько проблем ему удалось решить самостоятельно. Этот показатель постоянно фиксируется, чтобы количество обращений, которые решаются только ботом, росло.

В центре клиентского сервиса мы стремимся сделать так, чтобы общение с нами было приятным и полезным. Стараемся создать на площадке максимально комфортные и интуитивно понятные условия для работы, в том числе, и для наших сотрудников.

— Сегодня большое внимание уделяется цифровой безопасности. Насколько защищены пользователи онлайн-сервиса? Почему покупателям и продавцам рекомендуют общаться только в чате на площадке?

— Чат онлайн-сервиса на 100% безопасен, с помощью него мы можем защитить клиентов. Проблема возникает, когда продавцы и покупатели при обсуждении каких-либо деталей переходят в сторонние мессенджеры. Чтобы защитить пользователей, мы просим их оставаться на нашей платформе, где мы можем гарантировать их безопасность, а также смотрим в каких ситуациях люди вынуждены покидать встроенный чат. Отталкиваясь от этого, мы развиваем продукт так, чтобы клиенты могли получить все, что им нужно, через сервисы компании. Например, мы выяснили, что одной из причин, почему пользователи переходили в сторонние мессенджеры, была невозможность отправлять видео через наш чат. Поэтому в апреле мы добавили эту функцию. Это не только упростило жизнь продавцам и покупателям, но и защитило их от потенциальных злоумышленников.

Почему мы перешли с Python на Go в системе рекомендаций Авито | Василий Копытов | АвитоТех | март 2023 г.

Привет! Меня зовут Василий Копытов, я руковожу группой разработки рекомендаций Авито. Мы занимаемся системами, предоставляющими пользователю персонализированную рекламу на сайте и в приложениях. На примере нашего основного сервиса я покажу, когда переходить с Python на Go, а когда оставить все как есть. В конце я дам несколько советов по оптимизации сервисов Python.

Любой, кто заходит на главную страницу сайта или приложения, видит персонализированную ленту объявлений — рекомендации. Нагрузка на наш основной рекомендательный сервис, отвечающий за генерацию бесконечной ленты объявлений на главной странице, составляет около 200 000 запросов в минуту. Общий трафик до 500 000 запросов в минуту на рекомендации.

Так выглядят рекомендации в приложении и на сайте

Сервис выбирает наиболее подходящие объявления из 130 миллионов активных объявлений (элементов) для каждого пользователя. Рекомендации генерируются на основе каждого действия человека за последний месяц.

Представительство работает по следующему алгоритму:

1. Сервис обращается к хранилищу истории пользователя и извлекает из него агрегированную историю действий и интересов.

Интересы — это набор категорий и подкатегорий рекламы, которую человек недавно просматривал. Например, детская одежда, домашние животные или товары для дома.

2. Затем передается история и интересы как набор параметров, воздействие на модели машинного обучения первого уровня.

Модели машинного обучения первого уровня являются базовыми службами. Сейчас у нас есть 4 таких модели. Они предсказывают элементы, используя различные алгоритмы машинного обучения. На выходе каждого сервиса получаем список id (рекомендуемых).

3. Мы фильтруем идентификатор на основе истории пользователя. У нас получается около 3000 элементов на пользователя.

4. И самое интересное, что представление внутри использует модель машинного обучения второго уровня, основанную на CatBoost, для ранжирования рекламы из моделей машинного обучения первого уровня в реальном времени.

5. Из данных готовим характеристики. Это параметры ранжирования рекомендаций. Для этого мы используем id элемента для получения данных в хранилище (осколочная база данных 1 ТБ, Redis). Данные товара — название, цена и еще около 50 полей.

6. Служба передает функции и элементы в модель машинного обучения второго уровня на основе библиотеки CatBoost. Результатом является ранжированная лента объявлений.

7. Далее представление выполняет бизнес-логику. Например, подбирает в ленте те объявления, за премиум размещение которых взимается плата (boost VAS).

8. Кешируем и отдаем сгенерированный фид рекомендации пользователю, в нем около 3000 объявлений.

Алгоритм формирования ленты рекомендаций

Представительство как услуга очень загружено в Авито. Он обрабатывает 200 000 запросов в минуту. Сервис стал таким не сразу: мы постоянно вносили что-то новое и улучшали качество рекомендаций. В какой-то момент он начал потреблять почти столько же ресурсов, сколько и весь остальной монолит Авито. Нам стало сложно выкатывать сервис в дневное время, в часы пик, из-за нехватки ресурсов в кластере — в это время большинство разработчиков развертывали свои сервисы.

Карта взаимодействия сервисов Авито. Размер кружка показывает, сколько ресурсов кластера потребляет служба

Вместе с ростом потребления ресурсов росло и время отклика службы. Во время пиковых нагрузок пользователи могли ждать свои рекомендации до 1,6 секунды — это в 8 раз больше, чем за последние 2 года. Все это могло заблокировать дальнейшее развитие и совершенствование рекомендаций.

Причины этого достаточно очевидны:

  1. Высокая нагрузка, связанная с вводом-выводом. В представлении каждый запрос состоит примерно из 20 сопрограмм — блоков кода, которые выполняются асинхронно при обработке сетевых запросов.
  2. Нагрузка на ЦП от вычислений в реальном времени по ML-модели, которые полностью заняты ЦП, пока происходит ранжирование рекламы.
  3. GIL — представление изначально было написано на однопоточном Python. В этом языке программирования невозможно совместить рабочие нагрузки, связанные с вводом-выводом и с привязкой к ЦП, чтобы служба эффективно использовала ресурсы.

Позвольте мне рассказать вам, что помогло нам справиться с нашими нагрузками в Python.

1. ProcessPoolExecutor

ProcessPoolExecutor создает пул воркеров из процессорных ядер. Каждый воркер — это отдельный процесс, работающий на отдельном ядре. Вы можете передать нагрузку, связанную с ЦП, на рабочий процесс, чтобы он не замедлял другие процессы.

В представлении мы изначально использовали ProcessPoolExecutor для разделения рабочих нагрузок, связанных с процессором и вводом-выводом. В дополнение к основному процессу Python, который обслуживает запросы и ходит по сети (с привязкой к IO), мы выделили три воркера для ML-модели (с привязкой к CPU).

У нас есть асинхронная служба на aiohttp, которая обслуживает запросы и успешно обрабатывает нагрузку, связанную с вводом-выводом. ProcessPoolExecutor создает пул рабочих процессов. Рабочую нагрузку, связанную с ЦП, можно передать такому рабочему процессу, чтобы он не замедлял основной процесс службы и не влиял на задержку всей службы.

Выигрыш времени от использования ProcessPoolExecutor составляет около 35%. Для эксперимента мы решили сделать код синхронным и отключили ProcessPoolExecutor. То есть рабочие нагрузки, связанные с вводом-выводом и процессором, начали выполняться в одном процессе.

Без ProcessPoolExecutor время отклика увеличилось на 35%

Как это выглядит в коде:

 async def process_request(user_id): 
# Задача ввода/вывода
async with session.post(
feature_service_url,
json= {'user_id': user_id},
) as resp:
functions = await resp.json()

return features

У нас есть асинхронный обработчик, который обрабатывает запрос. Для тех, кто не знаком с синтаксисом асинхронного ожидания, это ключевые слова, обозначающие точки переключения сопрограммы.

То есть на седьмой строке кода одна сопрограмма уходит в сон и отдает выполнение другой сопрограмме, которая уже получила данные, тем самым экономя процессорное время. Таким образом Python реализует совместную многозадачность.

 def предсказание (функции) 
preprocessed_features = процессор.препроцесс (представленный)
return model.infer(preprocessed_features)

async def process_request(user_id):
# задача ввода-вывода
асинхронно с session.post(
feature_service_url,
json ={'user_id': user_id},
) как соотв.:
features = awat resp.json()

# блокировка CPUtask
return predict(features)

Внезапно нам нужно выполнить загрузку с привязкой к ЦП из ML-модели. И так на предсказать функцию наша сопрограмма заблокирует процесс python. Чтобы все сервисные запросы не стояли в очереди и время ответа сервиса не увеличивалось, как мы видели ранее.

 исполнитель = concurrent.futures.ProcessPoolExecutor(man_workers=N) 

по определению предсказать(функции):
preprocessed_features = CPU.preprocess(features)
return model.infer(preprocessed_features)

async def process_request(user_id):
# задача ввода/вывода
async with session.post(
feature_service_url,
json={'user_id': user_id},
) as resp:
features = await resp.json()

# Неблокирующая задача ЦП
return await loop.run_in_executor(executor, predict(features))

Здесь ProcessPoolExecutor вступает со своим собственным пул рабочих, который решает эту проблему. В строке 1 мы создаем пул. В конце блока кода мы берем рабочего оттуда и перемещаем задачу, связанную с процессором, на отдельное ядро. Таким образом, функция прогнозирования будет выполняться асинхронно по отношению к родительскому процессу, а не блокировать его. Приятно то, что все это будет завернуто в обычный синтаксис async-await, а задачи, привязанные к процессору, будут выполняться асинхронно, как и задачи, связанные с вводом-выводом, но под капотом будет дополнительная магия с процессами.

ProcessPoolExecutor позволил нам снизить накладные расходы от модели ML в реальном времени, но и с ним в какой-то момент стало плохо. Первое, с чего мы начали, было самым очевидным — профилированием и выявлением узких мест.

2. Профилирование службы

Даже если служба написана опытными программистами, ее можно улучшить. Чтобы понять, какие части кода медленные, а какие быстрые, мы профилировали сервис с помощью профилировщика py-spy.

Профилировщик строит диаграмму, на которой горизонтальные полосы показывают, сколько процессорного времени тратится впустую на участок кода. Первое, что вы видите, это 3 полосы справа. Это всего лишь наши дочерние процессы для оценки функций модели ML.

Результат профилирования Rec-представления. Например, видно, что воркеры ProcessPoolExecutor для модели ML занимают почти одинаковое количество ресурсов ЦП

На графике пламени мы увидели некоторые интересные детали:

  • 7% процессорного времени тратится на сериализацию данных между процессами. Сериализация — это преобразование данных в байты. В Python этот процесс называется pickle , а обратный — unpickle .
  • 3% времени уходит на оверхед ProcessPoolExecutor — подготовка пула воркеров и распределение нагрузки между ними.
  • 6,7% времени тратится на сериализацию данных для сетевых запросов в json.loads и json.dumps.

В дополнение к процентному распределению, мы хотели знать конкретное время, затрачиваемое на выполнение различных частей кода. Для этого мы снова отключили ProcessPoolExecutor, запустили модель ML для ранжирования синхронно.

Без ProcessPoolExecutor ранжирование происходит быстрее, т.к. все процессорное время занято только подготовкой фич и скорингом по ML модели, нет накладных расходов на pickle/unpickle и IO-wait

Но проблема остается — конкретный кусок кода стало быстрее, но сам сервис стал медленнее.

Поэкспериментировав, мы выяснили:

  • Накладные расходы ProcessPoolExecutor составляют около 100 миллисекунд.
  • Запросы, связанные с вводом-выводом, от сопрограмм ждут 80 миллисекунд, то есть сопрограмма засыпает, и цикл событий снова обращается к ней через 80 мс, чтобы возобновить ее выполнение. В Representation есть три большие группы IO-bound запросов — всего на IO-wait тратится 240 миллисекунд.

Именно тогда мы впервые подумали о переходе на Go, так как он имеет более эффективную модель планирования подпрограмм из коробки.

3. Разделить рабочую нагрузку, связанную с процессором и вводом-выводом, на две отдельные службы

Одним из больших изменений, которые мы пытались сделать, было удаление модели машинного обучения в отдельную службу повторного ранжирования. То есть мы сохранили наш сервис представления только с сетевыми запросами, а скоринг ML-модели был на отдельном сервисе rec-ranker, куда мы передавали все необходимые данные и возвращали скоринг для ранжирования. Казалось, что мы немного уменьшим латентность и масштабируем обе части по отдельности.

Эксперимент показал, что мы экономим время на работе модели, но получаем задержку в 270 миллисекунд при передаче данных по сети и json.loads/json.dumps. Нам нужно передать около 4 Мб на запрос, а для очень активных пользователей до 12 Мб данных для модели ML. После масштабирования rec-ranker реплики стали ненамного меньше старого представления, а время отклика не изменилось. Для нашего случая разбиение на сервисы оказалось неудачным решением, поэтому мы вернулись к предыдущей реализации Representation.

4. Оцененная общая память

В службе Представление данные передаются между процессами посредством pickle/unpickle. Вместо этого процессы, которые совместно используют данные, могут указывать на общую область памяти. Это экономит время сериализации.

Максимальная оценка состоит в том, что мы могли бы выиграть около 70 миллисекунд на сериализацию с таким же сокращением времени для объема выполнения запроса, поскольку загрузка процессора блокировала основной процесс Python, который обрабатывал запросы от пользователей. Такой вывод мы сделали по профилю: pickle/unpickle занимает всего 7% процессорного времени, от разделяемой памяти особого профита не будет.

5. Подготовка фич в Go

Мы решили сначала протестировать работоспособность Go на части сервиса. Для эксперимента мы выбрали самую ресурсоемкую задачу в сервисе — подготовку фич.

Возможности в сервисе рекомендаций — данные о товаре и действия пользователя. Например, название объявления, цена, информация о показах и кликах. Существует около 60 параметров, влияющих на результат модели машинного обучения. То есть мы готовим все эти данные для 3000 элементов и отправляем их в модель, и она дает нам оценку для каждого элемента, которую мы используем для ранжирования фида.

Чтобы связать код Go для подготовки функций с остальной частью кода службы в Python, мы использовали ctypes.

 def get_predictions( 
raw_data: bytes,
model_ptr: POINTER(c_void_p),
size: int,
) -> список:
raw_predictions = lib. GetPredictionsWithModel(
GoString(raw_data, len(raw_data)), 90r
)
предсказания = [raw_predictions[i] для i в диапазоне (размере)]
возврат предсказаний

Так выглядит подготовка функций внутри Python. Модуль lib представляет собой скомпилированный пакет Go с функцией GetPredictionsWithModel. В него мы передаем байты с данными об элементах и ​​указатели на ML-модель. Все функции подготовлены кодом Go.

Результаты были впечатляющими:

  • Функции Go считаются в 20–30 раз быстрее;
  • весь шаг ранжирования в 3 раза быстрее с учетом дополнительной сериализации данных в байты;
  • отклик главной страницы упал на 35%.
Подготовка фич на Go ускорила загрузку главной страницы сайта с 1060 до 680 миллисекунд Время ранжирования рекомендаций по ML-модели с подготовкой фич. Здесь также нужно учитывать, что в случае с Go у нас синхронный код и мы не используем ProcessPoolExecutor

Результаты

После всех экспериментов мы сделали четыре вывода:

  • Функции Go для 3000 элементов на запрос считаются в 20–30 раз быстрее, что экономит 30% времени.
  • ProcessPoolExecutor тратит впустую около 10% времени.
  • Три группы запросов, связанных с вводом-выводом, занимают 25% времени пустых ожиданий.
  • После перехода на Go мы сэкономим около 65% времени.

Есть модель ML в представлении-го. Естественно кажется, что ML хорош только для Python, но в нашем случае модель ML на CatBoost и у нее есть C-API, который можно вызывать из Go. Этим мы и воспользовались.

Ниже приведен фрагмент кода на Go. Не буду на этом особо останавливаться, отмечу только, что логический вывод дает те же результаты, что и в Python. C — это псевдопакет, предоставляющий Go интерфейс для библиотек C.

 if !C.CalcModelPrediction( 
model.Handler,
C.size_t(nSamples),
floatsC,
C.size_t(floatFeaturesCount),
CatsC,
C.size_t(categoryFeaturesCount),
(*C.double) (&results[0]),
C.size_t(nSamples),
) {
вернуть ноль, getError()
}

Проблема в том, что модель машинного обучения все еще обучается на Python. И для того, чтобы он изучал и строил одни и те же функции, важно, чтобы они не расходились.

Мы начали их готовить по коду Go-service. Обучение происходит на отдельных машинах, туда загружается сервисный код в Go, по этому коду готовятся фичи, сохраняются в файл, затем Python-скрипт скачивает этот файл и обучает на них модель. В качестве бонуса обучение также стало в 20–30 раз быстрее.

Representation-go показал отличные результаты:

  • Время отклика главной страницы сократилось в 3 раза с 1280 миллисекунд до 450 миллисекунд.
  • Потребление ЦП снизилось в 5 раз.
  • Потребление ОЗУ снизилось в 21 раз.
Сервис в три раза быстрее написан на Go по сравнению с Python

Мы разблокировали дальнейшее развитие рекомендаций — мы можем продолжать реализовывать тяжелые функции .

В нашем случае переход на Go принес желаемый результат. Основываясь на нашем опыте работы с механизмом рекомендаций, мы определили три условия, когда вам следует подумать о переходе на Go:

  1. сервис имеет высокую нагрузку на ЦП
  2. в то же время высокая нагрузка на ввод-вывод
  3. вам необходимо отправить большой объем данных по сети на подготовить характеристики.

Если у вас есть только рабочие нагрузки, связанные с вводом-выводом, вам лучше придерживаться Python. Переход на Go не выиграет вам много времени, вы только сэкономите ресурсы, что не так важно для малых и средних рабочих нагрузок.

Если сервис использует обе нагрузки, но не передает по сети столько данных, сколько мы, есть два варианта:

  1. Использовать ProcessPoolExecutor. Накладные расходы времени не будут очень большими, а обслуживание не огромным.
  2. Поскольку нагрузка по трафику становится слишком высокой, разделите его на 2 службы — службы, привязанные к ЦП, и службы, привязанные к IO, чтобы масштабировать их отдельно.

Оптимизация службы, с чего начать

Профилируйте свою службу. Используйте py-spy, как мы, или другой профилировщик Python. Скорее всего, ваш код не имеет огромных неоптимальных областей. Но вам нужно повнимательнее присмотреться ко всем небольшим областям, которые будут значительно улучшены. Возможно, вам не потребуется переписывать весь код.

Запустить py-spy в неблокирующем режиме:

 record -F -o record.svg -s - nonblocking -p 1 

Это первый флейм, который мы получили без какой-либо оптимизации. Первое, что тут бросилось в глаза, это то, что заметный кусок времени уходит на валидацию json-запроса, которая в нашем случае не очень нужна, поэтому мы ее убрали. Еще больше времени ушло на json загрузки/дампы всех сетевых запросов, поэтому мы заменили его на orjson.

В заключение несколько советов:

  1. Используйте валидатор запроса с умом.
  2. Используйте orjson для Python или jsoniter для Golang для синтаксического анализа.
  3. Уменьшить нагрузку на сеть — сжать данные (zstd). Оптимизация хранения базы данных, чтение/запись данных (Protobuf/MessagePack). Иногда быстрее сжимать, отправлять и распаковывать, чем отправлять несжатые данные.
  4. Просмотрите участки кода, выполнение которых занимает больше всего времени.

Об авторе

alexxlab administrator

Оставить ответ