我在使用Azure批处理Python API将软件包加载到计算池节点上的R时遇到困难。我使用的代码与Azure Batch Python SDK Tutorial中提供的代码类似,只是任务更复杂 - 我希望作业池中的每个节点都执行需要某些程序包依赖关系的R脚本。因此,在我的启动任务命令下面,我有每个节点(Canonical Ubuntu Server SKU:16)通过apt安装R程序包并安装R包依赖项(之所以我将R包安装到启动任务中的原因是,即使与通用权限创建一个lib目录~/Rpkgs
,在任务的脚本来运行install.packages(list_of_packages, lib="~/Rpkgs/", repos="http://cran.r-project.org")
后导致“不可写”错误。)无法在Azure批处理节点上加载R软件包
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/
,又名~/Rpkgs/
)。但是,虽然_R_TASK_SCRIPT
任务已成功添加到作业池中,但它以非零退出代码终止,因为它无法加载已安装的任何软件包(例如,foreach
,iterators
,optparse
等)在启动任务中。
更具体地,_R_TASK_SCRIPT
包含下述R代码并返回下面的输出:
R代码里面:
lapply(c("iterators", "foreach", "optparse", "glmnet", "doMC"), require, character.only=TRUE, lib.loc="~/Rpkgs/")
...
ř标准错误,stderr.txt
天青批次节点上:
Loading required package: iterators
Loading required package: foreach
Loading required package: optparse
Loading required package: glmnet
Loading required package: doMC
R标准输出,stdout.txt
在Azure批处理节点上:
[[1]]
[1] FALSE
[[2]]
[1] FALSE
[[3]]
[1] FALSE
[[4]]
[1] FALSE
[[5]]
[1] FALSE
FALSE
上面表示它无法加载R包。这是我面临的问题,我想弄清楚为什么。
值得注意的是,当我启动一个类似的VM(Canonical UbuntuServer SKU:16)并手动运行相同的安装时,它会成功加载所有软件包。
[email protected]:~$ pwd
/home/myusername
[email protected]:~$ mkdir ~/Rpkgs/
[email protected]:~$ printf "install.packages(c(\"foreach\", \"iterators\", \"optparse\", \"glmnet\", \"doMC\"), lib=\"~/Rpkgs/\", repos=\"http://cran.r-project.org\")\n" > ~/startTask.txt
[email protected]:~$ R < startTask.txt --no-save
[email protected]:~$ 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
在此先感谢您的帮助和建议。
第一个'lapply'解决方案是一个修复,谢谢! – ncemami