Ошибка curl curle_couldnt_connect после нескольких успешных подключений - PullRequest
0 голосов
/ 20 февраля 2019

Я использую openAI gym (который разработан в Python) через http-соединение в C++, которое доступно в [https://github.com/openai/gym-http-api/tree/master][1].Сервер создается путем вызова gym_http_server.py, а код C++ доступен в каталоге cpp-binding.Я разработал простую полностью подключенную нейронную сеть также на C ++ и реализовал алгоритм, чтобы научиться играть в некоторые из игр, доступных в gym.Все работает нормально, когда моя нейронная сеть маленькая, как [10,10].Но как только я увеличу размеры до более крупной сети, например, [32,64,64,32], скручивание завершится ошибкой: curle_couldnt_connect после нескольких сотен итераций обучения.Это происходит в функции POST:

Json::Value POST(const std::string& route, const std::string& post_data)
{
    std::string url = "http://" + addr + route;
    if (verbose) printf("POST %s\n%s\n", url.c_str(), post_data.c_str());
    curl_easy_setopt(h.get(), CURLOPT_URL, url.c_str());
    curl_easy_setopt(h.get(), CURLOPT_PORT, port);
    std::string answer;
    curl_easy_setopt(h.get(), CURLOPT_WRITEDATA, &answer);
    curl_easy_setopt(h.get(), CURLOPT_POST, 1);
    curl_easy_setopt(h.get(), CURLOPT_POSTFIELDS, post_data.c_str());
    curl_easy_setopt(h.get(), CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)post_data.size());
    curl_easy_setopt(h.get(), CURLOPT_HTTPHEADER, headers.get());

    CURLcode r = curl_easy_perform(h.get());
    if (r)
        throw std::runtime_error(curl_error_buf.data());

    Json::Value j;
    throw_server_error_or_response_code(answer, j);
    return j;
}

, которая вызывается в Json::Value ans = client->POST("/v1/envs/" + instance_id + "/step/", act_json.toStyledString());, все доступно в 'gym_binding.cpp'.

Странно, что эта проблема обычно возникаетпосле 5000 успешных подключений, независимо от размера сети.Например, я запускал его с двумя различными измерениями сети, каждый раз четыре раза: когда сеть имеет значение [32,64,64,64,32], это происходит после [5120, 5134, 7359, 7375];и когда сеть [60,60], она выходит из строя после [5134, 5167, 2678, 5272] итераций.Я пытался найти наименьшую сеть, с которой я столкнулся с этой проблемой, но я не смог найти данную.Например, иногда [30,60] работает, а [30,30] - нет.Я много искал о curl, и кажется, что это обычная ошибка соединения.Но мое немного странно, поскольку оно основано на измерении нейронной сети и иногда работает, хотя и не всегда.Я также следил за использованием memory и cpu и мог найти что-то ненормальное.

Кроме того, еще одно наблюдение, мне пришлось перезагрузить сервер, и после этого он работал нормально в течение полутора дней,хотя после этого он снова перестал работать.Я ценю любую помощь или комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...