NVIDIA英伟达嵌入式系统 · 2月1日 · 北京市

有奖征文第十弹 | 永不止步:永远在路上的探索之旅

NVIDIA 百万中国开发者故事有奖征文系列最终篇——终于与大家见面啦!

“如果说 NVIDIA GPU 是人的四肢,那么 CUDA 就是人的大脑,它是并行加速计算的灵魂和总加速师。”

最后一位与大家分享 NVIDIA 开发故事的是南洋理工大学的高级研究员 Samuel Chen,让我们一起来听听他从最初与 CUDA 擦肩而过,到对 CUDA 再次充满好奇,再到最终深感 CUDA 的神奇魅力、与 CUDA 一起成长的这段“跌宕起伏”的经历吧。

01
初识 CUDA

2008 年,我还只是个刚入学不久的研究生,人工智能、超级计算机对我来说,还只是陌生的名词。在一次学术报告中,我听到了一个新名词——CUDA,当时老师只是做了一个简单的介绍,我一时间还无法理解这个新名词背后的含义。

在随后几次学术交流中,我慢慢了解了 CUDA 是一种新的编程方式,与过去十几年学的 C 语言编程有很大的区别,运行方式也不一样,传统的 C 语言代码编译链接成二进制代码,在 CPU 中单线程运行,而 CUDA 代码建立在 C 语言基础之上,编译后在显卡中并行运行。由于传统编程概念已经根深蒂固,我一时还无法快速接受 CUDA 这种并行编程思想,并且由于当时硬件条件所限,很难有上机练习的机会,所以也就没有继续往下学习。就这样,CUDA 匆匆而来,又匆匆地与我擦肩而过。

02
初见 CUDA

自从 2007 年 CUDA 问世以来,显卡性能逐渐提高,被广泛用于各种复杂计算任务中。与此同时,CUDA 作为 NVIDIA 产品最基本的 SDK 工具,在问世以来的十年间发行了近 20 个主要版本,并且包含了 C 和 Python 语言 API 接口。同时,在 GPU 的加持下,计算器的算力实现质的飞跃,在带有 NVIDIA 显示的 PC 机上实现复杂神经网络的训练也变成了可能。这从另一方面推动了 40 年前发明的神经网络的发展。

2015 年,Lecun 等人提出了深度学习。其本质上是经典神经网络的延续,这使得大规模的神经网络训练任务可以借助 GPU 和 CUDA 完成。随后,贾扬庆提出了第一个神经网络训练、推理框架 Caffe,随后深度学习训练框架如雨后春笋般出现,并带有不同编程语言的 API 接口,适合不同领域的技术人员使用。其中最流行的神经网络训练框架是由 Facebook(Meta 的前身)创立的 PyTorch 平台,该平台包含了神经网络接口以及 CUDA 工具的接口,真正意义上实现了一键调用 CUDA,为神经网络训练任务提供了方便。

2016 年,我开始学习并研究神经网络,用 Caffe 在 1080Ti GPU 上训练了自己第一个卷积神经网络。随后,2017 年,我又在 PyTorch 训练了第二个神经网络 U-Net,成功用于医学图像分割。在训练过程中,我深刻体会到 GPU 和 CUDA 的计算效率,训练一个卷积神经网络只需要 10 个小时,这在 80 年代末、90 年代初,神经网络提出之时是不可想象的。

03
与 CUDA 一起成长

随着对神经网络的深入了解以及 CUDA 的使用频率增加,我逐渐认识到 CUDA 在大规模计算任务中发挥的举足轻重的作用。如果说NVIDIA GPU是人的四肢,那么 CUDA 就是人的大脑,它是并行加速计算的灵魂和总加速师。因此,我对 CUDA 充满了好奇,想一探究竟为何它如此神奇,同时也想弥补当年未能深入系统学习 CUDA 的遗憾。

抱着这个想法,我陆续从图书馆借阅了一些有关 CUDA 的书籍,通过自学的方式来学习 CUDA 编程。由于忙于论文,缺少系统性学习,最终没有坚持下去,又一次与 CUDA 擦肩而过。

2021 年, NVIDIA 举办了一场线上 CUDA 编程教学活动——CUDA 冬令营,这是一个千载难逢的学习 CUDA 编程的好机会,并且提供了Jetson Nano作为上机实验平台,不但能学习 CUDA 编程技术,还能体验边缘设备。对 CUDA 和边缘计算神往以久的我报名参加了此次活动,在为期七天的教学活动中,我不仅从宏观上对 CUDA 的工作原理和体系结构有了更深入的了解,而且也学会了 CUDA 编程的基本规则,并且编写了平生第一段 CUDA 代码,在 Jetson Nano 上成功运行。

接下来,我又参加了 NVIDIA 的一系列黑客松活动,其主要目的是把平时用到的卷积神经网络进行剪枝、量化等优化操作,然后用 TensorRT 进行加速,并且在 Jetson Nano 上运行。黑客松活动不像 CUDA 冬令营一样直接写 CUDA 代码,而是将 CUDA 应用于实际项目当中,例如,将 MobileSSD、Yolov5 等重型模型进行“瘦身”优化,以便在 Jetson Nano 这样的边缘设备上运行并实现实时目标检测。

像这样有益的活动,我不仅自己参加,而且也鼓励学弟们一起参加。随后,NVIDIA 又陆续举办了 CUDA 夏令营和黑客松活动。我带着学弟学妹们组成团队,一起学习、接受一次又一次的挑战,在多次活动中,我们陆续将 YOLO 系列的模型进行优化并在 Jetson Nano 上运行,实现了实时的各类物体检测。

CUDA 的学问深不见底,学习 CUDA 是一条漫长的路。同时,边缘设备性能越来越高,人工智能模型越来越多样化,尤其是近年来大语言视觉模型已经成功用于各个领域,它是机器人的大脑,控制机器人的动作,促使其与人沟通。如何将大语言视觉模型优化并运行在 Jetson 系列的边缘设备上,这将是下一个挑战性的课题。

最后,借用恩师的一句话来结束我的分享,年年岁岁花相似,岁岁年年“人”不同。We are doing, we are on the way.

感谢这位开发者带来的动人分享!其实不止 CUDA,人工智能开发的学问是深不可测的,这条开发之路也注定是漫长而充满挑战的。在这个过程中,仍有许多坚持不懈、不畏困难的开发者,他们与 NVIDIA 携手,持续探索,不断前行。开发之旅永无止境,探索的脚步永远在路上!

1M Developer 横板海报.jpg

1M Developer竖版海报.jpg

推荐阅读
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息