首页 > 数据分析 > 使用mrsdeploy在Azure上运行您的R代码

[悬赏]使用mrsdeploy在Azure上运行您的R代码 (已翻译100%)

查看 (571次)
英文原文:Running your R code on Azure with mrsdeploy
标签: Azure R语言 数据分析
admin 发布于 2017-03-28 16:34:41 (共 13 段, 本文赏金: 39元)
参与翻译(4人): cyt5969858 廿九_ sujoe77 greenflute 默认 | 原文

【已悬赏】 赏金: 6元


假设您已经在R中构建了一个模型,它比您在本地方便地运行的要大,并且您希望利用Azure的资源在更大的机器上运行它。这个博客解释了如何使用安装在Microsoft的R Server中的mrsploy库来提供和运行一个Azure虚拟机(VM)。我们将专门使用UnbuntuLinux版本的VM,所以我需要熟悉Linux命令行中的超级用户特权,当然,还要熟悉R。

基本架构由本地机器作为客户端组成,您可以在云中为其创建服务器机器。您将在远程计算机上设置一个服务--云中的服务。一旦做到这一点,就不必直接与远程机器进行交互;而是向它发出命令,并查看客户端返回的结果。这是一种方法,在Azure中可以通过多种方法来实现这一点,这取决于您对语言的选择、对编码的依赖、服务的功能以及任务的复杂性和规模。数据科学家通常首先通过交互的方式探索单个机器上的数据,然后将由此构建的模型按规模投入生产,在本例中,选择将模型放入云中。这篇文章的目的是澄清部署过程,或者说,以一口一口的方式进行操作。简而言之,在RServer中使用运行mrsDeployLibrary的VM可以让您以较小的代价操作代码。

或者,与其用R服务器设置服务,不如不明智地提供一台空旷的虚拟机,然后登录到它,就像任何一台远程机器一样,需要使用多台机器来进行手动操作,加载应用软件,并来回移动数据和代码。但这就是我们要避免的。云计算的重点是制造大量数据,并尽可能多地计算,比如在本地计算机上工作。


廿九_
翻译于 2018-02-08 16:04:11
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 5元

Azure VM上部署Microsoft R Server(MRS)

Azure Market place提供一个预先配置了RServer 2016Linux VM(Ubuntu Version 16.04)。此外,带有RServer的LinuxVM附带mrsDeploy,这是一个新的R包,用于在控制台应用程序中建立远程会话,以及发布和管理用R编写的Web服务。为了使用R服务器的部署和操作功能,需要将R服务器配置为在安装后运行,作为部署服务器和托管分析Web服务。

另外,还有其他Azure平台可以在市场上使用RServer进行操作,还有其他操作系统和平台,包括微软的Hadoop产品HDInsight。或者,可以使用Marketplace中可用的DataScienceVM,因为它安装了RServer的副本。这些平台的配置类似于本文中介绍的示例。


提供一个R Server VM作为文档中的参考,需要执行以下几个步骤,这些步骤包括配置VM和设置服务器帐户以授权远程。要设置服务器,您将使用您作为Linux机器的用户设置的系统帐户。服务器帐户用于客户端与R服务器的交互,不应与Linux系统帐户混淆。这与使用Active Directory服务进行身份验证的R Server VM的Windows版本有很大的不同。

廿九_
翻译于 2018-02-08 16:23:19
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 2元

用Azure市场部署一台虚拟机

如果你想要通过Azure市场部署一台基于Ubuntu, 预先安装了R服务器的虚拟机,最好的办法是在 portal.azure.com 中搜索“r server”:


R_server_ubuntu_marketplace
市场中的R Server

选择Ubuntu版本,做一个常规部署,比如你把它命名为mymrs, 记下mymrs的公共ip,和mymrs-nsg网络安全组的相关资源,以便随后修改。

用你在门户中的系统账户登陆虚拟机,加入以下别名,第一个指向R当前版本的可执行文件,MRS(又叫Reo64) ,第二个指向mrsdeploy的菜单管理工具。

alias rserver='/usr/local/bin/Revo64-9.0'
alias radmin='sudo /usr/local/bin/dotnet \
/usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Utils.AdminUtil/Microsoft.DeployR.Utils.AdminUtil.dll'

剩下的步骤是如何在虚拟机上建立一个可以通过web远程访问的计算服务器(one-box服务器)


sujoe77
翻译于 2018-02-08 15:24:06
 

参与本段翻译用户:
sujoe77

显示原文内容

【已悬赏】 赏金: 1元

1.检查你是否能运行微软R服务器(MRS)

就用MRS作为别名吧

$ rserver
[Note a line in the banner saying
"Loading Microsoft R Server packages, ..."]

这是一个简单的测试,说明MRS库是预加载和运行的。注意MRS库(“rx”函数)是预加载的。

> rxSummary(formula = ~., data = iris)
cyt5969858
翻译于 2017-11-30 16:01:20
 

参与本段翻译用户:
cyt5969858

显示原文内容

【已悬赏】 赏金: 3元

2. 设置mrsploy的MRS服务器

MrsDeployOperationalization运行两个服务,即Web节点和一个或多个计算节点。在最简单的配置中,这里描述的配置中,两个“节点”都是运行在同一个VM上的服务。另外,通过这些独立的负载,可以处理一个Web节点和一个或多个计算节点。

使用您为管理工具创建的昵称


$ radmin

这个实用工具会弹出一个菜单。

*************************************
Administration Utility (v9.0.1)
*************************************

1. Configure R Server for Operationalization
2. Set a local admin password
3. Stop and start services
4. Change service ports
5. Encrypt credentials
6. Run diagnostic tests
7. Evaluate capacity
8. Exit

Web node endpoint: **http://localhost:12800/**

Please enter an option:
1

Set the admin password:
*************

Confirm this password:
*************

运作配置:

A. One-box (web   compute nodes)
B. Web node
C. Compute node
D. Reset machine to default install state
E. Return to main menu

Please enter an option:
A

Success! Web node running (PID: 4172)

Success! Compute node running (PID: 4172)

此时,设置应该已经完成。使用管理工具运行诊断可以检查是否是。

运行诊断测试:A.测试配置

Please enter an option:
6

Preparing to run diagnostics...
***********************
DIAGNOSTIC RESULTS:
***********************
Overall Health: pass

Web Node Details:
Logs: /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.WebAPI/logs
Available compute nodes: 1

Compute Node Details:
Health of 'http://localhost:12805/': pass
Logs: /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.BackEnd/logs


Authentication Details:
A local admin account was found. No other form of authentication is configured.

Database Details:
Health: pass
Type: sqlite

代码执行测试:PASS代码:‘y <- cumprod(c(1500, 1 (rnorm(n=25,mean=.05, sd = 1.4)/100)))’

是的,它甚至测试MRS翻译运行!如果网络或服务已经停止,下面的测试将大受影响。请注意指向日志目录的有用链接,以了解故障详细信息。服务可以从顶层菜单中的选择3中停止并启动。

 

运行诊断测试:B.原始服务器状态

**********************
SERVICE STATE (raw):
**********************

Please authenticate...

Username:
admin

Password:
*************
Server:
Health: pass
Details:
    logPath: /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.WebAPI/logs
backends:
    Health: pass
    http://localhost:12805/:
    Health: pass
    Details:
        maxPoolSize: 80
        activeShellCount: 1
        currentPoolSize: 5
        logPath: /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.BackEnd/logs
database:
    Health: pass
    Details:
    type: sqlite
    name: main
    state: Open
廿九_
翻译于 2018-02-08 16:10:19
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 3元

3. 验证MRS服务器是否能在Linux Linux提示符下运行

R服务器的网络服务也可以通过查看计算机的开放端口进行检查,不需要管理员工具。此命令显示Linux机器正在监听的端口:

$ netstat - tupln

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:29130         0.0.0.0:*               LISTEN      42527/mdsd
tcp        0      0 127.0.0.1:29131         0.0.0.0:*               LISTEN      2001/mdsd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1265/sshd
tcp        0      0 0.0.0.0:9054            0.0.0.0:*               LISTEN      55348/Rserve
tcp        0      0 0.0.0.0:9055            0.0.0.0:*               LISTEN      55348/Rserve
tcp6       0      0 :::12805                :::*                    LISTEN      55327/dotnet
tcp6       0      0 :::22                   :::*                    LISTEN      1265/sshd
tcp6       0      0 :::12800                :::*                    LISTEN      55285/dotnet
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1064/dhclient

我们可以发现12800端口对网络服务是活跃的。12805端口是计算服务器,与网络服务在同一台机器上运行。

你接下来该做的是看看你是否可以本机运行R服务器时连接到服务,并加载mrsdeploy。

cyt5969858
翻译于 2017-11-30 16:13:56
 

参与本段翻译用户:
cyt5969858

显示原文内容

【已悬赏】 赏金: 3元

4. 通过从服务器本身登录,检查MRS服务器是否正在运行

通过以localhost为服务器运行一个远程的mrsdeploy会话。这是一种人们能“运行MRS作为R客户端”的方式,尽管这一整套的MRS功能都是可用的。在同一台机器上运行MRS并将其同时作为客户端和服务器是可能的,但除了测试网络服务是可访问的之外,我认为没有别的用途。这些步骤的顺序是:

$ rserver
    [ MRS banner...]

    > endpoint <- "localhost:12800"   # The forum shows this format for logins.
    > library(mrsdeploy)
    > remoteLogin(endpoint)
    Username: admin
    Password: *************           # The password you set in the admin tool. 

    [...]

    REMOTE>

如果验证失败,您可以查看系统日志文件的尾部找出错误,比如这样

$ cd /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.WebAPI/logs
$ sudo tail $(ls -t1 | head -1)   # Look at the end of the most recent logfile
... "Message":"The username doesn't belong to the admin user",...

然后,结束远程会话,命令是exit'

REMOTE> exit
cyt5969858
翻译于 2017-11-30 20:39:08
 

参与本段翻译用户:
cyt5969858

显示原文内容

【已悬赏】 赏金: 4元

5. 完成用于远程访问的VM配置

在您可以通过网络使用服务器之前,还需要另外两个步骤。您应该设置公共DNS(例如域)地址,因为VM的公共IP地址是动态的,并且在机器重新启动时可能会改变。出于安全考虑,需要配置Azure防火墙(“网络安全网关”资源)。

返回到Portal.Azure.com并查找与VM关联的这些资源:-公共DNS地址-打开传入服务端口

公共IP

要设置公共DNS名称,请转到门户的VM概述窗格并单击public-ip项,例如,“mymrs-ip”:


VM_overview

直到你到达配置刀片:

Ip_configuration

This will send you to the mymrs-ip component where you can change the DNS label.

网络安全组

如果不这样做,远程mrsploy登录尝试就会失败,并发出一条消息。


Error: Couldn't connect to server

因为默认情况下,VM的网络安全网关只允许ssh的端口22。一种选择是使用ssh设置端口转发。我不会在这里解释原因的。另一种方法是在服务器上配置远程访问。为此,您需要打开管理工具报告为Web端点的端口,通常是12800。入站安全规则的刀片隐藏在VM选项->网络接口->网络安全组->入站安全规则中。选择“添加”可为tcp端口12800创建自定义入站规则。结果如下:

Inbound_security_rules

现在服务器已经准备好使用了!

廿九_
翻译于 2018-02-08 16:16:34
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 3元

6. 检查MRS服务器是否从另一台计算机上运行。

你需要一份本地的MRS副本才能做这件事。副本可从一些来源获得,包括“仅客户端”副本,即免费获得许可的自然-R客户端。R客户端为您提供了R服务器的所有远程处理功能,也提供了与R服务器相同的自定义学习算法,但与R服务器不同,它仅限于适合内存的数据集。

R Server的来源有几个:


  • MSDN订阅下载包括用于不同平台的R Server

  • 另外,R客户端是MSDN上的免费下载

  • Microsoft SQL Server附带了R Server选项。除了安装SQL Server安装程序之外,还可以安装SQL Server安装程序的“独立服务器”。

  • 如果你已经Visual Studio(RTVS)安装了R工具R工具菜单有一安装R客户端选项

  • 当然,R Server附带的任何VM也会工作。值得注意的是,Data Science VM包含一个R Server副本,它承载了一组详尽的数据科学工具。

要从本地计算机远程登录,MRS命令与以前相同,除非从本地客户端使用服务器的域名:

> endpoint <- "mymrs.southcentralus.azure.com:12800'
> library(mrsdeploy)
> remoteLogin(endpoint)

如图所示,您不包括admin帐户和密码作为远程登录的参数,命令将弹出一个模态对话框,询问您是否需要它们。请注意,这个对话框可能是隐藏的,而不是出现在前面,你将不得不寻找它。

廿九_
翻译于 2018-02-08 16:30:21
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 2元

服务器将返回您的客户端和服务器MRS环境之间的差异的标题。下面是正确的远程会话在启动时返回的内容:

Diff report between local and remote R sessions...

Warning! R version mismatch
local: R version 3.3.2 (2016-10-31)
remote: R version 3.2.3 (2015-12-10)

These R packages installed on the local machine are not on the remote R instance:

   Missing Packages
1        checkpoint
2  CompatibilityAPI
3              curl
...
23            RUnit

The versions of these installed R packages differ:

     Package   Local  Remote
1       base   3.3.2   3.2.3
...
23     utils   3.3.2   3.2.3


Your REMOTE R session is now active.
Commands:
        - pause() to switch to local session & leave remote session on hold.
        - resume() to return to remote session.
        - exit to leave (and terminate) remote session.
cyt5969858
翻译于 2017-11-30 20:40:08
 

参与本段翻译用户:
cyt5969858

显示原文内容

【已悬赏】 赏金: 3元

REMOTE>提示符下,您可以探索远程解释器环境。这些方便的R函数使您可以进一步探索远程环境:

Sys.getenv()    # will show the machine's OS environment variables on the server.
Sys.info()      # returns a character string with machine and user descriptions

环境差异:向服务器添加自定义包

当您登录到远程时,包的比较列表应该会提醒您需要适应本地环境和远程环境之间的差异。不同的R版本生成此警告:


Warning! R version mismatch

不同的版本将限制对两个版本都可用的包。

可以在服务器上安装兼容但缺少的包。若要在可用包不同时安装软件包,远程会话需要有权限才能写入远程服务器上的.libPath()标识的目录之一。默认情况下不授予此权限。如果您对让远程用户对服务器进行修改感到舒服,您可以通过让每个人都可以写这个目录来授予这个权限。


$ sudo chmod a w /usr/local/lib/R/site-library/

然后指定一个库,例如,使用要安装在这个目录中的glmnet

REMOTE> install.packages("glmnet", lib="/usr/local/lib/R/site-library")

这些安装将从一个远程会话持续到另一个远程会话,登录时的“丢失包”警告将被正确更新,尽管奇怪的是,包名的IntelliSense总是会重新出现。因此,将提出在远程不可用的建议。

廿九_
翻译于 2018-02-24 17:02:45
 

参与本段翻译用户:
廿九_

显示原文内容

【已悬赏】 赏金: 3元

在服务器上运行R批处理任务

恭喜!现在你可以在云虚拟机上面运行大型的R任务了!

除了在REMOTE>提示符以交互方式运行以外,还有多种方式可以有效的利用VM。一种就是使用VM来运行耗时较长的任务,例如下面这个通过迭代来计算 leave-one-out r-squared 的值:

rsqr <- c()
    system.time(
      for (k in 1:nrow(mtcars)) {
        rsqr[k] <- summary(lm(mpg ~ . , data=mtcars[-k,]))$r.squared
    })
    print(summary(rsqr))

也可以用remote方式完成:

remoteExecute("rsqr <- c()\
    system.time(\
      for (k in 1:nrow(mtcars)) {\
        rsqr[k] <- summary(lm(mpg ~ . , data=mtcars[-k,]))$r.squared\
    })")

我们得另外获得运行的结果,因为以remote表达式方式运行,只有最后一个值才会被打印出来:

remoteExecute("summary(rsqr)")

对于大段的代码,你可以使用脚本文件,然后用mrsdeploy::remoteScript("myscript.R") 方式执行,其实只是简单地封装了mrsdeploy::remoteExecute("myscript.R", script=TRUE),myscript.R需要在本地的工作目录中。

注意,在远程运行时,脚本并不需要mrsdeploy库。相反,预装了 Microsoft R Server 2016 (version 9.0.1) Linux 版 (Ubuntu version 16.04) 运行 R  3.2.3 的虚拟机,并不包含mrsdeploy 库。所以 library(mrsdeploy) 和 install.packages(“mrsdeploy") 这两个表达式都会报错。如果你在自己的本地脚本文件中有这两个表达式,注意要先删掉才能让脚本远程执行,否则脚本会失败。如果想在两种情况下使用同一脚本,可以使用以下方式来在远程回话中判断是否需要调用mrsdeploy库。

if ( Sys.info()["user"] != "rserve2" ) {
      library(mrsdeploy)
    }

mrsdeploy 库的远程执行能力只是冰山一角,它还能在本地和远程之间移动文件和变量,更重要的,可以把R函数配置为生产级的Web Service。这些功能我们将在另一篇博文中详细介绍。

greenflute
翻译于 16天前
 

参与本段翻译用户:
greenflute

显示原文内容

【已悬赏】 赏金: 1元

更多相关信息

有关不同配置选项的详细信息,请参阅配置Rserver操作。操作指令中要求的库已经在VM上配置了。

要想知道远程会话能做什么,请看这里 have a look here.. 还有,关于总体概况,请参见 see this..

转到Rserver文档以获得完整的API引用。

廿九_
翻译于 2018-01-21 13:13:53
 

参与本段翻译用户:
廿九_

显示原文内容

GMT+8, 2018-7-23 06:24 , Processed in 0.046823 second(s), 11 queries .