别人的代码是火箭,我的代码是乌龟……
秋招正卷时,AI算法人才热度与需求减少,AI工程人才热度与需求激增,这是当下AI的现状。随着开源之风刮起,当下各大企业逐渐意识到,与其花重金养一个博士算法团队,不如多招一些工程能力强的本科或者硕士生。
毕竟各家算法精度相差无几,并且绝大多数落地场景对精度的要求并不苛刻(87%与85%,没太大区别)。更为重要的是算法思想再好,能实际落地才行。而实际落地时,需要考虑的因素更多,比如运算效率、内存占用等。
近期学弟原本开开心心地做算法,突然领导交给了一个算法部署的任务...
学弟:小组长让部署一个视觉模型,争取适配不同平台要求,同时提高模型运行的速度,可愁死了,咋办啊,学长?
我:TensorFlow、PyTorch这些框架的模型,都可以转到ONNX模型格式,然后再做个模型量化,或者精度转化,这不是很轻松么?
学弟:学长,你可别说了。能试的我都试过了,小组长要求,不仅实现加速,而且性能最好也有所提高,这可咋整啊???
我绞尽脑汁,突然灵光一闪,说道:要不重写一下算法模型算子,这样肯定可以加速运行。
学弟顿时来劲了:学长,啥方法这么厉害!赶紧分享一下,两顿饭如何?
我笑了笑:简单啊,用CUDA重写一下模型算子,这样不就能实现模型加速。
没过几天,学弟又愁眉苦脸来找我。
“cuDNN倒是没问题,小组长说,光训练不行啊,还有嵌入式或者边缘计算设备,只能来推理,这样咋做模型加速呢?”
我也被问住了,咋办呀,还能咋办,问大佬呗。经过我软磨硬泡,终于又套来了一份大佬的资料,又甩给了学弟。
学弟开心的跳起来说:学长,这TensorRT又是啥神器啊?
我解释道:TensorRT是NVIDIA针对自家平台做的加速包,只负责模型的推理(inference)过程,一般不用TensorRT来训练模型的,而是用于部署时加速模型运行速度。主要功能包括:
• 算子融合(层与张量融合):简单来说就是通过融合一些计算op或者去掉一些多余op来减少数据流通次数以及显存的频繁使用来提速;
• 量化:量化即IN8量化或者FP16以及TF32等不同于常规FP32精度的使用,这些精度可以显著提升模型执行速度并且不会保持原先模型的精度;
• 内核自动调整:根据不同的显卡构架、SM数量、内核频率等(例如1080TI和2080TI),选择不同的优化策略以及计算方式,寻找最合适当前构架的计算方式;
• 动态张量显存:我们都知道,显存的开辟和释放是比较耗时的,通过调整一些策略可以减少模型中这些操作的次数,从而可以减少模型运行的时间;
• 多流执行:使用CUDA中的stream技术,最大化实现并行操作。
2.熟悉CUDA的基本概念以及主流的并行运算;
3.了解cuDNN与TensorRT两个深度学习模型加速的主流工具;
4.具备动手实践深度学习模型的加速的能力。
扫码备注【流】
咨询奕木 了解CUDA