你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问
https://docs.azure.cn
。
交互式 R 开发
项目
06/03/2023
6 个参与者
适用范围:
Azure CLI ml 扩展 v2(最新版)
Python SDK azure-ai-ml v2(最新版)
本文介绍如何对 Azure 机器学习工作室中的计算实例使用 R,它在 Jupyter 笔记本中运行 R 内核。
常用的 RStudio IDE 也能发挥作用。 可以在计算实例上的自定义容器中安装 RStudio 或 Posit Workbench。 但是,在 Azure 机器学习工作区中读取和写入数据时,这存在限制。
本文中所示的代码适用于 Azure 机器学习计算实例。 计算实例具有成功运行代码所需的环境和配置文件。
如果没有 Azure 订阅,请在开始操作前先创建一个免费帐户。 立即试用
Azure 机器学习的免费版或付费版
一个
Azure 机器学习工作区和计算实例
基本了解如何在 Azure 机器学习工作室中使用 Jupyter 笔记本。 有关详细信息,请参阅
云工作站上的模型开发
。
在工作室中的笔记本中运行 R
你将在计算实例上的 Azure 机器学习工作区中使用一个笔记本。
登录到
Azure 机器学习工作室
打开工作区(如果尚未打开)
在左侧导航栏中,选择“笔记本”
创建名为 RunR.ipynb 的新笔记本
如果你不确定如何在工作室中创建和使用笔记本,请查看
在工作区中运行 Jupyter 笔记本
选择该笔记本。
在笔记本工具栏上,确保你的计算实例正在运行。 如果未运行,现在请将它启动。
在笔记本工具栏上,将内核切换为“R”。
笔记本现已准备好运行 R 命令。
可以将文件上传到工作区文件存储资源,然后在 R 中访问这些文件。但是,对于存储在 Azure
数据资产中的文件或来自数据存储的数据
,必须先安装一些包。
本部分介绍如何在交互会话中,使用 Python 和
reticulate
包将数据资产和数据存储加载到 R 中。 你将使用
azureml-fsspec
Python 包和
reticulate
R 包将表格数据作为 Pandas 数据帧来读取。 该部分还包含一个将数据资产和数据存储读取到 R
data.frame
中的示例。
若要安装这些包:
在计算实例上创建一个名为 setup.sh 的新文件。
将以下代码复制到文件中:
#!/bin/bash
set -e
# Installs azureml-fsspec in default conda environment
# Does not need to run as sudo
eval "$(conda shell.bash hook)"
conda activate azureml_py310_sdkv2
pip install azureml-fsspec
conda deactivate
# Checks that version 1.26 of reticulate is installed (needs to be done as sudo)
sudo -u azureuser -i <<'EOF'
R -e "if (packageVersion('reticulate') >= 1.26) message('Version OK') else install.packages('reticulate')"
选择“保存并在终端中运行脚本”以运行脚本
安装脚本将处理以下步骤:
pip
在计算实例的默认 conda 环境中安装 azureml-fsspec
根据需要安装 R reticulate
包(版本必须为 1.26 或更高)
从已注册的数据资产或数据存储中读取表格数据
对于存储到在 Azure 机器学习中创建 的数据资产中的数据,请按照以下步骤将该表格文件读取到 Pandas DataFrame 或 R data.frame
中:
使用 reticulate
读取文件的操作仅适用于表格数据。
确保安装了正确版本的 reticulate
。 对于低于 1.26 的版本,请尝试使用较新的计算实例。
packageVersion("reticulate")
加载 reticulate
并设置已在其中安装了 azureml-fsspec
的 conda 环境
library(reticulate)
use_condaenv("azureml_py310_sdkv2")
print("Environment is set")
查找数据文件的 URI 路径。
首先获取工作区的句柄
py_code <- "from azure.identity import DefaultAzureCredential
from azure.ai.ml import MLClient
credential = DefaultAzureCredential()
ml_client = MLClient.from_config(credential=credential)"
py_run_string(py_code)
print("ml_client is configured")
使用此代码检索资产。 确保将 <MY_NAME>
和 <MY_VERSION>
替换为你的数据资产的名称和编号。
在工作室左侧导航栏中选择“数据”,找到你的数据资产的名称和版本号。
# Replace <MY_NAME> and <MY_VERSION> with your values
py_code <- "my_name = '<MY_NAME>'
my_version = '<MY_VERSION>'
data_asset = ml_client.data.get(name=my_name, version=my_version)
data_uri = data_asset.path"
运行该代码以检索 URI。
py_run_string(py_code)
print(paste("URI path is", py$data_uri))
使用 Pandas 读取函数将文件读取到 R 环境中
pd <- import("pandas")
cc <- pd$read_csv(py$data_uri)
head(cc)
或者,可使用数据存储 URI 来访问已注册的数据存储上的其他文件,并将这些资源读取到 R data.frame
中。
在这种格式中,使用你自己的值创建数据存储 URI:
subscription <- '<subscription_id>'
resource_group <- '<resource_group>'
workspace <- '<workspace>'
datastore_name <- '<datastore>'
path_on_datastore <- '<path>'
uri <- paste0("azureml://subscriptions/", subscription, "/resourcegroups/", resource_group, "/workspaces/", workspace, "/datastores/", datastore_name, "/paths/", path_on_datastore)
如果知道文件所在的数据存储,可以从 Studio UI 复制粘贴数据存储 URI,而无需记住数据存储 URI 格式:
导航到要读取到 R 中的文件/文件夹
选择它旁边的省略号(... )。
在菜单中选择“复制 URI”。
选择要复制到笔记本/脚本中的“数据存储 URI”。
请注意,必须在代码中为 <path>
创建一个变量。
df <- with(fs$open("<path>)", "r") %as% f, {
x <- as.character(f$read(), encoding = "utf-8")
read.csv(textConnection(x), header = TRUE, sep = ",", stringsAsFactors = FALSE)
print(df)
安装 R 包
计算实例具有许多预安装的 R 包。
要安装其他包,必须显式指明位置和依赖项。
创建或使用其他计算实例时,必须重新安装已经安装过的任何包。
例如,若要安装 tsibble
包,请运行以下代码:
install.packages("tsibble",
dependencies = TRUE,
lib = "/home/azureuser")
如果在 Jupyter 笔记本中运行的 R 会话中安装包,需要使用 dependencies = TRUE
。 否则,不会自动安装依赖包。 还需要指定 lib 位置,以便在正确的计算实例位置进行安装。
加载 R 库
将 /home/azureuser
添加到 R 库路径。
.libPaths("/home/azureuser")
必须更新每个交互式 R 脚本中的 .libPaths
才能访问用户安装的库。 将此代码添加到每个交互式 R 脚本或笔记本的顶部。
更新 libPath 后,像往常一样加载库。
library('tsibble')
在笔记本中使用 R
除了上述描述的问题外,还可像在任何其他环境(包括本地工作站)中那样使用 R。 在笔记本或脚本中,可以将数据读取和写入到存储笔记本/脚本的路径。
在交互式 R 会话中,只能写入到工作区文件系统。
在交互式 R 会话中,无法与 MLflow 交互(例如记录模型或查询注册表)。
改编 R 脚本以便在生产环境中运行