Высокопроизводительный фреймворк распределенного выполнения — Ray
Исходный адрес: http://www.cnblogs.com/fanzhidongyzby/p/7901139.html
Ray да UC Berkeley RISELab Недавно запущенная высокопроизводительная среда распределенного выполнения, которая использует архитектуру, отличную от традиционных распределенных вычислительных систем и абстрактов. Spark Лучшая производительность вычислений.
Ray В настоящее время все еще находится на лабораторной стадии, последняя версия0.2.2 версия. несмотря на то что Ray Утверждая, что ориентирован AI Прикладная среда распределенных вычислений, но ее архитектура имеет общую абстракцию распределенных вычислений. Эта статья о Ray Сделайте краткое введение, чтобы помочь всем быстрее понять Ray Что это? Если есть какие-либо несоответствующие описания, пожалуйста, поправьте меня.
1. Начните с простого
Давайте сначала посмотрим, как написана простейшая программа Ray.
Удаленная функция — это основная концепция абстракции распределенных вычислений Ray. С его помощью разработчики имеют возможность динамически настраивать вычислительные зависимости (задача DAG). такие как:
Что такое id
В примере кода вызовы функций A и B выполняются полностью параллельно, но вызов функции C зависит от результатов, возвращаемых функциями A и B. Рэй может гарантировать, что функция C не будет выполняться, пока результаты функций A и B не будут вычислены. Если функции A, B и C аналогичны узлам DAG, то граница DAG — это зависимость параметров функции C от результатов вычислений функций A и B. Метод бесплатного вызова функции позволяет Ray свободно настраивать структуру и расчетную зависимость DAG. отношения. Кроме того, упоминается, что функции Python могут определять функции с несколькими возвращаемыми значениями, что также делает функции Python более естественными с характеристиками множественного ввода и множественного вывода узлов DAG.
Два, системная архитектура
Какую архитектуру использует Ray, чтобы сделать приведенную выше абстракцию распределенных вычислений? Вот системная архитектура Ray (из статьи Рэя, ссылка 1).
В качестве распределенной вычислительной системы Ray по-прежнему следует типичной конструкции Master-Slave: Master отвечает за глобальную координацию и поддержание состояния, а Slave выполняет задачи распределенных вычислений. Однако, в отличие от традиционных распределенных вычислительных систем, Ray использует Планирование смешанных задач Идеи. В режиме кластерного развертывания Ray запустил следующие ключевые компоненты:
- GlobalScheduler: На главном устройстве запускается глобальный планировщик, который принимает задачи, представленные локальным планировщиком, и распределяет задачи по соответствующему локальному планировщику задач для выполнения.
- RedisServer: Запустите один или несколько RedisServers на главном сервере, чтобы сохранить информацию о состоянии (ControlState) распределенных задач, включая сопоставление целевой машины, описание задачи, информацию об отладке задачи и т. Д.
- LocalScheduler: На каждом подчиненном сервере запускается локальный планировщик, который используется для отправки задач глобальному планировщику и назначения задач рабочему процессу на текущей машине.
- Worker: Каждое ведомое устройство может запускать несколько рабочих процессов для выполнения распределенных задач и сохранения результатов вычислений в ObjectStore.
- ObjectStore: Каждый Slave запускает ObjectStore для хранения объектов данных, доступных только для чтения.Работники могут получить доступ к этим данным объекта через общую память, что может эффективно снизить стоимость копирования памяти и сериализации объектов. Нижний уровень ObjectStore реализован Apache Arrow.
- Плазма (теперь переименована в стрелку): Каждое хранилище объектов на ведомом устройстве управляется диспетчером объектов под названием Plasma, который может активно извлекать данные объекта с других ведомых устройств на текущий компьютер, когда рабочий обращается к удаленным объектам данных, которые не существуют в локальном хранилище объектов.
REAL ID. Что это и нужен ли он нам?
Задачи Рэя также представлены способом, аналогичным концепции Driver в Spark. Отличия заключаются в следующем:
- Драйвер Spark отправляет задачу DAG, после отправки ее нельзя изменить.
- То, что представил Рэй, является более детализированной удаленной функцией, и зависимость DAG задачи свободно настраивается зависимостью функции.
Схема архитектуры, представленная в диссертации, не отражает концепцию драйвера, поэтому я сделал на ее основе некоторые модификации и расширения.
Узел Ray Driver и компоненты, запускаемые узлом Slave, почти одинаковы, но есть следующие различия:
- Обычно существует только один рабочий процесс DriverProcess в драйвере, которым является PythonShell, запущенный пользователем. Slave может при необходимости создавать несколько рабочих процессов.
- Драйвер может только отправлять задачи, но не может получать задачи, назначенные глобальным планировщиком. Slave может отправлять задачи или получать задачи, назначенные глобальным планировщиком.
- Драйвер может активно обходить глобальный планировщик для отправки задач вызова Actor на Slave (разумность конструкции здесь еще не обсуждается). Slave может получать только вычислительные задачи, назначенные глобальным планировщиком.
Три, основные операции
Основываясь на указанной выше архитектуре, давайте кратко обсудим ключевые операции и процессы в Ray.
1. ray.init()
В PythonShell используйте ray.init() Вы можете запустить луч локально, включая Driver, HeadNode (Master) и несколько ведомых устройств.
import ray ray.init()
Если вы напрямую подключены к существующему кластеру Ray, вам нужно только указать адрес RedisServer.
ray.init(redis_address=»»)
Результат, полученный при локальном запуске Ray, выглядит следующим образом:
>>> ray.init() Waiting for redis server at 127.0.0.1:58807 to respond. Waiting for redis server at 127.0.0.1:23148 to respond. Allowing the Plasma store to use up to 13.7439GB of memory. Starting object store with directory /tmp and huge page support disabled Starting local scheduler with 8 CPUs, 0 GPUs ====================================================================== View the web UI at http://localhost:8888/notebooks/ray_ui62614.ipynb?token=7c253b0fd66fe41294d9f2c6739e3f002c1e76f6f59b99f5 ====================================================================== >>>
Когда вы запускаете Ray локально, вы можете увидеть адрес доступа к веб-интерфейсу Ray.
2. ray.put()
использовать ray.put() Вы можете хранить объекты Python в локальном ObjectStore и асинхронно возвращать уникальный ObjectID. С помощью этого идентификатора Ray может получить доступ к объектам на любом узле кластера (удаленные объекты можно получить, сверяясь с таблицей объектов мастера).
После того, как объект сохранен в ObjectStore, его нельзя изменить. Удаленная функция Ray может напрямую передавать идентификатор объекта в качестве параметра. Использование ObjectID в качестве параметра удаленной функции может эффективно уменьшить количество записываемых параметров функции ObjectStore.
3. ray.get()
использовать ray.get() Вы можете получать объекты в ObjectStore через ObjectID и преобразовывать их в объекты Python. Для объектов типа массива Ray использует механизм общей памяти, чтобы снизить стоимость копирования данных. Для других объектов вам необходимо скопировать данные из ObjectStore в динамическую память процесса.
Если вы позвоните ray.get() Во время работы, если объект еще не был создан, операция get будет заблокирована до тех пор, пока объект не будет создан и не вернется. Ключевой процесс операции get выглядит следующим образом:
- Процесс Driver или Worker сначала отправляется в ObjectStore, чтобы запросить данные объекта, соответствующие ObjectID.
- Если в локальном хранилище объектов нет соответствующих данных об объекте, менеджер локальных объектов Plasma проверит таблицу объектов на главном сервере, чтобы узнать, хранится ли объект в хранилище объектов других узлов.
- Если данные объекта находятся в ObjectStore других узлов, Plasma отправит сетевой запрос для извлечения данных объекта в локальный ObjectStore.
- Если данные объекта не были созданы, Мастер уведомит запрошенную плазму о том, чтобы прочитать их после завершения создания объекта.
- Если данные объекта были удалены всеми хранилищами объектов (удалены политикой LRU), локальный планировщик выполнит работу по воссозданию объекта в соответствии с кровным родством задачи.
- Как только данные объекта становятся доступными в локальном ObjectStore, процесс Driver или Worker напрямую сопоставляет область памяти объекта с собственным адресным пространством процесса через разделяемую память и десериализует ее в объект Python.
К тому же, ray.get() Вы можете читать данные сразу нескольких объектов:
result_ids = [ray.put(i) for i in range(10)] ray.get(result_ids) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Однако это имеет потенциальное требование для определения удаленной функции, то есть, если в удаленной функции вызываются другие пользовательские функции, они должны быть определены заранее, в противном случае удаленная функция не сможет найти соответствующее содержимое определения функции.
Другие удаленные функции также могут быть вызваны в удаленной функции. Каждый раз, когда Driver и Slave вызывают удаленную функцию, они фактически отправляют вычислительную задачу в кластер. Отсюда вы также можете увидеть свободу распределенных вычислений Ray.
Ключевой процесс вызова удаленной функции в Ray выглядит следующим образом:
- Когда вызывается удаленная функция, сначала создается объект задачи, который содержит идентификатор функции, идентификатор или значение параметра (базовый объект Python напрямую передает значение, Сначала пройдут сложные объекты ray.put() Операция сохраняется в ObjectStore, а затем возвращает ObjectID), функция возвращает идентификатор объекта значения.
- Объект задачи отправляется в локальный планировщик.
- Локальный планировщик определяет, будет ли объект задачи запланирован локально или отправлен глобальному планировщику. Если зависимость (параметр) объекта задачи уже существует в локальном хранилище объектов и вычислительных ресурсов локального процессора и графического процессора достаточно, локальный планировщик назначит задачу локальному WorkerProcess для выполнения. В противном случае объект задачи отправляется в глобальный планировщик и сохраняется в таблице задач (TaskTable), а глобальный планировщик решает отправить задачу локальному планировщику в кластере в соответствии с информацией о текущем состоянии задачи.
- После того, как локальный планировщик получит объект задачи (из локальной задачи или задачи, назначенной глобальным планированием), он поместит его в очередь задач, дождется, пока вычислительные ресурсы и локальные зависимости будут удовлетворены, а затем выделит его WorkerProcess для выполнения.
- Worker выполняет задачу после получения объекта задачи, сохраняет возвращаемое значение функции в ObjectStore и обновляет информацию таблицы объектов (ObjectTable) мастера.
5. ray.wait()
ray.wait() Операция поддерживает ожидание пакетной задачи, и на основе этого данные, соответствующие нескольким ObjectID, могут быть получены одновременно.
# Запуск 5 задач удаленного вызова функций results = [f.remote(i) for i in range(5)] # Блок ожидает завершения 4-х задач, таймаут 2.5с ready_ids, remaining_ids = ray.wait(results, num_returns=4, timeout=2500)
В приведенном выше примере результаты содержат 5 ObjectID, используйте ray.wait Операция может дождаться возврата 4 задач после завершения и поместить завершенный объект данных в возвращаемое значение первого типа списка, а незавершенный ObjectID — в возвращаемое значение второго списка. Если период тайм-аута установлен, и ожидаемое возвращаемое значение не ожидается до истечения периода тайм-аута, то значение, возвращаемое по истечении тайм-аута, будет иметь преимущественную силу.
6. ray.error_info()
Используйте ray.error_info (), чтобы получить информацию об ошибке, сгенерированную во время выполнения задачи.
7. Actor
Используйте следующий метод для создания объекта «Актер».
a1 = Counter.remote() a2 = Counter.remote()
Процесс создания Рэя Актера:
- Мастер выбирает Slave и распределяет задачу создания Актера своему локальному планировщику.
- Создайте объект Actor и выполните его конструктор.
Из процесса видно, что создание объектов-актеров идет параллельно.
Используйте Actor, вызвав метод объекта Actor.
a1.increment.remote() # ray.get returns 1 a2.increment.remote() # ray.get returns 1
Процесс вызова метода объекта Actor:
- Сначала создайте задачу.
- Задача напрямую назначается драйвером локальному исполнителю, который создал Актера для выполнения. Эта операция обходит глобальный планировщик (может ли Worker также использовать Актера для непосредственного назначения задач, все еще под вопросом).
- Возвращает ObjectID результата вызова метода Actor.
Чтобы гарантировать согласованность состояния Актера, вызовы методов одного и того же Актера выполняются последовательно.
В-четвертых, установите Ray
Если вы используете только Ray, вы можете использовать следующую команду для прямой установки.
pip intall ray
Если вам нужно скомпилировать последний исходный код Ray для установки, выполните следующие действия (MaxOS):
# Обновить зависимости компиляции brew update brew install cmake pkg-config automake autoconf libtool boost wget pip install numpy cloudpickle funcsigs click colorama psutil redis flatbuffers cython —ignore-installed six # Скачать исходный код, скомпилировать и установить git clone https://github.com/ray-project/ray.git cd ray/python python setup.py install # Контрольная работа python test/runtest.py # Установить библиотеки, необходимые для WebUI [необязательно] pip install jupyter ipywidgets bokeh # Скомпилировать документ Ray [необязательно] cd ray/doc pip install -r requirements-doc.txt make html open _build/html/index.html
Когда я установил jupyter на MacOS, я столкнулся с ситуацией, когда не удалось обновить библиотеку Python setuptools. Причина заключалась в настройках безопасности MacOS, которые можно решить следующими способами:
- Перезагрузите компьютер и нажмите прямой эфир Command+R Войдите в защищенный режим Mac.
- Откройте командную строку и введите команда csrutils disable Отключите системную политику безопасности.
- Перезагрузите компьютер и продолжайте установку jupyter.
- После завершения установки повторите описанный выше метод. выполненный csrutils enable , Перезагрузите снова.
Введите PythonShell и введите код для локального запуска Ray:
import ray ray.init()
Откройте интерфейс WebUI в браузере следующим образом:
Справка
- Луч бумаги:Ray:A Distributed Framework for Emerging AI Applications;Real-Time Machine Learning: The Missing Pieces
- Руководство по разработке лучей:http://ray.readthedocs.io/en/latest/index.html
- Исходный код Ray:https://github.com/ray-project/ray
Источник: russianblogs.com
Уязвимость Android «Fake ID». Что это и как проверить своё устройство
Fake ID позволяет вредоносным приложениям обойти предусмотренные в ОС от Google системы защиты, фальсифицируя идентификаторы безопасности, что позволяет им получать доступ к учетным данным пользователя, email, истории платежей или другой информации, которую каждый предпочитает держать при себе.
Предыдущие новости
Yandex.ru, 2014-07-30 13:31
Доля поставок смартфонов Huawei в рамках международных продаж выросла
Лишь за 2 квартал Huawei отгрузила 20,6 млн устройств, и годичный рост составил 85%. По большей части данный рост обеспечен новыми рынками на Ближнем Востоке, в Африке и Латинской Америке, где поставки смартфонов компании возросли вдвое или даже втрое по сравнению с предыдущим.
Yandex.ru, 2014-07-29 07:49
«Умные» городские технологии до 2023 года заработают $27.8 млрд
Рыночное исследование, опубликованное Navigant Research, прогнозирует рост доходов от использования технологий «умный город» в мировом масштабе с $8.8 млрд в 2014 году до $27.5 млрд в 2034-м. Технологии «умный город» разрабатывались для решения целого ряда проблем, включающих в себя управление энергетикой, водоснабжением, городским движением, освещением улиц, общественной.
Yandex.ru, 2014-07-30 11:16
Устройства Xiaomi тайно отправляют данные владельцев в Китай
Устройства Xiaomi тайно отправляют данные владельцев в Китай Смартфоны Xioami продаются в Китае большими тиражами и распространяются по всему свету. Поэтому данные, распространённые OCWorkBench кажутся
Yandex.ru, 2014-07-29 16:20
Собянин призвал ускорить перевод госуслуг в электронный вид
Мэр Москвы Сергей Собянин в ходе сегодняшней пресс-конференции отметил, что необходимо ускорить процесс перевода заявлений на выдачу разрешений на строительство в электронный вид как можно
Источник: php.ru
Что такое партнерский идентификатор (RefID) и какой лучше зарегистрировать?
Партнерский идентификатор (RefID) — это логин, под которым вы регистрируетесь в партнёрской программе.
Он будет виден в каждой вашей партнерской ссылке. Например:
http://reincarnationics.com/p/ ВАШЛОГИН/podgotkurs
В связи с этим мы рекомендуем при регистрации указывать короткий логин, обычно вполне достаточно ваших инициалов. Обратите внимание на разницу:
http://reincarnationics.com/p/VasilijPupkin/podgotkurs
http://reincarnationics.com/p/VP/podgotkurs
На этом примере вам будет легче определиться с логином при регистрации в партнерской программе.
Впрочем, даже длинные и не всегда благозвучные ссылки можно прятать, как это делать, мы вас научим.
Эта статья была полезна для 39 людей. Эта статья помогла Вам?
Да, помогла Нет, не для меня
Почему эта статья Вам не помогла?
Источник: reincarnationics.userecho.com
