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

如何将Azure Databricks训练作业生成的.pkl文件导出至Azure DevOps并发布为工件?

没问题,我帮你把这个流程拆解清楚,不管是你特定的.pkl文件导出需求,还是通用的Databricks文件转存到ADO的场景,都可以按下面的步骤来操作:

针对你的.pkl文件场景的具体实现步骤

1. 先在Notebook里把.pkl文件存到持久化存储

Databricks作业运行的节点是临时的,作业结束后本地文件会丢失,所以第一步要在Notebook的训练代码末尾,把生成的.pkl文件复制到**DBFS(Databricks文件系统)**或者Azure存储(ADLS Gen2/BLOB)。比如存到DBFS的代码:

# 假设你的.pkl文件生成在本地临时路径/tmp下
dbutils.fs.cp("file:/tmp/trained_model.pkl", "dbfs:/models/trained_model.pkl")

2. 在Azure DevOps Pipeline中配置Databricks CLI环境

在ADO的流水线里,先安装并配置Databricks CLI,用来和Databricks workspace交互。可以用Bash任务实现:

# 安装Databricks CLI
pip install databricks-cli

# 用token认证(建议把token存在ADO的变量组/密钥 vault里,不要硬编码)
echo $(DATABRICKS_TOKEN) | databricks configure --token --host https://<your-databricks-workspace-url>

3. 提交作业并等待完成,然后下载文件到ADO代理

首先提交你的Notebook作业,然后轮询作业状态,确保成功完成后再下载文件:

# 提交作业,获取运行ID(替换成你的作业ID)
RUN_ID=$(databricks jobs run-now --job-id <your-job-id> | jq -r '.run_id')

# 轮询作业状态,直到终止
while true; do
  RUN_STATUS=$(databricks runs get --run-id $RUN_ID | jq -r '.state.life_cycle_state')
  if [[ "$RUN_STATUS" == "TERMINATED" ]]; then
    # 检查作业是否成功
    RESULT_STATE=$(databricks runs get --run-id $RUN_ID | jq -r '.state.result_state')
    if [[ "$RESULT_STATE" != "SUCCEEDED" ]]; then
      echo "Databricks训练作业失败,终止流水线"
      exit 1
    fi
    break
  fi
  echo "作业仍在运行,等待30秒后重试..."
  sleep 30
done

# 从DBFS下载.pkl文件到ADO代理的本地目录
databricks fs cp dbfs:/models/trained_model.pkl ./trained_model.pkl

注意:如果ADO代理没有jq工具,需要先安装(比如Ubuntu用apt-get install jq,macOS用brew install jq)

4. 将文件发布为Azure DevOps工件

最后用ADO的内置任务把下载好的.pkl文件发布为工件,方便后续使用:

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: './trained_model.pkl'
    ArtifactName: 'ml-model-artifacts'
    publishLocation: 'Container'
通用场景:Azure Databricks作业生成文件导出到Azure DevOps的方法

根据文件的存储位置,有几种不同的处理方式:

方式1:文件存储在DBFS

和上面的.pkl场景一致,核心是用databricks fs cp命令把文件从DBFS下载到ADO代理,再发布工件。如果是整个目录,可以加--recursive参数:

databricks fs cp --recursive dbfs:/models/ ./local-models-dir/

方式2:文件存储在Azure Storage(ADLS Gen2/BLOB)

这种情况可以跳过Databricks CLI,直接用ADO的Azure File Copy任务或者Azure CLI命令下载文件到代理,效率更高。比如用Azure CLI:

# 下载单个文件
az storage blob download --container-name <your-container> --name models/trained_model.pkl --file ./trained_model.pkl --account-name <storage-account-name>

# 下载整个目录
az storage blob download-batch --source <your-container> --destination ./local-models-dir --pattern models/*

前提是ADO的服务主体拥有该存储账户的读取权限

方式3:文件仅存在于Databricks临时节点

这种情况必须先在Notebook里把文件复制到DBFS或Azure Storage(参考步骤1),因为作业结束后临时节点会被销毁,文件会永久丢失,无法直接下载。

一些关键注意事项
  • 安全性:所有敏感信息(Databricks token、Azure存储密钥等)都要存在ADO的变量组或Azure Key Vault中,绝对不要硬编码在流水线脚本里。
  • 作业状态校验:一定要等待作业成功完成后再下载文件,避免获取到不完整或错误的文件。
  • 大文件优化:如果文件很大,建议优先用Azure Storage直接同步,避免通过Databricks CLI中转,提高传输效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:02:48