如何通过DVC和GTO跟踪模型输出并添加版本信息?
问题解答
已完成的操作
1. Git仓库、DVC及AWS S3远程存储配置
dvc remote add -d awsstorage s3://mlops-artifacts dvc remote add s3cache s3://mlops-artifacts/cache dvc config cache.s3 s3cache git add .dvc/config && git commit -am "comment" git push
2. 分支中跟踪训练数据
dvc remote --external s3://mlops-artifacts/experiment/one.csv dvc remote --external s3://mlops-artifacts/experiment/two.csv
3. 跟踪SageMaker训练输出模型
dvc add --external s3://mlops-artifacts/output/sagemaker-experiment/output/model.tar git add model.tar.dvc && git commit -am "comment" git push
4. GTO标注操作
dvc import-url --no-download s3://mlops-artifacts/output/sagemaker-experiment/output/model.tar git add model.tar.dvc gto annotate model --path model.tar git add artifacts.yaml git commit -m "annotate it with GTO" dvc push git push
问题解答
问题1:跟踪模型输出是否还需其他操作?若不同分支的模型导出至同一S3路径,使用dvc add --external能否正确跟踪各版本模型?
- 额外操作:当前
dvc add --external配合Git提交的流程已完成模型跟踪,无需核心额外操作。可执行dvc push确保模型校验和同步到DVC缓存(你已在GTO步骤中执行),建议检查model.tar.dvc中的校验和是否匹配S3上的模型文件,避免版本混乱。 - 同一S3路径的多分支跟踪限制:无法正确跟踪。
dvc add --external依赖文件校验和(hash)记录版本,若不同分支的模型覆盖同一S3路径,旧模型文件被替换后,旧分支的model.tar.dvc指向的校验和将无法对应有效文件,无法拉取旧版本模型。
解决建议:为不同分支分配独立S3路径(如按分支名划分:s3://mlops-artifacts/output/sagemaker-experiment/branch1/model.tar),或导出模型时添加版本标识(时间戳、分支哈希后缀等)。
问题2:如何为模型添加版本信息?dvc get命令中的$REPO指什么,该如何配置使用?
- 基于GTO添加模型版本:
- 完成
gto annotate后,用gto register创建正式版本:
也可通过gto register model --version v1.0.0--patch/--minor/--major自动递增版本,例如gto register model --patch会将v1.0.0升级为v1.0.1。 - 提交并推送版本变更:
git add artifacts.yaml git commit -m "release model v1.0.0" git push - (可选)用
gto promote标记模型到特定阶段(如staging/production):gto promote model --version v1.0.0 --stage production
- 完成
dvc get中$REPO的说明与使用:$REPO指Git仓库地址,支持三种形式:本地仓库路径(如./my-ml-repo)、远程Git仓库URL(如https://github.com/username/my-ml-repo.git)、平台简写(如username/my-ml-repo,适用于GitHub/GitLab)。- 使用示例:
- 从本地仓库拉取指定版本模型:
dvc get ./my-ml-repo model.tar --rev v1.0.0 -o ./local-model.tar - 从远程仓库拉取:
dvc get https://github.com/username/my-ml-repo.git model.tar --rev main -o ./downloaded-model.tar
$ARTIFACT_PATH是模型在仓库中的路径(此处为model.tar),$REVISION可以是Git分支名、标签、提交哈希,或GTO的版本/阶段标识。 - 从本地仓库拉取指定版本模型:
内容的提问来源于stack exchange,提问作者haju
相关产品推荐
相关产品推荐

