学会使用强化学习框架Acme(3)
建议粗略看下之前的 学会使用强化学习框架Acme(1) (2)进到acme的子目录examplesacme/examples at master · deepmind/acme · GitHub下载好acme在github上的所有文件。进入下载好的目录并用jupyter打开quickstart.ipynb(acme) jw@Z8:~/acme-master/examples$ jupyter-no
建议粗略看下之前的
下载好acme在github上的所有文件。
进入下载好的acme的子目录examples
并用jupyter打开quickstart.ipynb
(acme) jw@Z8:~/acme-master/examples$ jupyter-notebook
进到jupyter中,点击运行。
(代码前的!告诉jupyter在shell中运行。)
提示我输入密码,在jupyter中怎么输入密码?
搜了一下,在jupyter笔记本中使用sudo - 问答 - Python中文网
这里说到可以把第一行替换为
!echo password|sudo -S apt-get install -y xvfb ffmpeg
也就是在前面加上一些东西。使用这行命令
!echo {password}|sudo -S {command}
echo
命令将从名为password
的变量中获取真正的密码(例如“funkymonkey”),然后将其导入sudo的command
变量(这是一个描述shell命令的字符串,例如“apt get update”)。
修改后成功运行。
继续运行:
出现ImportError。
(两个水平线之间的是我的尝试,第二个水平线后是解决方法,建议大家先看最后,最后的方法不管用再看看我的尝试,虽然不能解决问题,但可能会给出一个解决问题的思路)
转天再次尝试,出现:
2022-04-21 11:55:29.534630: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /home/jw/catkin_ws/devel/lib:/opt/ros/noetic/lib
2022-04-21 11:55:29.534705: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
/home/jw/anaconda3/envs/acme/lib/python3.8/site-packages/flatbuffers/compat.py:19: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
第一行说不能加载动态库,不能打开共享目标文件,最重要的是
LD_LIBRARY_PATH:/home/jw/catkin_ws/devel/lib:/opt/ros/noetic/lib
LD_LIBRARY_PATH
是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。
移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。
路径是和ros有关的路径,可能是我之前学习ros把某些路径改了,导致tensorflow没法正常运行。
在.bashrc文件中将下面两行代码注释
#source /opt/ros/noetic/setup.bash
#source ~/catkin_ws/devel/setup.bash
错误消失,但是又出现了昨天的错误。ImportError。
(这里我重新安装了虚拟环境,python版本从3.8改为3.9。)
注意到错误提示的最后一行
ImportError: libtensorflow_framework.so.2: cannot open shared object file: No such file or directory
找到了类似的问题和解答:
输入:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/home/jw/anaconda3/envs/Acme/lib/python3.9/site-packages/tensorflow/libtensorflow_framework.so.2"
退出,重新打开notebook运行,出现错误:
ImportError: libpython3.9.so.1.0: cannot open shared object file: No such file or directory
这次是1.0出了问题,让我有点怀疑上面那个方法的正确性,但还是用那个方法试一试。命令行输入:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/home/jw/anaconda3/envs/Acme/lib/python3.9/site-packages/tensorflow/libtensorflow_framework.so.1.0"
再次运行,问题没有得到解决。
(这里是因为代码写错了要找libpython3.9.so.1.0,写成libtensorflow_framework.so.1.0)
这个LD_LIBRARY_PATH到底是什么?
当执行函数动态链接.so时,如果此文件不在缺省目录下‘/lib’ and ‘/usr/lib’.
那么就需要指定环境变量LD_LIBRARY_PATH
假如需要在已有的环境变量上添加新的路径名,则采用如下方式:
LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH.(newdirs是新的路径串)
(注:GNU系统可以自动添加在 /etc/ld.so.conf文件中来实现环境变量的设置)
在linux下可以用export命令来设置这个值,比如
在linux终端下输入:export LD_LIBRARY_PATH=/opt/au1200_rm/build_tools/bin: $LD_LIBRARY_PATH:
然后再输入:export
即会显示是否设置正确
export方式在重启后失效,所以也可以用 vim /etc/bashrc ,修改其中的LD_LIBRARY_PATH变量。
例如:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/au1200_rm/build_tools/bin。
使用指令查找libpython3.9.so.1.0
(base) jw@Z8:~$ sudo find / -name 'libpython3.9.so.1.0'
[sudo] jw 的密码:
find: ‘/run/user/1000/doc’: 权限不够
find: ‘/run/user/1000/gvfs’: 权限不够
find: ‘/run/user/125/gvfs’: 权限不够
/home/jw/anaconda3/envs/Acme/lib/libpython3.9.so.1.0
/home/jw/anaconda3/pkgs/python-3.9.0-hdb3f193_2/lib/libpython3.9.so.1.0
/home/jw/anaconda3/pkgs/python-3.9.7-h12debd9_1/lib/libpython3.9.so.1.0
^C
第六行显示了在我的虚拟环境Acme中的lib中有这个文件,根据错误信息,要告诉jupyter notebook它要找的文件在Acme下的lib文件夹中,怎么告诉它呢?
最新进展:
在朋友的帮助下,根据错误提示
ImportError: libpython3.9.so.1.0: cannot open shared object file: No such file or directory
找不到libpython3.9.so.1.0,所以在虚拟环境的目录下查找这个文件
可以看到acme/lib中有这个文件,直接把他复制到client.py所在的目录中,也就是错误提示最后几行的目录
/home/jw/anaconda3/envs/acme/lib/python3.9/site-packages/courier/python
再次运行,没有报错

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)