Savant: 适用于数据中心和边缘的高性能计算机视觉框架
:star: 在GitHub上给我们加星 — 这会极大地激励我们,并帮助项目在开发者中获得更多关注。
Savant是一个开源的高级框架,用于在Nvidia技术栈上构建实时、流式、高效的多媒体AI应用。它有助于开发动态、容错的推理管道,充分利用Nvidia数据中心和边缘加速器的最佳方法。
Savant构建于DeepStream之上,为构建推理管道提供了高级抽象层。它设计得易于使用、灵活且可扩展。无论是实时还是高负载的计算机视觉和视频分析应用,它都是一个绝佳选择。
使用哪个版本
Savant依赖于Nvidia DeepStream和JetPack版本(Jetson)。以下表格展示了Savant版本与DeepStream版本的兼容性。
0.2.11 LTS
推荐在生产环境中使用此版本。它使用经过时间验证的DeepStream 6.3。该版本可在dGPU(Turing、Volta、Ampere、Ada)和Jetson(Xavier NX/AGX、Orin Nano/NX/AGX)硬件上运行。
已知缺点:
- 在Jetson Orin Nano上,NVJPEG在JPEG解码时限制在115MHz。
要求 | 状态 | DeepStream |
---|---|---|
X86驱动525(数据中心),530+Quadro/GeForce | 稳定 | 6.3 |
搭载JetPack 5.1.2 GA的Jetson Xavier、Orin | 稳定 | 6.3 |
0.3.11 LTS
推荐在使用DeepStream 6.4的生产环境中使用此版本。该版本可在dGPU(Turing、Volta、Ampere、Ada)和Jetson Orin Nano/NX/AGX硬件(JetPack 6.0 DP)上运行。不支持Jetson Xavier和更老的设备。
要求 | 状态 | DeepStream |
---|---|---|
X86驱动525(数据中心),530+Quadro/GeForce | 稳定 | 6.4 |
搭载JetPack 6.0 DP的Jetson Orin | 稳定 | 6.4 |
0.4.x 当前开发版(功能发布)
此分支包含新功能。对于需要0.2.x和0.3.x中缺失功能的用户来说是个不错的选择。
要求 | 状态 | DeepStream |
---|---|---|
X86驱动525(数据中心),530+Quadro/GeForce | 稳定 | 6.4 |
搭载JetPack 6.0 DP的Jetson Orin | 稳定 | 6.4 |
与我们交流
联系我们的最佳方式是Discord。我们随时乐意解答您的任何问题。
快速链接
入门
首先,查看运行时配置指南以配置工作环境。
这个演示展示了一个包含人员检测、面部检测、跟踪、面部模糊处理(OpenCV CUDA)和实时分析仪表板的管道:
git clone https://github.com/insight-platform/Savant.git
cd Savant/samples/peoplenet_detector
git lfs pull
# 如果是x86
../../utils/check-environment-compatible && docker compose -f docker-compose.x86.yml up
# 如果是Jetson
../../utils/check-environment-compatible && docker compose -f docker-compose.l4t.yml up
# 在播放器中打开'rtsp://127.0.0.1:554/stream/city-traffic'
# 或访问'http://127.0.0.1:888/stream/city-traffic/' (LL-HLS)
# 按Ctrl+C停止运行compose套件
# 返回项目根目录
cd ../..
谁会对Savant感兴趣
如果您的任务是实现高性能、可用于生产的计算机视觉和视频分析应用,那么Savant就是为您准备的。
使用Savant,开发者可以:
- 在边缘和核心的Nvidia设备上获得最大性能;
- 使用DeepStream技术构建动态管道时,无需低级编程即可缩短上市时间;
- 利用完善的框架API轻松开发可维护和可测试的应用;
- 构建具有不同模型和数据源的异构管道;
- 使用相同的代码库构建混合边缘/数据中心应用;
- 使用OpenTelemetry和Prometheus监控和追踪管道;
- 通过利用Replay实现按需和非线性处理。
在Nvidia硬件上运行
处理视频和计算机视觉的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及更新版本)。
为什么我们开发Savant
我们开发Savant是为了给计算机视觉和视频分析工程师提供一个现成的堆栈,用于构建在边缘和数据中心工作的真实计算机视觉应用。与其他计算机视觉框架如PyTorch、TensorFlow、OpenVINO/DlStreamer和DeepStream不同,Savant不仅提供推理和图像处理工具,还提供用于构建通过网络通信的分布式边缘/数据中心计算机视觉应用的高级架构。因此,Savant用户可以专注于计算机视觉,而无需在开发应用时重新发明轮子。
Savant是一个非常高级的框架,对开发者隐藏了底层细节:计算机视觉管道由声明性(YAML)块和Python函数组成。
特性
Savant packed了许多功能,可极大加快高性能计算机视觉应用的开发。
🔧 构建真实应用所需的一切
Savant支持开发高级管道所需的一切:检测、分类、分割、跟踪以及元数据和图像的自定义预处理和后处理。
我们实现了展示可用Savant构建的管道的样例。访问samples文件夹了解更多。
🚀 高性能
Savant设计得快速:它基于DeepStream - 最快的视频分析SDK。即使是重量级分割模型也能在Savant上实时运行。查看性能回归跟踪仪表板获取最新性能结果。
🌐 适用于边缘和数据中心设备
该框架支持在Nvidia的边缘设备(Jetson系列)和数据中心设备(Tesla、Quadro等)上运行管道,只需很少或无需更改。
❤️ 云就绪
Savant管道在Docker容器中运行。我们提供x86+dGPU和Jetson硬件的镜像。集成的OpenTelemetry和Prometheus支持实现对管道的监控和追踪。
⚡ 低延迟和高容量处理
Savant可配置为实时执行管道,在容量不足时跳过数据,或在高容量模式下保证处理所有数据,最大化利用可用资源。
🤝 即用型API
管道是通过高性能流媒体API与外界通信的自给自足的服务。无论开发者使用提供的适配器还是客户端SDK,两种方法都使用该API。
📁 高级数据协议
该框架普遍使用通用协议来传递视频和元数据。该协议高度灵活,允许视频相关信息与IoT和第三方集成有用的任意结构并存。
⏱ OpenTelemetry支持
在Savant中,您可以使用OpenTelemetry精确地检测管道:一个统一的监控解决方案。您可以使用采样或完整跟踪来平衡性能和精度。由于Savant协议支持跟踪传播,跟踪可以从边缘跨越到核心再到业务逻辑,穿过网络和存储。
📊 Prometheus支持
Savant管道可以用Prometheus进行检测:一个流行的监控解决方案。Prometheus是监控管道性能和资源利用率的绝佳选择。
🧰 客户端SDK
我们提供基于Python的SDK来与Savant管道交互(摄取和接收数据)。它实现了与第三方服务的简单集成。客户端SDK与OpenTelemetry集成,提供对管道跟踪和日志的程序化访问。
🧘 开发服务器
原始DeepStream的软件开发是一种痛苦。Savant提供了开发服务器工具,支持在不重启管道的情况下动态重新加载更改的代码。它有助于更快地开发和调试管道。与客户端SDK一起,它使得开发基于DeepStream的应用变得非常简单。使用开发服务器,您可以直接从IDE远程开发Jetson设备或服务器上的应用。
🔀 动态源管理
在Savant中,您可以在不重新加载的情况下动态地将源和接收器附加到管道或从管道分离。该框架可以弹性地处理与源/接收器中断相关的情况。
🏹 便捷的源和接收器适配器
通信接口不限于客户端SDK:我们提供了几个即用型适配器,您可以直接使用或根据需要进行修改。
以下源适配器可用:
- 本地视频文件;
- 本地视频文件目录;
- 视频URL;
- 本地图像文件;
- 本地图像文件目录;
- 图像URL;
- RTSP流;
- USB/CSI摄像头;
- GigE(Genicam)工业摄像头;
- Kafka-Redis;
- 视频循环URL;
- 多流源;
- Amazon Kinesis视频流源;
- 消息转储播放器。
实现了几个接收器适配器:
- 推理结果放入JSON文件流;
- 结果视频叠加显示在屏幕上(每个源);
- MP4文件(每个源);
- 图像目录(每个源);
- 始终在线RTSP流接收器;
- Kafka-Redis;
- Amazon Kinesis视频流接收器。
🎯 动态参数摄取
高级ML管道可能需要外部环境信息才能工作。该框架支持通过以下方式动态配置管道:
- 在每帧元数据中传递摄取的帧属性;
- 监视并即时应用Etcd的属性;
- 通过用户定义的函数接收的第三方属性。
🖼 OpenCV CUDA支持
Savant支持自定义OpenCV CUDA绑定,能够在DeepStream的GPU内帧上使用широ범围的OpenCV CUDA函数:该功能有助于实现高效的视频转换,包括但不限于模糊、裁剪、剪辑、在帧上应用横幅和图形元素等。该功能可从Python使用。
🔦 PyTorch支持
Savant支持PyTorch,这是最流行的ML框架之一。它使开发人员能够使用来自PyTorchHub的即用型PyTorch模型、大量代码示例和可靠的扩展。集成非常高效:它允许在GPU分配的图像上运行推理并在GPU RAM中处理结果,避免了CPU和GPU RAM之间的数据传输。
🔢 CuPy后处理支持
Savant支持CuPy:一个用于GPU加速计算的类似NumPy的库。它使开发人员能够在Python中实现自定义后处理函数,在GPU RAM中执行,避免CPU和GPU RAM之间的数据传输。该功能允许直接从GPU RAM访问模型输出张量,这有助于实现重量级自定义后处理函数。
该集成还提供了CuPy、OpenCV和PyTorch GPU内格式之间的GPU内数据转换。
↻ 旋转检测模型支持
我们经常处理生成相对于视频帧旋转的边界框(定向边界框)的模型。例如,这通常发生在从高处观察下方区域的鸟瞰摄像机中。
这种情况可能需要以最小重叠检测对象。为了实现这一点,使用特殊模型生成不正交于帧轴的边界框。查看RAPiD了解更多信息。
⇶ 并行化
Savant支持处理并行化;它有助于最大限度地利用可用资源。通过在单独的线程中运行管道阶段来实现并行化。尽管与流控制相关的Python代码不是并行的;但开发人员可以利用GIL释放机制来实现所需的并行化,例如使用NumPy、Numba或C++或Rust中的自定义本机代码。
下一步
- 入门教程
- 出版物和示例
- 文档
贡献
我们欢迎任何希望贡献、报告和学习的人。
关于我们
In-Sight团队是Bitworks Software的ML/AI部门。我们为各行各业开发定制的高性能CV应用程序,提供全周期流程,包括但不限于数据标注、模型评估、训练、剪枝、量化、验证和验证、管道开发、CI/CD。我们主要专注于Nvidia硬件(数据中心和边缘设备)。
联系我们:info@bw-sw.com