Статьи

PiCloud + Pyevolve: эволюционные алгоритмы в облаке

Было довольно просто запустить Pyevolve на PiCloud .

Для эволюционного алгоритма есть несколько способов его распараллеливания. Одна из самых простых вещей — запустить параллельные экземпляры алгоритма с разными начальными случайными начальными числами. (Это обычная практика в исследовательском сообществе — поскольку запуск с разных случайных чисел позволяет проверить надежность нового алгоритма или правильную реализацию существующего). Первое упражнение, которое я попробовал с Pyevolve + PiCloud, — запустить реализацию генетического алгоритма Pyevolve с 10 различными начальными начальными числами на PiCloud — все они работают параллельно. Вот как, вы можете пойти по этому поводу:

Установка Pyevolve

  1. Клонировать репозиторий git с сайта https://github.com/perone/Pyevolve
  2. Установите Pyevolve: $ sudo python setup.py install
  3. Просто чтобы проверить, правильно ли он установлен, просто запустите один из примеров в каталоге examples /


Настройка Picloud

  1. Чтобы настроить PiCloud, следуйте инструкциям на http://www.picloud.com/, начиная с регистрации бесплатной учетной записи.
  2. После того, как вы установили клиент PiCloud, пожалуйста, проверьте установку, набрав «import cloud» из вашего приглашения Python и убедитесь, что он не выдает никаких ошибок.


Готовимся к запуску

Для целей этого эксперимента я буду использовать один из примеров, который поставляется с Pyevolve: pyevolve_ex7_rastrigin.py после некоторых модификаций. Модифицированный файл находится здесь . В частности, мы меняем функцию main () на run_ga (), принимая два параметра: seed и runid. Параметр seed используется для обеспечения случайного начального начального числа (используется при создании механизма GA с использованием ga = GSimpleGA.GSimpleGA (genome, seed) ). Адаптер CSV инициализируется для хранения статистики в файле CSV, где файл runid используется для указания имени файла.

Хорошо, теперь я опишу основной скрипт драйвера, который я использовал для запуска этого GA в облаке. Вот оно:

#!/usr/bin/python
# Simple demo to show how to run the Pyevolve
# Evolutionary Algorithms framework on PiCloud
# Pyevolve: http://sourceforge.net/projects/pyevolve/
# PiCloud: https://www.picloud.com/

# Amit Saha
# http://echorand.me

from pyevolve_rastrigin import *
import cloud

cloud.setkey(<API KEY>, 'SECRET KEY')

# List of Random seeds and run-Ids
# assuming 10 runs
seed_list=[100*(i+1) for i in range(10)]
runid_list=[i+1 for i in range(10)]

# calls the method defined in pyevolve_rastrigin.py
# which initiates the GA execution.
# Execute the code on PiCloud
jids = cloud.map(run_ga,seed_list,runid_list)

# check if the jobs are complete, if yes
# pull the stat files
cloud.join(jids)
for i in range(10):
    cloud.files.get('stats_' + str(i+1) + '.csv','stats_' + str(i+1)+'.csv')

Первое, что вам нужно сделать, это установить ключ API и секретный ключ, который вы будете использовать для доступа к PiCloud. Ключ API и Секретный ключ можно увидеть на странице «Ключи API» вашей учетной записи PiCloud. Это делается строкой cloud.setkey (, ‘SECRET KEY’). Далее мы используем функцию cloud.map () для вызова функции run_ga для каждой пары значений списков seed_list и runids_list. Это эффективный способ запуска той же функции в облаке, но с другим набором параметров. Как только это будет запущено, вы сможете увидеть состояние ваших рабочих мест на странице заданий вашего аккаунта PiCloud.

Далее мы ждем завершения всех заданий с помощью cloud.join (jids) и затем извлекаем все статистические CSV-файлы из хранилища PiCloud в локальную файловую систему с помощью cloud.files.get (‘stats_’ + str ( i + 1) + ‘.csv’, ‘stats_’ + str (i + 1) + ‘. csv’) (дополнительная информация об использовании модуля cloud.files здесь ). После того, как файлы были скопированы, вы можете увидеть результаты из файлов CSV — каждый файл CSV представляет результат одного запуска GA. Однако мы еще не говорили о том, как создавались файлы CSV.

Создание файлов на PiCloud от Pyevolve

Исходный код адаптера CSV, в котором создаются файлы CSV, находится в pyevolve / DBAdapters.py . Метод open () класса DBFileCSV — это место, где файл открывается для записи, а метод close () того же класса закрывает дескриптор файла после завершения записи. Однако этот метод создания файлов не будет работать для PiCloud — скорее данные не будут доступны для нашего клиента. Мы должны создать файл способом PiCloud — использовать функцию cloud.files.put () . Все, что я сделал здесь, это добавил строку cloud.files.put (self.filename) в метод close (). И я переустановил модуль Pyevolve, и все работало нормально. Вы можете найти мой измененный файл DBAdapaters.py здесь .

Вывод

Я надеюсь обсудить с людьми из Pyevolve, что они думают о моих изменениях в классе DBAdapter, и посмотреть, предложат ли они лучший путь. Как я уже упоминал в начале, это очень наивный способ использования возможностей параллельных вычислений в эволюционных алгоритмах. Я надеюсь изучить больше в этом направлении с PiCloud. Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий.

Спасибо за чтение.

Источник: http://echorand.me/2012/01/26/picloud-pyevolve-evolutionary-algorithms-in-the-cloud/