如何对 CI 管道中使用不属于 git 远程模型文件的函数进行单元测试?

How do I unit test a function in the CI pipeline that uses model files that are not part of the git remote?

我正在开发需要相当大的训练模型文件才能 运行 的机器学习存储库。这些文件不是 git 远程的一部分,但由 DVC 跟踪并保存在单独的远程存储中。当我尝试在 CI 管道中对需要这些模型文件进行预测的函数进行 运行 单元测试时,我 运行 遇到了问题。由于我无法在 git 远程访问它们,因此无法测试它们。

人们在这种情况下通常采取的最佳做法是什么?我可以想到几个选项 -

人们在这种情况下通常会做什么?

如果我们谈论单元测试,我认为做一个模拟确实更好。最好进行较小的单元测试,测试单元的实际逻辑等。最好进行其他测试,尽管这会拉动模型,运行 一些逻辑在其之上——我将它们称为集成测试。

虽然不是非黑即白。如果您出于某种原因发现使用实际模型更容易(例如,它发生了很大变化并且更容易使用它而不是维护和更新 stubs/fixtures),您可能会缓存它。

我认为,为了帮助您进行模拟,您需要分享一些技术细节 - 函数看起来如何,您尝试了什么,有什么问题等等。

to do this because downloading models every time you want to run push some code will quickly eat up my usage minutes for CI and is an expensive option.

我认为您可以利用 CI 系统缓存来避免反复下载。这是 GitHub 操作相关 repository, this is CircleCI。所有常见的 CI 供应商的想法都是一样的。顺便说一句,正在考虑使用哪个?

Just put the model files in the git remote and be done with it. Only use DVC to track data.

这可能是方法,但如果模型足够大,您将显着污染 Git 历史。在某些 CI 系统上,它可能会变得更慢,因为它们将使用常规 git clone 获取它。有效,无论如何都要下载模型。

顺便说一句,如果您使用或不使用 DVC,请查看另一个 open-source 项目,该项目专门用于 CI/CD 机器学习 - CML.