我如何使用NVIDIA的CUDA GPU编码器生成代码集装箱码头工人吗?

9的观点(30天)
我使用GPU编码器生成的代码运行在NVIDIA杰森董事会。我的公司有一个过程,我们需要通过码头工人容器部署它们。我怎么能这样做?

接受的答案

比尔周
比尔周 2021年2月26日
编辑:比尔周 2022年7月15日
可以集成GPU编码器生成的代码与NVIDIA码头工人的形象。这个工作流使用GPU编码器支持NVIDIA GPU包远程杰森董事会万博1manbetx构建二进制文件,所以我们假设一个杰森董事会已经设置为使用GPU编码器。你可以找到说明设立董事会 在这里
在这个工作流程有四个步骤:
  1. 生成CUDA代码并构建Jeston董事会
  2. 创建/定制docker-file
  3. 建立一个码头工人形象
  4. 码头工人的GPU编码器生成可执行文件运行
英伟达杰森的生成和构建二进制文件
为简单起见,我们将使用一个可执行的工作流程为例。构建的示例中,我们需要一个设计功能。(m文件)和主要文件。铜与输入文件)调用生成的代码。
设计功能
这是一个简单的设计功能,我们将使用这个例子。这需要一个输入,增加2,并返回它。当然,您可以使用任何复杂的函数,而不是这样的:
foo.m
函数输出= foo(输入)
输出=输入* 2;
结束
主文件
从生成的代码来创建一个可执行的,我们需要一个包装器函数调用的名称“主要”生成“foo”功能。这里有一个例子手工编码的主要文件:
注意:MATLAB编码器和GPU编码器都支持自动生成主要功能。万博1manbetx你可以找到相关的文档 在这里
main.cu
/ / main.cu
#包括< iostream >
#包括“foo”
使用名称空间性病;
intmain () {
输入[5]= {1,2,3,4,5};
输出[5];
foo(输入、输出);/ /调用生成函数“foo”
cout< < "输入:";
(int i = 0;我< 5;+ + i) {
cout" < < < <输入[我];
}
cout< < endl;
cout< < "输出:";
(int i = 0;我< 5;+ + i) {
cout" < < < <输出[我];
}
cout< < endl;
使用MATLAB生成CUDA代码并构建可执行编码器为NVIDIA杰森和NVIDIA驱动平台支持包(以前叫GPU编码器支持NVIDIA 万博1manbetxGPU)包
注意,这个步骤假设您已经有一个杰森董事会GPU编码器。如果没有,请按照说明 在这里 建立和测试。
% %创建硬件对象。这一步要求杰森董事会准备和设置
%语法hwObj =杰森(<主机名或ip地址>、<登录用户名>、<密码>)
%这是一次性的一步。MATLAB的缓存设置,下次,你可以简单地说“Jetson()”与先前缓存的值创建一个对象。
hwobj =杰森(“my-xavier-board”,ubuntu的,ubuntu的);
% %生成代码并构建它
cfg = coder.gpuConfig (exe”);
cfg。CustomSource = fullfile (“main.cu”);
%使用杰森硬件对象(它使用缓存的值从以前创建的杰森(. .)命令
cfg。硬件= coder.Hardware (英伟达杰森的);
%生成的构件和exe将复制后直接在杰森。根据需要设置它
cfg.Hardware。BuildDir =“~ / remoteBuildDir”;
输入= [1、2、3、4、5);
%生成和构建exe
codegen配置cfg参数输入}{foo
如果这一步成功,你会发现两个主机上生成的代码和可执行文件(你在哪里生成代码)和目标。目标,它将位于目录中指定 cfg.Hardware.BuildDir。
创建/定制码头工人(配置)文件
一旦我们有所有必要的工件,我们已经准备好创建码头工人的形象。这个过程的第一步是创建一个码头工人文件,码头工人builder的规范。
这是码头工人的例子文件名为dockerfile_foo:
dockerfile_foo
nvcr.io / nvidia l4t-base: r32.3.1
WORKDIR/工作
复制:~ / remoteBuildDir / MATLAB_ws / local-ssd2 /工作/码头工人/ /
CMD出口LD_LIBRARY_PATH = / usr /地方/ cuda - 10.2 / lib64:美元/ foo.elf LD_LIBRARY_PATH & &
第1行:抓住基地的形象。
第3行:例如情况下,所有生成的构件位于~ / remoteBuildDir / MATLAB_ws / local-ssd2 /工作/码头工人’,所以我们将它复制到工作目录中。你必须改变这个字符串根据您的设置。这应该是包含可执行文件的目录。
第4行:码头工人基地有多个CUDA版本和默认的版本是10.0。因为R2020b CUDA GPU编码器需求10.2,我们需要出口通过LD_LIBRARY_PATH CUDA 10.2库。我们也调用生成的exe。
如果你创建主机上的文件,我们需要复制这个董事会你建造码头工人。MATLAB编码器为NVIDIA杰万博1manbetx森和NVIDIA驱动平台支持包(以前叫GPU编码器支持NVIDIA GPU)包有putFile方法,远程复制到目标。您可以使用它来将码头工人文件复制到董事会使用命令:
hwobj.putFile (“dockerfile_foo”hwobj.workspaceDir)
如果你直接在目标系统上创建的文件,上面的复制步骤可以跳过。
构建码头工人形象和运行
1。登录到董事会使用命令:
ssh- x ubuntu@gpucoder-xavier-2
2。改变workspacedir:
cd~ / remoteBuildDir / MATLAB_ws / R2021b / local-ssd2 /工作/码头工人
3所示。构建码头工人形象(注意需要周期“。”下面的命令):
sudo码头工人建造- f dockerfile_foo - t foo_image。
4所示。运行该程序:
sudo码头工人——运行时nvidia foo_image运行
参考

更多的答案(0)

类别

找到更多的在部署帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!