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