Hi @Lars_Simon_Zehnder,
Many thanks. It is a great idea to store into the info
object.
I followed the links your sent and stored the env-data I needed into the info. But, I got the following error. RLlib cannot serialize the data:
Traceback (most recent call last):
File "/home/data/dbt/housing_design/agents_floorplan/my_runner.py", line 135, in <module>
main()
File "/home/data/dbt/housing_design/agents_floorplan/my_runner.py", line 130, in main
runner.start()
File "/home/data/dbt/housing_design/agents_floorplan/my_runner.py", line 118, in start
env_to_agent.learn()
File "/home/data/dbt/housing_design/agents_floorplan/env_to_agent.py", line 84, in learn
self._run_the_trainer()
File "/home/data/dbt/housing_design/agents_floorplan/env_to_agent.py", line 76, in _run_the_trainer
self.my_trainer._the_trainer()
File "/home/data/dbt/housing_design/agents_floorplan/my_trainer.py", line 66, in _the_trainer
self.result = self.agent.train()
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/rllib/agents/trainer.py", line 659, in train
raise e
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/rllib/agents/trainer.py", line 648, in train
result = Trainable.train(self)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/tune/trainable.py", line 239, in train
result = self.step()
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/rllib/agents/trainer_template.py", line 206, in step
step_results = next(self.train_exec_impl)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 756, in __next__
return next(self.built_iterator)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 783, in apply_foreach
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 843, in apply_filter
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 843, in apply_filter
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 783, in apply_foreach
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 843, in apply_filter
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 1075, in build_union
item = next(it)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 756, in __next__
return next(self.built_iterator)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 783, in apply_foreach
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 783, in apply_foreach
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 783, in apply_foreach
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 783, in apply_foreach
for item in it:
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 471, in base_iterator
yield ray.get(futures, timeout=timeout)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/_private/client_mode_hook.py", line 89, in wrapper
return func(*args, **kwargs)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/worker.py", line 1621, in get
raise value.as_instanceof_cause()
RayTaskError(TypeError): ray::RolloutWorker.par_iter_next() (pid=15129, ip=192.168.16.146, repr=<ray.rllib.evaluation.rollout_worker.modify_class.<locals>.Class object at 0x7f4a8803e460>)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/util/iter.py", line 1151, in par_iter_next
return next(self.local_it)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/rllib/evaluation/rollout_worker.py", line 373, in gen_rollouts
yield self.sample()
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/rllib/evaluation/rollout_worker.py", line 769, in sample
self.output_writer.write(batch)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/rllib/offline/json_writer.py", line 68, in write
data = _to_json(sample_batch, self.compress_columns)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/site-packages/ray/rllib/offline/json_writer.py", line 125, in _to_json
return json.dumps(out)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/home/data/anaconda3/envs/rllib/lib/python3.9/json/encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type int64 is not JSON serializable
I tracked the error in debug mode. It is related to the last line of the following method:
def _to_json(batch: SampleBatchType, compress_columns: List[str]) -> str:
out = {}
if isinstance(batch, MultiAgentBatch):
out["type"] = "MultiAgentBatch"
out["count"] = batch.count
policy_batches = {}
for policy_id, sub_batch in batch.policy_batches.items():
policy_batches[policy_id] = {}
for k, v in sub_batch.items():
policy_batches[policy_id][k] = _to_jsonable(
v, compress=k in compress_columns)
out["policy_batches"] = policy_batches
else:
out["type"] = "SampleBatch"
for k, v in batch.items():
out[k] = _to_jsonable(v, compress=k in compress_columns)
return json.dumps(out)
And this how the out
variable looks like:
Anybody knows how to resolve this issue?
Thanks!