【问题标题】:Script using GPU throws error when running app on Shiny server在 Shiny 服务器上运行应用程序时,使用 GPU 的脚本会引发错误
【发布时间】:2019-03-26 01:29:22
【问题描述】:

我使用 Shiny 包在 R 中编写了一些代码。从 RStudio 运行 shiny::runApp() 时,应用运行正常。

我尝试将应用程序托管在 Shiny 服务器上,并且 GUI 可以正确启动。但是,当单击“Enviar 信息”按钮时,右侧应该会出现一个图。 (您可以看到应用程序的外观 here,但它不起作用,因为该链接不在 Shiny 服务器上,而是在 Shinyapps.io 上)。

日志文件的相关部分如下:

Listening on http://127.0.0.1:38327
Loading required package: Rcpp
Warning: Error in [: subscript out of bounds
  211: FUN [/srv/shiny-server/spike_sorting/server.R#82]
  210: apply
  209: cluster_som_h [/srv/shiny-server/spike_sorting/server.R#82]
  ...

所以错误在函数cluster_som_h 内部。在尝试了一些东西之后,我发现了导致错误的原因,但不知道如何解决它。在这个函数中,我使用了来自package Rsomoclu 的函数Rsomoclu.train()kernelType = 1。这意味着该函数在 GPU 上运行。如果我设置kernelType = 0,那么该应用程序在runApp() 和Shiny 服务器上都可以正常工作。 这就是问题所在:由于某种原因,如果应用程序从 Shiny 服务器运行,则在 GPU 上运行该函数不起作用,但如果它是使用 runApp() 从 RStudio 运行的,则它确实有效。强>

可能发生了一些事情,因为我的计算机上安装了 CUDA,但是当我尝试从服务器运行它时,发生了一些事情。有没有办法来解决这个问题?我相信无论应用程序在 LAN 的哪个位置运行,从这台特定的计算机运行代码都可以解决这个问题。这可能吗?

【问题讨论】:

  • 我猜是algorithm_output <<- cluster_som_h(size, epochs, path)。将它放在它自己的 reactive 对象中,而不是使用超级赋值运算符。
  • @Phil 如果这是问题所在,那么在执行runApp() 时它是否有意义?我的意思是:如果这是问题所在,runApp() 方法不会也失败吗?
  • 如果没有经过全面测试,我很难回答,但由于本地机器和服务器之间的环境不同,它可以工作。我建议将 algorithm_output 更改为响应式对象,看看它是否能解决问题。请记住在调用algorithm_output 时始终添加()
  • @Phil 我尝试在cluster_som_h 中编写一些简单的代码,而不是实际代码,并且错误消失了。因此,该特定功能一定有问题。我仍然不明白为什么runApp() 方法有效而服务器却没有。明天我会尝试更多的东西并更新问题。
  • 根据您的错误消息,错误来自 cluster_som_h 函数,因此它肯定是相关的。

标签: r shiny gpu


【解决方案1】:

在做了一些(基本)研究后,我发现了发生了什么。我只在我的 Ubuntu 用户中安装了 CUDA,所以我必须更改文件 /etc/shiny-server/shiny-server.conf 的第一行,以便用户是正确的:

# Instruct Shiny Server to run applications as the user "my_name"
run_as my_name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多