You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure ML CLIv2创建作业时,如何在R脚本中加载数据资产

解决Azure ML CLIv2中R作业加载uri_file数据资产的问题

问题概述

使用Azure Machine Learning CLIv2创建R机器学习作业时,无法从数据存储加载已注册的uri_file类型数据资产,不清楚如何在R脚本的optparse函数中引用该资产,也不知道如何验证数据是否成功加载。

当前配置问题

你的YAML配置存在缩进错误,inputs被错误嵌套在code下,导致AML无法识别输入参数;同时R脚本缺少数据加载和验证的逻辑。

原YAML配置(存在问题)

command: >
Rscript r-source.R
--data_file ${{inputs.datafile}}  
code: src   # this is the code directory
  inputs:
    datafile: # this is a registered data asset
      type: uri_file
      path: azureml:versiontest@latest

原R脚本(存在问题)

library(optparse)

parser <- OptionParser()

parser <- add_option(
  parser,
  "--data_file",
  type = "character",
  action = "store",
  default = "" # not sure what goes here, or how to reference the data asset
)

args <- parse_args(parser)

解决方案

1. 修正YAML作业配置

确保inputs与command、code同级,同时补充必要的环境和计算目标配置:

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: >
  Rscript r-source.R --data_file ${{inputs.datafile}}
code: src
inputs:
  datafile:
    type: uri_file
    path: azureml:versiontest@latest
environment:
  # 使用官方R环境镜像,可根据你的R版本调整
  image: mcr.microsoft.com/azureml/openmpi4.1.0-r4.1.3:latest
compute: azureml:<你的计算目标名称> # 替换为你的AML计算目标,比如cpu-cluster

关键说明:

  • inputs必须处于顶层,AML才能解析并传递数据资产路径到作业中
  • ${{inputs.datafile}}会在作业运行时被替换为uri_file资产在计算目标上的本地临时路径

2. 完善R脚本的参数处理与数据加载

在optparse中设置合理的默认值(用于本地测试),并添加数据加载和验证逻辑:

library(optparse)

# 初始化参数解析器
parser <- OptionParser()
parser <- add_option(
  parser,
  "--data_file",
  type = "character",
  action = "store",
  # 本地调试时的默认路径,提交AML作业时会被自动传入的路径覆盖
  default = "./local-test-data.csv",
  help = "Path to the input data file (auto-filled by AML for registered assets)"
)

# 解析命令行参数
args <- parse_args(parser)

# 1. 验证传入的路径
cat("Received data file path:", args$data_file, "\n")

# 2. 加载数据(根据你的文件格式调整读取函数,比如read.table、read_excel等)
tryCatch({
  data <- read.csv(args$data_file)
  
  # 3. 验证数据加载结果
  cat("✅ Data loaded successfully!\n")
  cat("- Total rows:", nrow(data), "\n")
  cat("- Total columns:", ncol(data), "\n")
  cat("- First 3 rows preview:\n")
  print(head(data, 3))
  
  # 后续的机器学习逻辑...
  
}, error = function(e) {
  cat("❌ Failed to load data. Error message:", e$message, "\n")
  stop("Data loading failed, aborting job.")
})

关键说明:

  • default参数设置为本地测试文件路径,方便你在本地调试脚本,提交到AML时该值会被资产的临时路径覆盖
  • 无需额外调用Azure存储SDK,直接用R的标准读取函数加载args$data_file即可,因为AML已经将uri_file资产下载到计算节点的本地路径
  • 通过tryCatch捕获加载错误,同时打印路径、数据维度和预览,方便在AML作业日志中验证

3. 验证数据加载状态

提交作业后,在AML工作室的作业详情页面:

  1. 进入日志选项卡
  2. 查看stdout.log文件,里面会显示你打印的路径、数据加载成功提示和数据预览
  3. 如果加载失败,stderr.log会显示错误信息,帮助排查问题

内容的提问来源于stack exchange,提问作者Marty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:45:58