首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Azure批处理节点上加载R包

无法在Azure批处理节点上加载R包
EN

Stack Overflow用户
提问于 2017-05-11 00:18:01
回答 2查看 688关注 0票数 0

我很难使用Azure批处理Python将包加载到计算池节点上的R中。我使用的代码类似于Azure批处理Python教程中提供的代码,但任务更复杂--我希望作业池中的每个节点执行一个R脚本,它需要某些包依赖项。

因此,在下面的开始任务命令中,我有每个节点(规范化的UbuntuServer SKU: 16)通过apt安装R并安装R包依赖项(我将R包安装添加到开始任务的原因是,即使在创建了具有通用权限的lib目录~/Rpkgs之后,在任务脚本中运行install.packages(list_of_packages, lib="~/Rpkgs/", repos="http://cran.r-project.org")也会导致“不可写”错误)。

代码语言:javascript
复制
task_commands = [
    'cp -p {} $AZ_BATCH_NODE_SHARED_DIR'.format(_R_TASK_SCRIPT),
    # Install pip
    'curl -fSsL https://bootstrap.pypa.io/get-pip.py | python',
    # Install the azure-storage module so that the task script can access Azure Blob storage, pre-cryptography version
    'pip install azure-storage==0.32.0',
    # Install R
    'sudo apt -y install r-base-core',
    'mkdir ~/Rpkgs/',
    'sudo chown _azbatch:_azbatchgrp ~/Rpkgs/',
    'sudo chmod 777 ~/Rpkgs/',
    # Install R package dependencies
    # *NOTE*: the double escape below is necessary because Azure strips the forward slash
    'printf "install.packages( c(\\"foreach\\", \\"iterators\\", \\"optparse\\", \\"glmnet\\", \\"doMC\\"), lib=\\"~/Rpkgs/\\", repos=\\"https://cran.cnr.berkeley.edu\\")\n" > ~/startTask.txt',
    'R < startTask.txt --no-save'
    ]

无论如何,我在Azure门户中确认,这些包是按预期安装在计算池节点上的(您可以看到它们位于startup/wd/Rpkgs/,a.k.a )。~/Rpkgs/,在节点文件系统中)。但是,当_R_TASK_SCRIPT任务成功地添加到作业池时,它以非零退出代码结束,因为它无法加载任何包(例如foreachiteratorsoptparse等)。它已经安装在“开始”任务中。

更具体地说,_R_TASK_SCRIPT包含以下R代码并返回以下输出:

R码:

代码语言:javascript
复制
lapply( c("iterators", "foreach", "optparse", "glmnet", "doMC"), require, character.only=TRUE, lib.loc="~/Rpkgs/")
...

在Azure批处理节点上的r stderr,stderr.txt

代码语言:javascript
复制
Loading required package: iterators
Loading required package: foreach
Loading required package: optparse
Loading required package: glmnet
Loading required package: doMC

在Azure批处理节点上的r标准输出,stdout.txt

代码语言:javascript
复制
[[1]]
[1] FALSE

[[2]]
[1] FALSE

[[3]]
[1] FALSE

[[4]]
[1] FALSE

[[5]]
[1] FALSE

上面的FALSE表示它无法加载R包。这是我面临的问题,我想找出原因。

值得注意的是,当我旋转一个类似的VM (规范UbuntuServer SKU: 16)并手动运行相同的安装时,它成功地加载了所有包。

代码语言:javascript
复制
myusername@rnode:~$ pwd
/home/myusername
myusername@rnode:~$ mkdir ~/Rpkgs/
myusername@rnode:~$ printf "install.packages( c(\"foreach\", \"iterators\", \"optparse\", \"glmnet\", \"doMC\"), lib=\"~/Rpkgs/\", repos=\"http://cran.r-project.org\")\n" > ~/startTask.txt
myusername@rnode:~$ R < startTask.txt --no-save
myusername@rnode:~$ R

R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
...
> lapply( c("iterators", "foreach", "optparse", "glmnet", "doMC"), require, character.only=TRUE, lib.loc="~/Rpkgs/")
Loading required package: iterators
Loading required package: foreach
...
Loading required package: optparse
Loading required package: glmnet
Loading required package: Matrix
Loaded glmnet 2.0-10

Loading required package: doMC
Loading required package: parallel
[[1]]
[1] TRUE

[[2]]
[1] TRUE

[[3]]
[1] TRUE

[[4]]
[1] TRUE

[[5]]
[1] TRUE

提前感谢您的帮助和建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-11 06:37:35

每个任务都在自己的工作目录上运行,该目录由环境变量$AZ_BATCH_TASK_WORKING_DIR引用。当R会话运行时,当前的R工作目录getwd()将是$AZ_BATCH_TASK_WORKING_DIR,而不是pkgs所在的$AZ_BATCH_NODE_STARTUP_DIR

要获得R代码中的确切包位置("startup/wd/pkgs"),

代码语言:javascript
复制
lapply( c("iterators", "foreach", "optparse", "glmnet", "doMC"), require, 
character.only=TRUE, lib.loc=paste0(Sys.getenv("AZ_BATCH_NODE_STARTUP_DIR"), 
 "/wd/", "Rpkgs") )

在之前运行此方法:

代码语言:javascript
复制
setwd(paste0(Sys.getenv("AZ_BATCH_NODE_STARTUP_DIR"), "/wd/"))

补充:您还可以创建一个包含Azure数据科学家虚拟机的批处理池,该虚拟机已经安装了R,因此不必自己安装。

Azure批处理具有支持包安装的doAzureParallel R包。这里有一个链接:https://github.com/Azure/doAzureParallel (免责声明:我创建了doAzureParallel R包)

票数 0
EN

Stack Overflow用户

发布于 2017-05-11 07:19:48

这似乎是由于安装的包不存在,默认的库路径不存在。请尝试设置库树的路径,在其中查找包,方法是在加载包之前添加代码.libPath("~\Rpkgs")

作为参考,您可以引用一个SO线程使用.libPaths在Rprofile.site中更改R默认库路径失败

同时,一个官方博客介绍了如何在Azure批处理上使用R工作负载,但适用于Windows环境。希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43904549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档