如何解决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 举报,一经查实,本站将立刻删除。