我在使用Ubuntu 14.04操作系统的g2.8xlarge EC-2实例上运行了py-faster-rcnn并启用了cuDNN。所有的东西都编译好了,似乎工作得很好。我通过以下方式登录远程实例:
ssh -X -i "<key.pem>" ubuntu@<IP address>
我也输入命令:export DISPLAY=:0
运行./tools/demo.py
输出看起来不错:
Loaded network /home/ubuntu/py-faster-rcnn/data/faster_rcnn_models/VGG16_faster_rcnn_final.caffemodel
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/000456.jpg
Detection took 0.543s for 300 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/000542.jpg
Detection took 0.506s for 161 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/001150.jpg
Detection took 0.507s for 194 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/001763.jpg
Detection took 0.507s for 196 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/004545.jpg
Detection took 0.541s for 300 object proposals
但是我的XQuartz窗口中没有呈现图形输出。
有没有其他人解决过这个问题?需要弄清楚如何使用AWS硬件但具有本地可视化功能。在这里查看,但我无法解决我的问题:BVLC/caffe#861
编辑
以下是我的远程sshd_config
和本地ssh_config
文件的链接。
以下是远程AWS服务器env中请求的测试的结果:
$ echo $DISPLAY
localhost:10.0
和
$ DISPLAY=localhost:10.0 xhost && echo success
access control enabled, only authorized clients can connect
success
更新
在应用上述步骤后,在远程计算机上运行命令xeyes
和xcalc
会导致本地客户端上的预期输出(首先是眼睛,第二个是计算器)。这可能是一个python问题。要开始寻找那里。
解决方案 - 更新PYTHON图书馆
在验证我的系统设置为支持X11转发后,在回复此帖子的人的指导下,我专注于在python中运行一系列测试,看看matplotlib
是否与X11一起运行良好。您可以通过运行this script interactively来自行检查。如果xcalc
和xeyes
按预期工作,但此脚本会产生错误,则问题出在python / matplotlib
上。
我已经解决了这个问题,所以我手头上没有产生错误,但修复Ubuntu 14.04,g2.8xlarge EC2的步骤如下:
sudo apt-get install python-gobject-dev
sudo apt-get install python-tk
wget http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.24/pygtk-2.24.0.tar.gz
tar -xvzf pygtk-2.24.0.tar.gz
cd pygtk-2.24.0
./configure
make
sudo make install
cd
matplotlib
,例如pip
,卸载它并从源代码重新安装:
sudo pip uninstall matplotlib
git clone https://github.com/matplotlib/matplotlib.git
cd matplotlib
sudo python setup.py install
cd
sudo apt-get install xorg openbox
以获得良好的衡量标准。完成上述步骤后,带有python ./tools/demo.py
根目录的py-faster-rcnn
将按预期返回边界框和类概率的图像。
答案 0 :(得分:2)
我假设您的本地主机上运行了X服务器,对吗?
有两个文件需要考虑:
/etc/ssh/ssh_config
:它位于您当地的主机上;它与客户端命令一起使用:ssh
。/etc/ssh/sshd_config
:它位于远程实例上;它与远程实例上运行的sshd
服务器一起使用。 X11Forwarding yes
和X11DisplayOffset 10
是需要为sshd
设置的2个值:在远程实例上运行的ssh守护程序。编辑远程实例上的/ etc / ssh / sshd_config文件。更改后,可能必须在远程实例上重新启动sshd
。
再次与ssh -X ...
连接,并检查DISPLAY
变量的值。
设置X11DisplayOffset 10
时,以下示例是正确的:
# ssh -X -i "<key.pem>" ubuntu@<IP address>
# echo $DISPLAY
localhost:10.0
如果DISPLAY
变量未设置或设置为其他值(.bashrc .profile等中的某些内容在登录时更改了其值),那么这是一个问题。
另一种方法是使用xhost
进行测试,并将环境设置在同一行:
# ssh -X -i "<key.pem>" ubuntu@<IP address>
# DISPLAY=localhost:10.0 xhost && echo success
如果显示错误消息,则需要解决此问题:编辑问题并添加错误消息。
否则,将打印success
字的状态行,继续:
# DISPLAY=localhost:10.0 xcalc
应在本地主机上打开一个窗口。最后继续:
# DISPLAY=localhost:10.0 ./tools/demo.py
答案 1 :(得分:1)
我也输入命令:
export DISPLAY=:0
此步骤可能是您的问题。当您通过SSH转发X时,几乎不需要在远程系统上手动设置DISPLAY。
如果ssh成功转发X,它会将远程会话中的DISPLAY环境变量设置为正确的值。如果未在远程系统上设置DISPLAY,则表示ssh无法与服务器协商转发X(或者shell启动中的某些内容正在删除变量)。通过自己设置DISPLAY,您可能会覆盖变量的正确值。至少,您将其设置为的值不可能通过SSH转发。
DISPLAY值&#34;:0&#34;表示通过系统的X默认连接,可能涉及通过unix域套接字或通过TCP端口6000进行连接。这适用于客户端访问与客户端在同一系统上运行的X服务器(EC2)在这种情况下服务器)。
对于SSH会话,正确的DISPLAY值通常类似于&#34; localhost:10&#34;,这意味着远程系统上的客户端应连接到localhost端口6010(6000 + 10)。如果端口6010已在使用中或者SSH服务器配置为使用不同的端口范围,则数字10可能不同。
如果您在登录时未设置DISPLAY,尽管使用&#34; -X&#34;或&#34; -Y&#34;选项,可能在ssh服务器中禁用了X11转发。 OpenSSH服务器有三个相关选项,可以是set in sshd_config:
<强> X11DisplayOffset 强>
指定可用于sshd(8)的X11转发的第一个显示号码。这可以防止sshd干扰真正的X11服务器。默认值为10.<强>打开X11Forwarding 强>
指定是否允许X11转发。论证必须是“是”或“否”。默认为“no”。当启用X11转发时,如果sshd(8)代理显示器配置为侦听通配符地址(请参阅下面的X11UseLocalhost),则可能会有额外的服务器和客户端显示,尽管这不是默认设置。此外,身份验证欺骗和身份验证数据验证和替换发生在客户端。使用X11转发的安全风险是,当SSH客户端请求转发时,客户端的X11显示服务器可能会受到攻击(请参阅ssh_config(5)中的ForwardX11警告)。系统管理员可能有一种姿态,他们希望通过无意中请求X11转发来保护可能使自己受到攻击的客户端,这可以保证“不”设置。
请注意,禁用X11转发不会阻止用户转发X11流量,因为用户始终可以安装自己的转发器。如果启用了UseLogin,则会自动禁用X11转发。
<强> X11UseLocalhost 强>
指定sshd(8)是否应将X11转发服务器绑定到环回地址或通配符地址。默认情况下,sshd将转发服务器绑定到环回地址,并将DISPLAY环境变量的主机名部分设置为“localhost”。这可以防止远程主机连接到代理显示器。但是,某些较旧的X11客户端可能无法使用此配置。可以将X11UseLocalhost设置为“no”以指定转发服务器应绑定到通配符地址。论证必须是“是”或“否”。默认值为“是”。
即使服务器拒绝转发,OpenSSH ssh
客户端通常也会连接到服务器。这可以隐藏您请求转发但服务器被拒绝的事实。 ssh
有一个选项,您可以set in ssh_config来控制它:
<强> ExitOnForwardFailure 强>
指定ssh(1)是否应终止连接,如果它无法设置所有请求的动态,隧道,本地和远程端口转发(例如,如果任一端无法绑定并侦听指定端口)。请注意,ExitOnForwardFailure不适用于通过端口转发建立的连接,例如,如果与最终转发目标的TCP连接失败,则不会导致ssh(1)退出。论证必须是“是”或“否”。默认为“no”。