Медленное обучение алгоритму RL и низкое использование процессора - PullRequest
0 голосов
/ 22 мая 2018

У меня есть сценарий python 3.6.4, который представляет собой простой обучающий сценарий подкрепления, основанный на 4-уровневом MLP (input, hidden-128, hidden-256, output).Я не могу опубликовать свой код здесь, потому что он слишком большой, я опубликую только небольшую его часть.

def train(model, epochs):
    total = 0
    start = time.time()
    entire_hist = []
    profits = []
    for i in range(epochs):
        loss = 0
        accuracy = 0
        hist = []
        env.reset()
        game_over = False
        input_t = env.observe()

        while not game_over:
            input_tm1 = input_t

            if np.random.random() <= epsilon:
                action = np.random.randint(0, num_actions, size=None)
            else:
                q = model.predict(input_tm1)
                action = np.argmax(q[0])

            input_t, reward, game_over = env.act(action)

            exp_replay.remember([input_tm1, action, reward, input_t], game_over)    
            inputs, targets = exp_replay.get_batch(model, batch_size=batch_size)

            loss, accuracy = model.train_on_batch(inputs, targets)
            hist.append([loss, accuracy, env.main])

            print(f'counter: {env.counter}, action taken: {action}, reward: {round(reward, 2)}, main: {round(env.main)}, secondary: {env.secondary}')

            if game_over:
                print('GAME OVER!')

        entire_hist.append(hist)
        profits.append(total)
        print(f'total profit: {env.total_profit}')
        print(f'epoch: {i}, loss: {loss}, accuracy: {accuracy}')
        print('\n')
        print('*'*20)


    end = int(time.time() - start)
    print(f'training time: {end} seconds')
    return entire_hist, total

Проблема в том, что когда я запускаю его, загрузка процессора составляет всего около 20-30% и использование GPU составляет около 5%.Я пробовал работать на разных машинах, и я получаю схожие результаты: чем более мощный процессор я использую, тем меньше его использует скрипт.И было бы хорошо, если бы не потребовалось несколько дней, чтобы обучить такую ​​маленькую сеть, если бы она работала в течение 1000-5000 эпох.Может кто-нибудь помочь сделать это быстрее и увеличить использование процессора.Я пытался работать на обоих процессорах Тпсор / ГПУ.Моя установка: последние керы с бэкэндом тензорным потоком Tensorflow-gpu == 1.4.0

1 Ответ

0 голосов
/ 26 мая 2018

На самом деле, это было довольно просто, я просто использовал не все свои ядра.Поскольку моя система распределяла нагрузку с одного ядра на все 4, я этого не заметил.

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