验证体系结构
如果要部署类似于此解决方案中描述的体系结构,应根据以下主题中的标准对其进行验证。考虑 GPU 选择、集群设置、分发和部署、自动缩放、性能测试、安全性和成本。
选择 GPU
您需要部署基于 GPU 的推断服务来将文本段转换为语音,从而确保性能、可扩展性和成本效率。您可以评估 GPU 模型(A10、A100、L40S)以确定适合该用例的最佳方案。
您可以对不同的 GPU 类型执行基准测试。下表提供了模板。输入 X 和 Y 的值,然后使用该数据将实际绩效与成本进行比较。
GPU 类型 | 平均延迟(每 250 个段) | 吞吐量(段/秒) | 说明 |
---|---|---|---|
A10 | X 毫秒 | 是 | 降低成本,适合开发/测试 |
A100 | X 毫秒 | 是 | 高性能、高成本 |
L40S | X 毫秒 | 是 | 性价比之间的良好平衡 |
- 建议:根据工作负载大小、SLA 延迟要求和预算选择 GPU。
- 优化:以 FP16/混合精度(如果支持)运行,以减少延迟。
设计 OKE 集群
设计 OKE 集群以适应您的部署。
在此示例中,我们使用具有两个节点池的群集设置:
- NodePool 1(CPU 节点):运行 UI、worker、RabbitMQ 和内部数据库
- NodePool 2(GPU 节点):运行 TorchServe 推断 pod
确保 GPU 节点上有足够的 BV。
对节点池进行标记:
- CPU 节点上的
nodepool=cpu
- GPU 节点上的
nodepool-gpu
和nvidia.com/gpu.present=true
确保在 GPU 节点上启用了 OKE NVIDIA 设备插件附加,并且 nvidia-smi
可以正常工作。
验证 GPU
要确保 GPU 可用于 OKE 节点和 TorchServe 云池,请运行以下验证步骤。
设计模型分布
有两个选项可用于将 .mar
模型提供给推断云池。
- 使用容器存储接口 (Container Storage Interface,CSI) 驱动程序,将 OCI Object Storage 存储桶用作持久性卷声明 (PVC)。
- 使用安全复制协议 (Secure Copy Protocol,SCP) 将模型传输到 OCI 文件存储,并将文件系统用作 PVC 的挂载点。例如:
scp -i /path/to/private_key /path/to/local/model.mar opc@<file_storage_instance_ip>:/path/to/destination/mount/point/models/
我们建议您使用 OCI 对象存储来简化操作,如果您有多种型号且经常更新,我们建议您使用 OCI 文件存储。
部署 TorchServe
验证部署 TorchServe 的方法。
以下 YAML 文件提供了部署和配置的示例。
- 使用 OCI Load Balancing (从 OKE 入站到 TorchServe 云池)公开。
- 在负载平衡器上使用 TLS 进行安全保护。
-
切勿将 TorchServe 管理端口 (8081) 公开到公共 Internet。
注意:
- 修改容器
image:
语句以指向您的实际 TorchServe 容器位置和版本。 multispk_20250121_tts
是此处用作示例的定制模型名称。您可以将其替换为您自己的模型名称和.mar
文件。
火把 -deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: torchserve
labels:
app: torchserve
spec:
replicas: 1
selector:
matchLabels:
app: torchserve
template:
metadata:
labels:
app: torchserve
spec:
nodeSelector:
nodepool: torchserve
tolerations:
- key: "nvidia.com/gpu"
operator: "Exists"
effect: "NoSchedule"
imagePullSecrets:
- name: ocir-creds
containers:
- name: torchserve
image: ocir.<your-region>.oci.oraclecloud.com/<tenancy-namespace>/<torchserve_image>:<version>
ports:
- containerPort: 8080
- containerPort: 8081
- containerPort: 8082
- containerPort: 7070
- containerPort: 7071
env:
- name: GPUS__DEVICES
value: "0"
- name: METRICS_MODE
value: "logical" # or "endpoint"
- name: ENABLE_METRICS_API
value: "true"
resources:
limits:
nvidia.com/gpu: 1
volumeMounts:
- name: models-volume
mountPath: /home/model-server/model-store
volumes:
- name: models-volume
persistentVolumeClaim:
claimName: fss-voiceengine-models
configmap-torchserve.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-properties
namespace: default # Adjust the namespace as necessary
data:
config.properties: |
inference_address=http://0.0.0.0:8080
management_address=http://0.0.0.0:8081
metrics_address=http://0.0.0.0:8082
number_of_netty_threads=32
job_queue_size=1000
model_store=/home/model-server/model-store
workflow_store=/home/model-server/wf-store
install_py_dep_per_model=true
max_request_size=196605000
max_response_size=196605000
default_workers_per_model=1
job_queue_size=100
metrics_mode=logical
load_models=/home/model-server/model-store/multispk_20250121_tts.mar
设置自动缩放
在云池和员工级别设置自动缩放。
通过将 Kubernetes 事件驱动的自动缩放器 (KEDA) 与 Prometheus 度量一起使用,在云池级别设置自动缩放,以根据请求队列深度或定制度量或 CPU/GPU 占用率来扩展 TorchServe 云池。
设置员工级别的自动缩放 (TorchServe)。
注意:
在以下示例中,我们将 TorchServe 模型生命周期与multispk_20250121_tts
一起使用。
安全性和成本优化的注意事项
验证设计时,请考虑安全性和成本优化因素:
- 安全注意事项:
- 在负载平衡器或入站处强制终止 TLS。
- 仅在内部保留 TorchServe 管理 API。
- 使用 OCI Identity and Access Management 和网络安全组来限制访问。
- 成本优化注意事项:
- 根据服务级别协议 (SLA) 与成本之间的平衡选择 GPU 类型。
- 使用安排的缩放(在非高峰时段缩放 GPU 节点池)。
- 如果不经常更新模型,请在 OCI File Storage 上使用 OCI Object Storage 。
- 推理并不总是 24 × 7 运行。在空闲期间将未使用的 GPU 与训练负载共享,以充分提高利用率并降低成本。