2017-05-11 2 views
0

Azure Batch Python API를 사용하여 계산 풀 노드에서 패키지를 R로로드하는 데 문제가 있습니다. 내가 사용하는 코드는 Azure Batch Python SDK Tutorial에서 제공되는 것과 유사하지만 태스크가 더 복잡하다는 점을 제외하고는 - 작업 풀의 각 노드가 특정 패키지 종속성이 필요한 R 스크립트를 실행하도록합니다.Azure Batch 노드에 R 패키지를로드 할 수 없습니다.

아래의 시작 태스크 명령에서는 각 노드 (정식 UbuntuServer SKU : 16)를 통해 R을 설치하고 R 패키지 종속성을 설치합니다. 이유는 R 패키지 설치를 시작 작업에 추가 한 이유입니다 작업 스크립트에서 install.packages(list_of_packages, lib="~/Rpkgs/", repos="http://cran.r-project.org")를 실행, 보편적 인 권한을 가진 lib 디렉토리 ~/Rpkgs를 생성 한 후이 "쓸 수 없습니다"오류를 이어집니다.)

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' 
    ] 

을 여하튼, 나는 다음 패키지는 연산 풀에 의도 한대로 푸른 포털에서 확인 노드 (노드 파일 시스템에서 startup/wd/Rpkgs/, 별칭 ~/Rpkgs/에 있습니다). 그러나 _R_TASK_SCRIPT 작업이 작업 풀에 성공적으로 추가 된 동안 설치되어 있던 패키지 (예 : foreach, iterators, optparse 등)를로드 할 수 없어 종료 코드가 0이 아닌 종료 코드로 종료되었습니다. 시작 작업에서.

는 구체적으로는, _R_TASK_SCRIPT는 다음 R 코드를 포함하고, 다음과 같은 결과를 반환

R 번호 :

Loading required package: iterators 
Loading required package: foreach 
Loading required package: optparse 
Loading required package: glmnet 
Loading required package: doMC 

: 푸른 일괄 노드

lapply(c("iterators", "foreach", "optparse", "glmnet", "doMC"), require, character.only=TRUE, lib.loc="~/Rpkgs/") 
... 

R의 열려진, stderr.txt R stdout, Azure의 stdout.txt 배치 노드 :

[[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 

미리 도움을 청하십시오.

답변

0

각 작업은 환경 변수 $AZ_BATCH_TASK_WORKING_DIR에 의해 참조되는 자체 작업 디렉토리에서 실행됩니다. R 세션이 실행될 때 현재 R 작업 디렉토리 [getwd()]는 $AZ_BATCH_NODE_STARTUP_DIR이 아닌 $AZ_BATCH_TASK_WORKING_DIR이됩니다.

setwd(paste0(Sys.getenv("AZ_BATCH_NODE_STARTUP_DIR"), "/wd/")) 

추가 :

은 lapply 전에 R 코드에서

lapply(c("iterators", "foreach", "optparse", "glmnet", "doMC"), require, 
character.only=TRUE, lib.loc=paste0(Sys.getenv("AZ_BATCH_NODE_STARTUP_DIR"), 
"/wd/", "Rpkgs")) 

또는

실행이 방법을 정확한 패키지 위치 ("startup/wd/pkgs")을 얻으려면, 당신은 할 수 있습니다 또한 R이 이미 설치된 Azure 데이터 과학자 가상 시스템의 배치 풀을 만들어 직접 설치할 필요가 없습니다.

Azure Batch에는 doAzureParallel R 패키지가 패키지 설치를 지원합니다. https://github.com/Azure/doAzureParallel : 여기 링크입니다 (면책 조항 : 나는 doAzureParallel R 패키지 생성)

+0

첫 번째 'lapply'솔루션은 수정되었습니다. 감사합니다! – ncemami

0

R.의 기본 라이브러리 경로가 라이브러리 나무의 경로를 설정하려고 존재하지 설치된 패키지에 의한 것으로 보인다을하는 내 패키지는 패키지를로드하기 전에 .libPath("~\Rpkgs") 코드를 추가하여 검색했습니다.

참고로 참조 할 수있는 SO 스레드 Changing R default library path using .libPaths in Rprofile.site fails to work이 있습니다.

한편 오프라인 블로그는 Azure Batch에서 R 작업 부하를 사용하는 방법을 소개하지만 Windows 환경에서는 소개합니다. 희망이 도움이됩니다.

+0

제안에 감사드립니다 - 기록을 위해 나는 질문을 게시하기 전에'.libPath ("~ \ Rpkgs")'~'/ .Rprofile'을 쓰려고 시도 했으므로 그런 식으로 문제를 해결할 수 없었습니다. – ncemami