Code Monkey home page Code Monkey logo

Comments (11)

kozinove avatar kozinove commented on August 15, 2024 1

Я так понимаю варианты решений есть тут
https://stackoverflow.com/questions/72766345/attributeerror-cant-pickle-local-object-in-multiprocessing

Я сам в ближайшее время постараюсь что-то сделать по мануалам

from iopt.

kozinove avatar kozinove commented on August 15, 2024 1

фикс с созданием pool тут
#157

from iopt.

kozinove avatar kozinove commented on August 15, 2024

повторяется ли проблема в примере examples/GKLS_example.py?

from iopt.

YamLyubov avatar YamLyubov commented on August 15, 2024

examples/GKLS_example.py отрабатывает хорошо. Ошибка возникает при использовании в GOLEM

from iopt.

kozinove avatar kozinove commented on August 15, 2024

Очевидно пролблема при создании Pool процессов.
Не могли бы Вы дать некую инструкцию по запуску соответствующего примера?

В examples/GKLS_example.py Вы могли заметить что число процессов задается >1 (строка 18)

Также уточните - Вы используете версию github или pip?

После релиза Мы пытаемся в частности привести код к PEP8 согласно #117

from iopt.

YamLyubov avatar YamLyubov commented on August 15, 2024

Я использовала pip версию iOpt==0.2.1

Добавила пример в ветку https://github.com/aimclub/GOLEM/tree/update-iopt-version. Он находится в файле examples/tuning_example.py.

В примере создается граф, в верщинах которого могут находится параметры. Параметры и их возможные значения задаются через SearchSpace. Максимизируется сумма числовых параметров в вершинах графа.

Весь код связанный с iOpt находится в файле golem/core/tuning/iopt_tuner.py.

from iopt.

kozinove avatar kozinove commented on August 15, 2024

Мы запустили пример.
Падение происходит при попытке создать Pool процессов:
Calculator.pool = Pool(parameters.number_of_parallel_points,
initializer=Calculator.worker_init,
initargs=(self.evaluate_method,))

@staticmethod
def worker_init(evaluate_method: ICriterionEvaluateMethod):
Calculator.evaluate_method = evaluate_method
Тут evaluate_method, по сути, просто обертка над задачей, которая в методе вычисляет дополнительные характеристики.
worker_init нужен чтобы в каждом порожденном процессе была копия оптимизируемой задачи.
Без объекта нет возможность вычислять значение критерия.

Падение происходит из-за того, что не удается сериализовать задачу
После экспериментов выяснилось, что проблема в (objective_evaluate)
class GolemProblem(Problem, Generic[DomainGraphForTune]):
def init(self, graph: DomainGraphForTune,
objective_evaluate: ObjectiveEvaluate,
problem_parameters: IOptProblemParameters):

    self.objective_evaluate = objective_evaluate

Если я правильно понимаю, это объект содержащий указатель на ф-ю и он не имеет смысл при сериализации.

from iopt.

YamLyubov avatar YamLyubov commented on August 15, 2024

Да, это указатель на функцию. Как можно попробовать рещить эту проблему?

from iopt.

kozinove avatar kozinove commented on August 15, 2024

Я нашел библиотеку
https://pypi.org/project/pathos/
Она делает обертку над Pool из multiprocessing и dill
Если заменить стандартный pool на from pathos.multiprocessing import _ProcessPool
то у меня счет запускается без исключений.

Сама библиотека регульярно обновляется. По всей видиости мы пейдем на нее, но нужно тестировать корректность, т.к. это не стандартная библиотека.

Если есть рекомендации по другим оберткам над Pool из multiprocessing, то пишите рекомендации.

from iopt.

nicl-nno avatar nicl-nno commented on August 15, 2024

А это ещё актуально или можно закрывать? Фикс вроде влит.

from iopt.

kozinove avatar kozinove commented on August 15, 2024

По моим представлениям можно закрыть

from iopt.

Related Issues (16)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.