Было довольно просто запустить Pyevolve на PiCloud .
Для эволюционного алгоритма есть несколько способов его распараллеливания. Одна из самых простых вещей — запустить параллельные экземпляры алгоритма с разными начальными случайными начальными числами. (Это обычная практика в исследовательском сообществе — поскольку запуск с разных случайных чисел позволяет проверить надежность нового алгоритма или правильную реализацию существующего). Первое упражнение, которое я попробовал с Pyevolve + PiCloud, — запустить реализацию генетического алгоритма Pyevolve с 10 различными начальными начальными числами на PiCloud — все они работают параллельно. Вот как, вы можете пойти по этому поводу:
Установка Pyevolve
- Клонировать репозиторий git с сайта https://github.com/perone/Pyevolve
- Установите Pyevolve: $ sudo python setup.py install
- Просто чтобы проверить, правильно ли он установлен, просто запустите один из примеров в каталоге examples /
Настройка Picloud
- Чтобы настроить PiCloud, следуйте инструкциям на http://www.picloud.com/, начиная с регистрации бесплатной учетной записи.
- После того, как вы установили клиент 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/