跳轉到主要內容

設定共用資料夾連線

ABBYY Vantage 可讓您使用託管在 Vantage 伺服器上的共用資料夾,以匯入和匯出文件與技能,以及更新資料目錄。 在開始使用共用資料夾(NFS 共用)之前,您需要在用戶端電腦上設定與這些共用資料夾的連線。請在執行 Windows 的用戶端電腦上依照下列步驟操作:
  1. 以系統管理員身分執行 Windows PowerShell。
  2. 安裝 Windows NFS Client:
dism /online /Enable-Feature /FeatureName:ServicesForNFS-ClientOnly
dism /online /Enable-Feature /FeatureName:ClientForNFS-Infrastructure
  1. 根據貴公司的政策,設定 Windows 使用者與 Unix UID 和 GID 的對應關係:
New-ItemProperty -Path "HKLM:\Software\Microsoft\ClientForNFS\CurrentVersion\Default" -Name "AnonymousGid" -Value 65532 -PropertyType DWord
New-ItemProperty -Path "HKLM:\Software\Microsoft\ClientForNFS\CurrentVersion\Default" -Name "AnonymousUid" -Value 65532 -PropertyType DWord
  1. 重新啟動 NFS 用戶端:
nfsadmin client stop
nfsadmin client start
完成上述步驟後,您將能夠在 Vantage 中複製並使用共用資料夾路徑,並在檔案總管中開啟對應的共用資料夾。

設定資料庫連線

ABBYY Vantage 使用託管於外部伺服器上的資料庫,如果這些伺服器發生故障,系統可能會無法運作。系統管理員可以在另一部伺服器上還原這些資料庫,並使用 Consul 設定與新資料庫的連線。
在開始之前,請確保已安裝 kubectl 命令列工具,並已建立與 Kubernetes 叢集的連線。
若要在 ABBYY Vantage 的設定中設定與新資料庫的連線:
  1. 執行下列指令以存取 Consul 網頁介面:
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
然後前往 http://localhost:8500/ui/dc1/kv/secret/
  1. 在開啟的 Key/Value 分頁中選擇正確的 Vantage 環境。
  2. 選取 platformvantage 專案之一,並選擇使用此資料庫的適當服務(例如 mail)。
Consul 平台服務清單顯示可用服務
  1. 前往每個服務中都包含的 database 區段。
Consul Key/Value 分頁顯示 Vantage 環境選擇
  1. 開啟 SqlServer 區段。
Consul database 區段顯示 SqlServer 組態
  1. connectionString 鍵中:
    • Server 的舊值改為新伺服器的位址
    • Database Parameter 中指定新的資料庫
    • User IdPassword Parameters 中指定登入認證
Consul connectionString 值編輯器
  1. 按一下 Save
  2. 執行下列指令以重新啟動已修改的服務:
label=mail
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=$label -o name)
當伺服器位址變更時,必須針對每個資料庫執行此程序。

資料庫服務參考

下表列出了所有使用資料庫的服務,以及用於重新啟動每個服務的標籤。

平台服務

Consul 區段名稱服務標籤備註
api-gateway-registryapi-gateway-registry
api-registryapi-registry
auth-adminapi2auth-adminapi2
auth-identityauth-identity
authauth-sts-identity, auth-adminapi2此資料庫由兩個服務共用
blob-storageblob-storage
cron-servicecron-service
documentsetstoragedocumentsetstorage
mailmail
security-auditsecurity-audit
storagestorage此資料庫區段存放於 fileMetadata 資料目錄中
workflow-facadeworkflow-facade
workflow-schedulerworkflow-scheduler

Vantage 服務

Consul 區段名稱服務標籤
catalogstoragecatalogstorage
folderimportfolderimport
interactive-jobsinteractive-jobs
mailimportmailimport
permissionspermissions
publicapipublicapi
reportingreporting
secretstoragesecretstorage
skill-monitorskill-monitor
skillinfoskillinfo
subscriptionssubscriptions
tokenmanagementtokenmanagement
transactionstransactions
workspaceworkspace

設定 GPU

Vantage 可讓您使用 GPU,搭配 Deep Learning 活動訓練技能,從半結構化文件中擷取資料。

GPU 的系統需求

  • 虛擬 GPU 的最小記憶體:12 GB
  • 主機上每個虛擬 GPU 需要 1 個 CPU 和 4 GB RAM(例如:一台具有單個 12 GB 虛擬 GPU 的虛擬機器(VM)至少需要 2 個 CPU 和 8 GB RAM)

虛擬 GPU

您可以使用虛擬 GPU(vGPU)將一個實體 GPU 切分給多個虛擬機使用,讓 Vantage 資源得以更有效率地運用。 若要設定 vGPU:
  1. 從 nVidia Application Hub 將 nVidia GRID driver 套件複製到具備 GPU 的虛擬機上,並執行下列命令:
apt-get update
apt-get install dkms
dpkg -i nvidia-linux-grid-535_535.54.03_amd64.deb
  1. 將 nVidia GPU operator 安裝到 Kubernetes 叢集: a. 在執行 Vantage 安裝程式容器之前,先將授權權杖檔案(在 nVidia application hub 中產生)放在 $PWD/gpu/ 資料夾中。 b. 在執行 Vantage 安裝程式容器的指令中,新增 -v $PWD/gpu:/ansible/files/gpu:ro 這個 Parameter:
docker run -it \
-v $PWD/kube:/root/.kube \
-v $PWD/ssh/ansible:/root/.ssh/ansible \
-v "//var/run/docker.sock:/var/run/docker.sock" \
-v $PWD/inventory:/ansible/inventories/k8s/inventory \
-v $PWD/env_specific.yml:/ansible/inventories/k8s/group_vars/all/env_specific.yml \
-v $PWD/ssl:/ansible/files/ssl:ro \
-v $PWD/gpu:/ansible/files/gpu:ro \
--privileged \
registry.local/vantage/vantage-k8s:2.7.1
c. 在 [abbyy_workers] 群組的清單檔中新增一個 GPU 節點。具備 GPU 的虛擬機器名稱中必須包含 “gpu”:
[abbyy_workers]
worker16-48-w01 ansible_host=10.10.10.27
worker16-48-w02 ansible_host=10.10.10.21
worker16-48-w03 ansible_host=10.10.10.20
worker2-12-a40-gpu01 ansible_host=10.10.10.60
d. 透過執行以下 playbook,將節點新增至叢集:
chmod 600 /root/.ssh/ansible
ansible-playbook -i inventories/k8s -v playbooks/4-Kubernetes-k8s.yml
  1. 執行以下 playbook 來設定 vGPU:
ansible-playbook -i inventories/k8s -v playbooks/setup-gpu-node.yml

GPU 直通(GPU passthrough)

您可以設定 GPU 直通,讓虛擬機直接存取您的 GPU。 若要設定 GPU 直通:
  1. 執行 Vantage 安裝程式容器:
docker run -it \
-v $PWD/kube:/root/.kube \
-v $PWD/ssh/ansible:/root/.ssh/ansible \
-v "//var/run/docker.sock:/var/run/docker.sock" \
-v $PWD/inventory:/ansible/inventories/k8s/inventory \
-v $PWD/env_specific.yml:/ansible/inventories/k8s/group_vars/all/env_specific.yml \
-v $PWD/ssl:/ansible/files/ssl:ro \
--privileged \
registry.local/vantage/vantage-k8s:2.7.1
  1. 在 inventory 檔案的 [abbyy_workers] 群組中新增一個 GPU 節點(例如:worker2-12-a40-gpu01):
[abbyy_workers]
worker16-48-w01 ansible_host=10.10.10.27
worker16-48-w02 ansible_host=10.10.10.21
worker16-48-w03 ansible_host=10.10.10.20
worker2-12-a40-gpu01 ansible_host=10.10.10.60
  1. 執行 Playbook:
ansible-playbook -i inventories/k8s -v playbooks/4-Kubernetes-k8s.yml
  1. 安裝 GPU Operator 的 Helm Chart:
helm upgrade --install gpu-operator ansible/files/helm/charts/gpu-operator --create-namespace --debug -n gpu-operator
  1. 為節點新增汙點(node taint):
kubectl taint nodes worker2-12-a40-gpu01 nvidia.com/gpu:NoSchedule

測試與部署 GPU

對於 vGPU 和 GPU passthrough 兩種模式,若要測試 GPU Operator 的安裝:
  1. 執行此指令:
kubectl apply -f filename
  1. 建立一個包含以下內容的 YAML 檔案,然後套用:
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  namespace: gpu-operator
spec:
  restartPolicy: Never
  containers:
    - name: cuda-container
      image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2
      resources:
        limits:
          nvidia.com/gpu: 1 # 請求 1 個 GPU
  tolerations:
    - key: nvidia.com/gpu
      operator: Exists
      effect: NoSchedule
    - key: k8s.abbyy.com/techcore
      effect: NoSchedule
      value: "true"
  1. 檢查 pod 日誌。您應該會看到一則包含 Test PASSED 的回應:
kubectl -n gpu-operator logs gpu-pod
預期輸出結果:
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
若要部署 GPU worker:
  1. 將下列參數加入 env_specific.yml 檔案:
techcore:
  use_gpu_workers: true
  use_nn_extraction_training_workers: true
  1. 執行下列其中一項操作:
    • 若已安裝 Vantage,請執行下列 playbook 來部署 GPU 工作節點:
ansible-playbook -i inventories/k8s -v playbooks/11-DeployWorkers-k8s.yml
  • 如果尚未安裝 Vantage,則會在安裝時部署 GPU 工作節點。

設定手動審核閒置逾時

在手動審核中,如果操作人員對已開啟的工作在 15 分鐘內沒有執行任何操作,系統就會觸發逾時。系統管理員可以使用 Consul 變更觸發逾時所需的閒置時間長度。 若要設定逾時:
  1. 執行下列操作以存取 Consul 網頁介面:
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
然後前往 http://localhost:8500/ui/dc1/kv/secret/
  1. 使用 Key/Value 分頁來選擇正確的 Vantage 環境。
  2. 變更下列索引鍵的值:
KeyDescription
secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/popTimeout使用者處於非活動狀態、在工作被退回互動式工作佇列之前的最短時間。任何互動式動作(滑鼠移動、鍵盤輸入、批次處理等)都會重設倒數計時。預設值:00:15:00(15 分鐘)
secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/processingPopTimeout在存在長時間作業(套用 skill、翻頁等)的情況下,使用者非活動、在工作被退回佇列之前的最短時間。當長時間執行的作業開始時,會將此值設為允許的最長非活動時間。作業完成後,非活動時間會重設為 popTimeout 的值。預設值:1.00:00:00(24 小時)
  1. 按一下 Save
  2. 重新啟動 verification 和 manualverification 服務:
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=verification -o name)
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=manualverification -o name)

更新 SSL 憑證

當 SSL 憑證到期時,您需要將其更新為新的憑證。

使用 Lens

  1. 前往 Config > Secrets,並找到所有名為 platform-wildcard 的 secret。
  2. 對於每個 secret,於 Data 子區段中,點擊 Show 圖示並更新以下值:
    • tls.crt 欄位中輸入新憑證的值
    • tls.key 欄位中輸入其金鑰的值
憑證與金鑰必須為 PEM 檔案,內容為 base64 ASCII 編碼 (PKCS#8)。憑證內容應以 -----BEGIN CERTIFICATE----- 開頭,金鑰內容則應以 -----BEGIN PRIVATE KEY----- 開頭。
  1. 點擊 Save

使用 Linux 命令列

  1. 請先確認您已能存取 Kubernetes 叢集:
kubectl get nodes
  1. 將 PEM 格式的憑證與金鑰放入目前資料夾中:cert.pemkey.pem
必要時,將 CRT 檔案轉換為 PEM 格式:
-----BEGIN CERTIFICATE-----
[your certificate]
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
[your key]
-----END PRIVATE KEY-----
  1. 執行下列指令:
for i in `kubectl get secret --field-selector metadata.name=platform-wildcard -o custom-columns=:metadata.namespace -A --no-headers 2>/dev/null`; do kubectl patch secret platform-wildcard -p "{\"data\":{\"tls.key\":\"$(base64 < "./key.pem" | tr -d '\n')\", \"tls.crt\":\"$(base64 < "./cert.pem" | tr -d '\n')\"}}" -n $i; done
kubectl rollout restart deployment -n abbyy-infrastructure $(kubectl get deployment -n abbyy-infrastructure -o custom-columns=NAME:metadata.name --no-headers 2>/dev/null | grep ingress-nginx-controller)