reverb框架为python语言环境下的,由于该框架需要和python和TensorFlow进行混合编译,因此需要用到python的libpython.so共享库,因此使用conda创建python环境就不是很好用了,这里的python环境采用从源码编译,具体参看:
这里采用python3.9的环境,并在 .bashrc 文件下配置python环境的变量:
export PATH=/home/devil/python3.9/bin:$PATH
export LD_LIBRARY_PATH=/home/devil/python3.9/lib:$LD_LIBRARY_PATH
安装TensorFlow,经过测试reverb暂时不支持TensorFlow=2.9.0版本,因此这里使用TensorFlow-2.8.0版本:
pip install tensorflow==2.8.0
安装reverb:
pip install dm-reverb
测试代码:
import reverb
server = reverb.Server(tables=[
reverb.Table(
name='my_table',
sampler=reverb.selectors.Uniform(),
remover=reverb.selectors.Fifo(),
max_size=100,
rate_limiter=reverb.rate_limiters.MinSize(1)),
],
)
client = reverb.Client(f'localhost:{server.port}')
print(client.server_info())
# Creates a single item and data element [0, 1].
client.insert([0, 1], priorities={'my_table': 1.0})
# Appends three data elements and inserts a single item which references all
# of them as {'a': [2, 3, 4], 'b': [12, 13, 14]}.
with client.trajectory_writer(num_keep_alive_refs=3) as writer:
writer.append({'a': 2, 'b': 12})
writer.append({'a': 3, 'b': 13})
writer.append({'a': 4, 'b': 14})
# Create an item referencing all the data.
writer.create_item(
table='my_table',
priority=1.0,
trajectory={
'a': writer.history['a'][:],
'b': writer.history['b'][:],
})
# Block until the item has been inserted and confirmed by the server.
writer.flush()
print('...........')
# client.sample() returns a generator.
print(list(client.sample('my_table', num_samples=2)))
成功运行:
安装诀窍:
安装reverb第一点就是要注意python环境一定要有动态链接库.so文件并且路径中可以搜索到,使用conda的python环境一般都是静态库.a文件,因此这里我们使用的是源码编译python环境;
第二点就是TensorFlow的版本,因为我们pip方式安装的reverb都是编译好的而不是像其他库如numpy那种会下载后重新编译的,因此就需要安装与之对应的TensorFlow版本(官方编译reverb时候的TensorFlow版本),而这个信息我们往往是获得不到的,一个好的解决方法就是安装最新版的reverb然后从最新版的TensorFlow开始试,这里我们最新的TensorFlow版本是2.9.0,发现版本不匹配后直接换为2.8.0版本的TensorFlow就成功匹配最新版的reverb了。
如果安装的是TensorFlow-2.9.0,那么安装reverb后运行则会报错:
这个错误大致意思就是说reverb编译时的TensorFlow和现在安装环境下的TensorFlow版本不同,这里安装的最新版本dm_reverb-0.7.3.dist-info,不支持TensorFlow-2.9.0但支持TensorFlow-2.8.0 。