2016-07-22 2 views
0

У меня есть модель CNN. Запросы использования этой модели, например, для классификации изображения, поступают 1 раз в секунду.Как обрабатывать многозадачность в одном процессе с помощью anano для машинного обучения?

Я хотел бы получить запросы как новые данные без проверки и продолжить обучение моей модели.

Мой вопрос: как я могу справиться с задачей обучения и эффективно определить задачу?

Я объясню, почему это становится проблемой:

Каждого шаг обучения занимает длительное время, по крайней мере, Северьте секунды, используя GPU и не прерывают. Итак, если в моих задачах классификации также используется GPU, я не могу своевременно выполнить запросы. Я хотел бы сделать классификацию задач с использованием процессора, но выглядит так, что anano не поддерживает два разных файла config.device в одном процессе.

Многопроцессорный режим неприемлем, потому что моя память ограничена, а анано слишком дорого.

Любая помощь или совет будут оценены.

ответ

0

Вы можете создать две отдельные копии одного и того же CNN, один на процессоре и один на графическом процессоре. Я думаю, что это может быть сделано при любом старом GPU бэкэндом или новым, но по-разному .... некоторые идеи:

Под старого бэкэндом:

нагрузки Теаны с device=cpu. Создайте свою функцию вывода и скомпилируйте ее. Затем вызовите theano.sandbox.cuda.use('gpu') и создайте новую копию своей функции вывода и возьмите градиенты этого, чтобы выполнить любые функции обучения. Теперь функция вывода должна выполняться на CPU, и обучение должно происходить на графическом процессоре. (Я никогда не делал это нарочно, но у меня было это случилось со мной на случайно!)

Под нового бэкэндом:

Насколько я знаю, вы должны сказать Theano о каких-либо графических процессорах прямо при импорте , не позже. В этом случае вы можете использовать THEANO_FLAGS="contexts=dev0->cuda0", который не заставляет использовать одно устройство над другим. Затем создайте версию вывода своей функции, как обычно, и для учебной версии снова поместите все общие переменные на графический процессор, а входные переменные в любую из ваших учебных функций также должны быть переменными GPU (например, input_var_1.transfer('dev0')). Когда все ваши функции скомпилированы, посмотрите на программы, используя theano.printing.debugprint(function), чтобы узнать, что на GPU и CPU. (При компиляции функций ЦП он может дать предупреждение о том, что он не может вывести контекст, и, насколько я видел, он приземляется на CPU ... не уверен, насколько безопасно это поведение.)

В любом случае это будет зависеть от ваших функций, основанных на GPU, НЕ ВОЗВРАТЬ НИЧЕГО НА ЦП (убедитесь, что выходные переменные являются графическими процессорами). Это должно позволить функции обучения работать одновременно с вашей функцией вывода, а затем вы получаете то, что вам нужно для CPU. Например, когда вы делаете шаг обучения, просто скопируйте новые значения в параметры вашей логической схемы вывода, конечно.

Давайте послушаем, что вы придумали!

Смежные вопросы