Savant简介
Savant是一个开源的高性能计算机视觉框架,专为数据中心和边缘计算设计。它基于Nvidia的DeepStream技术,为开发者提供了一个高层抽象,可以快速构建实时、流式、高效的多媒体AI应用。
Savant的主要特点包括:
- 高性能:基于DeepStream,可充分发挥Nvidia硬件性能
- 易用性:提供高层API,无需深入底层编程
- 灵活性:支持异构管道,可集成不同模型和数据源
- 可扩展性:适用于边缘设备和数据中心服务器
- 容错性:动态处理源和目标的连接断开
适用场景
Savant适合以下场景:
- 需要在Nvidia硬件上实现最佳性能的计算机视觉应用
- 希望快速构建基于DeepStream的动态管道,但无需深入底层编程
- 开发易于维护和测试的应用,需要成熟的框架API支持
- 构建包含不同模型和数据源的异构管道
- 开发可同时在边缘设备和数据中心运行的应用
- 需要使用OpenTelemetry和Prometheus进行监控和追踪
- 实现按需和非线性处理
支持的硬件
Savant支持以下Nvidia硬件:
- Jetson Xavier NX/AGX (0.2.x版本)
- Jetson Orin Nano/NX/AGX (0.3.x及更新版本)
- Nvidia Turing、Ampere、Ada、Hopper、Blackwell GPU (0.2.x及更新版本)
主要特性
1. 完整的应用开发工具包
Savant提供了构建高级管道所需的全部工具,包括检测、分类、分割、跟踪以及自定义的前处理和后处理功能。
2. 高性能
Savant基于DeepStream构建,可以充分发挥Nvidia硬件性能。即使是复杂的分割模型也可以实时运行。
3. 边缘和数据中心通用
同一套代码可以在Nvidia边缘设备(Jetson系列)和数据中心设备(Tesla、Quadro等)上运行,只需很小的修改或无需修改。
4. 云原生支持
Savant管道运行在Docker容器中,提供x86+dGPU和Jetson硬件的镜像。集成了OpenTelemetry和Prometheus支持,便于监控和追踪。
5. 低延迟和高吞吐量处理
Savant可以配置为实时执行管道,在容量不足时跳过数据;也可以配置为高吞吐量模式,保证处理所有数据,最大化利用可用资源。
6. 即用型API
管道是一个自给自足的服务,通过高性能流式API与外界通信。开发者可以使用提供的适配器或客户端SDK。
7. 先进的数据协议
Savant使用统一的协议传输视频和元数据。该协议非常灵活,可以同时传输视频相关信息和用于IoT及第三方集成的任意结构。
8. OpenTelemetry支持
开发者可以使用OpenTelemetry精确检测管道性能。可以使用采样或完整跟踪来平衡性能和精度。跟踪可以跨越从边缘到核心再到业务逻辑的全过程。
9. Prometheus支持
Savant管道可以集成Prometheus监控,这是一个流行的监控解决方案,非常适合监控管道性能和资源利用情况。
10. 客户端SDK
Savant提供基于Python的SDK,用于与管道交互(摄取和接收数据)。这使得与第三方服务集成变得简单。客户端SDK集成了OpenTelemetry,提供对管道跟踪和日志的编程访问。
11. 开发服务器
Savant提供了开发服务器工具,支持动态重新加载已更改的代码,无需重启管道。这大大加快了开发和调试的速度。结合客户端SDK,它使基于DeepStream的应用开发变得非常简单。使用开发服务器,开发者可以直接从IDE远程在Jetson设备或服务器上进行开发。
12. 动态源管理
在Savant中,可以动态地向管道附加和分离源和目标,无需重新加载。框架能够弹性地处理源/目标中断的情况。
13. 便捷的源和目标适配器
Savant提供了多种即用型适配器,开发者可以直接使用或根据需求进行修改。这些适配器包括本地视频文件、视频URL、RTSP流、USB/CSI摄像头、工业相机、Kafka-Redis等。
14. 动态参数注入
高级ML管道可能需要来自外部环境的信息。Savant支持通过以下方式动态配置管道:
- 在每帧元数据中注入的帧属性
- 监视并即时应用Etcd属性
- 通过用户自定义函数接收的第三方属性
15. OpenCV CUDA支持
Savant支持自定义OpenCV CUDA绑定,可以在DeepStream的GPU内帧上执行广泛的OpenCV CUDA函数。这有助于实现高效的视频变换,包括但不限于模糊、裁剪、剪辑、在帧上应用横幅和图形元素等。该功能可以通过Python使用。
16. PyTorch支持
Savant支持PyTorch,这是最流行的ML框架之一。它使开发者能够使用PyTorchHub中的现成模型、大量代码示例和可靠的扩展。集成非常高效:它允许在GPU分配的图像上运行推理并在GPU RAM中处理结果,避免了CPU和GPU RAM之间的数据传输。
17. CuPy后处理支持
Savant支持CuPy,这是一个类似NumPy的GPU加速计算库。它使开发者能够用Python实现自定义后处理函数,在GPU RAM中执行,避免CPU和GPU RAM之间的数据传输。该功能允许直接从GPU RAM访问模型输出张量,有助于实现重量级的自定义后处理函数。
该集成还提供了CuPy、OpenCV和PyTorch GPU内格式之间的GPU内数据转换。
18. 旋转检测模型支持
Savant支持生成相对于视频帧旋转的边界框(定向边界框)的模型。例如,这在从高处观察下方区域的鸟瞰摄像机中很常见。
这些情况可能需要以最小重叠检测对象。为此,使用特殊模型生成与帧轴不正交的边界框。
19. 并行化
Savant支持处理并行化,有助于最大化利用可用资源。通过在单独的线程中运行管道阶段实现并行化。尽管与流控制相关的Python代码不是并行的,但开发者可以利用释放GIL的机制,通过NumPy、Numba或C++/Rust中的自定义本机代码实现所需的并行化。
结语
Savant为开发高性能计算机视觉应用提供了一个强大而灵活的框架。它结合了Nvidia DeepStream的性能优势和高级API的易用性,使开发者能够快速构建复杂的视频分析管道。无论是在边缘设备还是数据中心,Savant都能帮助开发者充分发挥硬件潜力,实现高效的实时处理。
对于那些需要构建可扩展、高性能计算机视觉应用的开发者来说,Savant无疑是一个值得考虑的强大工具。它不仅简化了开发过程,还提供了丰富的功能和灵活性,以满足各种复杂场景的需求。随着计算机视觉技术在各行各业的广泛应用,Savant这样的框架将在推动创新和提高效率方面发挥越来越重要的作用。