开发区域

高级软件开发与MATLAB

绕了一圈

云中的CI服务。他们是美丽的。您所需要做的就是在您的存储库中添加一点o' yaml,然后整个自动化构建和测试基础设施的世界就会开始在您的提交中创建一些良好的、干净的乐趣。这种良好的干净的乐趣,实际上使您的代码更干净。您不需要设置机器,也不需要担心CI服务器上的电源按钮(或代理)。都是为你做的,很可爱。

不久前,我们展示了MATLAB、Simulink和大多数工具箱是如何在公共项目的各万博1manbetx种云CI服务上得到支持的。万博1manbetx今天,我想重点介绍其中一项服务,CircleCI,再详细一点。CircleCI是一个顶级CI平台,支持GitHub和Bitbucke万博1manbetxt上的存储库。

为了向您展示这如何与MATLAB和Simulink代码一起工作,让我提醒您一下我们的深度学习万博1manbetx知识库,它突出了使用多任务级联卷积神经网络(MTCNN)的人脸检测。这是一个很好的项目,我们可以用它来展示像CircleCI这样的平台的一些好处。

首先,让我们看看运行这个repo指定要运行的测试有多容易。这个回购使用了MATLAB项目标记要运行的所有测试。假设存储库已经存在设置使用CircleCI构建,你就可以立即从一个orb,我们已经开发,以简化您的MATLAB和Simulink构建万博1manbetx.你说什么是球体?它们是CI配置的可分享的金块。在我们的例子中,它帮助您定义如何将MATLAB连接到circlici云代理,如何运行任意的MATLAB命令,以及如何使用一些最常见的选项轻松地运行测试。

举个例子,假设我们首先运行我们的测试和生产几个流行的工件,而类似junit的xml输出的一个PDF格式的测试报告,前者可用于结合CircleCI测试结果的观点,后者用于归档和丰富的MATLAB和Simulink特定报告信息(例如,就像我们看到的万博1manbetx在这里在这里,在这里).首先,我们向circlci YAML配置文件中添加一些版本信息,包括我们正在使用的circlci配置规范的版本以及将要使用的orb的版本。我们将使用规范和orb的最新版本。

然后,设置执行器类型,即您将用于运行构建的机器或映像。在这种情况下,我们将使用Ubuntu的最新版本。注意,如果您在公共项目中使用Linux云代理机器映像,则可以使用安装用我们的球体得到的元素。

一旦MATLAB处理完毕,您就可以定义一个作业,该作业可以在工作流中引用,通过使用运行测试元素并简单地告诉orb在哪里创建工件。

然后,作为相同工作的一部分,我们使用内置的存储这些工件store_test_results元素(用于处理junit样式的XML输出),以及store_artifacts元素保存PDF报告和XML,以便保存保存。这是它的样子:

最后,我们引用我们在工作流中定义的工作,我们都很好。

版本:2.1球体:matlab: mathworks / matlab@0.4.0工作:run-all-dem-magnificient-matlab-tests:机:形象:ubuntu-2004:202101-01步骤:matlab -付款- matlab /安装/运行测试:test-results-junit:工件/ junit testResults.xml test-results-pdf:工件/ pdf / testResults.pdf - store_test_results:路径:工件/junit - store_artifacts: path:工件工作流:test: jobs: - run-all- demi - magnicient -matlab-tests

好的,现在让我们运行一个构建,看看我们是什么样子的:

注意,为了简洁,我加快了这个构建的视频。但是,您可以看到CircleCI旋转了一个构建代理,在这个代理上设置了MATLAB,测试运行并通过,这一切只需要几分钟的时间。更重要的是,它救了我们一些文物!让我们看看PDF报告:

这里有一些很酷的东西:

  1. 可以说是藏物吗?很容易找到一种流线型的方法来存储保存记录的工件,比如pdf结果
  2. 这些报告可以包含额外的丰富内容,如图像、图和可视化、截图,如果你正在使用Simulink Test,信号级别比较和可视化。万博1manbetx涂料。在本例中,我们包含了从示例文档代码生成的图像,经过测试以确保示例执行无误,并使用FigureDiagnostic记录结果图(类似于我们在这篇文章).
  3. 看看过滤过的测试!好的,虽然我们有一些被过滤掉的测试不是很酷,但至少我们能从报告中清楚地看到这一点是很好的。深入研究诊断,我们发现这些测试被过滤掉的原因是它们需要GPU运行。

好吧,最后一点,我们不能太挑剔,对吧?毕竟,我们正在利用云服务为我们处理所有的机器配置,所以我们不应该期望能够在云中运行需要gpu的测试。我想我们只需要记得时不时地在我们自己的gpu机器上离线运行这些测试。

错了!

事实证明,CircleCI有一个计划万博1manbetx支持GPU硬件的机器!那不是很好吗?在我们的构建中尝试它只是意味着从下面更改我们的yaml代码片段:

机:形象:ubuntu-2004:202101-01

...像这样:

Resource_class: gpu.nvidia.small machine: image: ubuntu-1604-cuda-11.1: 2012.01

现在,如果你的CircleCI计划启用了GPU,你可以看到我们的构建现在使用的是带有GPU的机器:

然而,我们有一个问题!

看来有些测试失败了。这是出乎意料的(真的,在我写这个博客的时候是出乎意料的!)事实证明,当你不在自动化中测试时,测试失败就会出现。这就是为什么要在CI下实现所有测试的自动化。在这种情况下,随着gpuArray支持的引入,这个深度学习存储库在R2020b中开始失败万博1manbetxselectStrongestBbox从计算机视觉工具箱。长话短说,这很容易解决,我们只需要改变收集调用gpuArray来解释早期版本中的这些差异。然而,我们需要在GPU硬件上运行才能尽早检测到这个bug,所以circlici平台的这一功能非常棒。另外,请注意我们看到的干净的测试结果失败显示,因为我们上传了junit风格的xml工件。不错的奖金。

我似乎记得有一两次我听说gpu可以在深度学习应用程序中有用?听起来对吗?露齿而笑想象一下,利用MATLAB和CircleCI的强大功能,你可以实现怎样的自动化工作流程。




发布与MATLAB®R2021a

|

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。