如何使用X11转发运行py-faster-rcnn

时间:2016-06-06 17:06:31

标签: ssh x11 caffe pycaffe

我在使用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

更新

在应用上述步骤后,在远程计算机上运行命令xeyesxcalc会导致本地客户端上的预期输出(首先是眼睛,第二个是计算器)。这可能是一个python问题。要开始寻找那里。

解决方案 - 更新PYTHON图书馆

在验证我的系统设置为支持X11转发后,在回复此帖子的人的指导下,我专注于在python中运行一系列测试,看看matplotlib是否与X11一起运行良好。您可以通过运行this script interactively来自行检查。如果xcalcxeyes按预期工作,但此脚本会产生错误,则问题出在python / matplotlib上。

我已经解决了这个问题,所以我手头上没有产生错误,但修复Ubuntu 14.04,g2.8xlarge EC2的步骤如下:

  • 安装python gobject:sudo apt-get install python-gobject-dev
  • 安装python-tk:sudo apt-get install python-tk
  • 安装pygtk:
    • 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将按预期返回边界框和类概率的图像。

2 个答案:

答案 0 :(得分:2)

我假设您的本地主机上运行了X服务器,对吗?

有两个文件需要考虑:

  • /etc/ssh/ssh_config:它位于您当地的主机上;它与客户端命令一起使用:ssh
  • /etc/ssh/sshd_config:它位于远程实例上;它与远程实例上运行的sshd服务器一起使用。

X11Forwarding yesX11DisplayOffset 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”。