получение результата из режима демона Vowpal Wabbit

Я запускаю VW в режиме демона. Как отдельный исполняемый файл, он работает отлично. В режиме демона я сначала вижу что-то о прогнозах и вариантах, но не конечный результат. Не уверен, что именно происходит.

Вот как я называю VW6

/bin64/vw --daemon --num_children 2 -t -i ~/modelbow.vw6 --min_prediction 0 --max_prediction 1 -p stdout  2>&1 

Я проверяю, что vw6 работает нормально. Я отправляю данные с помощью простого php-скрипта (для краткости удалены строки отладки):

     $fp = fsockopen("localhost",26542, $errno, $errstr, 3);
     $fp_dat = fopen("/tmp/ml.dat", "r");

     $mldata = explode("\n", file_get_contents("/tmp/ml.dat"));

     $mlstr = implode($mldata);

     fwrite($fp, $mlstr);

     $result = trim(fgets($fp, 1024));
     print $result;

Print $result выше ничего не печатает. Единственное, что я вижу в stdout, это

num sources = 1
Num weight bits = 28
learning rate = 10
initial_t = 1
power_t = 0.5
decay_learning_rate = 1
predictions = stdout
only testing
average    since       example  example    current  current  current
loss       last        counter   weight      label  predict features

Находясь в автономном исполняемом режиме, если я запускаю тот же файл данных той же модели только без параметра -daemon, он с радостью дает результат в конце

...
...
predictions = stdout
only testing
average    since       example  example    current  current  current
loss       last        counter   weight      label  predict features
1.000000 ba66dfc7a135e2728d08010b40586b90

Любая идея, что может пойти не так с режимом демона? Я также пытался использовать опцию -p /tmp/... запустил режим демона с помощью sudo, но ничего не помогло. Есть ли опция отладки дампа или подробная опция или что-то еще, чтобы узнать, что именно происходит?

спасибо


person user999755    schedule 20.03.2014    source источник
comment
Только что добавил проверенный/рабочий пример в вики vw по адресу: github.com/JohnLangford/vowpal_wabbit /wiki/daemon-example Причиной того, что ваш код не работает, может быть проблема с буферизацией в PHP. Этот пример (извините, не PHP) демонстрирует, что запись и чтение из одного и того же сокета просто работает. ХТН.   -  person arielf - Reinstate Monica    schedule 20.03.2014


Ответы (1)


Причина, по которой он не работает, не в vw, а в клиентском коде PHP.

explode на "\n", удаляет новые строки.

implode без параметра строки-клея приводит к тому, что строка-клея по умолчанию равна пустой строке.

Результат: символы новой строки удалены. Все примеры объединены в один большой (и неполный, так как в конце нет новой строки).

vw нужны новые строки для разделения примеров, без них он будет вечно ждать завершения 1-го примера.

Поэтому я думаю, вам нужно изменить строку кода implode на:

$mlstr = implode("\n", $mldata);

чтобы это работало.

Вам также понадобится дополнительная конечная новая строка, чтобы пройти последнюю строку.

person arielf - Reinstate Monica    schedule 20.03.2014