当前位置: 首页 > news >正文

基于Dagshub与Azure的数据版本控制与云端训练实践

1. 项目概述:当数据湖遇上云端训练

在机器学习和数据科学项目里,数据管理一直是个让人头疼的“脏活累活”。想象一下这个场景:你的训练数据分散在本地硬盘、团队共享盘、甚至某个同事的电脑里,每次启动一个云端训练任务,比如在Azure上跑一个图像分类模型,第一步不是写代码,而是花上几个小时甚至几天,手动把几十GB的图片数据上传到云存储。更糟的是,当数据版本更新,或者需要回滚到某个历史版本时,你面对的是一堆命名混乱的文件夹和文件,根本分不清哪个是哪个。这种工作流不仅效率低下,还极易出错,让数据科学家宝贵的精力浪费在文件搬运工的角色上。

“Image Classification on Azure With Dagshub Direct Data Access”这个项目,就是为了根治这个痛点。它的核心思路,是把数据版本控制云端计算资源无缝衔接起来。我们不再把数据“推”到云端,而是让云端的计算资源(比如Azure的虚拟机或容器实例)能够直接“拉取”我们版本化管理的原始数据。这里的关键角色是Dagshub,一个专为数据科学和机器学习项目设计的Git平台(你可以把它理解为数据科学界的GitHub)。它不仅能托管代码,更重要的是能通过DVC管理大型数据集,并为这些存储在远端(比如AWS S3、Azure Blob Storage)的数据提供统一的访问接口。

这个项目的价值在于,它构建了一个可复现、可协作、且高效的机器学习工作流。你可以在本地用少量数据做实验和开发,用Git和DVC记录下代码和数据的精确版本。当需要大规模训练时,直接在Azure上启动一个计算实例,配置好环境,然后通过Dagshub提供的凭证,直接访问版本化的数据集进行训练。训练完成后,再将模型和日志推回Dagshub进行管理。整个过程,数据本体始终待在它该在的地方(对象存储),我们操作的只是指向这些数据的“指针”和元数据,从而实现了数据与计算的解耦。

2. 核心工作流与架构设计

2.1 传统流程 vs. 基于Dagshub的直接访问流程

要理解这个项目的优势,我们必须先看清传统做法的问题所在。

传统“上传-训练”流程:

  1. 数据准备:在本地整理好图像数据集(例如,train/,val/,test/文件夹)。
  2. 手动上传:通过Azure门户、AzCopy命令行工具或Storage Explorer,将整个数据集上传到Azure Blob Storage的某个容器中。这个过程耗时且占用大量网络带宽。
  3. 配置训练任务:在Azure Machine Learning Studio或通过SDK配置一个训练任务(如使用EstimatorCommand)。在训练脚本中,你需要编写代码来从Blob Storage的特定路径(通常是sas tokenaccount key保护的URL)下载数据到计算节点的本地磁盘。
  4. 执行与问题:训练开始。如果中途发现数据有问题(比如标签错误、样本缺失),你需要停止任务,回到本地修改数据,然后重新执行步骤2和3。数据版本管理完全依赖人工记录文件夹名称或上传时间,极易混乱。

基于Dagshub Direct Data Access的流程:

  1. 数据版本化:在本地,使用DVC将大型图像数据集追踪到远程存储(例如,一个Azure Blob Storage容器)。DVC会生成一个轻量的.dvc文件,记录数据的哈希值和存储位置,并将这个.dvc文件提交到Git仓库。这个Git仓库托管在Dagshub上。
  2. 定义数据访问:在Dagshub项目设置中,配置好DVC远程存储的连接信息(Azure Blob Storage的账户名和密钥/SAS令牌)。Dagshub会为这个存储生成一个统一的访问端点。
  3. 云端训练配置:在Azure上创建计算环境(如Azure ML Compute Cluster、Azure VM或Azure Container Instance)。在初始化脚本或训练任务配置中,安装DVC,并通过Dagshub提供的认证方式(如DAGSHUB_USER_TOKEN)克隆代码仓库并拉取指定版本的数据。
  4. 直接访问训练:训练脚本运行时,DVC通过Dagshub的代理,直接从Azure Blob Storage拉取数据到计算节点的缓存中。数据拉取是增量式的,只有变化的文件才会被更新。
  5. 版本控制与复现:整个项目的状态(代码+数据指针)由Git commit hash唯一确定。任何时候,你都可以根据这个hash,在任意环境(本地、Azure、其他云)复现完全相同的训练数据环境。

这个架构的核心优势是“数据不动,计算动”。数据作为唯一的权威源,稳定地存放在对象存储中。所有的开发、实验和训练任务,都通过DVC和Dagshub这个中间层来获取数据,确保了数据版本的一致性和可追溯性。

2.2 关键组件选型与作用解析

在这个工作流中,每个工具都扮演着不可替代的角色:

  1. Dagshub

    • 角色:协作中心与统一入口。它不仅仅是Git仓库托管,更集成了DVC远程存储的代理服务、实验跟踪(MLflow)、项目文档等功能。
    • 关键作用:提供安全的、令牌化的数据访问代理。你不需要在训练节点上直接配置Azure存储账户密钥,而是使用Dagshub的个人访问令牌。这大大提升了安全性,也简化了配置。
    • 类比:就像一个公司的前台/门禁系统。外部人员(Azure计算节点)不需要知道公司内部(Azure存储)每个房间的钥匙,只需要在前台(Dagshub)登记,由前台授权并引导进入正确的房间。
  2. DVC (Data Version Control)

    • 角色:数据版本化管理引擎。它使用内容寻址(文件哈希值)来追踪大文件和目录。
    • 关键作用:生成数据“指针”文件(.dvc),管理缓存,并处理与远程存储(通过Dagshub配置)的上传/下载操作。它使得git clonegit checkout可以联动地切换数据版本。
    • 注意:DVC本身不存储数据,它管理的是元数据和链接。数据实体存储在配置的“远程存储”中,这里就是Azure Blob Storage。
  3. Azure Blob Storage

    • 角色:廉价、可靠、高可用的数据湖存储。用于存放实际的图像文件。
    • 配置要点:建议创建专用的存储账户和容器,并设置适当的生命周期管理策略。对于频繁读取的训练场景,可以将容器类型设置为“私有”,通过Dagshub代理访问,或者设置为“Blob”并配合SAS令牌。
  4. Azure 计算服务

    • 角色:提供弹性的计算能力。可选方案很多:
      • Azure Machine Learning Compute Clusters:最集成化的方案,适合大规模、排队的训练任务,与Azure ML的生态系统(如实验跟踪、模型注册)无缝结合。
      • Azure Virtual Machines:提供最高控制权,适合需要特定系统配置或长期运行的开发环境。
      • Azure Container Instances 或 Azure Kubernetes Service:适合容器化、一次性的训练任务,启动速度快。
    • 选择考量:本项目更侧重于演示数据流,因此选择具有代表性的Azure ML Compute Cluster或一台标准的Ubuntu Data Science VM作为示例。

这个技术栈的组合,形成了一条从数据管理到模型训练的自动化流水线,将数据科学家从繁琐的运维工作中解放出来。

3. 环境准备与项目初始化实操

3.1 本地开发环境搭建

一切始于本地。我们需要建立一个标准的、可版本控制的项目结构。

首先,创建一个新的项目目录并初始化Git和DVC:

mkdir azure-image-classification-dagshub cd azure-image-classification-dagshub git init dvc init

执行dvc init后,它会创建.dvc/目录,并在.gitignore中添加一些条目,避免缓存文件被误提交。

接下来,组织你的图像分类数据。一个清晰的结构至关重要。假设我们使用一个经典的猫狗分类数据集:

data/ ├── raw/ # 原始数据,被DVC追踪 │ ├── train/ │ │ ├── cat.1.jpg │ │ ├── dog.1.jpg │ │ └── ... │ ├── val/ │ │ ├── cat.1001.jpg │ │ ├── dog.1001.jpg │ │ └── ... │ └── test/ │ └── ... ├── processed/ # 处理后的数据(如调整大小、增强),可由脚本生成,也可被DVC追踪 └── external/ # 外部数据(如下载的预训练权重)

将你的原始数据放入data/raw/目录下。

现在,使用DVC追踪这个大型数据目录:

dvc add data/raw

这个命令会做两件事:1) 将data/raw下的所有文件移动到DVC缓存(.dvc/cache);2) 生成一个data/raw.dvc文件。这个.dvc文件很小,只包含目录结构的元数据和文件哈希值。你需要将data/raw.dvc提交到Git,而data/raw/目录本身已经被添加到.gitignore中。

git add data/raw.dvc .gitignore git commit -m “Track raw image dataset with DVC”

实操心得:在dvc add之前,务必确保data/raw里的数据是你最终想要版本化的状态。因为DVC是基于内容哈希的,任何文件内容的修改都会导致哈希值变化,进而需要重新dvc add并生成新的.dvc文件。对于仍在频繁清洗和标注的阶段,可以先不加入DVC管理,或者使用dvc run来创建可重复的数据处理流水线。

3.2 配置DVC远程存储与Dagshub项目

数据在本地被DVC管理了,现在需要告诉DVC,把这些数据实际存到哪里去。我们将使用Azure Blob Storage作为远程存储,并通过Dagshub来集中管理配置。

第一步:在Azure上创建Blob Storage容器。

  1. 在Azure门户中,创建一个存储账户(例如dagshubimages)。
  2. 在该账户下创建一个容器(例如model-training-data)。容器权限可以设置为“私有”,因为我们后续通过Dagshub代理访问。
  3. 获取存储账户的连接字符串账户名和密钥。你可以在存储账户的“访问密钥”设置中找到它们。安全起见,建议使用SAS令牌,但DVC原生支持连接字符串和账户密钥,更易于配置。

第二步:在Dagshub上创建项目并连接存储。

  1. 在Dagshub网站注册/登录,点击“Create New Repository”,命名为azure-image-classification,选择“Initialize repository with a README”。
  2. 创建完成后,进入项目,点击顶部导航栏的“Remote Storage”。
  3. 点击“Add Storage”,选择“Microsoft Azure Blob Storage”。
  4. 填写配置信息:
    • Storage Name: 一个别名,如azure-blob
    • Container Name: 你在Azure上创建的容器名,如model-training-data
    • Account Name: 你的Azure存储账户名。
    • Account Key: 对应的主密钥或次要密钥(或者使用SAS Token,填入SAS Token字段)。
  5. 点击“Add Storage”。Dagshub会验证连接并保存配置。注意,你的存储密钥会保存在Dagshub的服务端,请确保你信任该平台。它相当于把钥匙交给了前台。

第三步:将本地DVC远程指向Dagshub代理。Dagshub为你的项目生成了一个特定的DVC远程URL。你可以在项目主页的“Clone”按钮下找到,格式类似于https://dagshub.com/<你的用户名>/<项目名>.dvc

在本地终端中,添加这个远程存储:

dvc remote add -d origin https://dagshub.com/your-username/azure-image-classification.dvc

-d参数将其设置为默认远程。

然后,你需要配置DVC,让它知道如何通过Dagshub认证来访问这个远程。Dagshub推荐使用HTTP Basic Auth,用户名是你的Dagshub用户名,密码是一个你生成的个人访问令牌(Token)。

dvc remote modify origin --local auth basic dvc remote modify origin --local user your_dagshub_username # 接下来会提示输入密码,这里粘贴你的Dagshub Token dvc remote modify origin --local password your_dagshub_token

使用--local选项会将认证信息保存在本地的.dvc/config.local文件中,这个文件被.gitignore排除,避免了敏感信息泄露。

第四步:推送数据到远程存储。配置完成后,就可以将本地DVC追踪的数据推送到Azure Blob Storage了:

dvc push

这个命令会读取本地的DVC缓存,并将文件通过Dagshub代理,上传到你配置的Azure Blob Storage容器中。你可以在Azure门户中查看容器,应该能看到上传的文件,它们通常以哈希值命名,存放在一个结构化的目录里。

第五步:推送代码和DVC元数据到Dagshub Git仓库。最后,将你的代码、.dvc文件等所有元数据推送到Dagshub的Git仓库:

git remote add origin https://dagshub.com/your-username/azure-image-classification.git git push -u origin main

至此,你的项目已经完全托管在Dagshub上,数据安全地躺在Azure Blob Storage里,并通过Dagshub实现了统一的访问入口。

4. 在Azure计算环境中拉取数据与训练

现在进入核心环节:在云端计算资源上,直接使用Dagshub来获取版本化的数据进行训练。我们以Azure Machine Learning (AML) 计算集群为例,因为它提供了良好的环境管理和作业调度能力。

4.1 创建Azure ML工作区与计算集群

  1. 创建Azure ML工作区:在Azure门户中,创建Machine Learning资源。工作区是所有AML资产(数据集、计算、实验、模型)的顶层容器。
  2. 创建计算集群:在AML Studio中,进入“计算”->“计算集群”,创建一个新的集群。选择虚拟机类型(如Standard_NC6s_v3用于GPU训练),设置最小和最大节点数,并配置管理员账户和SSH密钥以便调试。

4.2 准备训练脚本与环境

在你的本地项目根目录,创建一个训练脚本train.py。这个脚本需要包含以下关键部分:

# train.py import argparse import os import subprocess import sys from pathlib import Path # 1. 克隆仓库并拉取数据 def setup_data_from_dagshub(repo_url, data_path='data/raw'): """ 通过Dagshub克隆仓库并拉取DVC数据。 假设环境变量DAGSHUB_USER_TOKEN已设置。 """ # 克隆代码仓库(可以只克隆最新commit以节省时间) subprocess.run(['git', 'clone', '--depth', '1', repo_url, '.'], check=True) # 配置DVC远程(通常已在仓库的.dvc/config中配置好,但需要认证) # 从环境变量读取Token token = os.environ.get('DAGSHUB_USER_TOKEN') if not token: raise ValueError("环境变量 DAGSHUB_USER_TOKEN 未设置!") # 使用DVC pull拉取数据。DVC会自动使用配置的远程(通过Dagshub代理) # 因为认证信息是--local的,不会在仓库中,所以我们需要在这里设置 repo_owner = repo_url.split('/')[-2] # 假设URL格式固定 repo_name = repo_url.split('/')[-1].replace('.git', '') dvc_remote_url = f'https://dagshub.com/{repo_owner}/{repo_name}.dvc' # 一种更简单的方式:直接使用dvc pull,前提是.git/.dvc/config中已配置好远程,且通过环境变量认证 # 设置DVC远程认证环境变量(DVC >= 2.0 支持) os.environ['DVC_REMOTE_AUTH_BASIC_PASSWORD'] = token # 对于Dagshub,用户名可以是token,密码留空,或者使用特定方式。更通用的方法是使用`dvc remote modify`临时配置。 # 我们选择在运行脚本前,通过外部shell命令配置好,这里仅展示核心训练逻辑。 print("开始拉取数据...") # 假设DVC远程认证已在环境准备步骤完成,这里直接pull result = subprocess.run(['dvc', 'pull', data_path], capture_output=True, text=True) print(result.stdout) if result.returncode != 0: print(f“DVC pull failed: {result.stderr}”, file=sys.stderr) # 可以尝试更详细的调试,比如检查.dvc/config文件 subprocess.run(['cat', '.dvc/config'], check=False) else: print(“数据拉取成功!”) return Path(data_path) def main(args): # 设置数据路径 data_dir = Path('data/raw') if not data_dir.exists(): # 如果不存在,则从Dagshub拉取 # 注意:在AML作业中,repo_url通常作为参数传入或写在脚本里 repo_url = args.repo_url or “https://dagshub.com/your-username/azure-image-classification.git” data_dir = setup_data_from_dagshub(repo_url) # 2. 实际的训练逻辑 train_images_path = data_dir / 'train' val_images_path = data_dir / 'val' # ... 使用PyTorch, TensorFlow等加载数据、定义模型、训练、评估 ... print(f“使用训练数据路径: {train_images_path}”) print(f“使用验证数据路径: {val_images_path}”) # 你的训练代码 here... if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--repo-url', type=str, help='Dagshub git repository URL') # 其他训练超参数... args = parser.parse_args() main(args)

同时,创建一个environment.ymlrequirements.txt文件来定义Python环境依赖,并创建一个aml_job.py或使用AML SDK来提交作业。

4.3 配置与提交Azure ML训练作业

更实用的方法是在Azure ML中创建一个Command Job,它允许我们指定一个命令来运行,并自动管理环境构建和计算资源分配。我们可以通过AML Python SDK或在Studio中YAML文件来定义。

使用Azure ML Python SDK提交作业:

# submit_job.py from azure.ai.ml import MLClient, command, Input from azure.identity import DefaultAzureCredential import os # 连接至工作区 credential = DefaultAzureCredential() ml_client = MLClient.from_config(credential=credential) # 定义作业 job = command( code=“./”, # 上传当前目录所有文件作为代码快照 command=“bash setup_and_train.sh”, # 运行一个shell脚本,封装复杂步骤 environment=“pytorch-1.13-gpu@latest”, # 使用AML预置的带PyTorch和GPU的环境 compute=“gpu-cluster”, # 之前创建的计算集群名称 environment_variables={ “DAGSHUB_USER_TOKEN”: os.environ[“DAGSHUB_TOKEN”] # 从本地环境变量传入,切勿硬编码! }, display_name=“image-classification-dagshub”, experiment_name=“dagshub-data-access”, ) # 提交作业 returned_job = ml_client.jobs.create_or_update(job) print(f“已提交作业: {returned_job.name}”)

其中,setup_and_train.sh脚本负责在计算节点上完成所有初始化工作:

#!/bin/bash # setup_and_train.sh # 1. 安装必要的系统依赖和DVC pip install dvc dvc-azure # 如果需要Azure直接支持,可安装dvc-azure,但本项目通过Dagshub代理,只需基础DVC # 2. 配置Git(用于克隆代码) git config --global user.email “job@azureml.com” git config --global user.name “AzureML Job” # 3. 配置DVC远程认证 # 方法:直接修改.dvc/config文件,或使用dvc remote命令 # 假设代码仓库中已包含.dvc/config,但无认证信息。 # 我们从环境变量获取Dagshub Token DAGSHUB_TOKEN=$DAGSHUB_USER_TOKEN if [ -z “$DAGSHUB_TOKEN” ]; then echo “错误: DAGSHUB_USER_TOKEN 环境变量未设置。” exit 1 fi # 克隆代码仓库(作业提交时code参数已上传代码,但为了演示从远程拉取,这里仍从Dagshub克隆) # 实际上,AML的`code`参数已经将代码上传到工作区的blob存储,并挂载到了计算节点。 # 我们直接进入代码目录即可。 cd $AZUREML_JOB_INPUT_PATH/code # 配置DVC使用Dagshub Token进行认证 # 获取仓库信息(假设目录名即为仓库名) REPO_NAME=$(basename $(git remote get-url origin) .git) REPO_OWNER=$(git remote get-url origin | cut -d‘/’ -f4) DVC_REMOTE_URL=“https://dagshub.com/$REPO_OWNER/$REPO_NAME.dvc” # 设置远程认证(使用HTTP Basic Auth,用户名为token,密码为空) dvc remote modify origin --local auth basic dvc remote modify origin --local user $DAGSHUB_TOKEN dvc remote modify origin --local password “” # 4. 拉取数据 echo “正在通过DVC拉取数据...” dvc pull data/raw -v # -v 输出详细信息,便于调试 # 5. 运行训练脚本 python train.py --repo-url $(git remote get-url origin)

关键点解析:

  • 认证信息传递DAGSHUB_USER_TOKEN作为环境变量传入作业,这是最安全的方式,避免了在代码或配置文件中硬编码密钥。
  • 代码与数据分离:作业提交时上传的“代码”快照,只包含train.pysetup_and_train.sh.dvc文件等轻量元数据。庞大的图像数据是通过dvc pull动态拉取的。
  • 环境隔离:每个作业都在一个干净的计算节点上执行。setup_and_train.sh脚本确保了从零开始配置DVC和拉取数据的环境一致性。

提交作业后,你可以在Azure ML Studio中监控其状态。当作业开始运行时,可以在日志中看到dvc pull的输出,显示它正在通过Dagshub从Azure Blob Storage下载数据。训练完成后,你可以将输出的模型文件、日志等再用dvc add追踪并dvc push回远程存储,或者直接注册到Azure ML的模型仓库中。

5. 调试、优化与高级技巧

5.1 常见问题与排查清单

在实际操作中,你可能会遇到以下典型问题:

问题现象可能原因排查步骤与解决方案
dvc pull失败,报错Permission denied403 Forbidden1. DAGSHUB_USER_TOKEN 环境变量未设置或错误。
2. Token 权限不足(未勾选write权限)。
3. Azure Blob Storage 配置错误(容器不存在、密钥无效)。
4. Dagshub 远程存储配置未正确关联项目。
1. 在计算节点上执行echo $DAGSHUB_USER_TOKEN检查变量是否存在且正确。
2. 在 Dagshub 的 Token 设置页面,确保 Token 至少拥有read仓库和read存储的权限。
3. 登录 Azure 门户,检查存储账户、容器是否存在,密钥/连接字符串是否有效。可以在本地用azcopy或 SDK 测试连接。
4. 在 Dagshub 项目设置中,检查 “Remote Storage” 配置,确保状态为 “Connected”。可以尝试重新添加存储。
dvc pull速度非常慢1. 计算节点与 Azure 存储区域不同,网络延迟高。
2. 首次拉取全量数据,数据量巨大。
3. 未使用 DVC 缓存,每次都要重新下载。
1.(重要)确保 Azure 计算集群和 Blob Storage 账户位于同一区域(如East US 2)。跨区域数据传输会产生费用和延迟。
2. 这是正常现象。可以考虑先在小规模数据集上测试流程。
3. DVC 在计算节点本地有缓存。确保dvc pull命令成功执行后,文件确实被缓存。下次运行作业时,如果数据未变,DVC 会跳过已缓存的文件。
训练脚本找不到数据文件1.dvc pull执行失败或未执行。
2. 训练脚本中的相对路径不正确。
3. 数据目录结构在 DVC 追踪后发生改变。
1. 在setup_and_train.sh脚本中增加ls -la data/dvc status命令,检查数据是否被成功拉取。
2. 在训练脚本中使用pathlib.Pathos.path构建绝对路径。打印出路径确认。例如:print(‘Current working dir:’, os.getcwd())
3. 检查本地仓库的data/raw.dvc文件,确认其指向的目录结构。如果本地修改了结构,需要重新dvc adddvc push
Git 克隆失败1. 计算节点无法访问dagshub.com
2. 未配置 Git 用户信息。
3. 仓库 URL 错误。
1. 检查计算节点的网络出口,确保能访问公网。Azure ML 计算集群默认可以。
2. 在脚本中务必配置git config user.nameuser.email,否则某些操作可能失败。
3. 使用git remote -v检查远程仓库 URL。
Azure ML 作业长时间处于 “Queued” 状态1. 计算集群最小节点数为 0,节点已释放,需要冷启动。
2. 请求的 VM 规格资源不足。
1. 这是预期行为。可以设置集群最小节点数 > 0 以减少排队时间,但会增加成本。
2. 检查区域中所需 VM 系列(如带 GPU 的 NCsv3 系列)是否有配额。可以在 Azure 门户申请增加配额。

5.2 性能优化与成本控制技巧

  1. 使用数据缓存与共享

    • DVC 缓存复用:在 Azure VM 或持久化的计算集群节点上,可以将 DVC 缓存目录(默认~/.cache/dvc)设置在一个共享的、持久化的磁盘上(如 Azure 文件共享或高性能 SSD)。这样,不同作业或多次运行同一作业时,可以复用已下载的数据缓存,极大减少网络 I/O。
    • AML 数据存储挂载:Azure ML 允许你将 Blob Storage 或文件共享以“数据存储”的形式直接挂载到计算节点(如as_mount())。你可以将 DVC 远程直接指向这个挂载点,或者将 DVC 缓存放在这里。这能提供类似本地磁盘的访问速度,但需要管理数据一致性。
  2. 增量数据拉取与智能缓存

    • DVC 的pull是增量的。当你只更新了数据集中的一小部分图片时,再次dvc pull只会下载发生变化的部分。在 CI/CD 流水线中,这可以节省大量时间。
    • 在训练脚本开头,可以添加逻辑检查数据目录是否已存在且哈希匹配,避免重复拉取。
  3. 选择正确的计算和存储层级

    • 存储:对于训练这种频繁读取的场景,Blob Storage 的标准热访问层是最合适的。虽然价格比冷层、归档层高,但访问延迟和吞吐量最好。切勿将训练数据放在冷层或归档层。
    • 计算:对于图像分类训练,GPU 是必须的。选择 Azure 上性价比高的 GPU 系列,如NCas_T4_v3(适用于中小模型)或NCads_A100_v4(适用于大规模训练)。使用 AML 的低优先级虚拟机可以大幅降低成本(可达 70-90%折扣),但需要容忍可能被抢占的风险,适合可中断的实验性训练。
  4. 流水线化与参数化

    • 将整个流程封装成Azure ML 管道。一个管道可以包含多个步骤:数据准备步骤(运行 DVC pull)、训练步骤、模型评估步骤、模型注册步骤。这样可以将流程自动化、可视化,并且可以轻松地使用不同的数据版本(Git commit hash)或超参数重新运行管道。
    • 将 Git commit hash 或 DAGSHUB_USER_TOKEN 作为管道参数传入,实现动态的数据版本选择。

5.3 安全性与权限管理最佳实践

  1. 令牌(Token)管理

    • 永远不要DAGSHUB_USER_TOKEN或 Azure 存储密钥硬编码在代码或配置文件中。
    • 在 Azure ML 中,使用工作区密钥库环境变量来安全地传递这些秘密。如上例所示,通过environment_variables传入,这些变量在作业运行时是加密的。
    • 为不同的环境(开发、测试、生产)创建不同的 Dagshub Token,并定期轮换。
  2. 最小权限原则

    • 在 Dagshub 上,为用于自动化作业的 Token 只分配必要的权限:read仓库和read远程存储通常就够了。除非作业需要推送数据或模型,否则不要赋予write权限。
    • 在 Azure 上,为存储账户创建共享访问签名(SAS)令牌,而不是使用账户密钥。SAS 令牌可以限制权限(只读)、有效期和可访问的资源(特定容器)。在 Dagshub 的远程存储配置中,可以使用 SAS 令牌代替账户密钥。
  3. 网络隔离考虑

    • 对于企业级高安全需求,可以将 Azure Blob Storage 放在虚拟网络(VNet)中,并配置私有终结点。此时,计算集群也需要部署在同一个 VNet 中。Dagshub 的代理服务将无法直接访问你的私有存储。这种情况下,可能需要调整架构,例如在 VNet 内部部署一个代理服务,或者使用 Azure Data Factory 等工具在受控环境下同步数据,但这超出了本文“直接访问”的简单范畴。通常,使用 SAS 令牌和 HTTPS 加密已经能提供足够的安全保障。

通过这套基于 Dagshub 和 Azure 的协作流程,我们成功地将数据版本控制、云端计算和团队协作紧密地结合在了一起。它带来的最大改变,是让数据科学家能够像管理代码一样去管理数据,让每一次实验、每一次训练都有据可查、有源可溯。当新同事加入项目,或者你需要三个月后复现一个冠军模型时,不再需要面对“数据到底用的是哪个版本”的灵魂拷问,只需一个git checkoutdvc pull,一切就绪。这种确定性和效率的提升,对于严肃的机器学习项目而言,其价值远超过工具本身的学习成本。

http://www.zskr.cn/news/1428690.html

相关文章:

  • 用ROS话题(Topic)和自定义消息,手把手教你搭建一个简易机器人‘聊天室’
  • 终极指南:轻松下载MOOC课程,三步建立个人离线学习库
  • 3步实现Atom编辑器完全中文化:告别英文困扰的完整解决方案
  • Pikachu靶场搭建后,除了SQL注入你还能用它练什么?一份超全实战指南
  • VCS安装踩坑实录:手把手解决FlexLM找不到license.dat的报错
  • 存储器层次结构——磁盘硬盘存储
  • Win10应用商店打不开?别急着重装!先试试这两个亲测有效的修复方法
  • MKS Monster8 8轴主板完整配置指南:从入门到精通的3D打印机控制方案
  • 2026最新保姆级教程:免费更换背景图工具推荐,手把手教你换背景 - AI测评专家
  • Windows系统终极管理工具:WinUtil一键优化完整指南
  • 2026透明背景图制作方法:手机电脑保姆级抠图教程一看就会 - AI测评专家
  • 2026年上海超声波焊接机厂家怎么选?江浙沪采购必看的设备选型全攻略 - 企业名录优选推荐
  • HS2-HF Patch终极指南:三步解锁Honey Select 2完整汉化与功能增强
  • 2026年乌审旗能送货的TOP5家电门店,哪家配送时效更有保障?
  • 小说离线阅读终极指南:novel-downloader高效下载工具完全解析
  • 知其白,守其黑,做一个有分寸的 SAP ABAP Cloud 开发者
  • 仓储数字孪生的“硬骨头”:如何实现实时数据驱动
  • 怎样轻松实现GitHub界面全面中文化:3分钟安装完整指南
  • FreeCAD 1.0 新手避坑指南:从安装闪退到成功导出DXF,我踩过的那些雷
  • 避坑指南:N32G435串口DMA接收数据被覆盖?手把手教你实现软件双缓冲
  • 2026年唐山烟道清洗与外墙清洗服务商深度横评:餐饮防火合规必看选型指南 - 企业名录优选推荐
  • 3分钟搞定QQ音乐加密格式转换:qmcflac2mp3实用指南
  • CycleGAN训练总翻车?手把手教你调参避坑:从损失函数(MSE vs BCE)到Identity Loss的源码级解析
  • Linux free 命令深度解析:从内存监控到 OOM 排查的完整指南
  • 3分钟搞定!在Mac上无缝运行Windows应用的终极神器Whisky完全指南
  • CATLASS L1到L0A拷贝API
  • ESP32车载LED显示屏DIY:从硬件设计到无线控制全解析
  • Arduino GSM通信实战:SIM900A AT指令驱动短信与电话
  • 2026广州装修公司口碑榜十大靠谱装企避坑指南含零增项质保 - 资讯纵览
  • 终极指南:如何在Windows上实现macOS风格的三指拖拽功能