微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GA3C:无法腌制_thread.lock对象或CUDA错误:初始化错误

如何解决GA3C:无法腌制_thread.lock对象或CUDA错误:初始化错误

我正在尝试使用GA3C算法来实现Super-Mario AI。但是现在当我尝试运行代码时遇到了一些问题。 也就是说,当我尝试启动一个实际玩游戏的Agent时,会出现错误TypeError: can't pickle _thread.lock objects

# Server.py,to add an Agent
def add_agent(self):
        self.agents.append(
            Agent(len(self.agents),self.prediction_q,self.training_q,self.stats.episode_log_q)
        )
        self.agents[-1].start()

和代理代码如下:

class Agent(Process):
    def __init__(self,id,prediction_q,training_q,episode_log_q):
        super(Agent,self).__init__(target=self.run)
        self.id = id
        self.prediction_q = prediction_q
        self.training_q = training_q
        self.episode_log_q = episode_log_q
        self.env = Environment()
        self.num_actions = self.env.get_actions_num()
        self.actions = np.arange(self.num_actions)
        self.discount = Config.disCOUNT
        self.wait_q = Queue(maxsize=1)
        self.exit_flag = Value('i',0)
    def run(self):
        # wait a few seconds to make sure Agents run smoothly
        time.sleep(np.random.rand())
        np.random.seed(np.int32(time.time() % 1 * 1000 + self.id * 10))
        # print("START!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
        while self.exit_flag.value == 0:
            total_reward = 0
            total_length = 0
            for x_,r_,a_,reward_sum in self.run_episode():
                total_reward += reward_sum
                total_length += len(r_) + 1  # +1 last frame that  drop
                self.training_q.put((x_,a_))
            self.episode_log_q.put((datetime.Now(),total_reward,total_length))

我的代码中的所有队列均为multiprocess.Queue,由于我已经阅读了一些与我类似的问题以及在这些问题下的答案,所以我仍然无法找到问题所在。 另一个有趣的问题是,错误(棘手错误)仅在我在Windows上运行代码时发生,并且代理可以在具有Linux系统的Google Colab上顺利启动。但不幸的是,在它们工作了很短的时间后,我又遇到了另一个错误 CUDA error: initialization error。由于我的代码cpu或TPU上正常工作,我感到困惑 那么,以前有人使用过这种算法吗?还是有人可以帮助我找到问题所在?非常感谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。