Sarat Lingamarla, MathWorks
在本视频中,您将了解部署生成CUDA的通用工作流®代码来自MATLAB中的一个深度学习示例®到云上。
MATLAB为工程师和科学家提供了一个完整的集成工作流,可以在熟悉的开发环境中探索、原型和部署深度学习算法,并内置高级应用程序和库。
使用GPU Coder™,您可以为完整的深度学习应用程序生成CUDA代码,其中包括围绕训练有素的网络的预处理和后处理逻辑,并部署到任何云平台,如AWS®,微软Azure®等。
你好,我的名字是Sarat,今天我将向你展示如何使用GPU编码器生成CUDA代码,将其部署到亚马逊Web服务,并有一个简单的Web应用程序与生成的代码交互。
在进入实际实现之前,这里是演示的结果。
一个简单的web应用程序,运行在使用GPU编码器创建的CUDA可执行文件上,允许用户上传图像,并使用预先训练的深度学习网络:alexnet进行分类。
我可以使用文档页面中的这张显示辣椒的图片,将其上传到服务器,然后单击predict获得Alexnet的分类输出。
下面是演示的概述。我们正在使用GPU编码器生成CUDA代码。然后,我们将生成的源代码上传到Amazon S3 bucket中,并使用Amazon Codedeploy将其部署到EC2实例或虚拟机中。
一旦我们在EC2实例上获得了源代码,我们就可以使用NVIDIA CUDA编译器构建一个可执行文件。
我将在几分钟内更详细地解释这些步骤。
首先,我们将使用MATLAB函数来生成CUDA代码。
这是一个MATLAB函数,我已经修改了一个深度学习的例子,从我们的GPU编码器文档。你可以在下面找到这个页面的链接。
在这个函数中,我们使用文件名输入读取图像,对图像进行预处理,并将其输入到预先训练过的网络' alexnet ',然后返回分类输出。
一旦创建了MATLAB函数,就可以使用单独的脚本来生成静态库、动态库或可执行库。在本例中,我们正在生成一个静态库。
此外,我们还使用了packNGo函数来打包' imread '函数的依赖项。
在这种情况下运行codegen命令将给您一个包含所有依赖项的zip文件夹和一个包含生成代码的codegen文件夹。
解压并复制zip文件夹中的所有文件到codegen目录。生成的代码将包含一个模板main。Cu文件和相应的头文件。
我们需要修改这些文件以接受文件名作为输入。在对主文件进行必要的更改之后,我们可以将生成的代码部署到云中。
如果愿意,还可以使用此主文件将此应用程序与现有代码集成。
接下来是工作流的AWS部分:
在这个演示中,我使用了来自Amazon Marketplace的AMI,因为它提供了在GPU上运行生成代码所需的所有CUDA库。
我们还有一篇文件交换文章,更详细地描述了一些步骤。
按照上面的步骤,您可以配置本演示所需的所有AWS组件。
一旦创建了EC2实例和S3存储桶,就可以将codegen目录上传到S3存储桶了。
我们还需要一个YAML文件来指定源代码的源路径和目标路径。
然后,我们将使用AWS命令行接口上传文件。
我们已经成功将文件上传到Amazon S3。
现在,我们将使用codedeploy将源代码部署到EC2实例。
在codedeploy中使用S3将允许我们维护源代码的版本或修订,并拥有一个持续的部署管道。
假设您已经配置了Codedeploy,我们将在Codedeploy中为应用程序创建一个部署。
我们将在这里选择S3,输入S3桶的路径,然后单击创建部署。
现在,我们在新创建的EC2实例上有一个codegen目录,位于Codedeploy YAML文件中提到的路径中。
我们将使用部署的源代码来构建可执行文件。
为了做到这一点,我们将更新make文件中源代码的路径并运行它。
然后,我们将使用NVIDIA CUDA编译器从这个静态库构建一个可执行文件。
你现在有一个CUDA可执行文件,运行在云端的GPU上,并允许你使用alexnet对图像进行分类。
通过访问下面的File Exchange链接,您可以按照本视频中介绍的步骤进行操作。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。