开发区域

用MATLAB开发高级软件

绕圈

云计算中的CI服务。它们很漂亮。你所需要做的就是在你的存储库中添加一点yaml,整个世界的自动化构建和测试基础设施开始为你的提交创造一些良好的清洁乐趣。这种良好的清洁乐趣实际上使你的代码更干净。你不需要设置你的机器,你不需要担心CI服务器(或代理)上的电源按钮。这一切都是为您而做的,非常可爱。

不久前,我们展示了MATLAB、Simulink和大多数工具箱是如何在公共项目的各金宝app种云CI服务上得到支持的。金宝app今天,我想重点介绍其中一项服务,CircleCICircleCI是一个顶级CI平台,支持GitHub和Bitbucket上的存储库。金宝app

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

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

例如,假设我们首先运行测试并生成两个流行的工件,一个JUnit风格的xml输出和一个PDF测试报告,前者用于与CircleCI测试结果视图集成,后者用于存档和丰富的MATLAB和Simulink特定报告信息(如我们所见金宝app在这里,在这里,在这里)。首先,我们将向CircleCI YAML配置文件添加一些版本信息,包括我们正在使用的CircleCI配置规范的版本以及我们将要使用的orb的版本。我们将使用规范和orb的最新版本。

然后,设置executor类型,这是您将用于运行构建的机器或映像。在本例中,我们将使用最新版本的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,信号级别比较和可视化。金宝app涂料。在本例中,我们包含了从示例文档代码生成的图像,经过测试以确保示例执行无误,并使用FigureDiagnostic记录结果图(类似于我们在这篇文章).
  3. 看看过滤过的测试!好的,虽然我们有一些被过滤掉的测试不是很酷,但至少我们能从报告中清楚地看到这一点是很好的。深入研究诊断,我们发现这些测试被过滤掉的原因是它们需要GPU运行。

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

错误的

事实证明,CircleCI有一个计划金宝app支持带有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中开始失败金宝app选择strongestbbox从计算机视觉工具箱。长话短说,这是一个简单的修复,我们只需要改变周围的聚集调用gpuArray来解释早期版本中的这些差异。然而,要早期检测到这个错误,我们需要在GPU硬件上运行,因此这是CircleCI平台的一个重要功能,可以实现这一点。另外,请注意我们看到的干净的测试结果失败显示,因为我们上传了JUnit风格的xml艺术很好的奖金。

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




与MATLAB®R2021a一起发布

|

评论

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