Новости

Платформа летающего весла, улучшенная версия 3.0!В статье объясняются пять новых функций, включая «Интегрированное обучение и продвижение больших моделей».

2024-08-01

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

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

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

Fei Paddle — первая в Китае самостоятельно разработанная, многофункциональная платформа с открытым исходным кодом и открытая платформа глубокого обучения. Она была выпущена с версии 1.0, в которой по умолчанию используются статические изображения, до версии 2.0, которая по умолчанию использует динамические изображения и может реализовать интеграцию. динамических и статических изображений, обучения и нажима. Fei Paddle Framework Он смог идеально объединить гибкость динамической графики и эффективность статической графики и недавно поддерживает гибридное параллельное обучение моделей, версию 3.0, которая усовершенствована для; эра больших моделей официально выпущена! Flying Paddle официально открыл новое поколение инновационных рамных технологий!

Дизайнерское мышление

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

Как это сделать?

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

С точки зрения пользователя, отличная среда глубокого обучения должна предоставлять разработчикам максимальный опыт разработки. Это означает не только предоставление удобной для пользователя среды разработки, но, что более важно, она должна быть способна значительно сократить затраты разработчиков на обучение и временные затраты, одновременно значительно повышая удобство разработки. С этой целью Flying Paddle Framework выдвигает концепцию «унификации движения и статики, интеграции тренировки и толчка, а также автоматического параллелизма», что значительно повышает эффективность разработки.

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

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

С точки зрения технологического развития, передовые технологии, такие как модель большого языка (LLM), MOE (Mixture of Experts), мультимодальность и научный интеллект (ИИ для науки), постепенно становятся новыми горячими точками исследований. По мере увеличения сложности модели такие проблемы, как узкие места вычислений, узкие места хранилища, узкие места доступа к памяти и узкие места связи, постепенно становятся более заметными, а необходимость распределенного обучения и общей оптимизации производительности становится все более актуальной.

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

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


Концепция дизайна и основные особенности Flying Paddle Frame 3.0

Подводя итог вышеизложенным требованиям, Feipiao предоставит разработчикам среду глубокого обучения, которая «объединяет динамическое и статическое, интегрирует обучение и отправку, автоматическое распараллеливание, автоматическую оптимизацию и обширную адаптацию оборудования. Разработчики смогут писать распределенный код так же, как и писать стандартные программы». только код, без необходимости восприятия сложной логики связи и планирования, вы можете реализовать разработку больших моделей. Вы можете писать нейронные сети на Python так же, как и написание математических формул, без использования языков разработки оборудования для написания сложных кодов ядра оператора; и вы сможете добиться эффективной работы.

Появилась версия 3.0 Flying Paddle Framework, продолжающая концепцию дизайна версии 2.x с унифицированной динамикой и статикой, а также интегрированным обучением и нажатием. Ее интерфейс разработки полностью совместим с версией 2.x. Это означает, что код, разработанный с использованием версии 2.x, в большинстве случаев может работать непосредственно в версии 3.0 без изменений. Основное внимание уделяется запуску четырех новых функций: динамического и статического унифицированного автоматического распараллеливания, автоматической оптимизации компилятора, обучения больших моделей и принудительной интеграции, а также адаптации больших моделей к нескольким аппаратным средствам. Эти функции были разработаны начиная с версии Flying Paddle Framework 2.6 или более ранней и сейчас достигли стадии внешнего пробного использования. Эти новые функции принесли значительные улучшения с точки зрения пользовательского опыта, производительности, удобства вторичной разработки и адаптируемости оборудования. Фей Фей Паддл официально выпустил версию 3.0. Эта версия содержит улучшения некоторых существующих функций версии платформы 2.x и является зрелой и стабильной без использования новых функций.

Обзор архитектуры платформы

Чтобы реализовать вышеупомянутые характеристики структуры глубокого обучения, ее архитектура должна быть тщательно спроектирована, чтобы гарантировать, что она может поддерживать построение различных сложных моделей и обеспечивать плавную интеграцию с различными микросхемами. Далее будет использоваться интуитивно понятная схема архитектуры для подробной демонстрации функциональных модулей, включенных в структуру нового поколения Flying Paddle, а также взаимодействия и связи между этими модулями. Ниже приведена схема архитектуры Flying Paddle Framework 3.0.


Схема архитектуры Flying Paddle Framework 3.0

Богатые интерфейсы: Flying Paddle Framework предоставляет множество интерфейсов разработки, связанных с глубоким обучением, таких как тензорное представление, математические вычисления, создание сетей моделей, стратегии оптимизации и т. д. С помощью этих интерфейсов разработчики могут легко создавать и обучать свои собственные модели глубокого обучения, не вдаваясь в базовые технические детали.

В интерфейсе разработки Flying Paddle Framework можно разделить на четыре уровня: уровень представления, уровень планирования, уровень оператора и уровень адаптации.

Уровень представления: фокусируется на выражении и преобразовании вычислительных графов и обеспечивает основные функции, такие как преобразование динамических графов в статические (динамические графы в статические), автоматическое дифференцирование, автоматический параллелизм, сочетание операторов и оптимизация вычислительных графов посредством высокомасштабируемого промежуточного представления PIR. Твердая поддержка.

Уровень планирования: отвечает за интеллектуальную оркестровку и эффективное планирование кодов или графиков вычислений, а также за возможность управлять и оптимизировать графическую память и память в соответствии с фактическими потребностями, а также поддерживать эффективное выполнение динамических и статических графиков. Независимо от того, предпочитают ли разработчики использовать динамическую графику или статическую графику для разработки модели, Flying Paddle Framework может обеспечить эффективную среду выполнения, гарантируя при этом оптимальное использование ресурсов.

Уровень оператора: он состоит из компилятора нейронной сети CINN и библиотеки операторов PHI, охватывающей такие ключевые функции, как определение тензора, определение оператора, автоматическое объединение операторов и реализация ядра оператора.

Уровень адаптации: используется для реализации адаптации к базовому чипу, включая такие функции, как управление устройством, адаптация оператора, адаптация связи и доступ к компиляции.

Далее речь пойдет о новом и крупном обновлении архитектуры версии Flying Paddle 3.0. Это обновление в основном включает в себя следующие модули:

1) Высокомасштабируемое промежуточное представление PIR, создавая единое промежуточное представление для всей архитектуры, преодолевает барьеры каждого модуля на уровне структуры и расширяет потенциал Flying Paddle в области научных вычислений, оптимизации компиляции и больших моделей. ;

2) Компилятор нейронной сети автоматически оптимизирует и значительно повышает сквозную производительность модели за счет автоматического объединения и настройки политик;

3) Автоматическое распараллеливание снижает затраты на разработку модели и оптимизацию производительности больших сцен моделей, а также значительно улучшает взаимодействие с пользователем с большими сценами моделей.

Сильно расширенное промежуточное представление PIR

Промежуточное представление (IR) вычислительных графов является важным краеугольным камнем оптимизации производительности платформы глубокого обучения, развертывания логических выводов и компиляторов. В последние годы все больше и больше фреймворков и исследователей внедряют технологию компилятора в оптимизацию моделей нейронных сетей для глубокого обучения и на этой основе используют концепции, технологии и инструменты компилятора для автоматической оптимизации и генерации кода нейронных сетей. В эпоху больших моделей к ИР предъявляются более высокие требования с точки зрения гибкости, масштабируемости и полноты.

Таким образом, в версии 3.0 Feipiao стандартизирует определение промежуточного представления IR на уровне инфраструктуры, чтобы добиться унифицированного представления всей архитектуры и совместного использования результатов разработки во всех направлениях вверх и вниз по течению. IR-архитектура нового поколения Feipiao фокусируется на двух важных аспектах: высокой гибкости и высокой масштабируемости. Она разработана за счет более полных и надежных возможностей семантического выражения, унифицированного представления всей архитектуры и эффективного подключаемого механизма оптимизации производительности (Pass) для достижения сложной семантики. поддержку, более удобную поддержку богатых стратегий сегментации при автоматическом распараллеливании больших моделей и беспрепятственное подключение к компилятору нейронных сетей для автоматической оптимизации производительности и адаптации к нескольким аппаратным средствам.



Промежуточное представление Flying Paddle (PIR) абстрагирует набор легко масштабируемых базовых компонентов на нижнем уровне, охватывающих тип, атрибут, операцию, черту и интерфейс, и вводит концепцию диалекта, предоставляя разработчикам возможность гибко расширять и свободно настраивать, таким образом Обеспечивает комплексные и надежные возможности семантического выражения. На уровне представления модели, благодаря модульному управлению несколькими диалектами и унифицированному многотерминальному представлению, достигается единое представление всей архитектуры, объединяющей обучение и вывод, достигается бесшовное соединение между операторами и компиляторами, а также автоматическая оптимизация и адаптация к нескольким аппаратным средствам. поддерживаются. На уровне преобразования графов, объединяя базовые модули и упрощая базовые концепции, он предоставляет пользователям недорогой, простой в использовании и высокопроизводительный опыт разработки, а также богатый и подключаемый механизм оптимизации Pass. Flying Paddle PIR придерживается принципа статического однократного назначения (SSA), чтобы гарантировать, что модель эквивалентна направленному ациклическому графу, и использует значение и операцию для абстрагирования графа вычислений, где операция представляет собой узел, а значение представляет собой ребро.

Операция представляет собой узел в графе вычислений: каждая операция представляет собой оператор и содержит ноль или более регионов. Регион представляет собой замыкание, которое может содержать ноль или более блоков. Блок представляет собой базовый блок, который соответствует принципу статического однократного назначения (SSA) и содержит ноль или более операций. Путем вложения циклов между этими тремя можно построить произвольно сложные грамматические структуры.

Значение представляет собой направленное ребро в графе вычислений: оно используется для соединения двух Операций, описывая таким образом цепочку Use-Define (т.е. цепочку UD) в программе. Среди них OpResult служит концом определения и используется для определения значения, тогда как OpOperand служит концом использования и описывает использование определенного значения;

Feipiao предоставляет два механизма разработки Pass: PatternRewriter и Declarative Rewrite Rule (сокращенно DRR), которые учитывают гибкость настройки и простоту разработки. Трехэтапный метод разработки Pass позволяет разработчикам больше сосредоточиться на обработке логики Pass, не обращая внимания на детали лежащего в основе IR. Используя механизм разработки Pass PIR, затраты на разработку Pass применительно к сценариям вывода сокращаются на 58%, более 84% выводов модели ускоряются более чем на 10%.

Автоматическая оптимизация компилятора нейронной сети

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

1) Тенденция развития аппаратного обеспечения: сочетая историю разработки аппаратного обеспечения и характеристики технологической эволюции, вычислительная мощность развивается намного быстрее, чем производительность доступа к памяти, производительность процессора и пропускная способность шины доступа к памяти влияют на производительность операторов с интенсивным доступом к памяти (класс нормы); , активация и т. д.), производительность процессора и пропускная способность шины влияют на планирование, производительность. Технология общей оптимизации автоматического слияния на основе компилятора позволяет объединить несколько операторов в один большой оператор. За счет сокращения объема доступа к памяти и количества операторов она может значительно повысить производительность модели. Технология компилятора станет стандартным компонентом структур глубокого обучения.

2) Тенденция развития модели: структура модели имеет характеристики разнообразия, и потребность в разнообразии во многом зависит от общей оптимизации компилятора.

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

Проиллюстрируем это на примере. В качестве примера возьмем нормализацию RMS (среднеквадратическую нормализацию слоя), которая часто используется в модели Ламы. ​​Ее формула расчета относительно проста и понятна.



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



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

С помощью технологии компилятора нейронных сетей мы можем добиться значительного повышения производительности, сохраняя при этом высокую степень гибкости и простоты использования. Следующие результаты тестирования производительности оператора RMSNorm на платформе A100 являются ярким тому подтверждением: по сравнению с реализацией с использованием комбинации интерфейсов разработки Python скомпилированный и оптимизированный оператор работает в 4 раза быстрее, даже если он интегрирован с ручным оператором; , также было достигнуто улучшение производительности на 14%. Этот результат полностью демонстрирует идеальный баланс между гибкостью и производительностью, присущий раме лопастей.

По этой причине Feipiao считает технологию компилятора нейронных сетей важным направлением исследований и разработок. Ниже представлена ​​общая схема архитектуры компилятора Feipiao.



На уровне представления, с помощью возможностей расширения PIR, реализован внешний модуль CINN для обработки преобразований, связанных с уровнем, включая разделение операторов, перерасчет, деление подграфов, модули вывода измерений и другие модули, и, наконец, получает несколько серверных частей компилятора. . Генерация оптимизированных подграфов. В серверной части компилятора для этих объединяемых подграфов компилятор дополнительно вызовет функцию Compute, чтобы преобразовать их в низкоуровневое промежуточное представление (IR), состоящее из абстрактного синтаксического дерева (AST), и на этой основе выполнит цикл Fusion. чтобы убедиться, что его можно интегрировать в ядро; на базовом IR CINN будет выполнен анализ настройки производительности для получения оптимальной конфигурации, и, наконец, базовый IR будет тщательно преобразован в конкретную реализацию кода;

Экспериментальные результаты на генеративной модели большого языка Llama и графовой модели Винсента Stable Diffusion показывают, что при использовании технологии оптимизации компилятора скорость вывода увеличивается на 36% и 30% соответственно по сравнению с базовой версией без ручной оптимизации производительности.

Динамическая и статическая унификация и автоматическое распараллеливание

Почему мы делаем автоматический параллелизм?

Современные основные методы обучения больших моделей используют множество параллельных стратегий. Эти параллельные стратегии основаны на «ручном» параллельном методе, реализованном в режиме динамического графа, то есть на основе одной карты, ручной обработки сегментации ( сегментация тензоров, графы вычислений), коммуникация (добавление операторов связи), оптимизация видеопамяти (совместное использование видеопамяти, повторное вычисление), оптимизация планирования (конвейерная оркестровка, асинхронные вычисления и связь) и другие стратегии. Разработчики должны быть не только знакомы. структуру модели, но также иметь глубокое понимание параллельных стратегий и структур. Логика планирования делает разработку и оптимизацию производительности больших моделей очень высокими. Помимо наличия специальной группы алгоритмов, ответственной за инновации в алгоритмах моделей, также должна быть специальная группа, ответственная за параллельную оптимизацию моделей. Это создает множество препятствий для инноваций и итерации больших моделей.

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



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

При автоматическом параллельном проектировании разработчикам требуется лишь небольшое количество аннотаций тензорной сегментации. Мы абстрагируем методы сегментации и требуем двух типов методов сегментации: тензоры сегментации (параметры, входные данные) и графики вычислений сегментации (конвейер). Чтобы реализовать эти два типа методов сегментации, фреймворку необходим механизм для описания отношений сопоставления между распределенными тензорами и вычислительными устройствами. С этой целью мы представляем две распределенные концепции ProcessMesh и Placements, отображающие карту графического процессора. Процесс отображает несколько устройств в одномерные или многомерные массивы, состоящие из нескольких процессов. На следующем рисунке показаны два разных абстрактных представления ProcessMesh, состоящих из 8 устройств.



Размещения — это список, состоящий из трех распределенных тегов: «Репликация», «Осколок» и «Частичный». Длина соответствует размерности ProcessMesh. Он используется для указания того, какой распределенный тег используется для разделения распределенного тензора в измерении соответствующего вычислительного устройства. . Это Подробное описание трех распределенных тегов следующее:

Как показано на рисунке ниже, «Реплицировать» означает, что тензор будет существовать в виде репликации на разных устройствах; «Осколок» означает, что тензор будет разбит на разных устройствах в соответствии с конкретными размерами; «Частичный» означает, что тензор на устройстве является неполным и неполным; требуется уменьшить сумму или уменьшить. Полное состояние можно получить только после Mean и других операций разными способами.



После завершения абстракции распределенных тегов мы вызываем
Интерфейс Paddle.distributed.shard_tensor() реализует маркировку тензорного шардинга. Посредством маркировки и автоматического получения тензорных срезов мы можем представить сложный распределенный гибридный параллелизм. На рисунке ниже показан конкретный пример гибридного параллелизма, состоящего из параллелизма данных, параллелизма тензорных моделей и конвейерного параллелизма.



Следующий код показывает конкретный пример смешанного параллелизма.



Приняв подход к автоматической параллельной разработке, разработчикам больше не нужно учитывать сложную логику связи. На примере задачи Llama объем основного кода распределенного обучения был уменьшен на 50%, что значительно снизило сложность разработки. Из некоторых наших экспериментов видно, что с помощью глобального анализа и других оптимизаций. , производительность также выше, чем при ручном распараллеливании динамических графов.

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

Промышленные преимущества

В целом, платформа нового поколения Flying Paddle — Flying Paddle Framework 3.0-Beta разработана специально для больших моделей и гетерогенных многоядерных процессоров. Она адаптируется к гетерогенным многоядерным процессорам и полностью раскрывает потенциал аппаратного обеспечения, поддерживая большие модели. Обучение модели и вывод. В то же время он обладает четырьмя основными возможностями: динамическое и статическое унифицированное автоматическое распараллеливание, автоматическая оптимизация компилятора, обучение больших моделей и push-интеграция, а также адаптация больших моделей к нескольким аппаратным средствам, что всесторонне улучшает возможности обслуживания отрасли.

Унифицированное статическое и динамическое автоматическое распараллеливание. Эта функция значительно снижает затраты на промышленную разработку и обучение. Пользователям нужно лишь отметить небольшой объем тензорной сегментации на одной карте, и Flying Paddle Framework автоматически завершит получение информации о распределенной сегментации и добавит операторов связи для обеспечения правильности логики. В то же время, на основе структуры модели и информации о кластере в сочетании с оптимизацией видеопамяти и уровня планирования, Flying Paddle может автоматически находить наиболее эффективную стратегию распределенного параллельного обучения, тем самым значительно снижая стоимость разработки гибридного параллельного обучения, позволяя разработчики должны больше сосредоточиться на моделях и алгоритмах инноваций.

Автоматическая оптимизация компилятора. Эта функция значительно снижает затраты на оптимизацию производительности. Компилятор Fei Paddle предназначен для интеграции с платформой и может поддерживать эффективное обучение и рассуждения различных форм различных моделей, таких как генеративные модели и модели научных вычислений, обеспечивая хороший баланс между вычислительной гибкостью и высокой производительностью. Благодаря автоматическому объединению операторов и технологии генерации кода производительность генеративных моделей, таких как Llama2 и Stable Diffusion, была улучшена более чем на 30%.

Комплексное обучение и продвижение больших моделей. Эта функция предоставляет отрасли максимальный опыт разработки. Это позволяет повторно использовать возможности обучения и вывода друг с другом, обеспечивая унифицированный опыт разработки и максимальную эффективность обучения для всего процесса больших моделей. Переходя от движения к неподвижности, можно легко связать работу по обучению и рассуждению. Генеративные вычисления в процессе обучения RLHF (обучение с подкреплением с обратной связью от человека) можно повторно использовать для оптимизации вывода, достигая ускорения в 2,1 раза. При этом эффективность распределенной автоматической параллельной стратегии рассуждения и обучения повторному использованию сценариев количественной оценки увеличивается в 3,8 раза.

Мультиаппаратная адаптация больших моделей. Одной из важных особенностей Flying Paddle является адаптация к гетерогенным многоядерным процессорам и полное раскрытие потенциала аппаратного обеспечения. Что касается механизма доступа, Flying Paddle предоставляет простой и эффективный абстрактный интерфейс и базовую операторскую систему, что снижает затраты на адаптацию. С точки зрения рабочего механизма он оптимизирует планирование, совместное использование хранилища и другие механизмы для повышения эффективности планирования. С точки зрения операторских ядер Feipiao предоставляет решение для автоматической настройки компилятора для повышения сквозной производительности. В то же время Feipiao также создала инфраструктуру исследований и разработок, такую ​​​​как интеграция кода, непрерывная интеграция и регрессионное тестирование моделей для новых производителей оборудования. Эти механизмы гарантируют, что новое оборудование будет включено в обычную систему выпуска Feipiao, и пользователи смогут напрямую установить и опробовать его без компиляции. Полнофункциональный и недорогой механизм доступа Flying Paddle привлек производителей оборудования, которые совместно предоставили 3456 PR для Flying Paddle, включая в общей сложности более 25 000 коммитов.

Это платформа нового поколения 3.0 от Fei Paddle. В настоящее время бета-версия 3.0 открыта для разработчиков, и все интерфейсы разработки полностью совместимы с версией 2.0. Разработчики могут использовать и оставлять отзывы.