Русский
Русский
English
Статистика
Реклама

Pyhton

Из песочницы Разработка zond-а для замера скорости интернета

12.07.2020 00:14:47 | Автор: admin

Добрый день всем хабра-пользователям.

Постоянно читаю на хабре статьи о разработках того или иного функционала на малинке. Решил вот поделиться своей наработкой.

Предыстория


Тружусь я в компании, предоставляющей услуги кабельного телевидения и доступа в интернет. И, как это бывает в подобных компаниях, периодически слышу жалобы о несоответствии тарифного плана заявленному в договоре. То пользователь жалуется на низкую скорость по кабелю, то на высокие пинги определенных сервисов, иногда на полное отсутствие интернета в определенное время суток. Зачастую, такие жалобы попадают в пулл заявок, по которым происходит выезд на место одного из сотрудников с рабочим ноутбуком, на котором и производятся все замеры. И, зачастую, выясняется, что со скоростью все в порядке. А низкая скорость на самом деле на мобильном телефоне, через wi-fi, на балконе. Ну или нечто подобное.

К сожалению, выезжать к абоненту например в 21:37, когда у него наиболее низкие скорости не получается. Все-таки рабочий день сотрудников ограничен. Замена роутера эффекта не дает, т.к. диапазон частот для wi-fi в нашей стране плачевно захламлен.

Для справки государственный провайдер в РБ принудительно включает на всех предоставляемых в пользование устройствах wi-fi и вещает SSID ByFly с каждого устройства. Даже если у абонента нет услуги интернета, а только домашний телефон. Сделано это для дополнительных продаж. Можно в ларьке купить карту данного оператора, подключиться к любой точке с именем ByFly и, введя данные с карты, получать услуги интернета. С учетом почти 100% покрытия городов и значительным покрытием частного сектора и сельских населенных пунктов найти точку подключения не составляет проблем.

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

Первичное решение



Фото носит иллюстрационный характер

Были развернуты два сервера контроля скорости. Первый это LibreSpeed, второй Speedtest от OOKLA. Сравнивались показатели обоих сервисов. Остановиться решили все-таки на Ookla т.к. до 90% абонентов пользуются именно данным сервисом.

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

Для замера скорости внутри страны (есть у нас отдельная сеть для операторов связи, которая объединяет всех операторов и основные дата-центры внутри страны) нужно выбрать провайдера внутри страны и сделать повторный замер. Мы опытным путем выделили несколько серверов дающих более-менее стабильный результат в любое время суток и прописали их рекомендованными в инструкции.

Ну и аналогичные действия для внешних каналов связи. Нашли больших операторов с большими каналами на speedtest серверах и написали их в рекомендациях (уж простите Moskva Rostelecom и Riga Baltcom, но буду именно данные узлы рекомендовать для получения адекватных цифр. Лично я получал до ~870 мегабит с данных серверов в часы-пик).

Зачем, спросите вы, такие сложности? Все очень просто. Мы получили достаточно удобный инструмент, который в умелых руках позволяет определить: нет ли проблем в наших сетях, нет ли проблем в республиканской сети, нет ли проблем у магистрала. Если человек жалуется на низкую скорость скачивания с какого-то сервиса мы можем сделать замер скорости канала абонента и затем сравнить с тем, что он получает от сервиса. И аргументировано показать, что мы честно выделяем канал, прописанный в договоре. А так же можем пояснить возможные причины такой разницы в скоростях.

Вторичное решение


Остается открытым вопрос падения скорости по-вечерам/в течении суток. Как сделать все то же самое не находясь у абонента дома? Взять дешевый одноплатник с гигабитной сетью и сделать из него так называемый зонд. Устройство должно с заданным интервалом времени делать замеры скорости по кабелю. Решение должно быть опенсорсное, максимально неприхотливое, с удобной админкой для просмотра результатов замеров. Устройство должно быть максимально дешевым, что бы можно было легко заменить и без опасений оставлять у абонента на n суток.

Реализация




За основу был взят BananaPI (модель M1). Причин выбора на самом деле две.

  1. Гигабитный порт.
  2. Он просто валялся в тумбочке.

Далее было принято решение использовать python клиента speedtest-cli для сервиса Speedtest by Ookla в качестве бэкэнда для замера скорости. Библиотеку Pythonping для замера скорости пинга. Ну и php для админки. Для приятности восприятия применил bootstrap.

Ввиду того, что ресурсы малинки не резиновые была использована связка nginx+php-fpm+sqlite3. От MySQL хотелось отказаться из-за ее тяжести и переизбыточности. Предугадываю вопрос относительно Iperf. От него пришлось отказаться ввиду невозможности его использования на направлениях отличных от локальных.

Изначально пошел по-пути многих на этом сайте. Модифицировал клиент speedtest-cli. Но затем, немного поразмыслив, отказался от данной затеи. Написал свой воркер, который использует возможности оригинального клиента.

Для анализа пингов просто написал отдельный обработчик. Берем среднее значение по замеру. Пинговалка умеет как ip адрес так и доменное имя.

Асинхронности работы не добивался. Она в данном случае не особо нужна.

Админка для оценки результатов получилась довольно минималистическая.

Рис. Основное окно админки с результатами тестирования

Рис. Настройки тестирования


Рис. Обновление списка серверов Speedtest

Вот собственно и все. Идея реализована на коленке, в свободное от работы время. К полевым испытаниям пока не приступили. Но планируем в ближайшее время запустить в работу опытные образцы. Использовать можно как провайдерам там и клиентам провайдеров. Никто не мешает поставить делать замеры дома круглосуточно. Единственное, следует помнить, что если вы активно серферите в сети или что-то качаете то и замер получится ниже реального. Так что в идеале нужно зонд оставлять в сети единственным потребителем трафика.

P.S.: за качество кода прошу не пинать. Я самоучка без опыта. Исходный код на GitHub. Критика принимается.
Подробнее..

Из песочницы Конфуций и Маргарита

16.08.2020 18:20:26 | Автор: admin


Вступление


Соревнований по машинному обучению как и платформ, на которых они проводятся, существует немало и на любой вкус. Но не так часто темой контеста является человеческий язык и его обработка, еще реже такое соревнование связано с русским языком. Недавно я принимал участие в соревновании по машинному переводу с китайского на русский, прошедшего на платформе ML Boot Camp от Mail.ru. Не обладая большим опытом в соревновательном программировании, и проведя, благодаря карантину, все майские праздники дома, удалось занять первое место. Про это, а также про языки и подмену одной задачи другой я постараюсь рассказать в статье.

Глава 1. Никогда не разговаривайте на китайском


Авторами данного соревнования предлагалось создать систему машинного перевода общего назначения, так как перевод даже от крупных компаний в паре китайский-русский значительно отстает от более популярных пар. Но так как валидация проходила на новостях и художественной литературе, то стало понятно, что обучаться надо именно на новостных корпусах и книгах. Метрика для оценки переводов была стандартная BLEU. Эта метрика сравнивает человеческий перевод с машинным и, грубо говоря, за счет количества найденных совпадений оценивает близость текстов по 100-балльной шкале. Русский язык богат своей морфологией, поэтому данная метрика всегда заметно ниже при переводе на него чем на языки с меньшим количеством способов словообразования (например, романские языки французский, итальянский и т.д.).

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

Глава 2. Пон Тий Пи Лат


В белом плаще с кровавым подбоем, шаркающей кавалерийской походкой мы лезем в поисковик за параллельным русско-китайским корпусом. Как мы позже поймем, того, что мы нашли недостаточно, но пока взглянем на наши первые находки (найденные и почищенные мной датасеты я собрал вместе и выложил в открытый доступ [1]):


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


Я расскажу вам об этом.


Маленький городок, где я родился...
...

Как видно из названия, это в основном субтитры к фильмам и сериалам. К такому же типу принадлежат и субтитры TED'a, которые после парсинга и очистки тоже превращаются во вполне себе параллельный корпус:

Вот чем обернулся наш исторический эксперимент в наказании:


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


И не только на улице, но и в их собственных домах,
WikiMatrix это выровненные LASER'ом тексты из интернет страничек (так называемый common crawling) на различных языках, но для нашей задачи их мало, да и выглядят они странновато:
Збраньки (укр.


Но вам лучше поститься, если бы вы только знали!


Он отверг такое утверждение.
После первого этапа поиска данных, возникает вопрос с нашей моделью. Какие есть инструменты и как вообще подойти к задаче?

Есть очень понравившийся мне NLP курс от МФТИ на Степике [2], особенно полезный при прохождении онлайн, там на семинарах разбираются в том числе и системы машинного перевода, причем пишешь их ты сам. Помню восторг от того, что написанная с нуля сеть после обучения в Colab, выдала адекватный русский перевод в ответ на немецкий текст. Модели мы строили на архитектуре трансформеров с механизмом внимания, который в свое время стал прорывной идеей [3].

Естественно, первой мыслью было просто дать модели другие данные на вход и выиграть уже. Но, как знает любой китайский школьник, в китайской письменности пробелы отсутствуют, а наша модель на вход принимает наборы токенов, которыми в ней являлись слова. Разбить китайский текст на слова с какой-то точностью позволяют библиотеки типа jieba. Встроив токенизацию по словам в модель и прогнав ее на найденных корпусах, я получил BLEU около 0,5 (а шкала-то 100-балльная).

Глава 3. Машинный перевод и его разоблачение


К соревнованию был предложен официальный baseline (простое, но работающее решение-пример), который основывался на OpenMNT. Это открытый инструмент для обучения переводу с множеством гиперпараметров для подкрутки. На этом шаге давайте обучать и делать вывод модели через него. Обучать будем на платформе kaggle, так как она дает 40 часов обучения на GPU бесплатно [4].

Надо отметить, что к этому моменту участников конкурса было настолько немного, что войдя в него, можно было бы попасть сразу в пятерку, и на то были причины. Форматом решения был docker-контейнер, к которому в процессе инференса монтировались папки и модель должна была читать из одной, а ответ класть в другую. Так как официальный бейзлайн не заводился (я лично сходу его не собрал) и был без весов, то я решил собрать свой и выложил в открытый доступ [5]. После этого начали обращаться участники с просьбой правильно собрать решение и вообще помочь с докером. Мораль, контейнеры это стандарт в сегодняшней разработке, используйте их, оркестрируйте и упрощайте себе жизнь (с последним утверждением согласны не все).

Давайте теперь добавим к найденным на предыдущем шаге корпусам еще парочку:


Первый это огромный корпус юридических документов с заседаний ООН. Доступен он, кстати, на всех официальных языках этой организации и выровнен по предложениям. Второй еще более интересен, так как непосредственно является новостным корпусом с одной особенностью, он китайско-английский. Нас этот факт не смущает, потому что современный машинный перевод с английского на русский очень качественный, и в ход идут Amazon Translate, Google Translate, Bing и Яндекс. Для полноты картины покажем примеры из того, что получилось.

Документы ООН
Этот микроспутник представляет собой недорогостоящую платформу которая имеет умеренно продолжительный срок службы и в будущем может быть модифицирована.


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

UM-Corpus

Facebook закрыл сделку на покупку Little Eye Labs в начале января.
1Little Eye Labs

Четыре инженера в Бангалоре запустили Little Eye Labs около полутора лет назад.
Little Eye Labs

Компания строит программные инструменты для мобильных приложений, сделка будет стоить от 10 до 15 миллионов долларов.
10001500

Итак, наши новые ингредиенты: OpenNMT + качественные корпуса + BPE (про BPE токенизацию можно почитать здесь). Обучаем, собираем в контейнер, и после отладки/очистки и стандартных трюков получаем BLEU 6,0 (шкала по-прежнему 100-балльная).

Глава 4. Параллельные рукописи не горят


До этого момента мы шаг за шагом мы улучшали нашу модель и самый большой прирост дало использование новостного корпуса, одного из проверочных доменов. Кроме новостей неплохо было бы обзавестись и корпусом литературы. Потратив изрядное количество времени стало понятно что машинный перевод книг с китайского ни одна популярная система предоставить не может Настасья Филипповна становится чем то вроде Ностоси Филипауны, а Рогожин Рого Реном. Имена персонажей обычно составляют довольно большой процент от всего произведения и часто это имена редкие, поэтому, если модель их никогда не видела, то и перевести корректно скорее всего не сможет. Надо обучаться на книгах.

Тут мы подменяем задачу перевода на задачу выравнивания текстов. Сразу скажу, что эта часть мне понравилась больше всего, потому что сам я увлекаюсь изучением языков и параллельные тексты книг и рассказов, по-моему мнению, это один из наиболее продуктивных способов обучения. Идей для выравнивания было несколько, самой продуктивной оказалось переводить предложения в векторное пространство и считать косинусное расстояние между кандидатами на соответствие. Перевод чего-нибудь в вектора называется embedding, в данном случае это sentence embedding. Для этих целей есть несколько хороших библиотек [6]. При визуализации результата видно, что китайский текст немного сползает за счет того, что сложные предложения на русском часто переводят как два или три на китайском.



Найдя все что можно на просторах интернета, и самостоятельно выравнивая книжки добавляем их к нашему корпусу.

Он был в дорогом сером костюме, в заграничных, в цвет костюма, туфлях.


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


По виду лет сорока с лишним.

После обучения на новом корпусе, BLEU вырос до 20 на публичном датасете и до 19,7 на приватном. Тут сыграло и то, что в обучение очевидно попали произведения из валидации. В реальности так никогда делать нельзя, это называется утечкой, а метрика перестает быть показательной.

Заключение


Машинный перевод прошел немалый путь от эвристик и статистических методов до нейросетей и трансформеров. Я рад, что удалось найти время и познакомиться с этой темой, она определенно заслуживает пристального внимания со стороны сообщества. Хочу поблагодарить авторов соревнования и других участников за интересное общение и новые идеи!

[1] Параллельные русско-китайские корпуса
[2] Курс по Natural Language Processing от МФТИ
[3] Прорывная статья Attention is all you need
[4] Ноутбук с примером обучения на kaggle
[5] Публичный docker бейзлайн
[6] Библиотека для multilingual sentence embeddings
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru