驗證架構
如果您想要部署的架構與本解決方案所述的架構類似,請依照下列主題中的條件進行驗證。考慮 GPU 選擇、叢集設定、分配與部署、自動調整、效能測試、安全性和成本。
選取 GPU
您需要部署 GPU 驅動的推論服務,才能將文字區隔轉換為語音,確保效能、擴展性及成本效益。您可以評估 GPU 模型 (A10、A100、L40S),以判斷最適合的使用案例。
您可以執行不同 GPU 類型的基準測試。下表提供範本。輸入 X 與 Y 的值,並使用該資料來比較實際績效與成本。
GPU 型態 | 平均延遲 (每 250 個區段) | 傳輸量 (區段 / 秒) | 備註 |
---|---|---|---|
A10 | X 毫秒 | Y | 低成本,適合開發 / 測試 |
A100 | X 毫秒 | Y | 高效能、更高成本 |
L40S | X 毫秒 | Y | 在價格 / 績效之間取得良好平衡 |
- 建議:根據工作負載大小、SLA 延遲需求和預算選取 GPU。
- 最佳化:以 FP16/ 混合精確度 (如果支援) 執行,以降低延遲。
設計 OKE 叢集
設計 OKE 叢集以配合您的部署。
在此範例中,我們使用具有兩個節點集區的叢集設定:
- NodePool 1 (CPU 節點) :執行 UI、工作者、RabbitMQ 和內部資料庫
- NodePool 2 (GPU 節點) :執行 TorchServe 推論 Pod
請確定 GPU 節點上有足夠的 BV。
為節點集區加上標籤:
- CPU 節點上的
nodepool=cpu
- GPU 節點上的
nodepool-gpu
和nvidia.com/gpu.present=true
確定 GPU 節點上已啟用 OKE NVIDIA 裝置 Plugin 附加元件,而且 nvidia-smi
可以運作。
驗證 GPU
若要確保 GPU 可供 OKE 節點和 TorchServe Pod 使用,請執行下列驗證步驟。
設計模型分配
您有兩個讓 .mar
模型可供推論 Pod 使用的選項。
- 使用容器儲存介面 (CSI) 驅動程式,將 OCI Object Storage 儲存桶作為永久磁碟區宣告 (PVC)。
- 使用安全複製協定 (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 Object Storage ,如果您有多個具有頻繁更新的模型,則建議使用 OCI File Storage 。
部署 TorchServe
驗證部署 TorchServe 的方法。
下列 YAML 檔案提供部署和組態的範例。
- 使用 OCI 負載平衡顯示 (傳入至 OKE 至 TorchServe Pod)。
- 在負載平衡器使用 TLS 保護。
-
絕對不要將 TorchServe 管理連接埠 (8081) 公用網際網路公開。
附註:
- 修改容器
image:
敘述句,以指向您實際的 TorchServe 容器位置和版本。 multispk_20250121_tts
是此處用來作為範例的自訂模型名稱。您可以將它取代為自己的模型名稱和.mar
檔案。
torchserve-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
組態圖 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
設定自動調整
在 Pod 和工作者層級設定自動調整功能。
使用含有 Prometheus 指標的 Kubernetes 事件導向自動調整工具 (KEDA) 在 Pod 層級設定自動調整功能,根據要求佇列深度、自訂指標或 CPU/GPU 使用率調整 TorchServe Pod。
設定工作層級自動調整 (TorchServe)。
附註:
在下列範例中,我們將 TorchServe 模型生命週期與multispk_20250121_tts
搭配使用。
安全性與成本最佳化的考量
驗證您的設計時,請考慮安全性和成本最佳化因素:
- 安全性考量:
- 在負載平衡器或傳入強制終止 TLS。
- 將 TorchServe 管理 API 保持在內部。
- 使用 OCI Identity and Access Management 和「網路安全群組」限制存取。
- 成本最佳化考量:
- 根據服務層次協議 (SLA) 與成本之間的餘額,選擇您的 GPU 類型。
- 使用排定的調整 (在非尖峰時間縮小 GPU 節點集區)。
- 如果您的模型不常更新,請使用 OCI Object Storage over OCI File Storage 。
- 推論不一定會全天候執行。在閒置期間與訓練工作負載共用未使用的 GPU,以最大化使用率並降低成本。