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