1
该操作将允许你查看该会员所有的帖子,注意你只能看到你有权限看到的板块的帖子。
2
深度学习讨论 / Re: orin 的unified memory啥情况下要attach global和host吗
« 于: 十二月 03, 2022, 09:16:49 am »
答:任何Unified Memory V1.0的平台都需要的。主要包括Jetson系列,和Windows上。Linux上,Pascal+的卡不需要(V2.0平台)。Attach Host/Global/Stream的目的是明确一段Unified Memory的归属(CPU,GPU,或者GPU的部分流),因为在这些平台上,CPU和GPU,不能同时访问Unified Memory,必须手工指定一段时间的归属,然后对应的设备才能访问。否则会直接挂掉,而V2.0的平台可以直接访问,不需要attach过来,attach过去的过程。不过所有的Jetson平台,哪怕是计算能力6.0以后的,也依然属于1.0平台(实现的问题)。在他们上用Unified Memory,必须attach,或者等GPU/CPU的一者完全停下来以后(例如在某处设备同步后,CPU访问)另外一者才能访问,并不是因为有TRT的存在才需要。
嗯嗯。2.0的平台还有很多其他方面,不仅仅是同时访问不需要手工设定的问题,例如可以超量分配等等,方便了很多很多。Jetson用户如果想省事,就直接等GPU完全停下再CPU上即可。例如不要在多个线程中使用多流,或者哪怕使用了,全部流同步后再用。这样不需要attach反复折腾(但是可能运行效率稍微低点)。而Jetson平台上的最佳方案可能则是attach stream + 多流, 这种有最佳效率,但是要付出多谢几次attach调用的过程,各有利弊吧。
嗯嗯。2.0的平台还有很多其他方面,不仅仅是同时访问不需要手工设定的问题,例如可以超量分配等等,方便了很多很多。Jetson用户如果想省事,就直接等GPU完全停下再CPU上即可。例如不要在多个线程中使用多流,或者哪怕使用了,全部流同步后再用。这样不需要attach反复折腾(但是可能运行效率稍微低点)。而Jetson平台上的最佳方案可能则是attach stream + 多流, 这种有最佳效率,但是要付出多谢几次attach调用的过程,各有利弊吧。
3
深度学习讨论 / orin 的unified memory啥情况下要attach global和host吗
« 于: 十二月 03, 2022, 09:14:28 am »
问题:有了解orin 的unified memory啥情况下要attach global和host吗。发现和trt放一个线程后就需要做这个,否则不需要
4
CUDA / 想问一下cudaMemcpyDeviceToDevice,从设备端复制数据到设备端是可以的哈?
« 于: 十一月 10, 2022, 10:40:02 am »
答复:可以的。适合你从显存->显存的复制。
不过这一般用不到,因为你往往不需要直接这样做,在下一个kernel之类的地方,读取/处理后,顺便写入到另外一个地方即可。因为你要考虑啥时候需要D->D的复制,往往是为了保存原缓冲区,防止被破坏,这样新kernel可以直接在另外一个副本上操作了,但是这实际上往往直接修改kernel,写入另外一个地方即可。从而节省了这个流程。
这个和我们CUDA夏令营时候的"矩阵转置", 虽然课堂上讲了,但是实际上从来几乎不用用到一个道理,因为后者最常见的出现往往是被集成到另外一个kernel的内部。而不需要单独的这个过程。此外,D->D的传输,之前的卡(我不确定20/30系列+的情况),会自动生成一个隐形的kernel,通过该隐形的kernel,进行显存里头的复制。(而不是通过硬件的Copy Engine (DMA Engine)),所以这样的话,你自己衡量代价。因为这只是一个纯复制的kernel,而你往往可以写成读取+处理+写入的,后者更加高效。
如同可以再给前任打电话的,但是一般情况下无意义。
不过这一般用不到,因为你往往不需要直接这样做,在下一个kernel之类的地方,读取/处理后,顺便写入到另外一个地方即可。因为你要考虑啥时候需要D->D的复制,往往是为了保存原缓冲区,防止被破坏,这样新kernel可以直接在另外一个副本上操作了,但是这实际上往往直接修改kernel,写入另外一个地方即可。从而节省了这个流程。
这个和我们CUDA夏令营时候的"矩阵转置", 虽然课堂上讲了,但是实际上从来几乎不用用到一个道理,因为后者最常见的出现往往是被集成到另外一个kernel的内部。而不需要单独的这个过程。此外,D->D的传输,之前的卡(我不确定20/30系列+的情况),会自动生成一个隐形的kernel,通过该隐形的kernel,进行显存里头的复制。(而不是通过硬件的Copy Engine (DMA Engine)),所以这样的话,你自己衡量代价。因为这只是一个纯复制的kernel,而你往往可以写成读取+处理+写入的,后者更加高效。
如同可以再给前任打电话的,但是一般情况下无意义。
5
NV边缘计算 / Re: Jetson AGX Xavier平台的部署工具链有么有提供效率评估工具?
« 于: 十月 25, 2021, 03:28:45 pm »
答复:(1)效率的理论评估没有。但是TRT有个使用随机数据进行评估的“模拟时间”,可以用这个来看看;
也可以直接TRT部署后,实际的运行一下,看看到底速度如何。而不仅仅是根据理论的,网络的结构,参数量/运算量这些来“理论”推算。直接看实际的比较方便。(也就是前提是你得买一块AGX。。。。)
(2)关于指定多个网络,每个网络分配分别哪个“处理器核心”。这个没有听说过。因为考虑到实际上GPU你没法指定“核心”的。这个似乎真心做不到。同时CPU倒是可以指定执行核心,但是Xavier的CPU是没有TensorCore之类的加速的,有TensorCore的GPU又不能按照核心指定,所以似乎并不存在一种按照核心手工指定的调度方式。
也可以直接TRT部署后,实际的运行一下,看看到底速度如何。而不仅仅是根据理论的,网络的结构,参数量/运算量这些来“理论”推算。直接看实际的比较方便。(也就是前提是你得买一块AGX。。。。)
(2)关于指定多个网络,每个网络分配分别哪个“处理器核心”。这个没有听说过。因为考虑到实际上GPU你没法指定“核心”的。这个似乎真心做不到。同时CPU倒是可以指定执行核心,但是Xavier的CPU是没有TensorCore之类的加速的,有TensorCore的GPU又不能按照核心指定,所以似乎并不存在一种按照核心手工指定的调度方式。
6
NV边缘计算 / Jetson AGX Xavier平台的部署工具链有么有提供效率评估工具?
« 于: 十月 25, 2021, 03:27:16 pm »
问:我想向您请教几个关于Jetson AGX Xavier平台的问题,非常感谢! 1、Jetson AGX Xavier平台的部署工具链有么有提供效率评估工具?例如,我有一套算法网络,可以知道网络的结构、运算量、参数量,要求能在硬件平台上100ms内推理完成。我怎么衡量Jetson AGX Xavier平台的算力能否满足需求?Jetson AGX Xavier平台有提供相应的工具吗? 2、Jetson AGX Xavier平台的软件栈或者TensorRT有没有运行时调度工具? TensorRT可以调用API指定网络在哪个处理核上跑,那是否可以运行时自动调度呢(针对多个网络场景)?
7
CUDA / Re: CUDA涉及的相关调度问题
« 于: 九月 23, 2021, 04:34:57 pm »问题1:看MPS的手册和NV官方的CUDA手册,
问题2:看MPS手册和NV的官方手册(特别是driver api手册) 。
问题3:看NV官方手册。
问题4:看历代GTC和其他的分析文章。
问题5:看NV的CUDA手册,和profiler手册。
问题6:看NV的CUDA手册和PTX手册,
问题7: 看历代具体卡上的profiler的各种指标,和相应文档,
建议你买本CUDA编程的书籍:https://item.jd.com/13024122.html?cu=true&utm_source=c.duomai.com&utm_medium=tuiguang&utm_campaign=t_16282_176304306&utm_term=3c7011d14b494bb8963c7f72b643336c
这本是目前我们推荐CUDA学习用书,作者是比较靠谱的
8
NV边缘计算 / Re: 你们测评过jetson系列“硬件编码推流-公网传输-解码”这个loop的时延么?
« 于: 九月 22, 2021, 06:43:30 pm »
答复: 这等于说,要测试: (1)视频源编码延迟 + (2)移动/联动/电信等家的公网的传输延迟 + (3)接收端的解码延迟;
其中(2)和各地的网络情况有关,可能是这里面最大的一个延迟。而只有(1)和(3)是和我们的Jetson系列产品有关的。其中(1)进一步的分为视频源自身的延迟(USB摄像头/CSI摄像头/IP摄像头(RTSP的)),和硬件的nvenc的编码引入的延迟。而(3)基本只涉及NVDEC的硬件解码器自身的延迟。所以想回答这个问题,需要逐个测试这些。然后相加(在某种典型的硬件配置和运营商网络的案例下)才能得到。
根据其他客户之前的测试,RTSP的摄像头,也就是我们常说的IP摄像头,延迟非常严重,肉眼可见,挥动手就能看出来,估计几百ms。其他的两款摄像头应该都非常低,最低的应该是CSI的,但具体数值没有。所以问题就剩下了运营商网络的传输延迟,和NVENC/NVDEC的编码/解码延迟。
注意:RTSP的延迟高基本上是国产摄像头的问题。以及,考虑到RTSP内部已经编码过一次了(264或者265),如果不是为了减少传输量的话,也可以不经过NVENC的第一步,直接开始第2步的传输。所以如果是这种情况,可以考虑再减掉这个编码的时间,从第一步里。
(但是国产的摄像头很多用的海思芯片,编码真心渣渣,也许转码一次降低的传输量对应的时间,反而更加合算,但是具体如何,得测试,现在只是猜测)
其中(2)和各地的网络情况有关,可能是这里面最大的一个延迟。而只有(1)和(3)是和我们的Jetson系列产品有关的。其中(1)进一步的分为视频源自身的延迟(USB摄像头/CSI摄像头/IP摄像头(RTSP的)),和硬件的nvenc的编码引入的延迟。而(3)基本只涉及NVDEC的硬件解码器自身的延迟。所以想回答这个问题,需要逐个测试这些。然后相加(在某种典型的硬件配置和运营商网络的案例下)才能得到。
根据其他客户之前的测试,RTSP的摄像头,也就是我们常说的IP摄像头,延迟非常严重,肉眼可见,挥动手就能看出来,估计几百ms。其他的两款摄像头应该都非常低,最低的应该是CSI的,但具体数值没有。所以问题就剩下了运营商网络的传输延迟,和NVENC/NVDEC的编码/解码延迟。
注意:RTSP的延迟高基本上是国产摄像头的问题。以及,考虑到RTSP内部已经编码过一次了(264或者265),如果不是为了减少传输量的话,也可以不经过NVENC的第一步,直接开始第2步的传输。所以如果是这种情况,可以考虑再减掉这个编码的时间,从第一步里。
(但是国产的摄像头很多用的海思芯片,编码真心渣渣,也许转码一次降低的传输量对应的时间,反而更加合算,但是具体如何,得测试,现在只是猜测)
9
NV边缘计算 / 你们测评过jetson系列“硬件编码推流-公网传输-解码”这个loop的时延么?
« 于: 九月 22, 2021, 06:40:24 pm »
你们测评过jetson系列“硬件编码推流-公网传输-解码”这个loop的时延么?
10
NV边缘计算 / Re: 关于 agx Xavier 的SSD和SD卡
« 于: 九月 02, 2021, 11:13:58 am »
Xavier开发套件是需要用SDK Manager刷机,系统是刷到他32G eMMC上的
SSD和SD卡主要是用来存储数据。
SSD和SD卡主要是用来存储数据。
11
NV边缘计算 / Re: Nvidia AGX xavier 3D 点云显示问题
« 于: 六月 07, 2021, 03:39:08 pm »没有人知道怎么弄嘛?
看一下这个视频介绍:https://info.nvidia.com/544781-reg.html
(需要注册才能看)
12
CUDA / 算力与功耗在GPU应用上的关系是?
« 于: 四月 16, 2021, 04:07:19 pm »
答复:一般来说, 随着制程的进步, 和GPU架构的发展. 往往单位算力下, 所需要的功率, 在随着年份的增加而下降,例如从40nm到7nm的制程, 代表了前者; 而从GPU的SP自身运算FP16, 到引入TensorCore进行计算, 则代表了后者,无论是前者还是后者, 都代表了随着时间和GPU代数的增加, 单位功耗下的算力性能的增加, 即能效在增加,此外, 软件方面的进步, 例如CUDNN的版本增加, 则在除了前面说过的两个硬件的方面, 提供了另外的在单位功耗下, 提升算力的渠道。
13
CUDA / 问个CUDA并行上的小白问题,既然SM只能同时处理一个WARP,那是不是有的SP处于闲置?
« 于: 二月 22, 2021, 02:52:13 pm »
问:问个CUDA并行上的小白问题,既然SM只能同时处理一个WARP,那是不是有的SP处于闲置?GPU的SM每次只能运行一个warp(32个线程),比如1080Ti有28个SM,每个SM里有128个SP,但是resident thread只有28*32 = 896个,那么1080Ti总共128*28=3584个SP(CUDA核心)不就没有同时并行起来。那SM中这么多SP的意义是提供WARP的切换吗?
14
CUDA / Re: CUDA编程中从主机传递一个数组给设备
« 于: 二月 18, 2021, 04:58:01 pm »
答复:报非法内存访问是在Host上, 还是在Device上?前者如果是CPU端的缓冲区不够, 也会报Access Violation的(0xc0000005)
如果是在device上,那是后续的kernel挂了。他在cudaMemcpy*()前后分别加上cudaError_t r = cudaDeviceSynchronize(); 然后看看,这样可以确定一点。(不看也行, cudaMemcpy*()给错设备指针/大小方面的参数会直接报告参数有问题之类的, 不会中途挂在device上), cuda-memcheck 他的程序 回车, 这种方式检测一下。
需要强调的是:你执行cudaMemcpy*(), 和你的"GPU设备线程块数量", 这有毛关系? 你确定报错是在传输该数组的时候吗?
如果是在device上,那是后续的kernel挂了。他在cudaMemcpy*()前后分别加上cudaError_t r = cudaDeviceSynchronize(); 然后看看,这样可以确定一点。(不看也行, cudaMemcpy*()给错设备指针/大小方面的参数会直接报告参数有问题之类的, 不会中途挂在device上), cuda-memcheck 他的程序 回车, 这种方式检测一下。
需要强调的是:你执行cudaMemcpy*(), 和你的"GPU设备线程块数量", 这有毛关系? 你确定报错是在传输该数组的时候吗?
15
CUDA / CUDA编程中从主机传递一个数组给设备
« 于: 二月 18, 2021, 04:55:16 pm »
CUDA编程中从主机传递一个数组给设备,当数组长度较小时结果正确,当数组长度较大时报非法内存访问。已经排除了GPU设备线程块不够和开辟数组的问题,还能是什么问题?