NVIDIA Morpheus (24.10.01)

DOCA GPU 实时流量分析

此目录中的示例使用 DOCA Source Stage 实时接收和预处理网络数据包,然后将数据包信息传递到下一个 Morpheus 阶段。

DOCA 支持尚处于早期访问阶段,可能只能通过 NGC 中的 Morpheus DOCA 容器使用。请联系您的 NVIDIA Morpheus 联系人以获取更多信息。

容器必须在特权模式下运行,并根据 DOCA GPUNetIO 文档的配置挂载 /dev/hugepages

复制
已复制!
            

docker run -v /dev/hugepages:/dev/hugepages --privileged --rm -ti --runtime=nvidia --net=host --gpus=all --cap-add=sys_nice ${MORPHEUS_DOCA_IMAGE} bash

在运行示例之前,需要从 Conda 环境中强制删除rdma-core Conda 包,否则环境将与 DOCA 提供的软件包不兼容。

复制
已复制!
            

conda remove --force rdma-core

有关如何配置机器的更多信息,请参阅 DOCA GPUNetIO 编程指南

DOCA 示例需要显式指定 GPU 和 NIC 的 PCIe 地址。确定正确的 GPU 和 NIC PCIe 地址并非易事,需要与那些根据 DOCA GPUNetIO 文档配置物理硬件和固件的人员协调,但以下命令可以帮助在同一 NUMA 节点上找到 NIC 和 GPU 的情况。

复制
已复制!
            

$ lspci -tv | grep -E "NVIDIA|ella|(^\+)|(^\-)" -+-[0000:ff]-+-00.0 Intel Corporation Device 344c | \-02.0-[ca-cf]----00.0-[cb-cf]--+-00.0-[cc]--+-00.0 Mellanox Technologies MT42822 BlueField-2 integrated ConnectX-6 Dx network controller | | +-00.1 Mellanox Technologies MT42822 BlueField-2 integrated ConnectX-6 Dx network controller | | \-00.2 Mellanox Technologies MT42822 BlueField-2 SoC Management Interface | \-01.0-[cd-cf]----00.0-[ce-cf]----08.0-[cf]----00.0 NVIDIA Corporation Device 20b9 | \-02.0-[b1]--+-00.0 Mellanox Technologies MT42822 BlueField-2 integrated ConnectX-6 Dx network controller | +-00.1 Mellanox Technologies MT42822 BlueField-2 integrated ConnectX-6 Dx network controller | \-00.2 Mellanox Technologies MT42822 BlueField-2 SoC Management Interface

从结果中,我们可以组装最近的 GPU 和 NIC 的 PCIe 地址。但是,将它们与这些命令中的显式 PCIe 地址进行交叉引用会更容易

复制
已复制!
            

$ lspci | grep ella b1:00.0 Ethernet controller: Mellanox Technologies MT42822 BlueField-2 integrated ConnectX-6 Dx network controller (rev 01) b1:00.1 Ethernet controller: Mellanox Technologies MT42822 BlueField-2 integrated ConnectX-6 Dx network controller (rev 01) b1:00.2 DMA controller: Mellanox Technologies MT42822 BlueField-2 SoC Management Interface (rev 01) ca:00.0 PCI bridge: Mellanox Technologies MT42822 Family [BlueField-2 SoC PCIe Bridge] (rev 01) cb:00.0 PCI bridge: Mellanox Technologies MT42822 Family [BlueField-2 SoC PCIe Bridge] (rev 01) cb:01.0 PCI bridge: Mellanox Technologies MT42822 Family [BlueField-2 SoC PCIe Bridge] (rev 01) cc:00.0 Ethernet controller: Mellanox Technologies MT42822 BlueField-2 integrated ConnectX-6 Dx network controller (rev 01) cc:00.1 Ethernet controller: Mellanox Technologies MT42822 BlueField-2 integrated ConnectX-6 Dx network controller (rev 01) cc:00.2 DMA controller: Mellanox Technologies MT42822 BlueField-2 SoC Management Interface (rev 01) cd:00.0 PCI bridge: Mellanox Technologies MT42822 Family [BlueField-2 SoC PCIe Bridge] (rev 01) ce:08.0 PCI bridge: Mellanox Technologies MT42822 Family [BlueField-2 SoC PCIe Bridge] (rev 01)

复制
已复制!
            

$ lspci | grep NVIDIA cf:00.0 3D controller: NVIDIA Corporation Device 20b9 (rev a1)

我们可以看到 GPU 的 PCIe 地址是 cf:00.0,并且我们可以从上面的命令推断出最近的 ConnectX-6 NIC 的 PCIe 地址是 cc:00.*。在本例中,我们有端口 1 物理连接到网络,因此我们使用 PCIe 地址 cc:00.1

对于 UDP 流量,示例将启动一个简单的 pipeline,其中包含 DOCA Source Stage,后跟 Monitor Stage,以报告接收到的数据包数量。

复制
已复制!
            

python ./examples/doca/run_udp_raw.py --nic_addr 17:00.1 --gpu_addr ca:00.0

UDP 流量可以使用 nping 轻松发送到 Morpheus 正在监听的接口

复制
已复制!
            

nping --udp -c 100000 -p 4100 192.168.2.27 --data-length 1024 --delay 0.1ms

Morpheus 输出将是

复制
已复制!
            

====Pipeline Pre-build==== ====Pre-Building Segment: linear_segment_0==== ====Pre-Building Segment Complete!==== ====Pipeline Pre-build Complete!==== ====Registering Pipeline==== ====Building Pipeline==== EAL: Detected CPU lcores: 64 EAL: Detected NUMA nodes: 2 EAL: Detected shared linkage of DPDK EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: Selected IOVA mode 'PA' EAL: VFIO support initialized TELEMETRY: No legacy callbacks, legacy socket not created EAL: Probe PCI driver: mlx5_pci (15b3:a2dc) device: 0000:ca:00.0 (socket 1) EAL: Probe PCI driver: gpu_cuda (10de:2331) device: 0000:17:00.0 (socket 0) ====Building Pipeline Complete!==== DOCA GPUNetIO rate: 0 pkts [00:00, ? pkts/s]====Registering Pipeline Complete!==== ====Starting Pipeline==== ====Pipeline Started==== ====Building Segment: linear_segment_0==== Added source: <from-doca-0; DocaSourceStage(nic_pci_address=ca:00.0, gpu_pci_address=17:00.0, traffic_type=udp)> └─> morpheus.MessageMeta Added stage: <monitor-1; MonitorStage(description=DOCA GPUNetIO rate, smoothing=0.05, unit=pkts, delayed_start=False, determine_count_fn=None, log_level=LogLevels.INFO)> └─ morpheus.MessageMeta -> morpheus.MessageMeta ====Building Segment Complete!==== DOCA GPUNetIO rate: 100000 pkts [00:12, 10963.39 pkts/s]

由于 DOCA Source stage 以新的 RawMessage 格式输出数据包,并非所有 Morpheus 阶段都可能支持该格式,因此有一个名为 DOCA Convert Stage 的附加阶段,用于将 RawMessage 格式的数据转换为 MessageMeta 格式。

复制
已复制!
            

python ./examples/doca/run_udp_convert.py --nic_addr 17:00.1 --gpu_addr ca:00.0

DOCA 示例与敏感信息检测 (SID) 示例类似,因为它使用 sid-minibert 模型结合 TritonInferenceStage 来检测敏感信息。不同之处在于,我们将要检测的敏感信息是从 DocaSourceStage 提供的实时 TCP 数据包流中获得的。要从 Morpheus 根目录运行示例并捕获来自给定 NIC 的所有 TCP 网络流量,请使用以下命令,并将 nic_addrgpu_addr 参数替换为您的 NIC 和 GPU PCIe 地址。

复制
已复制!
            

# python examples/doca/run_tcp.py --nic_addr cc:00.1 --gpu_addr cf:00.0

复制
已复制!
            

====Registering Pipeline==== ====Building Pipeline==== DOCA GPUNetIO rate: 0 pkts [00:00, ? pkt====Building Pipeline Complete!==== Deserialize rate: 0 pkts [00:00, ? pktsStarting! Time: 1689110835.1106102 EAL: Detected CPU lcores: 72, ? pkts/s] EAL: Detected NUMA nodes: 200, ? pkts/s] EAL: Detected shared linkage of DPDKs/s] EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: Selected IOVA mode 'PA' EAL: VFIO support initialized TELEMETRY: No legacy callbacks, legacy socket not created EAL: Probe PCI driver: mlx5_pci (15b3:a2d6) device: 0000:cc:00.1 (socket 1) EAL: Probe PCI driver: gpu_cuda (10de:20b9) device: 0000:cf:00.0 (socket 1) DOCA GPUNetIO rate: 0 pkts [00:03, ? pkts/s]====Registering Pipeline Complete!==== ====Starting Pipeline====[00:02, ? pkts/s] ====Pipeline Started====0:02, ? pkts/s] ====Building Segment: linear_segment_0==== Added source: <from-doca-0; DocaSourceStage(nic_pci_address=cc:00.1, gpu_pci_address=cf:00.0, traffic_type=tcp)> └─> morpheus.MessageMeta Added stage: <monitor-1; MonitorStage(description=DOCA GPUNetIO rate, smoothing=0.05, unit=pkts, delayed_start=False, determine_count_fn=None, log_level=LogLevels.INFO)> └─ morpheus.MessageMeta -> morpheus.MessageMeta Added stage: <deserialize-2; DeserializeStage(ensure_sliceable_index=True)> └─ morpheus.MessageMeta -> morpheus.ControlMessage Added stage: <monitor-3; MonitorStage(description=Deserialize rate, smoothing=0.05, unit=pkts, delayed_start=False, determine_count_fn=None, log_level=LogLevels.INFO)> └─ morpheus.ControlMessage -> morpheus.ControlMessage Added stage: <preprocess-nlp-4; PreprocessNLPStage(vocab_hash_file=/workspace/models/training-tuning-scripts/sid-models/resources/bert-base-uncased-hash.txt, truncation=True, do_lower_case=True, add_special_tokens=False, stride=-1, column=data)> └─ morpheus.ControlMessage -> morpheus.ControlMessage Added stage: <monitor-5; MonitorStage(description=Tokenize rate, smoothing=0.05, unit=pkts, delayed_start=False, determine_count_fn=None, log_level=LogLevels.INFO)> └─ morpheus.ControlMessage -> morpheus.ControlMessage Added stage: <inference-6; TritonInferenceStage(model_name=sid-minibert-onnx, server_url=localhost:8000, force_convert_inputs=True, use_shared_memory=True)> └─ morpheus.ControlMessage -> morpheus.ControlMessage Added stage: <monitor-7; MonitorStage(description=Inference rate, smoothing=0.05, unit=pkts, delayed_start=False, determine_count_fn=None, log_level=LogLevels.INFO)> └─ morpheus.ControlMessage -> morpheus.ControlMessage Added stage: <add-class-8; AddClassificationsStage(labels=None, prefix=, probs_type=TypeId.BOOL8, threshold=0.5)> └─ morpheus.ControlMessage -> morpheus.ControlMessage Added stage: <monitor-9; MonitorStage(description=AddClass rate, smoothing=0.05, unit=pkts, delayed_start=False, determine_count_fn=None, log_level=LogLevels.INFO)> └─ morpheus.ControlMessage -> morpheus.ControlMessage ====Building Segment Complete!==== Stopping pipeline. Please wait... Press Ctrl+C again to kill. DOCA GPUNetIO rate: 0 pkts [00:09, ? pkts/s] Deserialize rate: 0 pkts [00:09, ? pkts/s] Tokenize rate: 0 pkts [00:09, ? pkts/s] Inference rate: 0 pkts [00:09, ? pkts/s] AddClass rate: 0 pkts [00:09, ? pkts/s]

输出可以在 doca_output.csv 中找到

上一页 使用 Morpheus 的 ABP 检测示例
下一页 GNN 欺诈检测 Pipeline
© 版权所有 2024,NVIDIA。 最后更新于 2024 年 12 月 3 日。