ABBYY Vantage 允许您使用托管在 Vantage 服务器上的共享文件夹来导入和导出文档与技能,以及更新数据目录。
在开始使用共享文件夹(NFS 共享)之前,您需要在客户端计算机上与这些共享文件夹建立连接。请在运行 Windows 的客户端计算机上执行以下步骤:
- 以管理员身份运行 Windows PowerShell。
- 安装 Windows NFS 客户端:
dism /online /Enable-Feature /FeatureName:ServicesForNFS-ClientOnly
dism /online /Enable-Feature /FeatureName:ClientForNFS-Infrastructure
- 根据公司策略,配置 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
- 重新启动 NFS 客户端:
nfsadmin client stop
nfsadmin client start
完成上述步骤后,您即可在 Vantage 中复制和使用共享文件夹的路径,并在文件资源管理器中将其打开。
ABBYY Vantage 使用托管在外部服务器上的数据库,如果这些服务器发生故障,系统可能会无法运行。系统管理员可以在另一台服务器上恢复这些数据库,并使用 Consul 配置与新数据库的连接。
开始之前,请确保已安装 kubectl 命令行工具,并且已经建立与 Kubernetes 集群的连接。
要在 ABBYY Vantage 的设置中为新数据库配置连接:
- 运行以下命令以访问 Consul Web 界面:
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
然后转到 http://localhost:8500/ui/dc1/kv/secret/。
- 使用打开的 Key/Value 选项卡选择正确的 Vantage 环境。
- 选择 platform 或 vantage 项目,以及使用数据库的相应服务(例如 mail)。
- 转到每个服务中都包含的 database 部分。
- 打开 SqlServer 部分。
- 在 connectionString 键中:
- 将 Server 的旧值替换为新服务器的地址
- 在 Database parameter 中指定新的数据库
- 在 User Id 和 Password parameters 中指定登录凭据
- 单击 Save。
- 通过运行以下命令重新启动已修改的服务:
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-registry | api-gateway-registry | |
| api-registry | api-registry | |
| auth-adminapi2 | auth-adminapi2 | |
| auth-identity | auth-identity | |
| auth | auth-sts-identity, auth-adminapi2 | 此数据库由两个服务共享使用 |
| blob-storage | blob-storage | |
| cron-service | cron-service | |
| documentsetstorage | documentsetstorage | |
| mail | mail | |
| security-audit | security-audit | |
| storage | storage | 该数据库区段存储在 fileMetadata 数据目录中 |
| workflow-facade | workflow-facade | |
| workflow-scheduler | workflow-scheduler | |
| Consul 段名称 | 服务标签 |
|---|
| catalogstorage | catalogstorage |
| folderimport | folderimport |
| interactive-jobs | interactive-jobs |
| mailimport | mailimport |
| permissions | permissions |
| publicapi | publicapi |
| reporting | reporting |
| secretstorage | secretstorage |
| skill-monitor | skill-monitor |
| skillinfo | skillinfo |
| subscriptions | subscriptions |
| tokenmanagement | tokenmanagement |
| transactions | transactions |
| workspace | workspace |
Vantage 支持使用 GPU 配合 Deep Learning 活动来训练技能,从半结构化文档中提取数据。
- 虚拟 GPU 最小显存:12 GB
- 主机上每个虚拟 GPU 需要 1 个 CPU 和 4 GB 内存(例如,一台包含单个 12 GB 虚拟 GPU 的虚拟机必须至少具有 2 个 CPU 和 8 GB 内存)
您可以使用虚拟 GPU(vGPU)将一块物理 GPU 划分给多个虚拟机,从而更高效地利用 Vantage 资源。
要设置 vGPU:
- 从 nVidia 应用门户将 nVidia GRID 驱动程序包复制到带有 GPU 的虚拟机上,并运行以下命令:
apt-get update
apt-get install dkms
dpkg -i nvidia-linux-grid-535_535.54.03_amd64.deb
-
在 Kubernetes 集群上安装 nVidia GPU Operator:
a. 在运行 Vantage 安装器容器之前,将许可证令牌文件(在 nVidia Application Hub 中生成)放在
$PWD/gpu/ 文件夹中。
b. 在运行 Vantage 安装器容器的命令中添加 -v $PWD/gpu:/ansible/files/gpu:ro 参数:
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
- 通过运行以下 playbook 配置 vGPU:
ansible-playbook -i inventories/k8s -v playbooks/setup-gpu-node.yml
你可以配置 GPU 直通,让虚拟机可以直接访问 GPU。
要设置 GPU 直通:
- 运行 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
- 在清单文件的
[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
- 运行 Playbook:
ansible-playbook -i inventories/k8s -v playbooks/4-Kubernetes-k8s.yml
- 安装 GPU Operator 的 Helm Chart:
helm upgrade --install gpu-operator ansible/files/helm/charts/gpu-operator --create-namespace --debug -n gpu-operator
- 添加节点污点:
kubectl taint nodes worker2-12-a40-gpu01 nvidia.com/gpu:NoSchedule
在 vGPU 和 GPU 直通两种模式下,要测试 GPU Operator 的安装情况:
- 运行以下命令:
kubectl apply -f filename
- 创建一个包含以下内容的 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"
- 检查 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:
- 将以下 Parameter 添加到
env_specific.yml 文件中:
techcore:
use_gpu_workers: true
use_nn_extraction_training_workers: true
- 执行下列操作之一:
- 如果已安装 Vantage,请运行以下 playbook 以部署 GPU 工作节点:
ansible-playbook -i inventories/k8s -v playbooks/11-DeployWorkers-k8s.yml
- 如果尚未安装 Vantage,系统会在安装过程中部署 GPU 工作进程。
在人工审核中,如果操作员对处于打开状态的任务在 15 分钟内未执行任何操作,将触发超时。系统管理员可以使用 Consul 更改触发超时所需的空闲时长。
要配置超时设置:
- 运行以下命令访问 Consul Web 界面:
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
然后访问 http://localhost:8500/ui/dc1/kv/secret/。
- 使用 Key/Value 选项卡选择正确的 Vantage 环境。
- 修改以下键的值:
| Key | Description |
|---|
secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/popTimeout | 用户处于不活动状态达到该最短时间后,任务将被退回到交互式任务队列。任何交互操作(鼠标移动、键盘输入、批处理操作等)都会重置倒计时。默认值:00:15:00(15 分钟) |
secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/processingPopTimeout | 在存在长时间操作(应用技能、翻页等)时,用户处于不活动状态达到该最短时间后,任务将被退回队列。当某个长时间运行的操作开始时,此值会被设置为允许的不活动时长上限。操作完成后,不活动时长会重置为 popTimeout 的值。默认值:1.00:00:00(24 小时) |
- 单击 Save。
- 重启 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 证书过期后,您需要将其替换为新的证书。
- 转到 Config > Secrets 并找到所有名为
platform-wildcard 的 Secret。
- 对于每个 Secret,找到 Data 子部分,单击 Show 图标,并更新其值:
- 在
tls.crt 字段中输入新证书的值
- 在
tls.key 字段中输入对应密钥的值
证书和密钥必须是内容为 base64 ASCII 编码(PKCS#8 格式)的 PEM 文件。证书应以 -----BEGIN CERTIFICATE----- 开头,密钥应以 -----BEGIN PRIVATE KEY----- 开头。
- 单击 Save。
- 确保您可以访问 Kubernetes 集群:
- 将证书和私钥以 PEM 格式放在当前文件夹中:
cert.pem、key.pem。
如有需要,将 CRT 证书文件转换为 PEM 格式:
-----BEGIN CERTIFICATE-----
[your certificate]
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
[your key]
-----END PRIVATE KEY-----
- 运行以下命令:
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)