Мы рады сообщить о доступности потоковой передачи ответов через Создатель мудреца Амазонки вывод в реальном времени. Теперь вы можете непрерывно передавать ответы на логические выводы обратно клиенту при использовании вывода в реальном времени SageMaker, чтобы помочь вам создавать интерактивные возможности для генеративных приложений искусственного интеллекта, таких как чат-боты, виртуальные помощники и генераторы музыки. Благодаря этой новой функции вы можете начать потоковую передачу ответов сразу же, как только они станут доступны, вместо того, чтобы ждать, пока будет сгенерирован весь ответ. Это снижает время получения первого байта для ваших генеративных приложений искусственного интеллекта.
В этом посте мы покажем, как создать веб-приложение потоковой передачи с использованием конечных точек SageMaker в реальном времени с новой функцией потоковой передачи ответов для варианта использования интерактивного чата. Мы используем Streamlit для примера пользовательского интерфейса демонстрационного приложения.
Обзор решения
Чтобы получать ответы от SageMaker, вы можете использовать нашу новую Вызвать EndpointWithResponseStream API. Это помогает повысить удовлетворенность клиентов за счет сокращения времени получения первого байта ответа. Такое сокращение задержки, воспринимаемой клиентом, особенно важно для приложений, созданных с использованием генеративных моделей искусственного интеллекта, где немедленная обработка ценится больше, чем ожидание всей полезной нагрузки. Более того, он вводит закрепленный сеанс, который обеспечит непрерывность взаимодействия, что принесет пользу таким вариантам использования, как чат-боты, для создания более естественного и эффективного пользовательского опыта.
Реализация потоковой передачи ответов в конечных точках реального времени SageMaker достигается за счет Кодирование фрагментов HTTP 1.1, который представляет собой механизм отправки нескольких ответов. Это стандарт HTTP, который поддерживает двоичный контент и поддерживается большинством клиент-серверных платформ. Кодирование фрагментов HTTP поддерживает потоковую передачу как текста, так и изображений. Это означает, что модели, размещенные на конечных точках SageMaker, могут отправлять обратно потоковые ответы в виде текста или изображения, например Cокол, Llama 2и Стабильная диффузия модели. С точки зрения безопасности, как вход, так и выход защищены с помощью TLS с использованием AWS Sigv4 аутентификация. Другие методы потоковой передачи, такие как Отправленные сервером события (SSE) также реализованы с использованием того же механизма кодирования фрагментов HTTP. Чтобы воспользоваться преимуществами нового API потоковой передачи, вам необходимо убедиться, что контейнер модели возвращает потоковый ответ в виде фрагментированных закодированных данных.
На следующей диаграмме показана высокоуровневая архитектура потоковой передачи ответов с конечной точкой вывода SageMaker.
Одним из вариантов использования, который выиграет от потокового ответа, являются чат-боты на основе генеративных моделей искусственного интеллекта. Традиционно пользователи отправляют запрос и ждут, пока будет сгенерирован весь ответ, прежде чем получить ответ. Это может занять драгоценные секунды или даже больше, что потенциально может снизить производительность приложения. Благодаря потоковой передаче ответов чат-бот может начать отправлять частичные результаты вывода по мере их генерации. Это означает, что пользователи могут увидеть первоначальный ответ почти мгновенно, даже когда ИИ продолжает уточнять свой ответ в фоновом режиме. Это создает плавный и увлекательный поток разговора, в котором пользователи чувствуют, что общаются с искусственным интеллектом, который понимает и отвечает в режиме реального времени.
В этом посте мы демонстрируем два варианта контейнера для создания конечной точки SageMaker с потоковой передачей ответов: использование AWS Вывод большой модели (LMI) и обнимающее лицо Вывод генерации текста (ТГИ) контейнер. В следующих разделах мы подробно рассмотрим этапы реализации, необходимые для развертывания и тестирования Сокол-7Б-Инструкт модель с использованием контейнеров LMI и TGI в SageMaker. В качестве примера мы выбрали Falcon 7B, но эту новую функцию потоковой передачи может использовать любая модель.
Предпосылки
Вам нужна учетная запись AWS с Управление идентификацией и доступом AWS (IAM) с разрешениями на управление ресурсами, созданными в рамках решения. Для получения подробной информации см. Создание учетной записи AWS. Если вы впервые работаете с Студия Amazon SageMaker, сначала нужно создать Домен SageMaker. Кроме того, вам может потребоваться запросить увеличение квоты на обслуживание для соответствующих экземпляров хостинга SageMaker. Для модели Falcon-7B-Instruct мы используем экземпляр хостинга ml.g5.2xlarge SageMaker. Для размещения модели Falcon-40B-Instruct мы используем экземпляр хостинга ml.g5.48xlarge SageMaker. Вы можете запросить увеличение квоты на Пользовательский интерфейс сервисных квот. Для получения дополнительной информации см. Запрос увеличения квоты.
Вариант 1. Развертывание конечной точки потоковой передачи в реальном времени с помощью контейнера LMI.
Контейнер LMI — это один из контейнеров глубокого обучения для вывода больших моделей, размещенный в SageMaker для облегчения размещения больших языковых моделей (LLM) в инфраструктуре AWS для сценариев использования вывода с малой задержкой. Контейнер LMI использует Обслуживание глубокой библиотеки Java (DJL), который представляет собой высокоуровневую, независимую от механизма Java-инфраструктуру с открытым исходным кодом для глубокого обучения. С помощью этих контейнеров вы можете использовать соответствующие библиотеки с открытым исходным кодом, такие как Глубокая скорость, Ускорять, Трансформеры-нейронкси БыстрееТрансформер для разделения параметров модели с использованием методов параллелизма моделей, чтобы использовать память нескольких графических процессоров или ускорителей для вывода. Более подробную информацию о преимуществах использования контейнера LMI для развертывания больших моделей в SageMaker см. Развертывание больших моделей с высокой производительностью с помощью FasterTransformer в Amazon SageMaker и Развертывание больших моделей в Amazon SageMaker с использованием параллельного вывода моделей DJLServing и DeepSpeed.. Вы также можете найти дополнительные примеры размещения LLM с открытым исходным кодом в SageMaker с использованием контейнеров LMI в этом разделе. Репо GitHub.
Мы ожидаем, что для контейнера LMI следующие артефакты помогут настроить модель для вывода:
- serving.properties (обязательно) – Определяет настройки сервера модели
- model.py (необязательно) – Файл Python для определения основной логики вывода.
- требования.txt (необязательно) – Необходимо будет установить любое дополнительное выталкивающее колесо.
Контейнеры LMI можно использовать для размещения моделей без предоставления собственного кода вывода. Это чрезвычайно полезно, когда нет пользовательской предварительной обработки входных данных или постобработки прогнозов модели. Мы используем следующую конфигурацию:
- В этом примере мы размещаем модель Falcon-7B-Instruct. Нам нужно создать
serving.properties
файл конфигурации с желаемыми параметрами хостинга и упаковать его в артефакт tar.gz. Потоковую передачу ответов можно включить в DJL Serving, установивenable_streaming
вариант вserving.properties
файл. Информацию обо всех поддерживаемых параметрах см. Потоковая конфигурация Python. - В этом примере мы используем обработчики по умолчанию в DJL Serving для потоковой передачи ответов, поэтому нас интересуют только отправка запросов и анализ выходного ответа. Вы также можете предоставить
entrypoint
код с пользовательским обработчиком вmodel.py
файл для настройки обработчиков ввода и вывода. Более подробную информацию о пользовательском обработчике см. Пользовательский обработчик model.py. - Поскольку мы размещаем модель Falcon-7B-Instruct на одном экземпляре графического процессора (ml.g5.2xlarge), мы устанавливаем
option.tensor_parallel_degree
значение 1. Если вы планируете работать на нескольких графических процессорах, используйте это значение, чтобы установить количество графических процессоров на одного работника. - МЫ ИСПОЛЬЗУЕМ
option.output_formatter
для управления типом выходного контента. Тип выходного контента по умолчанию:application/json
, поэтому, если вашему приложению требуется другой вывод, вы можете перезаписать это значение. Дополнительную информацию о доступных опциях см. Конфигурации и настройки и Все варианты конфигурации DJL.
Чтобы создать модель SageMaker, получите URI образа контейнера:
Использовать SDK для SageMaker Python чтобы создать модель SageMaker и развернуть ее на конечной точке SageMaker в режиме реального времени с помощью развертывание Метод:
Когда конечная точка находится в эксплуатации, вы можете использовать InvokeEndpointWithResponseStream
Вызов API для вызова модели. Этот API позволяет модели отвечать в виде потока частей полной полезной нагрузки ответа. Это позволяет моделям отвечать ответами большего размера и обеспечивает более быстрое получение первого байта для моделей, в которых существует значительная разница между генерацией первого и последнего байта ответа.
Тип содержимого ответа, показанный на x-amzn-sagemaker-content-type
для контейнера LMI application/jsonline
s, как указано в конфигурации свойств модели. Потому что это часть общие форматы данных, поддерживаемые для выводамы можем использовать десериализатор по умолчанию, предоставляемый SDK для SageMaker Python для десериализации данных строк JSON. Мы создаем помощника LineIterator
класс для анализа потока ответов, полученного от запроса вывода:
При использовании класса в предыдущем коде при каждой потоковой передаче ответа он будет возвращать двоичную строку (например, b'{"outputs": [" a"]}n'
), который можно снова десериализовать в словарь Python с помощью пакета JSON. Мы можем использовать следующий код для перебора каждой потоковой строки текста и возврата текстового ответа:
На следующем снимке экрана показано, как бы это выглядело, если бы вы вызвали модель через блокнот SageMaker с использованием контейнера LMI.
Вариант 2. Реализация чат-бота с использованием TGI-контейнера Hugging Face.
В предыдущем разделе вы увидели, как развернуть модель Falcon-7B-Instruct с помощью контейнера LMI. В этом разделе мы покажем, как сделать то же самое, используя Обнимая лицо Вывод генерации текста (TGI) контейнер на SageMaker. TGI — это специальное решение с открытым исходным кодом для развертывания LLM. Он включает в себя оптимизации, включая тензорный параллелизм для более быстрого вывода нескольких графических процессоров, динамическую пакетную обработку для повышения общей пропускной способности и оптимизированный код преобразователей с использованием флэш-внимания для популярных архитектур моделей, включая BLOOM, T5, GPT-NeoX, StarCoder и LLaMa.
Поддержка контейнеров глубокого обучения TGI потоковая передача токенов через События, отправленные сервером (SSE). При потоковой передаче токенов сервер может начать отвечать после первого prefill
пройти напрямую, не дожидаясь завершения всей генерации. Для очень длинных запросов это означает, что клиенты могут увидеть, что что-то происходит на порядки масштабов, еще до того, как работа будет завершена. На следующей схеме показан высокоуровневый сквозной рабочий процесс запросов и ответов для размещения LLM на конечной точке SageMaker с использованием контейнера TGI.
Чтобы развернуть модель Falcon-7B-Instruct на конечной точке SageMaker, мы используем метод HuggingFaceModel
класс из SageMaker Python SDK. Начнем с установки наших параметров следующим образом:
По сравнению с развертыванием обычных моделей Hugging Face нам сначала нужно получить URI контейнера и предоставить его нашему HuggingFaceModel
модельный класс с image_uri
указывая на изображение. Чтобы получить новый DLC Hugging Face LLM в SageMaker, мы можем использовать команду get_huggingface_llm_image_uri
метод, предоставляемый SageMaker SDK. Этот метод позволяет нам получить URI для желаемого DLC Hugging Face LLM на основе указанного бэкэнда, сеанса, региона и версии. Более подробную информацию о доступных версиях см. HuggingFace Контейнеры вывода для генерации текста.
Затем мы создаем HuggingFaceModel
и разверните его в SageMaker, используя deploy
Метод:
Основное отличие от контейнера LMI заключается в том, что вы включаете потоковую передачу ответов при вызове конечной точки, предоставляя stream=true
как часть полезных данных запроса вызова. Следующий код представляет собой пример полезных данных, используемых для вызова контейнера TGI с потоковой передачей:
Затем вы можете вызвать конечную точку и получить потоковый ответ, используя следующую команду:
Тип содержимого ответа, показанный на x-amzn-sagemaker-content-type
для контейнера TGI text/event-stream
. Мы используем StreamDeserializer для десериализации ответа в поток событий класс и проанализируйте тело ответа, используя тот же LineIterator
класс, используемый в разделе контейнера LMI.
Обратите внимание, что потоковый ответ от контейнеров TGI вернет двоичную строку (например, b`data:{"token": {"text": " sometext"}}`)
, который можно снова десериализовать в словарь Python с помощью пакета JSON. Мы можем использовать следующий код для перебора каждой потоковой строки текста и возврата текстового ответа:
На следующем снимке экрана показано, как бы это выглядело, если бы вы вызвали модель через блокнот SageMaker с использованием контейнера TGI.
Запустите приложение чат-бота в SageMaker Studio.
В этом случае мы создаем динамического чат-бота в SageMaker Studio, используя стримлит, который вызывает модель Falcon-7B-Instruct, размещенную на конечной точке SageMaker в режиме реального времени, для предоставления потоковых ответов. Сначала вы можете проверить, работают ли потоковые ответы в записной книжке, как показано в предыдущем разделе. Затем вы можете настроить приложение Streamlit в терминале SageMaker Studio JupyterServer и получить доступ к пользовательскому интерфейсу чат-бота из браузера, выполнив следующие шаги:
- Откройте системный терминал в SageMaker Studio.
- В верхнем меню консоли SageMaker Studio выберите Файл, то Новые, то Терминал.
- Установите необходимые пакеты Python, указанные в requirements.txt файл:
- Настройте переменную среды с именем конечной точки, развернутой в вашей учетной записи:
- Запустите приложение Streamlit из
streamlit_chatbot_<LMI or TGI>.py
файл, который автоматически обновит имена конечных точек в скрипте на основе установленной ранее переменной среды: - Чтобы получить доступ к пользовательскому интерфейсу Streamlit, скопируйте URL-адрес SageMaker Studio на другую вкладку браузера и замените
lab?
proxy/[PORT NUMBER]/
. Поскольку мы указали порт сервера 6006, URL-адрес должен выглядеть следующим образом:
Замените идентификатор домена и регион в предыдущем URL-адресе на свою учетную запись и регион, чтобы получить доступ к пользовательскому интерфейсу чат-бота. На левой панели вы можете найти несколько подсказок, которые помогут начать работу.
Следующая демонстрация показывает, как потоковая передача ответов меняет взаимодействие с пользователем. Это может сделать взаимодействие более плавным и отзывчивым, что в конечном итоге повысит удовлетворенность и вовлеченность пользователей. Обратитесь к Репо GitHub для получения более подробной информации о реализации чат-бота.
Убирать
Когда вы закончите тестирование моделей, рекомендуется удалить конечную точку, чтобы сэкономить средства, если конечная точка больше не требуется:
Заключение
В этом посте мы представили обзор создания приложений с помощью генеративного искусственного интеллекта, проблем и того, как потоковая передача ответов в реальном времени SageMaker помогает вам решить эти проблемы. Мы продемонстрировали, как создать приложение чат-бота для развертывания модели Falcon-7B-Instruct для использования потоковой передачи ответов с использованием контейнеров SageMaker LMI и HuggingFace TGI, используя пример, доступный на сайте. GitHub.
Начните создавать свои собственные передовые потоковые приложения с помощью LLM и SageMaker уже сегодня! Обратитесь к нам за советом экспертов и раскройте потенциал потоковой передачи больших моделей для своих проектов.
Об авторах
Рагху Рамеша — старший архитектор решений машинного обучения в сервисной команде Amazon SageMaker. Он специализируется на оказании помощи клиентам в создании, развертывании и переносе рабочих нагрузок машинного обучения на SageMaker в любом масштабе. Он специализируется на машинном обучении, искусственном интеллекте и компьютерном зрении и имеет степень магистра компьютерных наук в Университете Техаса в Далласе. В свободное время увлекается путешествиями и фотографией.
Абхи Шивадитья — старший архитектор решений в AWS, работающий со стратегическими глобальными корпоративными организациями над содействием внедрению сервисов AWS в таких областях, как искусственный интеллект, распределенные вычисления, сети и хранилища. Его опыт заключается в глубоком обучении в области обработки естественного языка (НЛП) и компьютерного зрения. Абхи помогает клиентам эффективно развертывать высокопроизводительные модели машинного обучения в экосистеме AWS.
Алан Тан является старшим менеджером по продуктам в SageMaker, возглавляет усилия по выводу больших моделей. Он увлечен применением машинного обучения в области аналитики. Вне работы он любит проводить время на свежем воздухе.
Мелани Лi, Доктор философии, старший специалист по искусственному интеллекту и машинному обучению в AWS в Сиднее, Австралия. Она помогает корпоративным клиентам создавать решения с использованием самых современных инструментов искусственного интеллекта и машинного обучения на AWS, а также предоставляет рекомендации по проектированию и внедрению решений машинного обучения с использованием лучших практик. В свободное время она любит исследовать природу и проводить время с семьей и друзьями.
Сэм Эдвардс— облачный инженер (AI/ML) в AWS Sydney, специализирующийся на машинном обучении и Amazon SageMaker. Он с энтузиазмом помогает клиентам решать проблемы, связанные с рабочими процессами машинного обучения, и создавать для них новые решения. Вне работы он любит заниматься ракетным спортом и путешествовать.
Джеймс Сандерс — старший инженер-программист в Amazon Web Services. Он работает над платформой вывода в реальном времени для Amazon SageMaker.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- PlatoData.Network Вертикальный генеративный ИИ. Расширьте возможности себя. Доступ здесь.
- ПлатонАйСтрим. Интеллект Web3. Расширение знаний. Доступ здесь.
- ПлатонЭСГ. Автомобили / электромобили, Углерод, чистые технологии, Энергия, Окружающая среда, Солнечная, Управление отходами. Доступ здесь.
- ПлатонЗдоровье. Биотехнологии и клинические исследования. Доступ здесь.
- ЧартПрайм. Улучшите свою торговую игру с ChartPrime. Доступ здесь.
- Смещения блоков. Модернизация права собственности на экологические компенсации. Доступ здесь.
- Источник: https://aws.amazon.com/blogs/machine-learning/elevating-the-generative-ai-experience-introducing-streaming-support-in-amazon-sagemaker-hosting/
- :является
- :нет
- :куда
- $UP
- 1
- 10
- 100
- 11
- 13
- 14
- 16
- 1900
- 23
- 7
- 8
- 9
- a
- О нас
- ускорители
- доступ
- Учетная запись
- Учетные записи
- достигнутый
- через
- дополнительный
- Дополнительно
- адрес
- Принятие
- плюс
- После
- снова
- AI
- AI модели
- AI / ML
- Все
- позволяет
- почти
- причислены
- Amazon
- Создатель мудреца Амазонки
- Amazon Web Services
- an
- аналитика
- и
- анонсировать
- Другой
- ответ
- любой
- API
- приложение
- Применение
- Приложения
- Применение
- архитектура
- МЫ
- ПЛОЩАДЬ
- области
- массив
- искусственный
- искусственный интеллект
- AS
- помощники
- помогает
- At
- Австралия
- автоматически
- свободных мест
- доступен
- AWS
- назад
- Backend
- фон
- основанный
- BE
- , так как:
- до
- начинать
- польза
- пользу
- Преимущества
- ЛУЧШЕЕ
- лучшие практики
- между
- Цвести
- тело
- повышение
- изоферменты печени
- браузер
- буфер
- строить
- Строительство
- построенный
- но
- by
- призывают
- CAN
- заботится
- случаев
- случаев
- проблемы
- сложные
- персонаж
- Chatbot
- chatbots
- в чате
- проверка
- Выберите
- выбрал
- класс
- клиент
- клиентов
- облако
- код
- комментарий
- сравненный
- комплектующие
- компьютер
- Информатика
- Компьютерное зрение
- вычисление
- Конфигурация
- Консоли
- содержать
- Container
- Контейнеры
- содержание
- продолжать
- продолжается
- непрерывность
- непрерывно
- контроль
- Разговор
- Основные
- соответствующий
- Расходы
- может
- Создайте
- создали
- создает
- Создающий
- решающее значение
- изготовленный на заказ
- клиент
- Удовлетворенность клиентов
- Клиенты
- настроить
- передовой
- Dallas
- данным
- глубоко
- глубокое обучение
- По умолчанию
- определять
- Определяет
- Степень
- доставки
- демонстрация
- развертывание
- развернуть
- развертывание
- желанный
- подробный
- подробнее
- разница
- различный
- непосредственно
- распределенный
- распределенных вычислений
- do
- домен
- доменов
- сделанный
- динамический
- каждый
- Ранее
- экосистема
- эффективный
- эффективно
- усилия
- подъемный
- включить
- включен
- позволяет
- конец
- впритык
- окончание
- Конечная точка
- обязательство
- привлечение
- инженер
- повышать
- повышение
- обеспечивать
- Предприятие
- Весь
- Окружающая среда
- Даже
- События
- События
- пример
- Примеры
- Кроме
- возбужденный
- ожидать
- опыт
- Впечатления
- эксперту
- опыта
- Больше
- экспорт
- подвергаться
- чрезвычайно
- Face
- содействовал
- ложный
- семья
- быстрее
- Особенность
- чувствовать
- Файл
- Найдите
- First
- Впервые
- поток
- жидкость
- фокусируется
- после
- следующим образом
- Что касается
- формат
- Рамки
- каркасы
- Бесплатно
- друзья
- от
- полный
- функция
- генерируется
- поколение
- генеративный
- Генеративный ИИ
- генераторы
- получить
- GIF
- Глобальный
- GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР
- Графические процессоры
- гарантированный
- руководство
- Случай
- he
- Медицина
- помощь
- помощь
- помогает
- ее
- High
- на высшем уровне
- высокая производительность
- его
- имеет
- кашель
- состоялся
- хостинг
- Как
- How To
- HTML
- HTTP
- HTTPS
- ОбниматьЛицо
- ID
- Личность
- if
- иллюстрирует
- изображение
- немедленная
- немедленно
- осуществлять
- реализация
- в XNUMX году
- Осуществляющий
- Импортировать
- in
- В том числе
- Увеличение
- информация
- Инфраструктура
- начальный
- вход
- затраты
- устанавливать
- пример
- мгновенно
- вместо
- Интеллекта
- взаимодействие
- интерактивный
- в
- Представляет
- введение
- вызывается
- Запускает
- вопросы
- IT
- ЕГО
- Java
- JPG
- JSON
- язык
- большой
- больше
- Фамилия
- Задержка
- ведущий
- изучение
- оставил
- Длина
- библиотеки
- Библиотека
- лежит
- ЖИЗНЬЮ
- такое как
- линия
- линий
- Лама
- LLM
- Длинное
- дольше
- посмотреть
- выглядит как
- любит
- машина
- обучение с помощью машины
- Главная
- поддерживает
- сделать
- управлять
- менеджер
- магистра
- Макс
- Май..
- me
- означает
- механизм
- Память
- Меню
- метод
- мигрировать
- Минут
- ML
- модель
- Модели
- БОЛЕЕ
- Более того
- самых
- с разными
- Музыка
- имя
- имена
- натуральный
- Обработка естественного языка
- природа
- Необходимость
- сетей
- Новые
- НЛП
- нет
- ноутбук
- сейчас
- номер
- объекты
- of
- on
- ONE
- только
- открытый
- с открытым исходным кодом
- оптимизированный
- Опция
- Опции
- or
- заказы
- организации
- Другое
- наши
- внешний
- на открытом воздухе
- выходной
- внешнюю
- за
- общий
- обзор
- собственный
- пакет
- пакеты
- хлеб
- Параллельные
- параметры
- часть
- особенно
- части
- pass
- страстный
- для
- производительность
- Разрешения
- кандидат наук
- фотография
- план
- Платформа
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- игры
- Точка
- Популярное
- должность
- После
- потенциал
- потенциально
- практика
- практиками
- Precious
- Predictions
- предыдущий
- Проблема
- обработка
- Продукт
- Менеджер по продукции
- Производство
- проектов
- свойства
- обеспечивать
- при условии
- приводит
- обеспечение
- Питон
- Запросы
- повышение
- достигать
- Читать
- реальные
- реального времени
- Получать
- получила
- получение
- снижение
- рафинирование
- область
- регулярный
- Связанный
- замещать
- запросить
- Запросы
- обязательный
- Требования
- требуется
- Полезные ресурсы
- Реагируйте
- ответ
- ответы
- отзывчивый
- Итоги
- возвращают
- Возвращает
- реконструирует
- Роли
- Run
- sagemaker
- Вывод SageMaker
- то же
- удовлетворение
- Сохранить
- видел
- Шкала
- Наука
- SDK
- бесшовные
- секунды
- Раздел
- разделах
- обеспеченный
- безопасность
- посмотреть
- SELF
- Отправить
- отправка
- старший
- предложение
- обслуживание
- Услуги
- выступающей
- Сессия
- набор
- установка
- она
- должен
- показывать
- демонстрации
- продемонстрированы
- показанный
- Шоу
- значительный
- одинарной
- Размер
- So
- Software
- Инженер-программист
- Решение
- Решения
- РЕШАТЬ
- некоторые
- удалось
- Источник
- специалист
- специализированный
- специализируется
- указанный
- тратить
- раскол
- Спорт
- стандарт
- Начало
- и политические лидеры
- современное состояние
- Шаги
- липкий
- диск
- Стратегический
- поток
- потоковый
- потоковый
- строка
- студия
- такие
- поставки
- поддержка
- Поддержанный
- Поддержка
- Убедитесь
- Сидней
- система
- взять
- команда
- снижения вреда
- сказать
- Терминал
- terms
- тестXNUMX
- Тестирование
- который
- Ассоциация
- Местоположение
- Их
- тогда
- Там.
- Эти
- они
- этой
- Через
- пропускная способность
- время
- в
- знак
- инструменты
- топ
- Традиционно
- трансформеры
- Путешествие
- правда
- стараться
- два
- напишите
- ui
- В конечном счете
- понимает
- неизвестный
- отпереть
- Обновление ПО
- URL
- us
- использование
- прецедент
- используемый
- Информация о пользователе
- Пользовательский опыт
- пользователей
- использования
- через
- обычно
- ценностное
- ценный
- переменная
- версия
- версии
- с помощью
- Виртуальный
- видение
- ждать
- Ожидание
- законопроект
- we
- Web
- веб приложение
- веб-сервисы
- Что
- Что такое
- Колесо
- когда
- который
- в то время как
- Википедия.
- будете
- в
- без
- Работа
- рабочий
- Рабочие процессы
- работает
- работает
- бы
- записывать
- письменный
- Ты
- ВАШЕ
- зефирнет