我的最终目标是在大学的Linux服务器上渲染R Markdown文档,该服务器使用SLURM进行队列管理。但是,使用PNG图形设备会产生错误,而PDF图形设备会提供不适当的输出。
请注意,我有一台Windows计算机,并且正在使用PuTTY与服务器进行通信。已安装Xming,并且PuTTY已启用X11转发。
我跑步时
salloc --ntasks 1 --partition <partition_name>
srun Rscript -e "png('test.png'); plot(1,1); dev.off()"`
没有保存情节,我收到以下警告消息:
1:在png(“ test.png”)中:
无法加载共享对象'/ opt / exp_soft / R- 3.5.2 / lib64 / R / library / grDevices / libs // cairo.so': /lib64/libcairo.so.2:未定义符号:FT_Get_Var_Design_Coordinates
2:在png(“ test.png”)中:无法加载cairo DLL
空设备
但是,当我仅删除srun
命令并运行
salloc --ntasks 1 --partition <partition_name>
srun Rscript -e "png('test.png'); plot(1,1); dev.off()"`
然后保存文件test.png
。另外,输出PDF而不是PNG也会正确生成图(Rscript -e "pdf( 'test.pdf'); plot(1,1); dev.off()"
)。
以相同的方式,在开始时使用Rscript -e "('test.Rmd')"
而不使用srun
渲染Rmd文档将正确地渲染Rmd文档。但是将srun
放在开头将不会生成Rmd文档,而只会生成警告消息:
在资源路径中找不到文件test2_files / figure-html / unnamed-chunk-1-1.svg
错误:pandoc文档转换失败,错误代码为99
此外:警告消息:
1:在grDevices :: png(f)中: 无法加载共享库'/opt/exp_soft/R-3.5.2/lib64/R/library/grDevices/libs//cairo.so': /lib64/libcairo.so.2:未定义符号:FT_Get_Var_Design_Coordinates
2:在grDevices :: png(f)中:无法加载cairo DLL
3:在(函数(文件名= if(一个文件)“ Rplots.svg”否则“ Rplot%03d.svg”,中: 无法加载cairo DLL
执行停止
运行:错误:srvcnthpc100:任务0:退出,退出代码为1
如果我将dev='pdf'
设置为knitr chunk选项,则呈现Rmd文档,但是html文档中的图形非常奇怪,因为它具有滚轮和灰色背景(dev_equals_png_rmd_output )。
我注意到上面的错误消息“ FT_Get_Var_Design_Coordinates”中的“未定义符号”是FreeType库的一部分。但是,我不确定这可能意味着什么,或者如果它意味着某些事情,我会怎么做。
我重新安装了Cairo
R软件包,但这并没有改变错误消息。
由于PNG图像呈现在头节点(即没有srun
)上,而不是在服务器节点上(即具有srun
)上渲染,所以在我看来通信中有些问题R
,SLURM
和服务器节点之间,而不是缺少某些文件或程序。
我还认为pandoc
会引发错误,因为运行R
代码时未生成png图像。
请注意,当使用sbatch
而不是srun
时,也会产生上述错误(即,代码以批处理方式而不是交互方式运行)。
任何帮助将不胜感激!我对使用Linux很陌生,并且开始喜欢它!
在服务器上运行Rscript -e "sessionInfo()"
会产生:
R版本3.5.2(2018-12-20)
平台:x86_64-pc-linux-gnu(64位)
在以下操作系统上运行:CentOS Linux 7(核心)
Matrix产品:默认 BLAS:/usr/lib64/libblas.so.3.4.2 LAPACK:/usr/lib64/liblapack.so.3.4.2
语言环境:
1 LC_CTYPE = zh_CN.UTF-8 LC_NUMERIC = C
[3] LC_TIME = zh_CN.UTF-8 LC_COLLATE = zh_CN.UTF-8
[5] LC_MONETARY = en_US.UTF-8 LC_MESSAGES = en_US.UTF-8
[7] LC_PAPER = zh_CN.UTF-8 LC_NAME = C
[9] LC_ADDRESS = C LC_TELEPHONE = C
[11] LC_MEASUREMENT = zh_CN.UTF-8 LC_IDENTIFICATION = C
附带的基本软件包: 1统计图形grDevices utils数据集方法基础
其他附件包: 1 rmarkdown_1.11
通过名称空间(未附加)加载: 1编译器_3.5.2工具_3.5.2 htmltools_0.3.6 Rcpp_1.0.0 [5] knitr_1.21 xfun_0.5摘要_0.6.18评价_0.13
运行Rscript -e capabilities()
时,我得到以下信息:
jpeg png tiff tcltk X11 aqua
TRUE TRUE TRUE TRUE TRUE FALSE
http/ftp sockets libxml fifo cledit iconv
TRUE TRUE TRUE TRUE FALSE TRUE
NLS profmem cairo ICU long.double libcurl
TRUE FALSE TRUE TRUE TRUE TRUE
答案 0 :(得分:0)
因此,问题确实出在FreeType上。以前的FreeType库已损坏(不确定确切意义是什么,但这是系统管理员说的话),并且系统管理员已推出更新并固定的FreeType。但是,他偶然地只在测试的头节点和服务器节点上执行了此操作。一旦他更新了整个集群,代码就会按预期运行。直接的PNG图和带有图形的Rmd文档渲染都可以正常工作。