NVIDIA Morpheus (24.10.01)

Morpheus 云部署指南

本云部署指南提供了设置部署 Morpheus 开发者套件所需的最少基础设施和配置的必要说明,并包括利用部署的示例工作流程。

  • 本云部署指南包含以下步骤

  • NVIDIA 云原生核心堆栈的设置

  • Morpheus AI 引擎的设置

  • Morpheus SDK 客户端的设置

  • 用于 MLflow 部署的模型

  • Morpheus MLflow 的设置

  • 将模型部署到 Triton 推理服务器

  • 创建 Kafka 主题

  • 运行示例工作负载

注意:本指南需要访问 NGC 公共目录。

先决条件

  1. 请参阅云(AWS)的先决条件此处或本地部署(Ubuntu)的先决条件此处

  2. 在 NGC 公共目录中注册

在主机系统安装、配置并满足所有先决条件后,继续执行以下设置步骤。

设置 NGC API 密钥并安装 NGC Registry CLI

首先,您需要设置您的 NGC API 密钥,以便访问所有 Morpheus 组件,使用来自NGC Registry CLI 用户指南的链接说明。

创建 API 密钥后,创建一个包含 API 密钥的环境变量,供本文档后续使用的命令使用

复制
已复制!
            

export API_KEY="<NGC_API_KEY>"

接下来,使用来自NGC Registry CLI 用户指南的链接说明,在您的系统上安装和配置 NGC Registry CLI。

为 Morpheus 创建命名空间

接下来,创建一个命名空间和一个命名空间环境变量,以便组织通过云原生核心堆栈部署的 Kubernetes 集群,并将 Morpheus 相关部署与其他项目逻辑分离,使用以下命令

复制
已复制!
            

export NAMESPACE="<YOUR_NAMESPACE>" kubectl create namespace ${NAMESPACE}

安装 Morpheus AI 引擎

Helm chart (morpheus-ai-engine) 提供执行某些 Morpheus 工作流程所需的辅助组件,被称为 Morpheus AI 引擎。 它包含以下组件

  • 来自 NVIDIA 的 Triton 推理服务器 [ ai-engine ],用于处理推理请求。

  • Kafka Broker [ broker ],用于消费和发布消息。

  • Zookeeper [ zookeeper ],用于维护 Kafka Brokers 之间的协调。

按照以下步骤安装 Morpheus AI 引擎

复制
已复制!
            

helm fetch https://helm.ngc.nvidia.com/nvidia/morpheus/charts/morpheus-ai-engine-24.10.tgz --username='$oauthtoken' --password=$API_KEY --untar

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-ai-engine

安装完成后,您可以使用以下命令验证 Kubernetes Pod 是否成功运行

复制
已复制!
            

kubectl -n $NAMESPACE get all

输出

复制
已复制!
            

pod/ai-engine-65f59ddcf7-mdmdt 1/1 Running 0 54s pod/broker-76f7c64dc9-6rldp 1/1 Running 1 54s pod/zookeeper-87f9f4dd-znjnb 1/1 Running 0 54s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/ai-engine ClusterIP 10.109.56.231 <none> 8000/TCP,8001/TCP,8002/TCP 54s service/broker ClusterIP 10.101.103.250 <none> 9092/TCP 54s service/zookeeper ClusterIP 10.110.55.141 <none> 2181/TCP 54s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/ai-engine 1/1 1 1 54s deployment.apps/broker 1/1 1 1 54s deployment.apps/zookeeper 1/1 1 1 54s NAME DESIRED CURRENT READY AGE replicaset.apps/ai-engine-65f59ddcf7 1 1 1 54s replicaset.apps/broker-76f7c64dc9 1 1 1 54s replicaset.apps/zookeeper-87f9f4dd 1 1 1 54s

安装 Morpheus SDK 客户端

运行以下命令,将 Morpheus SDK 客户端(称为 Helm chart morpheus-sdk-client)拉取到您的实例上

复制
已复制!
            

helm fetch https://helm.ngc.nvidia.com/nvidia/morpheus/charts/morpheus-sdk-client-24.10.tgz --username='$oauthtoken' --password=$API_KEY --untar

睡眠模式下的 Morpheus SDK 客户端

在睡眠模式下安装 Morpheus SDK 客户端 Pod,以便将其示例数据集和模型从容器复制到其他 Pod 可以访问的共享位置。 如果未提供 sdk.args,则以下命令中使用 chart 中的默认值 /bin/sleep infinity

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --namespace $NAMESPACE \ helper \ morpheus-sdk-client

检查 Pod 的状态,确保它已启动并正在运行。

复制
已复制!
            

kubectl -n $NAMESPACE get all | grep sdk-cli-helper

输出

复制
已复制!
            

pod/sdk-cli-helper 1/1 Running 0 41s

用于 MLflow 部署的模型

连接到 sdk-cli-helper 容器,并将模型复制到 /common,该目录映射到主机上的 /opt/morpheus/common,MLflow 将在此处访问模型文件。

复制
已复制!
            

kubectl -n $NAMESPACE exec sdk-cli-helper -- cp -RL /workspace/models /common

安装 Morpheus MLflow

Morpheus MLflow Helm chart 提供带有 Triton 插件的 MLflow 服务器,用于从 Morpheus AI 引擎部署、更新和删除模型。 可以使用 NodePort 30500 访问 MLflow 服务器 UI。 按照以下步骤安装 Morpheus MLflow

复制
已复制!
            

helm fetch https://helm.ngc.nvidia.com/nvidia/morpheus/charts/morpheus-mlflow-24.10.tgz --username='$oauthtoken' --password=$API_KEY --untar

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-mlflow

注意:如果默认端口已被分配,Helm 将抛出以下错误。 通过调整 morpheus-mlflow/values.yaml 文件中的 dashboardPort 值选择替代端口,删除之前的版本并重新安装。

复制
已复制!
            

Error: Service "mlflow" is invalid: spec.ports[0].nodePort: Invalid value: 30500: provided port is already allocated

安装完成后,您可以使用以下命令验证 MLflow Pod 是否成功运行

复制
已复制!
            

kubectl -n $NAMESPACE get all | grep pod/mlflow

输出

复制
已复制!
            

pod/mlflow-6d98 1/1 Running 0 39s

模型部署

连接到 MLflow Pod,将模型发布到 MLflow 服务器,然后将其部署到 Morpheus AI 引擎

复制
已复制!
            

kubectl -n $NAMESPACE exec -it deploy/mlflow -- bash

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow#

Important:当存在 (mlflow) 时,命令直接在容器内。

首先,让我们在开始部署模型之前,检查一下我们将用于与 MLflow Triton 插件通信的命令的语法。 发布模型到 MLflow 服务器的形式为

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# python publish_model_to_mlflow.py \ --model_name <REF_MODEL_NAME> \ --model_directory <MODEL_DIR_PATH> \ --flavor <MODEL_FLAVOR>

将模型部署到 Morpheus AI 引擎

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# mlflow deployments create -t triton \ --flavor <MODEL_FLAVOR> \ --name <REF_MODEL_NAME> \ -m models:/<REF_MODEL_NAME>/1 \ -C "version=<VERSION_NUMBER>"

更新 Morpheus AI 引擎中已部署的模型

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# mlflow deployments update -t triton \ --flavor <MODEL_FLAVOR> \ --name <REF_MODEL_NAME>/<EXISTING_VERSION_NUMBER> \ -m models:/<REF_MODEL_NAME>/<DESIRED_VERSION_NUMBER>

从 Morpheus AI 引擎中删除已部署的模型

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# mlflow deployments delete -t triton \ --name <REF_MODEL_NAME>/<VERSION_NUMBER>

现在我们已经弄清楚如何部署模型,让我们继续下一步。 现在是时候部署相关模型了,这些模型已复制到 /opt/morpheus/common/models,该目录绑定到 MLflow Pod 内的 /common/models

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# ls -lrt /common/models

输出

复制
已复制!
            

drwxr-xr-x 3 ubuntu ubuntu 4096 Apr 13 23:47 sid-minibert-onnx drwxr-xr-x 2 root root 4096 Apr 21 17:09 abp-models drwxr-xr-x 4 root root 4096 Apr 21 17:09 datasets drwxr-xr-x 4 root root 4096 Apr 21 17:09 fraud-detection-models drwxr-xr-x 2 root root 4096 Apr 21 17:09 dfp-models drwxr-xr-x 3 root root 4096 Apr 21 17:10 mlflow drwxr-xr-x 2 root root 4096 Apr 21 17:10 log-parsing-models drwxr-xr-x 2 root root 4096 Apr 21 17:10 phishing-models drwxr-xr-x 2 root root 4096 Apr 21 17:10 sid-models drwxr-xr-x 8 root root 4096 Apr 21 17:10 training-tuning-scripts drwxr-xr-x 7 root root 4096 Apr 21 17:10 validation-inference-scripts drwxr-xr-x 7 root root 4096 Apr 21 17:10 triton-model-repo -rw-r--r-- 1 root root 4213 Apr 21 17:10 README.md -rw-r--r-- 1 root root 4862 Apr 21 17:10 model_cards.csv -rw-r--r-- 1 root root 1367 Apr 21 17:10 model-information.csv

发布并部署 sid-minibert-onnx 模型

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# python publish_model_to_mlflow.py \ --model_name sid-minibert-onnx \ --model_directory /common/models/triton-model-repo/sid-minibert-onnx \ --flavor triton

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# mlflow deployments create -t triton \ --flavor triton \ --name sid-minibert-onnx \ -m models:/sid-minibert-onnx/1 \ -C "version=1"

发布并部署 phishing-bert-onnx 模型

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# python publish_model_to_mlflow.py \ --model_name phishing-bert-onnx \ --model_directory /common/models/triton-model-repo/phishing-bert-onnx \ --flavor triton

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# mlflow deployments create -t triton \ --flavor triton \ --name phishing-bert-onnx \ -m models:/phishing-bert-onnx/1 \ -C "version=1"

发布并部署 abp-nvsmi-xgb 模型

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# python publish_model_to_mlflow.py \ --model_name abp-nvsmi-xgb \ --model_directory /common/models/triton-model-repo/abp-nvsmi-xgb \ --flavor triton

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# mlflow deployments create -t triton \ --flavor triton \ --name abp-nvsmi-xgb \ -m models:/abp-nvsmi-xgb/1 \ -C "version=1"

退出容器

复制
已复制!
            

(mlflow) root@mlflow-6d98:/mlflow# exit

验证模型部署

运行以下命令以验证模型是否已成功部署在 AI 引擎上

复制
已复制!
            

kubectl -n $NAMESPACE logs deploy/ai-engine

输出

复制
已复制!
            

I1202 14:09:03.098085 1 api.cu:79] TRITONBACKEND_ModelInitialize: abp-nvsmi-xgb (version 1) I1202 14:09:03.101910 1 api.cu:123] TRITONBACKEND_ModelInstanceInitialize: abp-nvsmi-xgb_0 (GPU device 0) I1202 14:09:03.543719 1 model_instance_state.cu:101] Using GPU for predicting with model 'abp-nvsmi-xgb_0' I1202 14:09:03.563425 1 api.cu:123] TRITONBACKEND_ModelInstanceInitialize: abp-nvsmi-xgb_0 (GPU device 1) I1202 14:09:03.980621 1 model_instance_state.cu:101] Using GPU for predicting with model 'abp-nvsmi-xgb_0' I1202 14:09:03.981678 1 model_repository_manager.cc:1183] successfully loaded 'abp-nvsmi-xgb' version 1

创建 Kafka 主题

我们将需要创建 Kafka 主题,用于输入和输出数据,以运行一些管道示例。

检查是否已存在任何 Kafka 主题。 如果存在任何主题,您可以删除之前的主题或重新使用它们。

复制
已复制!
            

kubectl -n $NAMESPACE exec deploy/broker -c broker -- kafka-topics.sh --list --zookeeper zookeeper:2181

运行以下命令两次,一次创建输入主题,再次创建输出主题,确保输入主题和输出主题具有不同的名称

复制
已复制!
            

kubectl -n $NAMESPACE exec deploy/broker -c broker -- kafka-topics.sh \ --create \ --bootstrap-server broker:9092 \ --replication-factor 1 \ --partitions 3 \ --topic <YOUR_KAFKA_TOPIC>

本节介绍在 Morpheus 上运行的示例工作流程。 提供了四个示例管道。

  1. 执行网络钓鱼检测(PD)的 NLP 管道。

  2. 执行敏感信息检测(SID)的 NLP 管道。

  3. 执行异常行为分析(ABP)的 FIL 管道。

为每个管道提供了多个命令选项,具有不同的数据输入/输出方法,范围从本地文件到 Kafka 主题。

我们建议一次只部署一个管道。 要删除之前部署的管道,请运行以下命令

复制
已复制!
            

helm delete -n $NAMESPACE <YOUR_RELEASE_NAME>

要将消息发布到 Kafka 主题,我们需要将数据集复制到可以从主机访问的位置。

复制
已复制!
            

kubectl -n $NAMESPACE exec sdk-cli-helper -- cp -R /workspace/examples/data /common

有关命令的更多信息,请参阅Morpheus CLI 概述构建管道文档。

注意:在运行示例管道之前,请确保满足以下条件

  • 确保已部署管道特定的模型。

  • 已创建输入和输出 Kafka 主题。

  • 建议在 /opt/morpheus/common/data 下创建一个输出目录,该目录绑定到 /common/data(pod/容器),用于存储推理或验证结果。

  • <YOUR_OUTPUT_DIR> 替换为您的目录名称。

  • <YOUR_INPUT_KAFKA_TOPIC> 替换为您的输入 Kafka 主题名称。

  • <YOUR_OUTPUT_KAFKA_TOPIC> 替换为您的输出 Kafka 主题名称。

  • <YOUR_RELEASE_NAME> 替换为您想要的名称。

作为参考,提供了 Morpheus SDK 客户端安装管道命令模板。 我们将在示例工作流程部分进一步检查这一点,但现在,让我们继续下一步。

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --set sdk.args="<REPLACE_RUN_PIPELINE_COMMAND_HERE>" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-sdk-client

运行 NLP 网络钓鱼检测管道

以下网络钓鱼检测管道示例使用预训练的 NLP 模型来分析电子邮件(正文)并确定是网络钓鱼还是良性。 以下显示的示例数据用作管道的输入。

复制
已复制!
            

{"data":"Abedin Huma <AbedinH@state.gov>Wednesday July 15 2009 1:44 PMRe: ArtWill be off campus at meetingBut you should definitely come I think they have found some good things."} {"data":"See NIMills Cheryl D <MillsCD@state.gov>Saturday December 112010 1:36 PMFw: S is calling Leahy today - thx for all the help; advise if a diff no for him today"} {"data":"Here is Draft"} {"data":"Ok"}

管道示例,用于从文件读取数据,使用 phishing-bert-onnx 模型运行推理,并将推理结果写入指定的输出文件

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --set sdk.args="morpheus --log_level=DEBUG run \ --edge_buffer_size=4 \ --pipeline_batch_size=1024 \ --model_max_batch_size=32 \ pipeline-nlp \ --model_seq_length=128 \ --labels_file=data/labels_phishing.txt \ from-file --filename=./examples/data/email.jsonlines \ monitor --description 'FromFile Rate' --smoothing=0.001 \ deserialize \ preprocess --vocab_hash_file=data/bert-base-uncased-hash.txt --truncation=True --do_lower_case=True --add_special_tokens=False \ monitor --description 'Preprocess Rate' \ inf-triton --model_name=phishing-bert-onnx --server_url=ai-engine:8000 --force_convert_inputs=True \ monitor --description 'Inference Rate' --smoothing=0.001 --unit inf \ add-class --label=is_phishing --threshold=0.7 \ serialize \ to-file --filename=/common/data/<YOUR_OUTPUT_DIR>/phishing-bert-onnx-output.jsonlines --overwrite" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-sdk-client

当管道成功运行时,输出目录中将出现一个输出文件 phishing-bert-onnx-output.jsonlines

管道示例,用于从输入 Kafka 主题读取消息,使用 phishing-bert-onnx 模型运行推理,并将推理结果写入输出 Kafka 主题

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --set sdk.args="morpheus --log_level=DEBUG run \ --edge_buffer_size=4 \ --pipeline_batch_size=1024 \ --model_max_batch_size=32 \ pipeline-nlp \ --model_seq_length=128 \ --labels_file=data/labels_phishing.txt \ from-kafka --input_topic <YOUR_INPUT_KAFKA_TOPIC> --bootstrap_servers broker:9092 \ monitor --description 'FromKafka Rate' --smoothing=0.001 \ deserialize \ preprocess --vocab_hash_file=data/bert-base-uncased-hash.txt --truncation=True --do_lower_case=True --add_special_tokens=False \ monitor --description 'Preprocess Rate' \ inf-triton --force_convert_inputs=True --model_name=phishing-bert-onnx --server_url=ai-engine:8000 \ monitor --description='Inference Rate' --smoothing=0.001 --unit inf \ add-class --label=is_phishing --threshold=0.7 \ serialize --exclude '^ts_' \ to-kafka --output_topic <YOUR_OUTPUT_KAFKA_TOPIC> --bootstrap_servers broker:9092" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-sdk-client

在启动管道之前,请确保您创建了输入和输出 Kafka 主题。 管道启动后,使用以下命令从下载的示例中将各个对应的数据文件加载到选定的输入主题中

复制
已复制!
            

kubectl -n $NAMESPACE exec -it deploy/broker -c broker -- kafka-console-producer.sh \ --broker-list broker:9092 \ --topic <YOUR_INPUT_KAFKA_TOPIC> < \ <YOUR_INPUT_DATA_FILE_PATH_EXAMPLE: /opt/morpheus/common/data/email.jsonlines>

注意:这应该仅用于通过此开发者套件进行开发。 从文件加载到 Kafka 不应用于 Morpheus 的生产部署。

运行 NLP 敏感信息检测管道

以下敏感信息检测管道示例使用预训练的 NLP 模型来摄取和分析 PCAP(数据包捕获网络流量)输入示例数据,如下例所示,以检查跨数据中心网络的 IP 流量。

复制
已复制!
            

{"timestamp": 1616380971990, "host_ip": "10.188.40.56", "data_len": "309", "data": "POST /simpledatagen/ HTTP/1.1\r\nHost: echo.gtc1.netqdev.cumulusnetworks.com\r\nUser-Agent: python-requests/2.22.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\nContent-Length: 73\r\nContent-Type: application/json\r\n\r\n", "src_mac": "04:3f:72:bf:af:74", "dest_mac": "b4:a9:fc:3c:46:f8", "protocol": "6", "src_ip": "10.20.16.248", "dest_ip": "10.244.0.59", "src_port": "50410", "dest_port": "80", "flags": "24", "is_pii": false} {"timestamp": 1616380971991, "host_ip": "10.188.40.56", "data_len": "139", "data": "\"{\\\"markerEmail\\\": \\\"FuRLFaAZ identify benefit BneiMvCZ join 92694759\\\"}\"", "src_mac": "04:3f:72:bf:af:74", "dest_mac": "b4:a9:fc:3c:46:f8", "protocol": "6", "src_ip": "10.244.0.1", "dest_ip": "10.244.0.25", "src_port": "50410", "dest_port": "80", "flags": "24", "is_pii": false}

管道示例,用于从文件读取数据,使用 sid-minibert-onnx 模型运行推理,并将推理结果写入指定的输出文件

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --set sdk.args="morpheus --log_level=DEBUG run \ --edge_buffer_size=4 \ --pipeline_batch_size=1024 \ --model_max_batch_size=32 \ pipeline-nlp \ --model_seq_length=256 \ from-file --filename=./examples/data/pcap_dump.jsonlines \ monitor --description 'FromFile Rate' --smoothing=0.001 \ deserialize \ preprocess --vocab_hash_file=data/bert-base-uncased-hash.txt --truncation=True --do_lower_case=True --add_special_tokens=False \ monitor --description='Preprocessing rate' \ inf-triton --force_convert_inputs=True --model_name=sid-minibert-onnx --server_url=ai-engine:8000 \ monitor --description='Inference rate' --smoothing=0.001 --unit inf \ add-class \ serialize --exclude '^ts_' \ to-file --filename=/common/data/<YOUR_OUTPUT_DIR>/sid-minibert-onnx-output.jsonlines --overwrite" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-sdk-client

当管道成功运行时,输出目录中将出现一个输出文件 sid-minibert-onnx-output.jsonlines

管道示例,用于从输入 Kafka 主题读取消息,使用 sid-minibert-onnx 模型运行推理,并将推理结果写入输出 Kafka 主题

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --set sdk.args="morpheus --log_level=DEBUG run \ --edge_buffer_size=4 \ --pipeline_batch_size=1024 \ --model_max_batch_size=32 \ pipeline-nlp \ --model_seq_length=256 \ from-kafka --input_topic <YOUR_INPUT_KAFKA_TOPIC> --bootstrap_servers broker:9092 \ monitor --description 'FromKafka Rate' --smoothing=0.001 \ deserialize \ preprocess --vocab_hash_file=data/bert-base-uncased-hash.txt --truncation=True --do_lower_case=True --add_special_tokens=False \ monitor --description='Preprocessing Rate' \ inf-triton --force_convert_inputs=True --model_name=sid-minibert-onnx --server_url=ai-engine:8000 \ monitor --description='Inference Rate' --smoothing=0.001 --unit inf \ add-class \ serialize --exclude '^ts_' \ to-kafka --output_topic <YOUR_OUTPUT_KAFKA_TOPIC> --bootstrap_servers broker:9092" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-sdk-client

在启动管道之前,请确保您创建了输入和输出 Kafka 主题。 管道启动后,使用以下命令从下载的示例中将各个对应的数据文件加载到选定的输入主题中

复制
已复制!
            

kubectl -n $NAMESPACE exec -it deploy/broker -c broker -- kafka-console-producer.sh \ --broker-list broker:9092 \ --topic <YOUR_INPUT_KAFKA_TOPIC> < \ <YOUR_INPUT_DATA_FILE_PATH_EXAMPLE: ${HOME}/examples/data/pcap_dump.jsonlines>

注意:这应该仅用于通过此开发者套件进行开发。 从文件加载到 Kafka 不应用于 Morpheus 的生产部署。

运行 FIL 异常行为分析管道

以下异常行为分析管道示例使用预训练的 FIL 模型来摄取和分析 NVIDIA 系统管理界面 (nvidia-smi) 日志,如下例所示,作为输入示例数据,以识别 GPU 设备上的加密货币挖矿活动。

复制
已复制!
            

{"nvidia_smi_log.gpu.pci.tx_util": "0 KB/s", "nvidia_smi_log.gpu.pci.rx_util": "0 KB/s", "nvidia_smi_log.gpu.fb_memory_usage.used": "3980 MiB", "nvidia_smi_log.gpu.fb_memory_usage.free": "12180 MiB", "nvidia_smi_log.gpu.bar1_memory_usage.total": "16384 MiB", "nvidia_smi_log.gpu.bar1_memory_usage.used": "11 MiB", "nvidia_smi_log.gpu.bar1_memory_usage.free": "16373 MiB", "nvidia_smi_log.gpu.utilization.gpu_util": "0 %", "nvidia_smi_log.gpu.utilization.memory_util": "0 %", "nvidia_smi_log.gpu.temperature.gpu_temp": "61 C", "nvidia_smi_log.gpu.temperature.gpu_temp_max_threshold": "90 C", "nvidia_smi_log.gpu.temperature.gpu_temp_slow_threshold": "87 C", "nvidia_smi_log.gpu.temperature.gpu_temp_max_gpu_threshold": "83 C", "nvidia_smi_log.gpu.temperature.memory_temp": "57 C", "nvidia_smi_log.gpu.temperature.gpu_temp_max_mem_threshold": "85 C", "nvidia_smi_log.gpu.power_readings.power_draw": "61.77 W", "nvidia_smi_log.gpu.clocks.graphics_clock": "1530 MHz", "nvidia_smi_log.gpu.clocks.sm_clock": "1530 MHz", "nvidia_smi_log.gpu.clocks.mem_clock": "877 MHz", "nvidia_smi_log.gpu.clocks.video_clock": "1372 MHz", "nvidia_smi_log.gpu.applications_clocks.graphics_clock": "1312 MHz", "nvidia_smi_log.gpu.applications_clocks.mem_clock": "877 MHz", "nvidia_smi_log.gpu.default_applications_clocks.graphics_clock": "1312 MHz", "nvidia_smi_log.gpu.default_applications_clocks.mem_clock": "877 MHz", "nvidia_smi_log.gpu.max_clocks.graphics_clock": "1530 MHz", "nvidia_smi_log.gpu.max_clocks.sm_clock": "1530 MHz", "nvidia_smi_log.gpu.max_clocks.mem_clock": "877 MHz", "nvidia_smi_log.gpu.max_clocks.video_clock": "1372 MHz", "nvidia_smi_log.gpu.max_customer_boost_clocks.graphics_clock": "1530 MHz", "nvidia_smi_log.gpu.processes.process_info.0.process_name": "python", "nvidia_smi_log.gpu.processes.process_info.1.process_name": "tritonserver", "hostname": "ip-10-100-8-98", "timestamp": 1615542360.9566503}

管道示例,用于从文件读取数据,使用 abp-nvsmi-xgb 模型运行推理,并将推理结果写入指定的输出文件。

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --set sdk.args="morpheus --log_level=DEBUG run \ --edge_buffer_size=4 \ --pipeline_batch_size=1024 \ --model_max_batch_size=64 \ pipeline-fil --columns_file=data/columns_fil.txt \ from-file --filename=./examples/data/nvsmi.jsonlines \ monitor --description 'FromFile Rate' --smoothing=0.001 \ deserialize \ preprocess \ monitor --description='Preprocessing Rate' \ inf-triton --model_name=abp-nvsmi-xgb --server_url=ai-engine:8000 --force_convert_inputs=True \ monitor --description='Inference Rate' --smoothing=0.001 --unit inf \ add-class \ serialize --exclude '^nvidia_smi_log' --exclude '^ts_' \ to-file --filename=/common/data/<YOUR_OUTPUT_DIR>/abp-nvsmi-xgb-output.jsonlines --overwrite" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-sdk-client

管道示例,用于从输入 Kafka 主题读取消息,使用 abp-nvsmi-xgb 模型运行推理,并将推理结果写入输出 Kafka 主题

复制
已复制!
            

helm install --set ngc.apiKey="$API_KEY" \ --set sdk.args="morpheus --log_level=DEBUG run \ --pipeline_batch_size=1024 \ --model_max_batch_size=64 \ pipeline-fil --columns_file=data/columns_fil.txt \ from-kafka --input_topic <YOUR_INPUT_KAFKA_TOPIC> --bootstrap_servers broker:9092 \ monitor --description 'FromKafka Rate' --smoothing=0.001 \ deserialize \ preprocess \ monitor --description='Preprocessing Rate' \ inf-triton --model_name=abp-nvsmi-xgb --server_url=ai-engine:8000 --force_convert_inputs=True \ monitor --description='Inference Rate' --smoothing=0.001 --unit inf \ add-class \ serialize --exclude '^nvidia_smi_log' \ --exclude '^ts_' \ to-kafka --output_topic <YOUR_OUTPUT_KAFKA_TOPIC> --bootstrap_servers broker:9092" \ --namespace $NAMESPACE \ <YOUR_RELEASE_NAME> \ morpheus-sdk-client

在启动管道之前,请确保您创建了输入和输出 Kafka 主题。 管道启动后,使用以下命令从下载的示例中将各个对应的数据文件加载到选定的输入主题中

复制
已复制!
            

kubectl -n $NAMESPACE exec -it deploy/broker -c broker -- kafka-console-producer.sh \ --broker-list broker:9092 \ --topic <YOUR_INPUT_KAFKA_TOPIC> < \ <YOUR_INPUT_DATA_FILE_PATH_EXAMPLE: ${HOME}/examples/data/nvsmi.jsonlines>

注意:这应该仅用于通过此开发者套件进行开发。 从文件加载到 Kafka 不应用于 Morpheus 的生产部署。

验证正在运行的管道

将 SDK 客户端部署以运行管道后,您可以使用以下命令检查 Pod 的状态

复制
已复制!
            

kubectl -n $NAMESPACE get pods sdk-cli-<RELEASE_NAME> NAME READY STATUS RESTARTS AGE sdk-cli-6c9575f648-gfdd2 1/1 Running 0 3m23s

然后检查管道是否成功运行,使用以下命令

复制
已复制!
            

kubectl -n $NAMESPACE logs sdk-cli-<RELEASE_NAME>

输出

复制
已复制!
            

Configuring Pipeline via CLI Starting pipeline via CLI... Ctrl+C to Quit Preprocessing rate: 7051messages [00:09, 4372.75messages/s] Inference rate: 7051messages [00:04, 4639.40messages/s]

先决条件

  1. 具有创建/修改 EC2 实例能力的 AWS 账户

  2. AWS EC2 G4 实例,配备 T4 或 V100 GPU,至少 64GB RAM,8 核 CPU 和 100 GB 存储空间。

为 AWS 安装云原生核心堆栈

在您的 AWS EC2 G4 实例上,按照链接文档中的说明安装NVIDIA 的 AWS 云原生核心堆栈

先决条件

  1. NVIDIA 认证系统

  2. NVIDIA Volta GPU 或更新版本(计算能力 >= 7.0)

  3. Ubuntu 20.04 LTS 或更新版本

在您的 NVIDIA 认证系统上,按照链接文档中的说明安装NVIDIA 云原生核心堆栈

列出可用的 Kafka 主题。

复制
已复制!
            

kubectl -n $NAMESPACE exec deploy/broker -c broker -- kafka-topics.sh \ --list --zookeeper zookeeper:2181

创建具有单个复制因子的分区 Kafka 主题。

复制
已复制!
            

kubectl -n $NAMESPACE exec deploy/broker -c broker -- kafka-topics.sh \ --create \ --bootstrap-server broker:9092 \ --replication-factor 1 \ --partitions 1 \ --topic <YOUR_KAFKA_TOPIC>

将数据从文件加载到 Kafka 主题

复制
已复制!
            

kubectl -n $NAMESPACE exec -it deploy/broker -c broker -- kafka-console-producer.sh \ --broker-list broker:9092 \ --topic <YOUR_KAFKA_TOPIC> < \ <YOUR_INPUT_DATA_FILE>

注意:这应该仅用于通过此开发者套件进行开发。 从文件加载到 Kafka 不应用于 Morpheus 的生产部署。

从 Kafka 主题消费消息

复制
已复制!
            

kubectl -n $NAMESPACE exec deploy/broker -c broker -- kafka-console-consumer.sh \ --bootstrap-server broker:9092 \ --topic <YOUR_KAFKA_TOPIC> \ --group <YOUR_CONSUMER_GROUP_ID>

删除 Kafka 主题

复制
已复制!
            

kubectl -n $NAMESPACE exec deploy/broker -c broker -- kafka-topics.sh \ --delete --zookeeper zookeeper:2181 \ --topic <YOUR_KAFKA_TOPIC>

有关如何使用 Morpheus Python API 自定义和运行您自己的优化 AI 管道的更多信息,请参阅以下文档。

本节列出了您在使用 Morpheus 或其支持组件时可能遇到的问题的解决方案。

常见问题

  • 重启后模型卸载

    • 当 Pod 重新启动时,K8s 不会自动加载模型。 由于模型以显式模式使用 MLflow 部署到 ai-engine,因此我们必须使用模型部署流程手动重新部署它们。

  • AI 引擎仅 CPU 模式

    • 服务器重启后,k8s 上的 ai-engine Pod 可能会在 GPU 运算符基础设施可用之前启动,使其“认为”没有安装驱动程序(即,仅 CPU 模式)。

  • 提高管道消息处理速率

    • 需要考虑以下设置

      • 为工作流程提供最佳线程数 (—num threads),因为线程过多或过少都会影响管道性能。

      • 考虑调整 pipeline_batch_sizemodel_max_batch_size

  • Kafka 消息偏移提交失败

    • 错误消息

    复制
    已复制!
                

    1649207839.253|COMMITFAIL|rdkafka#consumer-2| [thrd:main]: Offset commit (manual) failed for 1/1 partition(s) in join-state wait-unassign-call: Broker: Unknown member: topic[0]@112071(Broker: Unknown member)

    • 问题:如果独立 Kafka 集群从生产者接收到显著的消息吞吐量,则可能会发生此错误。

    • 解决方案:重新安装 Morpheus 工作流程并减少 Kafka 主题的消息保留时间和消息生成速率。

上一个 贡献 Morpheus
下一个 Python API
© 版权所有 2024,NVIDIA。 上次更新于 2024 年 12 月 3 日。