Как сохранить данные на удаленном mongoDB через ssh туннель? (В соединении отказано) - PullRequest
2 голосов
/ 15 октября 2019

У меня есть два компьютера: Ubuntu1 и Ubuntu2. Ubuntu1 запускает MongoDB с базой данных Sacred3. Я хочу подключиться с U2 к U1 через ssh и сохранить там результаты своих экспериментов.

Что я попробовал и не смог: 1. Я установил mongo DB, создал sacred3, у меня есть ssh ключ к нему. Я отредактировал /etc/mongod.conf, добавив:

# network interfaces net: port: 27017 bindIp: 0.0.0.0

Затем я включил переадресацию портов с помощью

ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:localhost:27017 ubuntu@106.969.696.969 // (с соответствующим ip)

Итак, как я понимаю, если я подключусь к своему локальному хосту: 6666, он будет переадресован на 106.969.696.969:27017

Итак, после этого я запускаю эксперимент с Sacred framework :

python exp1.py -m localhost: 6666: sacred3

и это должно записать эксперимент на удаленную БД, ОДНАКО я получаю:

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused

, который сводит меня с ума. пожалуйста помогите!

#

ниже содержимого exp1.py:

from sacred import Experiment
from sacred.observers import MongoObserver

ex = Experiment()
ex.observers.append(MongoObserver.create())

def compute():
    summ = layer1 - layer2
    return summ


@ex.config
def my_config():

    hp_list = [{"neurons" : [32,32] , "dropout": 1.0},
            {"neurons" : [32,32] , "dropout": 0.7},
            {"neurons" : [32,16] , "dropout": 0.9},
            {"neurons" : [24,16] , "dropout": 0.9},
            {"neurons" : [24,8] , "dropout":  0.9},
            {"neurons" : [16,8] , "dropout":  0.9},
            {"neurons" : [64,64] , "dropout": 0.9},
            {"neurons" : [64,64] , "dropout": 0.7},
            {"neurons" : [64,32] , "dropout": 0.9},
            {"neurons" : [64,32] , "dropout": 0.7},
            {"neurons" : [48,32] , "dropout": 0.9},
            {"neurons" : [48,32] , "dropout": 0.7},
            {"neurons" : [48,16] , "dropout": 0.9},
            {"neurons" : [48,16] , "dropout": 0.7},]

    n_epochs = 2 


@ex.capture
def training_loop(hp_list, n_epochs):
    for j in hp_list:
        print("Epoch: ", n_epochs)
#       layer1 = random.randint(18,68)
#       layer2 = random.randint(18,68)
#       layer3 = random.randint(18,68)
        layer1 = j["neurons"][0]
        layer2 = j["neurons"][1]
        dropout_ratio = j["dropout"]


        print("WHATS UUUUUP",j, layer1, layer2, dropout_ratio, sep="_")
        # vae_training_loop_NN_DO(i, layer1, layer2, dropout_ratio )


@ex.automain
def my_main():
    training_loop()

1 Ответ

1 голос
/ 15 октября 2019

Согласно документации , поставляемой , создается впечатление, что вы создаете двух наблюдателей или переопределяете аргумент соединения, который вы передали с -m, с MongoObserver.create(), указанным в коде, который использует значение по умолчаниюхост монго и порт localhost:27017. Вы либо предоставляете соединение наблюдателя с помощью аргумента -m или в коде, а не обоими.

Попробуйте удалить строку MongoObserver.create() полностью или жестко закодировать аргументы соединения: MongoObserver(url='localhost:6666', db_name='sacred3')

Такжепохоже, ваш хост mongo не любит привязку к localhost , поэтому вам также следует заменить localhost в вашей команде ssh на 127.0.0.1 или [::1], например ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:127.0.0.1:27017 ubuntu@106.969.696.969 или ssh -fN -i ~/.ssh/sacred_key-pair.pem -L 6666:[::1]:27017 ubuntu@106.969.696.969

...